1 /* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.settings.notification; 17 18 import android.app.INotificationManager; 19 import android.app.Notification; 20 import android.content.Context; 21 import android.content.Intent; 22 import android.content.pm.ApplicationInfo; 23 import android.content.pm.PackageManager; 24 import android.graphics.drawable.Drawable; 25 import android.os.ServiceManager; 26 import android.service.notification.NotificationListenerService; 27 import android.util.Log; 28 29 public class NotificationBackend { 30 private static final String TAG = "NotificationBackend"; 31 32 static INotificationManager sINM = INotificationManager.Stub.asInterface( 33 ServiceManager.getService(Context.NOTIFICATION_SERVICE)); 34 loadAppRow(PackageManager pm, ApplicationInfo app)35 public AppRow loadAppRow(PackageManager pm, ApplicationInfo app) { 36 final AppRow row = new AppRow(); 37 row.pkg = app.packageName; 38 row.uid = app.uid; 39 try { 40 row.label = app.loadLabel(pm); 41 } catch (Throwable t) { 42 Log.e(TAG, "Error loading application label for " + row.pkg, t); 43 row.label = row.pkg; 44 } 45 row.icon = app.loadIcon(pm); 46 row.banned = getNotificationsBanned(row.pkg, row.uid); 47 row.priority = getHighPriority(row.pkg, row.uid); 48 row.peekable = getPeekable(row.pkg, row.uid); 49 row.sensitive = getSensitive(row.pkg, row.uid); 50 return row; 51 } 52 setNotificationsBanned(String pkg, int uid, boolean banned)53 public boolean setNotificationsBanned(String pkg, int uid, boolean banned) { 54 try { 55 sINM.setNotificationsEnabledForPackage(pkg, uid, !banned); 56 return true; 57 } catch (Exception e) { 58 Log.w(TAG, "Error calling NoMan", e); 59 return false; 60 } 61 } 62 getNotificationsBanned(String pkg, int uid)63 public boolean getNotificationsBanned(String pkg, int uid) { 64 try { 65 final boolean enabled = sINM.areNotificationsEnabledForPackage(pkg, uid); 66 return !enabled; 67 } catch (Exception e) { 68 Log.w(TAG, "Error calling NoMan", e); 69 return false; 70 } 71 } 72 getHighPriority(String pkg, int uid)73 public boolean getHighPriority(String pkg, int uid) { 74 try { 75 return sINM.getPackagePriority(pkg, uid) == Notification.PRIORITY_MAX; 76 } catch (Exception e) { 77 Log.w(TAG, "Error calling NoMan", e); 78 return false; 79 } 80 } 81 setHighPriority(String pkg, int uid, boolean highPriority)82 public boolean setHighPriority(String pkg, int uid, boolean highPriority) { 83 try { 84 sINM.setPackagePriority(pkg, uid, 85 highPriority ? Notification.PRIORITY_MAX : Notification.PRIORITY_DEFAULT); 86 return true; 87 } catch (Exception e) { 88 Log.w(TAG, "Error calling NoMan", e); 89 return false; 90 } 91 } 92 getPeekable(String pkg, int uid)93 public boolean getPeekable(String pkg, int uid) { 94 try { 95 return sINM.getPackagePeekable(pkg, uid); 96 } catch (Exception e) { 97 Log.w(TAG, "Error calling NoMan", e); 98 return false; 99 } 100 } 101 setPeekable(String pkg, int uid, boolean peekable)102 public boolean setPeekable(String pkg, int uid, boolean peekable) { 103 try { 104 sINM.setPackagePeekable(pkg, uid, peekable); 105 return true; 106 } catch (Exception e) { 107 Log.w(TAG, "Error calling NoMan", e); 108 return false; 109 } 110 } 111 getSensitive(String pkg, int uid)112 public boolean getSensitive(String pkg, int uid) { 113 try { 114 return sINM.getPackageVisibilityOverride(pkg, uid) == Notification.VISIBILITY_PRIVATE; 115 } catch (Exception e) { 116 Log.w(TAG, "Error calling NoMan", e); 117 return false; 118 } 119 } 120 setSensitive(String pkg, int uid, boolean sensitive)121 public boolean setSensitive(String pkg, int uid, boolean sensitive) { 122 try { 123 sINM.setPackageVisibilityOverride(pkg, uid, 124 sensitive ? Notification.VISIBILITY_PRIVATE 125 : NotificationListenerService.Ranking.VISIBILITY_NO_OVERRIDE); 126 return true; 127 } catch (Exception e) { 128 Log.w(TAG, "Error calling NoMan", e); 129 return false; 130 } 131 } 132 133 static class Row { 134 public String section; 135 } 136 137 public static class AppRow extends Row { 138 public String pkg; 139 public int uid; 140 public Drawable icon; 141 public CharSequence label; 142 public Intent settingsIntent; 143 public boolean banned; 144 public boolean priority; 145 public boolean peekable; 146 public boolean sensitive; 147 public boolean first; // first app in section 148 } 149 150 } 151