summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/packageinstaller/wear/WearPackageInstallerService.java19
-rw-r--r--src/com/android/packageinstaller/wear/WearPackageUtil.java19
2 files changed, 31 insertions, 7 deletions
diff --git a/src/com/android/packageinstaller/wear/WearPackageInstallerService.java b/src/com/android/packageinstaller/wear/WearPackageInstallerService.java
index d57236e1..6dc5aa70 100644
--- a/src/com/android/packageinstaller/wear/WearPackageInstallerService.java
+++ b/src/com/android/packageinstaller/wear/WearPackageInstallerService.java
@@ -337,7 +337,8 @@ public class WearPackageInstallerService extends Service {
// Finally install the package.
pm.installPackage(Uri.fromFile(tempFile),
- new PackageInstallObserver(this, lock, startId), installFlags, packageName);
+ new PackageInstallObserver(this, lock, startId, packageName),
+ installFlags, packageName);
messageSent = true;
Log.i(TAG, "Sent installation request for " + packageName);
} catch (FileNotFoundException e) {
@@ -575,20 +576,26 @@ public class WearPackageInstallerService extends Service {
private Context mContext;
private PowerManager.WakeLock mWakeLock;
private int mStartId;
+ private String mApplicationPackageName;
private PackageInstallObserver(Context context, PowerManager.WakeLock wakeLock,
- int startId) {
+ int startId, String applicationPackageName) {
mContext = context;
mWakeLock = wakeLock;
mStartId = startId;
+ mApplicationPackageName = applicationPackageName;
}
public void packageInstalled(String packageName, int returnCode) {
- if (returnCode >= 0) {
- Log.i(TAG, "Package " + packageName + " was installed.");
- } else {
- Log.e(TAG, "Package install failed " + packageName + ", returnCode " + returnCode);
+ // If installation failed, bail out and remove the ShowPermsStore entry
+ if (returnCode < 0) {
+ Log.e(TAG, "Package install failed " + mApplicationPackageName
+ + ", returnCode " + returnCode);
+ WearPackageUtil.removeFromPermStore(mContext, mApplicationPackageName);
+ return;
}
+ Log.i(TAG, "Package " + packageName + " was installed.");
+
// Delete tempFile from the file system.
File tempFile = WearPackageUtil.getTemporaryFile(mContext, packageName);
if (tempFile != null) {
diff --git a/src/com/android/packageinstaller/wear/WearPackageUtil.java b/src/com/android/packageinstaller/wear/WearPackageUtil.java
index dc420757..688d6167 100644
--- a/src/com/android/packageinstaller/wear/WearPackageUtil.java
+++ b/src/com/android/packageinstaller/wear/WearPackageUtil.java
@@ -17,9 +17,9 @@
package com.android.packageinstaller.wear;
import android.annotation.Nullable;
+import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.PackageManager;
import android.content.pm.PackageParser;
import android.os.ParcelFileDescriptor;
import android.system.ErrnoException;
@@ -42,6 +42,12 @@ public class WearPackageUtil {
private static final String COMPRESSION_LZMA = "lzma";
private static final String COMPRESSION_XZ = "xz";
+ private static final String SHOW_PERMS_SERVICE_PKG_NAME = "com.google.android.wearable.app";
+ private static final String SHOW_PERMS_SERVICE_CLASS_NAME =
+ "com.google.android.clockwork.packagemanager.ShowPermsService";
+ private static final String EXTRA_PACKAGE_NAME
+ = "com.google.android.clockwork.EXTRA_PACKAGE_NAME";
+
public static File getTemporaryFile(Context context, String packageName) {
try {
File newFileDir = new File(context.getFilesDir(), "tmp");
@@ -147,4 +153,15 @@ public class WearPackageUtil {
}
return false;
}
+
+ public static void removeFromPermStore(Context context, String wearablePackageName) {
+ Intent newIntent = new Intent()
+ .setComponent(new ComponentName(
+ SHOW_PERMS_SERVICE_PKG_NAME, SHOW_PERMS_SERVICE_CLASS_NAME))
+ .setAction(Intent.ACTION_UNINSTALL_PACKAGE);
+ newIntent.putExtra(EXTRA_PACKAGE_NAME, wearablePackageName);
+ Log.i(TAG, "Sending removeFromPermStore to ShowPermsService " + newIntent
+ + " for " + wearablePackageName);
+ context.startService(newIntent);
+ }
}