diff options
author | Svetoslav Ganov <svetoslavganov@google.com> | 2016-05-10 10:55:26 -0700 |
---|---|---|
committer | Svetoslav Ganov <svetoslavganov@google.com> | 2016-05-10 13:02:57 -0700 |
commit | f63739bb3f5de9927171b84630ec5872ba85fa6c (patch) | |
tree | 80a2d14064b7d1b7c7a1d500dcdf3872106f71dd /src/com | |
parent | 1dba1776c3fd432fd9adb5e3e251b6562aca7f3c (diff) | |
download | android_packages_apps_PackageInstaller-f63739bb3f5de9927171b84630ec5872ba85fa6c.tar.gz android_packages_apps_PackageInstaller-f63739bb3f5de9927171b84630ec5872ba85fa6c.tar.bz2 android_packages_apps_PackageInstaller-f63739bb3f5de9927171b84630ec5872ba85fa6c.zip |
Fix app install flow
A regression was introduced when we added support for
installing apps from content URIs. Since we stage the
APK in the cache folder we changed the flow to wipe
the cached version when the PackageInstallerActivity
finishes or gets an installation result, so we started
the InstallAppProgress activity for result but the latter
may be called with the forward result flag which is
incompatible with start activity for result. This change
delegates clearing the staging file in the cache folder
to the InstallAppProgress activity.
bug:28551937
Change-Id: I0d9978aff60b7fab6b64fe7bf889ef30f9b2fd7c
Diffstat (limited to 'src/com')
-rwxr-xr-x | src/com/android/packageinstaller/InstallAppProgress.java | 29 | ||||
-rw-r--r-- | src/com/android/packageinstaller/PackageInstallerActivity.java | 5 |
2 files changed, 25 insertions, 9 deletions
diff --git a/src/com/android/packageinstaller/InstallAppProgress.java b/src/com/android/packageinstaller/InstallAppProgress.java index 38f53e53..e93c93c7 100755 --- a/src/com/android/packageinstaller/InstallAppProgress.java +++ b/src/com/android/packageinstaller/InstallAppProgress.java @@ -34,7 +34,6 @@ import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; -import android.graphics.drawable.LevelListDrawable; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -94,7 +93,7 @@ public class InstallAppProgress extends Activity implements View.OnClickListener setResult(msg.arg1 == PackageInstaller.STATUS_SUCCESS ? Activity.RESULT_OK : Activity.RESULT_FIRST_USER, result); - finish(); + clearCachedApkIfNeededAndFinish(); return; } // Update the status text @@ -206,6 +205,11 @@ public class InstallAppProgress extends Activity implements View.OnClickListener initView(); } + @Override + public void onBackPressed() { + clearCachedApkIfNeededAndFinish(); + } + @SuppressWarnings("deprecation") @Override public Dialog onCreateDialog(int id, Bundle bundle) { @@ -220,13 +224,13 @@ public class InstallAppProgress extends Activity implements View.OnClickListener //launch manage applications Intent intent = new Intent("android.intent.action.MANAGE_PACKAGE_STORAGE"); startActivity(intent); - finish(); + clearCachedApkIfNeededAndFinish(); } }) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Log.i(TAG, "Canceling installation"); - finish(); + clearCachedApkIfNeededAndFinish(); } }) .setOnCancelListener(this) @@ -370,14 +374,27 @@ public class InstallAppProgress extends Activity implements View.OnClickListener if (mAppInfo.packageName != null) { Log.i(TAG, "Finished installing "+mAppInfo.packageName); } - finish(); + clearCachedApkIfNeededAndFinish(); } else if(v == mLaunchButton) { startActivity(mLaunchIntent); - finish(); + clearCachedApkIfNeededAndFinish(); } } public void onCancel(DialogInterface dialog) { + clearCachedApkIfNeededAndFinish(); + } + + private void clearCachedApkIfNeededAndFinish() { + // If we are installing from a content:// the apk is copied in the cache + // dir and passed in here. As we aren't started for a result because our + // caller needs to be able to forward the result, here we make sure the + // staging file in the cache dir is removed. + if ("file".equals(mPackageURI.getScheme()) && mPackageURI.getPath() != null + && mPackageURI.getPath().startsWith(getCacheDir().toString())) { + File file = new File(mPackageURI.getPath()); + file.delete(); + } finish(); } } diff --git a/src/com/android/packageinstaller/PackageInstallerActivity.java b/src/com/android/packageinstaller/PackageInstallerActivity.java index ab4c6045..cbb9f646 100644 --- a/src/com/android/packageinstaller/PackageInstallerActivity.java +++ b/src/com/android/packageinstaller/PackageInstallerActivity.java @@ -72,7 +72,6 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen private static final String TAG = "PackageInstaller"; private static final int REQUEST_ENABLE_UNKNOWN_SOURCES = 1; - private static final int REQUEST_INSTALL_PACKAGE = 2; private static final String SCHEME_FILE = "file"; private static final String SCHEME_CONTENT = "content"; @@ -324,7 +323,6 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen if (request == REQUEST_ENABLE_UNKNOWN_SOURCES && result == RESULT_OK) { initiateInstall(); } - clearCachedApkIfNeededAndFinish(); } private boolean isInstallRequestFromUnknownSource(Intent intent) { @@ -684,7 +682,8 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); } if(localLOGV) Log.i(TAG, "downloaded app uri="+mPackageURI); - startActivityForResult(newIntent, REQUEST_INSTALL_PACKAGE); + startActivity(newIntent); + finish(); } private void clearCachedApkIfNeededAndFinish() { |