summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip P. Moltmann <moltmann@google.com>2019-11-06 11:51:03 -0800
committerandroid-build-merger <android-build-merger@google.com>2019-11-06 11:51:03 -0800
commitd8b1a3522f6c2a3d455e6f15020aebc9ebe4c033 (patch)
treee4191fcdbd76b74da834280081fa12fbd609aa2b
parent74c6bafea170f238a7e35178c4175c06e2ae3ac0 (diff)
parentcede54cce10db0e3a3a00a7a2617a37df1553146 (diff)
downloadandroid_packages_apps_PackageInstaller-d8b1a3522f6c2a3d455e6f15020aebc9ebe4c033.tar.gz
android_packages_apps_PackageInstaller-d8b1a3522f6c2a3d455e6f15020aebc9ebe4c033.tar.bz2
android_packages_apps_PackageInstaller-d8b1a3522f6c2a3d455e6f15020aebc9ebe4c033.zip
Always copy file before parsing it for installing
am: cede54cce1 Change-Id: Ief5f92017590a69a70a2192e60298bc49488c2cd
-rw-r--r--src/com/android/packageinstaller/InstallStart.java18
-rw-r--r--src/com/android/packageinstaller/PackageInstallerActivity.java11
2 files changed, 13 insertions, 16 deletions
diff --git a/src/com/android/packageinstaller/InstallStart.java b/src/com/android/packageinstaller/InstallStart.java
index 1eb6de80..fa118534 100644
--- a/src/com/android/packageinstaller/InstallStart.java
+++ b/src/com/android/packageinstaller/InstallStart.java
@@ -21,6 +21,7 @@ import android.app.Activity;
import android.app.ActivityManager;
import android.app.AppGlobals;
import android.app.IActivityManager;
+import android.content.ContentResolver;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
@@ -42,7 +43,6 @@ import com.android.internal.annotations.VisibleForTesting;
public class InstallStart extends Activity {
private static final String LOG_TAG = InstallStart.class.getSimpleName();
- private static final String SCHEME_CONTENT = "content";
private static final String DOWNLOADS_AUTHORITY = "downloads";
private IActivityManager mIActivityManager;
private IPackageManager mIPackageManager;
@@ -110,20 +110,20 @@ public class InstallStart extends Activity {
} else {
Uri packageUri = intent.getData();
- if (packageUri == null) {
- // if there's nothing to do, quietly slip into the ether
+ if (packageUri != null && (packageUri.getScheme().equals(ContentResolver.SCHEME_FILE)
+ || packageUri.getScheme().equals(ContentResolver.SCHEME_CONTENT))) {
+ // Copy file to prevent it from being changed underneath this process
+ nextActivity.setClass(this, InstallStaging.class);
+ } else if (packageUri != null && packageUri.getScheme().equals(
+ PackageInstallerActivity.SCHEME_PACKAGE)) {
+ nextActivity.setClass(this, PackageInstallerActivity.class);
+ } else {
Intent result = new Intent();
result.putExtra(Intent.EXTRA_INSTALL_RESULT,
PackageManager.INSTALL_FAILED_INVALID_URI);
setResult(RESULT_FIRST_USER, result);
nextActivity = null;
- } else {
- if (packageUri.getScheme().equals(SCHEME_CONTENT)) {
- nextActivity.setClass(this, InstallStaging.class);
- } else {
- nextActivity.setClass(this, PackageInstallerActivity.class);
- }
}
}
diff --git a/src/com/android/packageinstaller/PackageInstallerActivity.java b/src/com/android/packageinstaller/PackageInstallerActivity.java
index f0e42d72..650ee80c 100644
--- a/src/com/android/packageinstaller/PackageInstallerActivity.java
+++ b/src/com/android/packageinstaller/PackageInstallerActivity.java
@@ -25,6 +25,7 @@ import android.app.DialogFragment;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.ActivityNotFoundException;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@@ -74,8 +75,7 @@ public class PackageInstallerActivity extends OverlayTouchActivity implements On
private static final int REQUEST_TRUST_EXTERNAL_SOURCE = 1;
- private static final String SCHEME_FILE = "file";
- private static final String SCHEME_PACKAGE = "package";
+ static final String SCHEME_PACKAGE = "package";
static final String EXTRA_CALLING_PACKAGE = "EXTRA_CALLING_PACKAGE";
static final String EXTRA_ORIGINAL_SOURCE_INFO = "EXTRA_ORIGINAL_SOURCE_INFO";
@@ -570,7 +570,7 @@ public class PackageInstallerActivity extends OverlayTouchActivity implements On
mPm.getApplicationIcon(mPkgInfo.applicationInfo));
} break;
- case SCHEME_FILE: {
+ case ContentResolver.SCHEME_FILE: {
File sourceFile = new File(packageUri.getPath());
PackageParser.Package parsed = PackageUtil.getPackageInfo(this, sourceFile);
@@ -588,10 +588,7 @@ public class PackageInstallerActivity extends OverlayTouchActivity implements On
} break;
default: {
- Log.w(TAG, "Unsupported scheme " + scheme);
- setPmResult(PackageManager.INSTALL_FAILED_INVALID_URI);
- finish();
- return false;
+ throw new IllegalArgumentException("Unexpected URI scheme " + packageUri);
}
}