From 38f1889fea1a8ef7f4160044f4fd7e57a9bccd23 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Tue, 7 Jul 2015 14:57:47 -0400 Subject: Handle uninstall from notifications list Don't crash in InstalledAppDetails on invalid app and finish app notification details when the app goes away. Bug: 22311566 Change-Id: I0bb7302dc16dd1a6f3aca152037705ad657d5554 --- .../notification/AppNotificationSettings.java | 30 ++++++++++++++-------- 1 file changed, 20 insertions(+), 10 deletions(-) (limited to 'src/com/android/settings/notification') diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java index 8e995fe..2ed6d85 100644 --- a/src/com/android/settings/notification/AppNotificationSettings.java +++ b/src/com/android/settings/notification/AppNotificationSettings.java @@ -74,6 +74,7 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { private AppRow mAppRow; private boolean mCreated; private boolean mIsSystemPackage; + private int mUid; @Override public void onActivityCreated(Bundle savedInstanceState) { @@ -110,22 +111,22 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { final String pkg = args != null && args.containsKey(AppInfoBase.ARG_PACKAGE_NAME) ? args.getString(AppInfoBase.ARG_PACKAGE_NAME) : intent.getStringExtra(Settings.EXTRA_APP_PACKAGE); - final int uid = args != null && args.containsKey(AppInfoBase.ARG_PACKAGE_UID) + mUid = args != null && args.containsKey(AppInfoBase.ARG_PACKAGE_UID) ? args.getInt(AppInfoBase.ARG_PACKAGE_UID) : intent.getIntExtra(Settings.EXTRA_APP_UID, -1); - if (uid == -1 || TextUtils.isEmpty(pkg)) { + if (mUid == -1 || TextUtils.isEmpty(pkg)) { Log.w(TAG, "Missing extras: " + Settings.EXTRA_APP_PACKAGE + " was " + pkg + ", " - + Settings.EXTRA_APP_UID + " was " + uid); + + Settings.EXTRA_APP_UID + " was " + mUid); toastAndFinish(); return; } - if (DEBUG) Log.d(TAG, "Load details for pkg=" + pkg + " uid=" + uid); + if (DEBUG) Log.d(TAG, "Load details for pkg=" + pkg + " uid=" + mUid); final PackageManager pm = getPackageManager(); - final PackageInfo info = findPackageInfo(pm, pkg, uid); + final PackageInfo info = findPackageInfo(pm, pkg, mUid); if (info == null) { Log.w(TAG, "Failed to find package info: " + Settings.EXTRA_APP_PACKAGE + " was " + pkg - + ", " + Settings.EXTRA_APP_UID + " was " + uid); + + ", " + Settings.EXTRA_APP_UID + " was " + mUid); toastAndFinish(); return; } @@ -157,7 +158,7 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { if (banned) { MetricsLogger.action(getActivity(), MetricsLogger.ACTION_BAN_APP_NOTES, pkg); } - final boolean success = mBackend.setNotificationsBanned(pkg, uid, banned); + final boolean success = mBackend.setNotificationsBanned(pkg, mUid, banned); if (success) { updateDependents(banned); } @@ -169,7 +170,7 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { final boolean priority = (Boolean) newValue; - return mBackend.setHighPriority(pkg, uid, priority); + return mBackend.setHighPriority(pkg, mUid, priority); } }); @@ -177,7 +178,7 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { final boolean peekable = (Boolean) newValue; - return mBackend.setPeekable(pkg, uid, peekable); + return mBackend.setPeekable(pkg, mUid, peekable); } }); @@ -185,7 +186,7 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { final boolean sensitive = (Boolean) newValue; - return mBackend.setSensitive(pkg, uid, sensitive); + return mBackend.setSensitive(pkg, mUid, sensitive); } }); @@ -203,6 +204,15 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { } } + @Override + public void onResume() { + super.onResume(); + if (mUid != -1 && getPackageManager().getPackagesForUid(mUid) == null) { + // App isn't around anymore, must have been removed. + finish(); + } + } + private void updateDependents(boolean banned) { final boolean lockscreenSecure = new LockPatternUtils(getActivity()).isSecure( UserHandle.myUserId()); -- cgit v1.1