diff options
author | Philip P. Moltmann <moltmann@google.com> | 2016-05-05 15:17:31 -0700 |
---|---|---|
committer | Philip P. Moltmann <moltmann@google.com> | 2016-05-05 15:17:35 -0700 |
commit | 1dba1776c3fd432fd9adb5e3e251b6562aca7f3c (patch) | |
tree | 9aaa2ec9508c1153247935e0f1d90a71a76e543f /src/com | |
parent | 4cb02fd082ceceba2c73447f466032fce94108d8 (diff) | |
download | android_packages_apps_PackageInstaller-1dba1776c3fd432fd9adb5e3e251b6562aca7f3c.tar.gz android_packages_apps_PackageInstaller-1dba1776c3fd432fd9adb5e3e251b6562aca7f3c.tar.bz2 android_packages_apps_PackageInstaller-1dba1776c3fd432fd9adb5e3e251b6562aca7f3c.zip |
Mend up onDestroy->onCreate for N.
This does not implement correct onDestroy->onCreate behavior but mends
it for the common case.
We now handle all configurations changes, hence onDestroy->onCreate is
very rare. We also just abort quickly if we actually had a
onDestroy->onCreate instead of crashing.
This is a temporary fix.
Bug: 28588511
Change-Id: Ief56c8b866f2561b13253f66a7f79517fc2132cb
Diffstat (limited to 'src/com')
-rwxr-xr-x | src/com/android/packageinstaller/UninstallAppProgress.java | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/src/com/android/packageinstaller/UninstallAppProgress.java b/src/com/android/packageinstaller/UninstallAppProgress.java index 07276334..008ce7c4 100755 --- a/src/com/android/packageinstaller/UninstallAppProgress.java +++ b/src/com/android/packageinstaller/UninstallAppProgress.java @@ -27,6 +27,7 @@ import android.content.pm.IPackageManager; import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; import android.content.pm.UserInfo; +import android.content.res.Configuration; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; @@ -92,6 +93,10 @@ public class UninstallAppProgress extends Activity implements OnClickListener { private Handler mHandler = new Handler() { public void handleMessage(Message msg) { + if (isFinishing() || isDestroyed()) { + return; + } + switch (msg.what) { case UNINSTALL_IS_SLOW: initView(); @@ -237,8 +242,31 @@ public class UninstallAppProgress extends Activity implements OnClickListener { @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); + Intent intent = getIntent(); mAppInfo = intent.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO); + mCallback = intent.getIBinderExtra(PackageInstaller.EXTRA_CALLBACK); + + // This currently does not support going through a onDestroy->onCreate cycle. Hence if that + // happened, just fail the operation for mysterious reasons. + if (icicle != null) { + mResultCode = PackageManager.DELETE_FAILED_INTERNAL_ERROR; + + if (mCallback != null) { + final IPackageDeleteObserver2 observer = IPackageDeleteObserver2.Stub + .asInterface(mCallback); + try { + observer.onPackageDeleted(mAppInfo.packageName, mResultCode, null); + } catch (RemoteException ignored) { + } + finish(); + } else { + setResultAndFinish(mResultCode); + } + + return; + } + mAllUsers = intent.getBooleanExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, false); if (mAllUsers && !UserManager.get(this).isAdminUser()) { throw new SecurityException("Only admin user can request uninstall for all users"); @@ -254,7 +282,6 @@ public class UninstallAppProgress extends Activity implements OnClickListener { + "request uninstall for user " + mUser); } } - mCallback = intent.getIBinderExtra(PackageInstaller.EXTRA_CALLBACK); PackageDeleteObserver observer = new PackageDeleteObserver(); |