diff --git a/res/values/strings.xml b/res/values/strings.xml index b9207cdc9cf..2679da0e5cb 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6454,13 +6454,16 @@ Normal Blocked - + Silenced - - %1$s / %2$s - - %1$s / %2$s / %3$s - + + Sensitive content not on lock screen + + Not on lock screen + + Do Not Disturb overridden + + \u00A0/\u00A0 @@ -6500,7 +6503,7 @@ With domain URLs Overrides Do Not Disturb - + No sensitive content on lock screen Never shown on lock screen @@ -7017,7 +7020,10 @@ %1$s of data used - %1$d apps blocked from sending + + %d app blocked from sending + %d apps blocked from sending + All apps allowed to send diff --git a/src/com/android/settings/applications/AppStateNotificationBridge.java b/src/com/android/settings/applications/AppStateNotificationBridge.java index 39b502c178e..e8db2aa66b2 100644 --- a/src/com/android/settings/applications/AppStateNotificationBridge.java +++ b/src/com/android/settings/applications/AppStateNotificationBridge.java @@ -16,9 +16,12 @@ package com.android.settings.applications; import android.app.Notification; +import android.content.Context; import android.content.pm.PackageManager; +import android.os.UserHandle; import android.service.notification.NotificationListenerService; +import com.android.internal.widget.LockPatternUtils; import com.android.settings.notification.NotificationBackend; import com.android.settings.notification.NotificationBackend.AppRow; import com.android.settingslib.applications.ApplicationsState; @@ -35,11 +38,13 @@ public class AppStateNotificationBridge extends AppStateBaseBridge { private final NotificationBackend mNotifBackend; private final PackageManager mPm; + private final Context mContext; - public AppStateNotificationBridge(PackageManager pm, ApplicationsState appState, + public AppStateNotificationBridge(Context context, ApplicationsState appState, Callback callback, NotificationBackend notifBackend) { super(appState, callback); - mPm = pm; + mContext = context; + mPm = mContext.getPackageManager(); mNotifBackend = notifBackend; } @@ -49,13 +54,13 @@ public class AppStateNotificationBridge extends AppStateBaseBridge { final int N = apps.size(); for (int i = 0; i < N; i++) { AppEntry app = apps.get(i); - app.extraInfo = mNotifBackend.loadAppRow(mPm, app.info); + app.extraInfo = mNotifBackend.loadAppRow(mContext, mPm, app.info); } } @Override protected void updateExtraInfo(AppEntry app, String pkg, int uid) { - app.extraInfo = mNotifBackend.loadAppRow(mPm, app.info); + app.extraInfo = mNotifBackend.loadAppRow(mContext, mPm, app.info); } public static final AppFilter FILTER_APP_NOTIFICATION_BLOCKED = new AppFilter() { @@ -107,7 +112,7 @@ public class AppStateNotificationBridge extends AppStateBaseBridge { @Override public boolean filterApp(AppEntry info) { - return info.extraInfo != null + return info.extraInfo != null && ((AppRow) info.extraInfo).lockScreenSecure && ((AppRow) info.extraInfo).appVisOverride == Notification.VISIBILITY_PRIVATE; } }; @@ -119,7 +124,7 @@ public class AppStateNotificationBridge extends AppStateBaseBridge { @Override public boolean filterApp(AppEntry info) { - return info.extraInfo != null + return info.extraInfo != null && ((AppRow) info.extraInfo).lockScreenSecure && ((AppRow) info.extraInfo).appVisOverride == Notification.VISIBILITY_SECRET; } }; diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java index 2eaa76f3992..667b328666e 100755 --- a/src/com/android/settings/applications/InstalledAppDetails.java +++ b/src/com/android/settings/applications/InstalledAppDetails.java @@ -21,6 +21,7 @@ import android.app.Activity; import android.app.ActivityManager; import android.app.AlertDialog; import android.app.LoaderManager.LoaderCallbacks; +import android.app.Notification; import android.app.admin.DevicePolicyManager; import android.content.ActivityNotFoundException; import android.content.BroadcastReceiver; @@ -73,6 +74,7 @@ import android.widget.TextView; import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.internal.os.BatterySipper; import com.android.internal.os.BatteryStatsHelper; +import com.android.internal.widget.LockPatternUtils; import com.android.settings.AppHeader; import com.android.settings.DeviceAdminAdd; import com.android.settings.R; @@ -1001,18 +1003,39 @@ public class InstalledAppDetails extends AppInfoBase public static CharSequence getNotificationSummary(AppEntry appEntry, Context context, NotificationBackend backend) { - AppRow appRow = backend.loadAppRow(context.getPackageManager(), appEntry.info); + AppRow appRow = backend.loadAppRow(context, context.getPackageManager(), appEntry.info); return getNotificationSummary(appRow, context); } public static CharSequence getNotificationSummary(AppRow appRow, Context context) { + List summaryAttributes = new ArrayList<>(); + StringBuffer summary = new StringBuffer(); if (appRow.banned) { - return context.getString(R.string.notifications_disabled); + summaryAttributes.add(context.getString(R.string.notifications_disabled)); } else if (appRow.appImportance > NotificationListenerService.Ranking.IMPORTANCE_NONE && appRow.appImportance < NotificationListenerService.Ranking.IMPORTANCE_DEFAULT) { - return context.getString(R.string.notifications_silenced); + summaryAttributes.add(context.getString(R.string.notifications_silenced)); } - return ""; + final boolean lockscreenSecure = new LockPatternUtils(context).isSecure( + UserHandle.myUserId()); + if (lockscreenSecure) { + if (appRow.appVisOverride == Notification.VISIBILITY_PRIVATE) { + summaryAttributes.add(context.getString(R.string.notifications_redacted)); + } else if (appRow.appVisOverride == Notification.VISIBILITY_SECRET) { + summaryAttributes.add(context.getString(R.string.notifications_hidden)); + } + } + if (appRow.appBypassDnd) { + summaryAttributes.add(context.getString(R.string.notifications_priority)); + } + final int N = summaryAttributes.size(); + for (int i = 0; i < N; i++) { + if (i > 0) { + summary.append(context.getString(R.string.notifications_summary_divider)); + } + summary.append(summaryAttributes.get(i)); + } + return summary.toString(); } private class MemoryUpdater extends AsyncTask { diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java index 56661b4b214..34fed5717cc 100644 --- a/src/com/android/settings/applications/ManageApplications.java +++ b/src/com/android/settings/applications/ManageApplications.java @@ -788,8 +788,8 @@ public class ManageApplications extends InstrumentedFragment mPm = mContext.getPackageManager(); mFilterMode = filterMode; if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) { - mExtraInfoBridge = new AppStateNotificationBridge(mContext.getPackageManager(), - mState, this, manageApplications.mNotifBackend); + mExtraInfoBridge = new AppStateNotificationBridge(mContext, mState, this, + manageApplications.mNotifBackend); } else if (mManageApplications.mListType == LIST_TYPE_USAGE_ACCESS) { mExtraInfoBridge = new AppStateUsageBridge(mContext, mState, this); } else if (mManageApplications.mListType == LIST_TYPE_HIGH_POWER) { diff --git a/src/com/android/settings/applications/NotificationApps.java b/src/com/android/settings/applications/NotificationApps.java index 05b450ddef8..f76aa8d765c 100644 --- a/src/com/android/settings/applications/NotificationApps.java +++ b/src/com/android/settings/applications/NotificationApps.java @@ -52,7 +52,7 @@ public class NotificationApps extends ManageApplications { ApplicationsState.getInstance((Application) context.getApplicationContext()); mSession = mAppState.newSession(this); mNotifBackend = new NotificationBackend(); - mExtraInfoBridge = new AppStateNotificationBridge(mContext.getPackageManager(), + mExtraInfoBridge = new AppStateNotificationBridge(mContext, mAppState, this, mNotifBackend); } @@ -72,8 +72,8 @@ public class NotificationApps extends ManageApplications { if (apps.size() == 0) { mLoader.setSummary(this, mContext.getString(R.string.notification_summary_none)); } else { - mLoader.setSummary(this, mContext.getString(R.string.notification_summary, - apps.size())); + mLoader.setSummary(this, mContext.getResources().getQuantityString( + R.plurals.notification_summary, apps.size(), apps.size())); } } diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java index f3933001845..144c841a0d6 100644 --- a/src/com/android/settings/notification/AppNotificationSettings.java +++ b/src/com/android/settings/notification/AppNotificationSettings.java @@ -82,7 +82,7 @@ public class AppNotificationSettings extends NotificationSettingsBase { mBlock = (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_BLOCK); mSilent = (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_SILENT); - mAppRow = mBackend.loadAppRow(mPm, mPkgInfo); + mAppRow = mBackend.loadAppRow(mContext, mPm, mPkgInfo); NotificationManager.Policy policy = NotificationManager.from(mContext).getNotificationPolicy(); diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java index c418769d04e..9b05da4018c 100644 --- a/src/com/android/settings/notification/NotificationBackend.java +++ b/src/com/android/settings/notification/NotificationBackend.java @@ -24,8 +24,11 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.os.ServiceManager; +import android.os.UserHandle; import android.service.notification.NotificationListenerService; import android.util.Log; + +import com.android.internal.widget.LockPatternUtils; import com.android.settingslib.Utils; public class NotificationBackend { @@ -34,7 +37,7 @@ public class NotificationBackend { static INotificationManager sINM = INotificationManager.Stub.asInterface( ServiceManager.getService(Context.NOTIFICATION_SERVICE)); - public AppRow loadAppRow(PackageManager pm, ApplicationInfo app) { + public AppRow loadAppRow(Context context, PackageManager pm, ApplicationInfo app) { final AppRow row = new AppRow(); row.pkg = app.packageName; row.uid = app.uid; @@ -49,11 +52,13 @@ public class NotificationBackend { row.appImportance = getImportance(row.pkg, row.uid); row.appBypassDnd = getBypassZenMode(row.pkg, row.uid); row.appVisOverride = getVisibilityOverride(row.pkg, row.uid); + row.lockScreenSecure = new LockPatternUtils(context).isSecure( + UserHandle.myUserId()); return row; } - public AppRow loadAppRow(PackageManager pm, PackageInfo app) { - final AppRow row = loadAppRow(pm, app.applicationInfo); + public AppRow loadAppRow(Context context, PackageManager pm, PackageInfo app) { + final AppRow row = loadAppRow(context, pm, app.applicationInfo); row.systemApp = Utils.isSystemPackage(pm, app); return row; } @@ -142,5 +147,6 @@ public class NotificationBackend { public int appImportance; public boolean appBypassDnd; public int appVisOverride; + public boolean lockScreenSecure; } }