Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 786cf97b authored by Anthony Hugh's avatar Anthony Hugh Committed by android-build-merger
Browse files

Remove app from "needs permission" state if installation failed

am: 9c78316f

* commit '9c78316f':
  Remove app from "needs permission" state if installation failed
parents 6f8e0b2b 9c78316f
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -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) {
+18 −1
Original line number Diff line number Diff line
@@ -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);
    }
}