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