diff options
author | Jason Monk <jmonk@google.com> | 2015-07-07 14:57:47 -0400 |
---|---|---|
committer | Jason Monk <jmonk@google.com> | 2015-07-07 14:57:47 -0400 |
commit | 38f1889fea1a8ef7f4160044f4fd7e57a9bccd23 (patch) | |
tree | e9ae34e5e6361a20b8eb16c5ddec10836859a37a /src/com/android/settings | |
parent | 2bd619d5ed2cdf5a34c3e3830469edc3b29a6eb0 (diff) | |
download | packages_apps_Settings-38f1889fea1a8ef7f4160044f4fd7e57a9bccd23.zip packages_apps_Settings-38f1889fea1a8ef7f4160044f4fd7e57a9bccd23.tar.gz packages_apps_Settings-38f1889fea1a8ef7f4160044f4fd7e57a9bccd23.tar.bz2 |
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
Diffstat (limited to 'src/com/android/settings')
-rwxr-xr-x | src/com/android/settings/applications/InstalledAppDetails.java | 3 | ||||
-rw-r--r-- | src/com/android/settings/notification/AppNotificationSettings.java | 30 |
2 files changed, 23 insertions, 10 deletions
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java index 94705d2..0ab9610 100755 --- a/src/com/android/settings/applications/InstalledAppDetails.java +++ b/src/com/android/settings/applications/InstalledAppDetails.java @@ -379,6 +379,9 @@ public class InstalledAppDetails extends AppInfoBase @Override public void onPrepareOptionsMenu(Menu menu) { + if (mFinishing) { + return; + } boolean showIt = true; if (mUpdatedSysApp) { showIt = false; 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()); |