1584b2b2bc17a4ccf42952b188722de1091c101beJason Monk/* 2584b2b2bc17a4ccf42952b188722de1091c101beJason Monk * Copyright (C) 2015 The Android Open Source Project 3584b2b2bc17a4ccf42952b188722de1091c101beJason Monk * 4584b2b2bc17a4ccf42952b188722de1091c101beJason Monk * Licensed under the Apache License, Version 2.0 (the "License"); 5584b2b2bc17a4ccf42952b188722de1091c101beJason Monk * you may not use this file except in compliance with the License. 6584b2b2bc17a4ccf42952b188722de1091c101beJason Monk * You may obtain a copy of the License at 7584b2b2bc17a4ccf42952b188722de1091c101beJason Monk * 8584b2b2bc17a4ccf42952b188722de1091c101beJason Monk * http://www.apache.org/licenses/LICENSE-2.0 9584b2b2bc17a4ccf42952b188722de1091c101beJason Monk * 10584b2b2bc17a4ccf42952b188722de1091c101beJason Monk * Unless required by applicable law or agreed to in writing, software 11584b2b2bc17a4ccf42952b188722de1091c101beJason Monk * distributed under the License is distributed on an "AS IS" BASIS, 12584b2b2bc17a4ccf42952b188722de1091c101beJason Monk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13584b2b2bc17a4ccf42952b188722de1091c101beJason Monk * See the License for the specific language governing permissions and 14584b2b2bc17a4ccf42952b188722de1091c101beJason Monk * limitations under the License. 15584b2b2bc17a4ccf42952b188722de1091c101beJason Monk */ 16584b2b2bc17a4ccf42952b188722de1091c101beJason Monkpackage com.android.settings.applications; 17584b2b2bc17a4ccf42952b188722de1091c101beJason Monk 18beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynoldsimport android.app.Notification; 193e912e7ea537ae34234ccbe6fef9b2519a4da51bJulia Reynoldsimport android.content.Context; 20584b2b2bc17a4ccf42952b188722de1091c101beJason Monkimport android.content.pm.PackageManager; 213e912e7ea537ae34234ccbe6fef9b2519a4da51bJulia Reynoldsimport android.os.UserHandle; 22beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynoldsimport android.service.notification.NotificationListenerService; 23584b2b2bc17a4ccf42952b188722de1091c101beJason Monk 243e912e7ea537ae34234ccbe6fef9b2519a4da51bJulia Reynoldsimport com.android.internal.widget.LockPatternUtils; 25584b2b2bc17a4ccf42952b188722de1091c101beJason Monkimport com.android.settings.notification.NotificationBackend; 26584b2b2bc17a4ccf42952b188722de1091c101beJason Monkimport com.android.settings.notification.NotificationBackend.AppRow; 2767cd6ab93a526fe65877743e458590f4e6f187eeTony Mantlerimport com.android.settingslib.applications.ApplicationsState; 2867cd6ab93a526fe65877743e458590f4e6f187eeTony Mantlerimport com.android.settingslib.applications.ApplicationsState.AppEntry; 2967cd6ab93a526fe65877743e458590f4e6f187eeTony Mantlerimport com.android.settingslib.applications.ApplicationsState.AppFilter; 30584b2b2bc17a4ccf42952b188722de1091c101beJason Monk 31584b2b2bc17a4ccf42952b188722de1091c101beJason Monkimport java.util.ArrayList; 32584b2b2bc17a4ccf42952b188722de1091c101beJason Monk 33584b2b2bc17a4ccf42952b188722de1091c101beJason Monk/** 34584b2b2bc17a4ccf42952b188722de1091c101beJason Monk * Connects the info provided by ApplicationsState and the NotificationBackend. 35584b2b2bc17a4ccf42952b188722de1091c101beJason Monk * Also provides app filters that can use the notification data. 36584b2b2bc17a4ccf42952b188722de1091c101beJason Monk */ 37d8da51ccfecf16f2c06f788e6bcbc232d1f0cb32Jason Monkpublic class AppStateNotificationBridge extends AppStateBaseBridge { 38584b2b2bc17a4ccf42952b188722de1091c101beJason Monk 39584b2b2bc17a4ccf42952b188722de1091c101beJason Monk private final NotificationBackend mNotifBackend; 40584b2b2bc17a4ccf42952b188722de1091c101beJason Monk private final PackageManager mPm; 413e912e7ea537ae34234ccbe6fef9b2519a4da51bJulia Reynolds private final Context mContext; 42584b2b2bc17a4ccf42952b188722de1091c101beJason Monk 433e912e7ea537ae34234ccbe6fef9b2519a4da51bJulia Reynolds public AppStateNotificationBridge(Context context, ApplicationsState appState, 44d8da51ccfecf16f2c06f788e6bcbc232d1f0cb32Jason Monk Callback callback, NotificationBackend notifBackend) { 45d8da51ccfecf16f2c06f788e6bcbc232d1f0cb32Jason Monk super(appState, callback); 463e912e7ea537ae34234ccbe6fef9b2519a4da51bJulia Reynolds mContext = context; 473e912e7ea537ae34234ccbe6fef9b2519a4da51bJulia Reynolds mPm = mContext.getPackageManager(); 48584b2b2bc17a4ccf42952b188722de1091c101beJason Monk mNotifBackend = notifBackend; 49584b2b2bc17a4ccf42952b188722de1091c101beJason Monk } 50584b2b2bc17a4ccf42952b188722de1091c101beJason Monk 51584b2b2bc17a4ccf42952b188722de1091c101beJason Monk @Override 52d8da51ccfecf16f2c06f788e6bcbc232d1f0cb32Jason Monk protected void loadAllExtraInfo() { 53d8da51ccfecf16f2c06f788e6bcbc232d1f0cb32Jason Monk ArrayList<AppEntry> apps = mAppSession.getAllApps(); 54d8da51ccfecf16f2c06f788e6bcbc232d1f0cb32Jason Monk final int N = apps.size(); 55d8da51ccfecf16f2c06f788e6bcbc232d1f0cb32Jason Monk for (int i = 0; i < N; i++) { 56d8da51ccfecf16f2c06f788e6bcbc232d1f0cb32Jason Monk AppEntry app = apps.get(i); 573e912e7ea537ae34234ccbe6fef9b2519a4da51bJulia Reynolds app.extraInfo = mNotifBackend.loadAppRow(mContext, mPm, app.info); 58584b2b2bc17a4ccf42952b188722de1091c101beJason Monk } 59584b2b2bc17a4ccf42952b188722de1091c101beJason Monk } 60584b2b2bc17a4ccf42952b188722de1091c101beJason Monk 61d8da51ccfecf16f2c06f788e6bcbc232d1f0cb32Jason Monk @Override 62d8da51ccfecf16f2c06f788e6bcbc232d1f0cb32Jason Monk protected void updateExtraInfo(AppEntry app, String pkg, int uid) { 633e912e7ea537ae34234ccbe6fef9b2519a4da51bJulia Reynolds app.extraInfo = mNotifBackend.loadAppRow(mContext, mPm, app.info); 64584b2b2bc17a4ccf42952b188722de1091c101beJason Monk } 65584b2b2bc17a4ccf42952b188722de1091c101beJason Monk 66584b2b2bc17a4ccf42952b188722de1091c101beJason Monk public static final AppFilter FILTER_APP_NOTIFICATION_BLOCKED = new AppFilter() { 67584b2b2bc17a4ccf42952b188722de1091c101beJason Monk @Override 68584b2b2bc17a4ccf42952b188722de1091c101beJason Monk public void init() { 69584b2b2bc17a4ccf42952b188722de1091c101beJason Monk } 70584b2b2bc17a4ccf42952b188722de1091c101beJason Monk 71584b2b2bc17a4ccf42952b188722de1091c101beJason Monk @Override 72584b2b2bc17a4ccf42952b188722de1091c101beJason Monk public boolean filterApp(AppEntry info) { 73e89bebe96f547fc7e6badf3e2bc80eebdda7793cJulia Reynolds if (info == null || info.extraInfo == null) { 74e89bebe96f547fc7e6badf3e2bc80eebdda7793cJulia Reynolds return false; 75e89bebe96f547fc7e6badf3e2bc80eebdda7793cJulia Reynolds } 76a2d47fcf59f03d091edaf5895fd3b651e1f499e1Jason Monk if (info.extraInfo instanceof AppRow) { 77a2d47fcf59f03d091edaf5895fd3b651e1f499e1Jason Monk AppRow row = (AppRow) info.extraInfo; 78a2d47fcf59f03d091edaf5895fd3b651e1f499e1Jason Monk return row.banned; 79e07f385ae0acfcf8466859cb65f883e0b9830d90Julia Reynolds } 80a2d47fcf59f03d091edaf5895fd3b651e1f499e1Jason Monk return false; 81584b2b2bc17a4ccf42952b188722de1091c101beJason Monk } 82584b2b2bc17a4ccf42952b188722de1091c101beJason Monk }; 83beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds 84beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds public static final AppFilter FILTER_APP_NOTIFICATION_SILENCED = new AppFilter() { 85beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds @Override 86beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds public void init() { 87beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds } 88beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds 89beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds @Override 90beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds public boolean filterApp(AppEntry info) { 91e89bebe96f547fc7e6badf3e2bc80eebdda7793cJulia Reynolds if (info == null || info.extraInfo == null) { 92beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds return false; 93beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds } 94beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds AppRow row = (AppRow) info.extraInfo; 95beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds return row.appImportance > NotificationListenerService.Ranking.IMPORTANCE_NONE 96beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds && row.appImportance < NotificationListenerService.Ranking.IMPORTANCE_DEFAULT; 97beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds } 98beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds }; 99beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds 100beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds public static final AppFilter FILTER_APP_NOTIFICATION_PRIORITY = new AppFilter() { 101beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds @Override 102beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds public void init() { 103beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds } 104beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds 105beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds @Override 106beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds public boolean filterApp(AppEntry info) { 107e89bebe96f547fc7e6badf3e2bc80eebdda7793cJulia Reynolds if (info == null || info.extraInfo == null) { 108e89bebe96f547fc7e6badf3e2bc80eebdda7793cJulia Reynolds return false; 109e89bebe96f547fc7e6badf3e2bc80eebdda7793cJulia Reynolds } 110e89bebe96f547fc7e6badf3e2bc80eebdda7793cJulia Reynolds return ((AppRow) info.extraInfo).appBypassDnd; 111beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds } 112beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds }; 113beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds 114beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds public static final AppFilter FILTER_APP_NOTIFICATION_HIDE_SENSITIVE = new AppFilter() { 115beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds @Override 116beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds public void init() { 117beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds } 118beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds 119beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds @Override 120beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds public boolean filterApp(AppEntry info) { 121e89bebe96f547fc7e6badf3e2bc80eebdda7793cJulia Reynolds if (info == null || info.extraInfo == null) { 122e89bebe96f547fc7e6badf3e2bc80eebdda7793cJulia Reynolds return false; 123e89bebe96f547fc7e6badf3e2bc80eebdda7793cJulia Reynolds } 124e89bebe96f547fc7e6badf3e2bc80eebdda7793cJulia Reynolds return ((AppRow) info.extraInfo).lockScreenSecure 125beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds && ((AppRow) info.extraInfo).appVisOverride == Notification.VISIBILITY_PRIVATE; 126beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds } 127beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds }; 128beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds 129beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds public static final AppFilter FILTER_APP_NOTIFICATION_HIDE_ALL = new AppFilter() { 130beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds @Override 131beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds public void init() { 132beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds } 133beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds 134beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds @Override 135beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds public boolean filterApp(AppEntry info) { 136e89bebe96f547fc7e6badf3e2bc80eebdda7793cJulia Reynolds if (info == null || info.extraInfo == null) { 137e89bebe96f547fc7e6badf3e2bc80eebdda7793cJulia Reynolds return false; 138e89bebe96f547fc7e6badf3e2bc80eebdda7793cJulia Reynolds } 139e89bebe96f547fc7e6badf3e2bc80eebdda7793cJulia Reynolds return ((AppRow) info.extraInfo).lockScreenSecure 140beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds && ((AppRow) info.extraInfo).appVisOverride == Notification.VISIBILITY_SECRET; 141beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds } 142beb5e5210b55926fa4a7302a9e9d00ef49f40314Julia Reynolds }; 143584b2b2bc17a4ccf42952b188722de1091c101beJason Monk} 144