NotificationsPreference.java revision 4d48e820ac6d77dea33df9b5c432100345266972
14d48e820ac6d77dea33df9b5c432100345266972Tony Mantler/*
24d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * Copyright (C) 2015 The Android Open Source Project
34d48e820ac6d77dea33df9b5c432100345266972Tony Mantler *
44d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * Licensed under the Apache License, Version 2.0 (the "License");
54d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * you may not use this file except in compliance with the License.
64d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * You may obtain a copy of the License at
74d48e820ac6d77dea33df9b5c432100345266972Tony Mantler *
84d48e820ac6d77dea33df9b5c432100345266972Tony Mantler *      http://www.apache.org/licenses/LICENSE-2.0
94d48e820ac6d77dea33df9b5c432100345266972Tony Mantler *
104d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * Unless required by applicable law or agreed to in writing, software
114d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * distributed under the License is distributed on an "AS IS" BASIS,
124d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * See the License for the specific language governing permissions and
144d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * limitations under the License
154d48e820ac6d77dea33df9b5c432100345266972Tony Mantler */
164d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
174d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerpackage com.android.tv.settings.device.apps;
184d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
194d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport android.app.INotificationManager;
204d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport android.app.NotificationManager;
214d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport android.content.Context;
224d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport android.os.RemoteException;
234d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport android.support.v7.preference.CheckBoxPreference;
244d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport android.util.Log;
254d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
264d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport com.android.settingslib.applications.ApplicationsState;
274d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport com.android.tv.settings.R;
284d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
294d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerpublic class NotificationsPreference extends CheckBoxPreference {
304d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    private static final String TAG = "NotificationsPreference";
314d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
324d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    private final INotificationManager mNotificationManager;
334d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    private final ApplicationsState.AppEntry mEntry;
344d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
354d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    public NotificationsPreference(Context context, ApplicationsState.AppEntry entry) {
364d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        super(context);
374d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        mEntry = entry;
384d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
394d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        mNotificationManager = NotificationManager.getService();
404d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
414d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        refresh();
424d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    }
434d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
444d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    public void refresh() {
454d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        setTitle(R.string.device_apps_app_management_notifications);
464d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
474d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        try {
484d48e820ac6d77dea33df9b5c432100345266972Tony Mantler            super.setChecked(
494d48e820ac6d77dea33df9b5c432100345266972Tony Mantler                    mNotificationManager.areNotificationsEnabledForPackage(mEntry.info.packageName,
504d48e820ac6d77dea33df9b5c432100345266972Tony Mantler                            mEntry.info.uid));
514d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        } catch (RemoteException e) {
524d48e820ac6d77dea33df9b5c432100345266972Tony Mantler            Log.d(TAG, "Remote exception while checking notifications for package "
534d48e820ac6d77dea33df9b5c432100345266972Tony Mantler                    + mEntry.info.packageName, e);
544d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        }
554d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    }
564d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
574d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    @Override
584d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    public void setChecked(boolean checked) {
594d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        if (setNotificationsEnabled(checked)) {
604d48e820ac6d77dea33df9b5c432100345266972Tony Mantler            super.setChecked(checked);
614d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        }
624d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    }
634d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
644d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    private boolean setNotificationsEnabled(boolean enabled) {
654d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        boolean result = true;
664d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        if (isChecked() != enabled) {
674d48e820ac6d77dea33df9b5c432100345266972Tony Mantler            try {
684d48e820ac6d77dea33df9b5c432100345266972Tony Mantler                mNotificationManager.setNotificationsEnabledForPackage(
694d48e820ac6d77dea33df9b5c432100345266972Tony Mantler                        mEntry.info.packageName, mEntry.info.uid, enabled);
704d48e820ac6d77dea33df9b5c432100345266972Tony Mantler            } catch (android.os.RemoteException ex) {
714d48e820ac6d77dea33df9b5c432100345266972Tony Mantler                result = false;
724d48e820ac6d77dea33df9b5c432100345266972Tony Mantler            }
734d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        }
744d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        return result;
754d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    }
764d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
774d48e820ac6d77dea33df9b5c432100345266972Tony Mantler}
78