summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJason Monk <jmonk@google.com>2015-07-07 14:57:47 -0400
committerJason Monk <jmonk@google.com>2015-07-07 14:57:47 -0400
commit38f1889fea1a8ef7f4160044f4fd7e57a9bccd23 (patch)
treee9ae34e5e6361a20b8eb16c5ddec10836859a37a /src
parent2bd619d5ed2cdf5a34c3e3830469edc3b29a6eb0 (diff)
downloadpackages_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')
-rwxr-xr-xsrc/com/android/settings/applications/InstalledAppDetails.java3
-rw-r--r--src/com/android/settings/notification/AppNotificationSettings.java30
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());