summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVinod Krishnan <vinodkrishnan@google.com>2016-07-05 19:02:00 -0700
committerVinod Krishnan <vinodkrishnan@google.com>2016-07-06 14:50:35 -0700
commit3947c8d14e5a3383762a5cf2d029a3327e8c5fde (patch)
tree6b0408bbd1a3a73c29eb21db43639620d2d387a3 /src
parent8321e0fdc7562b08b036c07d7576cba0bf3e644f (diff)
downloadandroid_packages_apps_PackageInstaller-3947c8d14e5a3383762a5cf2d029a3327e8c5fde.tar.gz
android_packages_apps_PackageInstaller-3947c8d14e5a3383762a5cf2d029a3327e8c5fde.tar.bz2
android_packages_apps_PackageInstaller-3947c8d14e5a3383762a5cf2d029a3327e8c5fde.zip
Do not allow downgrades of embedded microapps
- flag is passed in from https://critique.corp.google.com/#review/126666577 Bug: 29641183 Change-Id: I1becbb446d824331430eb37d99bdbc7a36dd13db
Diffstat (limited to 'src')
-rw-r--r--src/com/android/packageinstaller/wear/WearPackageArgs.java6
-rw-r--r--src/com/android/packageinstaller/wear/WearPackageInstallerService.java18
2 files changed, 20 insertions, 4 deletions
diff --git a/src/com/android/packageinstaller/wear/WearPackageArgs.java b/src/com/android/packageinstaller/wear/WearPackageArgs.java
index da49192a..2c289b2a 100644
--- a/src/com/android/packageinstaller/wear/WearPackageArgs.java
+++ b/src/com/android/packageinstaller/wear/WearPackageArgs.java
@@ -45,6 +45,8 @@ public class WearPackageArgs {
"com.google.android.clockwork.EXTRA_KEY_COMPANION_DEVICE_VERSION";
private static final String KEY_SHOULD_CHECK_GMS_DEPENDENCY =
"com.google.android.clockwork.EXTRA_KEY_SHOULD_CHECK_GMS_DEPENDENCY";
+ private static final String KEY_SKIP_IF_LOWER_VERSION =
+ "com.google.android.clockwork.EXTRA_SKIP_IF_LOWER_VERSION";
public static String getPackageName(Bundle b) {
return b.getString(KEY_PACKAGE_NAME);
@@ -87,6 +89,10 @@ public class WearPackageArgs {
return b.getInt(KEY_START_ID);
}
+ public static boolean skipIfLowerVersion(Bundle b) {
+ return b.getBoolean(KEY_SKIP_IF_LOWER_VERSION, false);
+ }
+
public static Bundle setStartId(Bundle b, int startId) {
b.putInt(KEY_START_ID, startId);
return b;
diff --git a/src/com/android/packageinstaller/wear/WearPackageInstallerService.java b/src/com/android/packageinstaller/wear/WearPackageInstallerService.java
index 22e8fc68..2d4744c2 100644
--- a/src/com/android/packageinstaller/wear/WearPackageInstallerService.java
+++ b/src/com/android/packageinstaller/wear/WearPackageInstallerService.java
@@ -195,13 +195,15 @@ public class WearPackageInstallerService extends Service {
int companionSdkVersion = WearPackageArgs.getCompanionSdkVersion(argsBundle);
int companionDeviceVersion = WearPackageArgs.getCompanionDeviceVersion(argsBundle);
String compressionAlg = WearPackageArgs.getCompressionAlg(argsBundle);
+ boolean skipIfLowerVersion = WearPackageArgs.skipIfLowerVersion(argsBundle);
if (Log.isLoggable(TAG, Log.DEBUG)) {
Log.d(TAG, "Installing package: " + packageName + ", assetUri: " + assetUri +
",permUri: " + permUri + ", startId: " + startId + ", checkPerms: " +
checkPerms + ", skipIfSameVersion: " + skipIfSameVersion +
", compressionAlg: " + compressionAlg + ", companionSdkVersion: " +
- companionSdkVersion + ", companionDeviceVersion: " + companionDeviceVersion);
+ companionSdkVersion + ", companionDeviceVersion: " + companionDeviceVersion +
+ ", skipIfLowerVersion: " + skipIfLowerVersion);
}
final PackageManager pm = getPackageManager();
File tempFile = null;
@@ -266,9 +268,17 @@ public class WearPackageInstallerService extends Service {
") is equal to existing app for " + packageName);
}
} else if (existingPkgInfo.versionCode > pkg.mVersionCode) {
- Log.w(TAG, "Version number of new app (" + pkg.mVersionCode +
- ") is lower than existing app ( " + existingPkgInfo.versionCode +
- ") for " + packageName);
+ if (skipIfLowerVersion) {
+ // Starting in Feldspar, we are not going to allow downgrades of any app.
+ Log.w(TAG, "Version number of new app (" + pkg.mVersionCode +
+ ") is lower than existing app ( " + existingPkgInfo.versionCode +
+ ") for " + packageName + "; not installing due to versionCheck");
+ return;
+ } else {
+ Log.w(TAG, "Version number of new app (" + pkg.mVersionCode +
+ ") is lower than existing app ( " + existingPkgInfo.versionCode +
+ ") for " + packageName);
+ }
}
// Following the Android Phone model, we should only check for permissions for any