diff options
author | Anthony Hugh <ahugh@google.com> | 2015-11-11 15:06:17 -0800 |
---|---|---|
committer | Anthony Hugh <ahugh@google.com> | 2015-11-16 13:08:33 -0800 |
commit | 9c78316fe6baa4f7fd7d5108349ecf8a2532b047 (patch) | |
tree | bb6c4f49183ae800d830f17682cf72e7e8ed0b14 | |
parent | 012a557f593bd2862756839eeade4b892b05422e (diff) | |
download | android_packages_apps_PackageInstaller-9c78316fe6baa4f7fd7d5108349ecf8a2532b047.tar.gz android_packages_apps_PackageInstaller-9c78316fe6baa4f7fd7d5108349ecf8a2532b047.tar.bz2 android_packages_apps_PackageInstaller-9c78316fe6baa4f7fd7d5108349ecf8a2532b047.zip |
Remove app from "needs permission" state if installation failed
This adds code to remove an app that is in the "needs permission"
state from the ShowPermStore if the app fails to install.
b/25721625 tracks creating a new intent to handle this case for F.
BUG: 25363020
Change-Id: Ifed00024d7e329fb3185a4607a347e972f697fcd
-rw-r--r-- | src/com/android/packageinstaller/wear/WearPackageInstallerService.java | 19 | ||||
-rw-r--r-- | src/com/android/packageinstaller/wear/WearPackageUtil.java | 19 |
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); + } } |