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;
2313084f952fc264ab440df4c20fff4d0a34d6fac3Tony Mantlerimport android.support.annotation.NonNull;
2451c8ee099331e4cfb41b7b8651514557146fbf3bTony Mantlerimport android.support.v14.preference.SwitchPreference;
254d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport android.util.Log;
264d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
274d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport com.android.settingslib.applications.ApplicationsState;
284d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport com.android.tv.settings.R;
294d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
3051c8ee099331e4cfb41b7b8651514557146fbf3bTony Mantlerpublic class NotificationsPreference extends SwitchPreference {
314d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    private static final String TAG = "NotificationsPreference";
324d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
334d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    private final INotificationManager mNotificationManager;
3413084f952fc264ab440df4c20fff4d0a34d6fac3Tony Mantler    private ApplicationsState.AppEntry mEntry;
354d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
364d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    public NotificationsPreference(Context context, ApplicationsState.AppEntry entry) {
374d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        super(context);
384d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        mEntry = entry;
394d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
404d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        mNotificationManager = NotificationManager.getService();
414d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
424d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        refresh();
434d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    }
444d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
4513084f952fc264ab440df4c20fff4d0a34d6fac3Tony Mantler    /**
4613084f952fc264ab440df4c20fff4d0a34d6fac3Tony Mantler     * Set entry and refresh pref.
4713084f952fc264ab440df4c20fff4d0a34d6fac3Tony Mantler     * @param entry entry
4813084f952fc264ab440df4c20fff4d0a34d6fac3Tony Mantler     */
4913084f952fc264ab440df4c20fff4d0a34d6fac3Tony Mantler    public void setEntry(@NonNull ApplicationsState.AppEntry entry) {
5013084f952fc264ab440df4c20fff4d0a34d6fac3Tony Mantler        mEntry = entry;
5113084f952fc264ab440df4c20fff4d0a34d6fac3Tony Mantler        refresh();
5213084f952fc264ab440df4c20fff4d0a34d6fac3Tony Mantler    }
5313084f952fc264ab440df4c20fff4d0a34d6fac3Tony Mantler
544d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    public void refresh() {
554d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        setTitle(R.string.device_apps_app_management_notifications);
564d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
574d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        try {
584d48e820ac6d77dea33df9b5c432100345266972Tony Mantler            super.setChecked(
594d48e820ac6d77dea33df9b5c432100345266972Tony Mantler                    mNotificationManager.areNotificationsEnabledForPackage(mEntry.info.packageName,
604d48e820ac6d77dea33df9b5c432100345266972Tony Mantler                            mEntry.info.uid));
614d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        } catch (RemoteException e) {
624d48e820ac6d77dea33df9b5c432100345266972Tony Mantler            Log.d(TAG, "Remote exception while checking notifications for package "
634d48e820ac6d77dea33df9b5c432100345266972Tony Mantler                    + mEntry.info.packageName, e);
644d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        }
654d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    }
664d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
674d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    @Override
684d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    public void setChecked(boolean checked) {
694d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        if (setNotificationsEnabled(checked)) {
704d48e820ac6d77dea33df9b5c432100345266972Tony Mantler            super.setChecked(checked);
714d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        }
724d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    }
734d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
744d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    private boolean setNotificationsEnabled(boolean enabled) {
754d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        boolean result = true;
764d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        if (isChecked() != enabled) {
774d48e820ac6d77dea33df9b5c432100345266972Tony Mantler            try {
784d48e820ac6d77dea33df9b5c432100345266972Tony Mantler                mNotificationManager.setNotificationsEnabledForPackage(
794d48e820ac6d77dea33df9b5c432100345266972Tony Mantler                        mEntry.info.packageName, mEntry.info.uid, enabled);
804d48e820ac6d77dea33df9b5c432100345266972Tony Mantler            } catch (android.os.RemoteException ex) {
814d48e820ac6d77dea33df9b5c432100345266972Tony Mantler                result = false;
824d48e820ac6d77dea33df9b5c432100345266972Tony Mantler            }
834d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        }
844d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        return result;
854d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    }
864d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
874d48e820ac6d77dea33df9b5c432100345266972Tony Mantler}
88