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;
}
}