Notification summary updates.
Change-Id: I6b824acf27743637ca661b38b51c639ecf099208
This commit is contained in:
@@ -6454,13 +6454,16 @@
|
|||||||
<string name="notifications_enabled">Normal</string>
|
<string name="notifications_enabled">Normal</string>
|
||||||
<!-- App notification summary with notifications disabled [CHAR LIMIT=40] -->
|
<!-- App notification summary with notifications disabled [CHAR LIMIT=40] -->
|
||||||
<string name="notifications_disabled">Blocked</string>
|
<string name="notifications_disabled">Blocked</string>
|
||||||
<!-- App notification summary with notifications disabled [CHAR LIMIT=40] -->
|
<!-- App notification summary with notifications silenced [CHAR LIMIT=40] -->
|
||||||
<string name="notifications_silenced">Silenced</string>
|
<string name="notifications_silenced">Silenced</string>
|
||||||
<!-- App notification summary with 2 items [CHAR LIMIT=15] -->
|
<!-- App notification summary with notifications redacted [CHAR LIMIT=70] -->
|
||||||
<string name="notifications_two_items"><xliff:g id="notif_state" example="Priority">%1$s</xliff:g> / <xliff:g id="notif_state" example="Priority">%2$s</xliff:g></string>
|
<string name="notifications_redacted">Sensitive content not on lock screen</string>
|
||||||
<!-- App notification summary with 3 items [CHAR LIMIT=15] -->
|
<!-- App notification summary with notifications hidden [CHAR LIMIT=40] -->
|
||||||
<string name="notifications_three_items"><xliff:g id="notif_state" example="Priority">%1$s</xliff:g> / <xliff:g id="notif_state" example="Priority">%2$s</xliff:g> / <xliff:g id="notif_state" example="Priority">%3$s</xliff:g></string>
|
<string name="notifications_hidden">Not on lock screen</string>
|
||||||
|
<!-- App notification summary with notifications bypassing DND [CHAR LIMIT=40] -->
|
||||||
|
<string name="notifications_priority">Do Not Disturb overridden</string>
|
||||||
|
<!-- App notification summary divider [CHAR LIMIT=40] -->
|
||||||
|
<string name="notifications_summary_divider">\u00A0/\u00A0</string>
|
||||||
|
|
||||||
<!-- Permissions preference summary [CHAR LIMIT=40] -->
|
<!-- Permissions preference summary [CHAR LIMIT=40] -->
|
||||||
<plurals name="permissions_summary">
|
<plurals name="permissions_summary">
|
||||||
@@ -6500,7 +6503,7 @@
|
|||||||
<string name="filter_with_domain_urls_apps">With domain URLs</string>
|
<string name="filter_with_domain_urls_apps">With domain URLs</string>
|
||||||
<!-- Label for showing apps with priority notifications in list [CHAR LIMIT=30] -->
|
<!-- Label for showing apps with priority notifications in list [CHAR LIMIT=30] -->
|
||||||
<string name="filter_notif_priority_apps">Overrides Do Not Disturb</string>
|
<string name="filter_notif_priority_apps">Overrides Do Not Disturb</string>
|
||||||
<!-- Label for showing apps redacting sensitive notifications in list [CHAR LIMIT=30] -->
|
<!-- Label for showing apps redacting sensitive notifications in list [CHAR LIMIT=50] -->
|
||||||
<string name="filter_notif_sensitive_apps">No sensitive content on lock screen</string>
|
<string name="filter_notif_sensitive_apps">No sensitive content on lock screen</string>
|
||||||
<!-- Label for showing apps hiding notifications from lockscreen [CHAR LIMIT=30] -->
|
<!-- Label for showing apps hiding notifications from lockscreen [CHAR LIMIT=30] -->
|
||||||
<string name="filter_notif_hide_notifications_apps">Never shown on lock screen</string>
|
<string name="filter_notif_hide_notifications_apps">Never shown on lock screen</string>
|
||||||
@@ -7017,7 +7020,10 @@
|
|||||||
<string name="data_usage_summary_format"><xliff:g id="amount" example="50%">%1$s</xliff:g> of data used</string>
|
<string name="data_usage_summary_format"><xliff:g id="amount" example="50%">%1$s</xliff:g> of data used</string>
|
||||||
|
|
||||||
<!-- Summary of notifications [CHAR LIMIT=NONE] -->
|
<!-- Summary of notifications [CHAR LIMIT=NONE] -->
|
||||||
<string name="notification_summary"><xliff:g id="count" example="24">%1$d</xliff:g> apps blocked from sending</string>
|
<plurals name="notification_summary">
|
||||||
|
<item quantity="one"><xliff:g id="count" example="1">%d</xliff:g> app blocked from sending</item>
|
||||||
|
<item quantity="other"><xliff:g id="count" example="10">%d</xliff:g> apps blocked from sending</item>
|
||||||
|
</plurals>
|
||||||
|
|
||||||
<!-- Summary of notifications when no apps are blocked [CHAR LIMIT=NONE] -->
|
<!-- Summary of notifications when no apps are blocked [CHAR LIMIT=NONE] -->
|
||||||
<string name="notification_summary_none">All apps allowed to send</string>
|
<string name="notification_summary_none">All apps allowed to send</string>
|
||||||
|
@@ -16,9 +16,12 @@
|
|||||||
package com.android.settings.applications;
|
package com.android.settings.applications;
|
||||||
|
|
||||||
import android.app.Notification;
|
import android.app.Notification;
|
||||||
|
import android.content.Context;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
|
import android.os.UserHandle;
|
||||||
import android.service.notification.NotificationListenerService;
|
import android.service.notification.NotificationListenerService;
|
||||||
|
|
||||||
|
import com.android.internal.widget.LockPatternUtils;
|
||||||
import com.android.settings.notification.NotificationBackend;
|
import com.android.settings.notification.NotificationBackend;
|
||||||
import com.android.settings.notification.NotificationBackend.AppRow;
|
import com.android.settings.notification.NotificationBackend.AppRow;
|
||||||
import com.android.settingslib.applications.ApplicationsState;
|
import com.android.settingslib.applications.ApplicationsState;
|
||||||
@@ -35,11 +38,13 @@ public class AppStateNotificationBridge extends AppStateBaseBridge {
|
|||||||
|
|
||||||
private final NotificationBackend mNotifBackend;
|
private final NotificationBackend mNotifBackend;
|
||||||
private final PackageManager mPm;
|
private final PackageManager mPm;
|
||||||
|
private final Context mContext;
|
||||||
|
|
||||||
public AppStateNotificationBridge(PackageManager pm, ApplicationsState appState,
|
public AppStateNotificationBridge(Context context, ApplicationsState appState,
|
||||||
Callback callback, NotificationBackend notifBackend) {
|
Callback callback, NotificationBackend notifBackend) {
|
||||||
super(appState, callback);
|
super(appState, callback);
|
||||||
mPm = pm;
|
mContext = context;
|
||||||
|
mPm = mContext.getPackageManager();
|
||||||
mNotifBackend = notifBackend;
|
mNotifBackend = notifBackend;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,13 +54,13 @@ public class AppStateNotificationBridge extends AppStateBaseBridge {
|
|||||||
final int N = apps.size();
|
final int N = apps.size();
|
||||||
for (int i = 0; i < N; i++) {
|
for (int i = 0; i < N; i++) {
|
||||||
AppEntry app = apps.get(i);
|
AppEntry app = apps.get(i);
|
||||||
app.extraInfo = mNotifBackend.loadAppRow(mPm, app.info);
|
app.extraInfo = mNotifBackend.loadAppRow(mContext, mPm, app.info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void updateExtraInfo(AppEntry app, String pkg, int uid) {
|
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() {
|
public static final AppFilter FILTER_APP_NOTIFICATION_BLOCKED = new AppFilter() {
|
||||||
@@ -107,7 +112,7 @@ public class AppStateNotificationBridge extends AppStateBaseBridge {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean filterApp(AppEntry info) {
|
public boolean filterApp(AppEntry info) {
|
||||||
return info.extraInfo != null
|
return info.extraInfo != null && ((AppRow) info.extraInfo).lockScreenSecure
|
||||||
&& ((AppRow) info.extraInfo).appVisOverride == Notification.VISIBILITY_PRIVATE;
|
&& ((AppRow) info.extraInfo).appVisOverride == Notification.VISIBILITY_PRIVATE;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -119,7 +124,7 @@ public class AppStateNotificationBridge extends AppStateBaseBridge {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean filterApp(AppEntry info) {
|
public boolean filterApp(AppEntry info) {
|
||||||
return info.extraInfo != null
|
return info.extraInfo != null && ((AppRow) info.extraInfo).lockScreenSecure
|
||||||
&& ((AppRow) info.extraInfo).appVisOverride == Notification.VISIBILITY_SECRET;
|
&& ((AppRow) info.extraInfo).appVisOverride == Notification.VISIBILITY_SECRET;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -21,6 +21,7 @@ import android.app.Activity;
|
|||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.LoaderManager.LoaderCallbacks;
|
import android.app.LoaderManager.LoaderCallbacks;
|
||||||
|
import android.app.Notification;
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
@@ -73,6 +74,7 @@ import android.widget.TextView;
|
|||||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||||
import com.android.internal.os.BatterySipper;
|
import com.android.internal.os.BatterySipper;
|
||||||
import com.android.internal.os.BatteryStatsHelper;
|
import com.android.internal.os.BatteryStatsHelper;
|
||||||
|
import com.android.internal.widget.LockPatternUtils;
|
||||||
import com.android.settings.AppHeader;
|
import com.android.settings.AppHeader;
|
||||||
import com.android.settings.DeviceAdminAdd;
|
import com.android.settings.DeviceAdminAdd;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
@@ -1001,18 +1003,39 @@ public class InstalledAppDetails extends AppInfoBase
|
|||||||
|
|
||||||
public static CharSequence getNotificationSummary(AppEntry appEntry, Context context,
|
public static CharSequence getNotificationSummary(AppEntry appEntry, Context context,
|
||||||
NotificationBackend backend) {
|
NotificationBackend backend) {
|
||||||
AppRow appRow = backend.loadAppRow(context.getPackageManager(), appEntry.info);
|
AppRow appRow = backend.loadAppRow(context, context.getPackageManager(), appEntry.info);
|
||||||
return getNotificationSummary(appRow, context);
|
return getNotificationSummary(appRow, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CharSequence getNotificationSummary(AppRow appRow, Context context) {
|
public static CharSequence getNotificationSummary(AppRow appRow, Context context) {
|
||||||
|
List<String> summaryAttributes = new ArrayList<>();
|
||||||
|
StringBuffer summary = new StringBuffer();
|
||||||
if (appRow.banned) {
|
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
|
} else if (appRow.appImportance > NotificationListenerService.Ranking.IMPORTANCE_NONE
|
||||||
&& appRow.appImportance < NotificationListenerService.Ranking.IMPORTANCE_DEFAULT) {
|
&& 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<Void, Void, ProcStatsPackageEntry> {
|
private class MemoryUpdater extends AsyncTask<Void, Void, ProcStatsPackageEntry> {
|
||||||
|
@@ -788,8 +788,8 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
mPm = mContext.getPackageManager();
|
mPm = mContext.getPackageManager();
|
||||||
mFilterMode = filterMode;
|
mFilterMode = filterMode;
|
||||||
if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) {
|
if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) {
|
||||||
mExtraInfoBridge = new AppStateNotificationBridge(mContext.getPackageManager(),
|
mExtraInfoBridge = new AppStateNotificationBridge(mContext, mState, this,
|
||||||
mState, this, manageApplications.mNotifBackend);
|
manageApplications.mNotifBackend);
|
||||||
} else if (mManageApplications.mListType == LIST_TYPE_USAGE_ACCESS) {
|
} else if (mManageApplications.mListType == LIST_TYPE_USAGE_ACCESS) {
|
||||||
mExtraInfoBridge = new AppStateUsageBridge(mContext, mState, this);
|
mExtraInfoBridge = new AppStateUsageBridge(mContext, mState, this);
|
||||||
} else if (mManageApplications.mListType == LIST_TYPE_HIGH_POWER) {
|
} else if (mManageApplications.mListType == LIST_TYPE_HIGH_POWER) {
|
||||||
|
@@ -52,7 +52,7 @@ public class NotificationApps extends ManageApplications {
|
|||||||
ApplicationsState.getInstance((Application) context.getApplicationContext());
|
ApplicationsState.getInstance((Application) context.getApplicationContext());
|
||||||
mSession = mAppState.newSession(this);
|
mSession = mAppState.newSession(this);
|
||||||
mNotifBackend = new NotificationBackend();
|
mNotifBackend = new NotificationBackend();
|
||||||
mExtraInfoBridge = new AppStateNotificationBridge(mContext.getPackageManager(),
|
mExtraInfoBridge = new AppStateNotificationBridge(mContext,
|
||||||
mAppState, this, mNotifBackend);
|
mAppState, this, mNotifBackend);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,8 +72,8 @@ public class NotificationApps extends ManageApplications {
|
|||||||
if (apps.size() == 0) {
|
if (apps.size() == 0) {
|
||||||
mLoader.setSummary(this, mContext.getString(R.string.notification_summary_none));
|
mLoader.setSummary(this, mContext.getString(R.string.notification_summary_none));
|
||||||
} else {
|
} else {
|
||||||
mLoader.setSummary(this, mContext.getString(R.string.notification_summary,
|
mLoader.setSummary(this, mContext.getResources().getQuantityString(
|
||||||
apps.size()));
|
R.plurals.notification_summary, apps.size(), apps.size()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -82,7 +82,7 @@ public class AppNotificationSettings extends NotificationSettingsBase {
|
|||||||
mBlock = (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_BLOCK);
|
mBlock = (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_BLOCK);
|
||||||
mSilent = (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_SILENT);
|
mSilent = (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_SILENT);
|
||||||
|
|
||||||
mAppRow = mBackend.loadAppRow(mPm, mPkgInfo);
|
mAppRow = mBackend.loadAppRow(mContext, mPm, mPkgInfo);
|
||||||
|
|
||||||
NotificationManager.Policy policy =
|
NotificationManager.Policy policy =
|
||||||
NotificationManager.from(mContext).getNotificationPolicy();
|
NotificationManager.from(mContext).getNotificationPolicy();
|
||||||
|
@@ -24,8 +24,11 @@ import android.content.pm.PackageInfo;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.ServiceManager;
|
import android.os.ServiceManager;
|
||||||
|
import android.os.UserHandle;
|
||||||
import android.service.notification.NotificationListenerService;
|
import android.service.notification.NotificationListenerService;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.android.internal.widget.LockPatternUtils;
|
||||||
import com.android.settingslib.Utils;
|
import com.android.settingslib.Utils;
|
||||||
|
|
||||||
public class NotificationBackend {
|
public class NotificationBackend {
|
||||||
@@ -34,7 +37,7 @@ public class NotificationBackend {
|
|||||||
static INotificationManager sINM = INotificationManager.Stub.asInterface(
|
static INotificationManager sINM = INotificationManager.Stub.asInterface(
|
||||||
ServiceManager.getService(Context.NOTIFICATION_SERVICE));
|
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();
|
final AppRow row = new AppRow();
|
||||||
row.pkg = app.packageName;
|
row.pkg = app.packageName;
|
||||||
row.uid = app.uid;
|
row.uid = app.uid;
|
||||||
@@ -49,11 +52,13 @@ public class NotificationBackend {
|
|||||||
row.appImportance = getImportance(row.pkg, row.uid);
|
row.appImportance = getImportance(row.pkg, row.uid);
|
||||||
row.appBypassDnd = getBypassZenMode(row.pkg, row.uid);
|
row.appBypassDnd = getBypassZenMode(row.pkg, row.uid);
|
||||||
row.appVisOverride = getVisibilityOverride(row.pkg, row.uid);
|
row.appVisOverride = getVisibilityOverride(row.pkg, row.uid);
|
||||||
|
row.lockScreenSecure = new LockPatternUtils(context).isSecure(
|
||||||
|
UserHandle.myUserId());
|
||||||
return row;
|
return row;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AppRow loadAppRow(PackageManager pm, PackageInfo app) {
|
public AppRow loadAppRow(Context context, PackageManager pm, PackageInfo app) {
|
||||||
final AppRow row = loadAppRow(pm, app.applicationInfo);
|
final AppRow row = loadAppRow(context, pm, app.applicationInfo);
|
||||||
row.systemApp = Utils.isSystemPackage(pm, app);
|
row.systemApp = Utils.isSystemPackage(pm, app);
|
||||||
return row;
|
return row;
|
||||||
}
|
}
|
||||||
@@ -142,5 +147,6 @@ public class NotificationBackend {
|
|||||||
public int appImportance;
|
public int appImportance;
|
||||||
public boolean appBypassDnd;
|
public boolean appBypassDnd;
|
||||||
public int appVisOverride;
|
public int appVisOverride;
|
||||||
|
public boolean lockScreenSecure;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user