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

Commit cfb4c353 authored by Sumedh Sen's avatar Sumedh Sen
Browse files

Remove dependency on IPackageDeleteObserver2

Create a wrapper class arround IPackageDeleteObserver2 to send uninstall status to uninstallers.
This will remove dependency of PIA on a hidden API.

Bug: 241139604
Test: atest PackageManagerServiceUnitTests:UninstallCompleteCallbackTest
Test: atest CtsPackageUninstallTestCases
Change-Id: If6d665b9d3dd6afeb8a74401d367b7f8447daf4b
parent eb81a4db
Loading
Loading
Loading
Loading
+4 −11
Original line number Diff line number Diff line
@@ -25,14 +25,11 @@ import android.app.FragmentTransaction;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageDeleteObserver2;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
import android.content.pm.VersionedPackage;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Process;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.Log;
@@ -57,7 +54,7 @@ public class UninstallUninstalling extends Activity implements

    private int mUninstallId;
    private ApplicationInfo mAppInfo;
    private IBinder mCallback;
    private PackageManager.UninstallCompleteCallback mCallback;
    private boolean mReturnResult;
    private String mLabel;

@@ -68,7 +65,8 @@ public class UninstallUninstalling extends Activity implements
        setFinishOnTouchOutside(false);

        mAppInfo = getIntent().getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
        mCallback = getIntent().getIBinderExtra(PackageInstaller.EXTRA_CALLBACK);
        mCallback = getIntent().getParcelableExtra(PackageInstaller.EXTRA_CALLBACK,
                PackageManager.UninstallCompleteCallback.class);
        mReturnResult = getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false);
        mLabel = getIntent().getStringExtra(EXTRA_APP_LABEL);

@@ -150,12 +148,7 @@ public class UninstallUninstalling extends Activity implements
    public void onResult(int status, int legacyStatus, @Nullable String message, int serviceId) {
        if (mCallback != null) {
            // The caller will be informed about the result via a callback
            final IPackageDeleteObserver2 observer = IPackageDeleteObserver2.Stub
                    .asInterface(mCallback);
            try {
                observer.onPackageDeleted(mAppInfo.packageName, legacyStatus, message);
            } catch (RemoteException ignored) {
            }
            mCallback.onUninstallComplete(mAppInfo.packageName, legacyStatus, message);
        } else if (mReturnResult) {
            // The caller will be informed about the result and might decide to display it
            Intent result = new Intent();
+5 −13
Original line number Diff line number Diff line
@@ -35,7 +35,6 @@ import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageDeleteObserver2;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
import android.content.pm.VersionedPackage;
@@ -43,9 +42,7 @@ import android.content.res.Configuration;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Process;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.Log;
@@ -76,7 +73,7 @@ public class UninstallerActivity extends Activity {
        public ActivityInfo activityInfo;
        public boolean allUsers;
        public UserHandle user;
        public IBinder callback;
        public PackageManager.UninstallCompleteCallback callback;
    }

    private String mPackageName;
@@ -173,7 +170,8 @@ public class UninstallerActivity extends Activity {
            }
        }

        mDialogInfo.callback = intent.getIBinderExtra(PackageInstaller.EXTRA_CALLBACK);
        mDialogInfo.callback = intent.getParcelableExtra(PackageInstaller.EXTRA_CALLBACK,
                                            PackageManager.UninstallCompleteCallback.class);

        try {
            mDialogInfo.appInfo = pm.getApplicationInfo(mPackageName,
@@ -306,7 +304,6 @@ public class UninstallerActivity extends Activity {
            newIntent.putExtra(UninstallUninstalling.EXTRA_APP_LABEL, label);
            newIntent.putExtra(UninstallUninstalling.EXTRA_KEEP_DATA, keepData);
            newIntent.putExtra(PackageInstaller.EXTRA_CALLBACK, mDialogInfo.callback);

            if (returnResult) {
                newIntent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
            }
@@ -372,13 +369,8 @@ public class UninstallerActivity extends Activity {

    public void dispatchAborted() {
        if (mDialogInfo != null && mDialogInfo.callback != null) {
            final IPackageDeleteObserver2 observer = IPackageDeleteObserver2.Stub.asInterface(
                    mDialogInfo.callback);
            try {
                observer.onPackageDeleted(mPackageName,
            mDialogInfo.callback.onUninstallComplete(mPackageName,
                    PackageManager.DELETE_FAILED_ABORTED, "Cancelled by user");
            } catch (RemoteException ignored) {
            }
        }
    }

+5 −18
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageDeleteObserver2;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
import android.content.pm.VersionedPackage;
@@ -30,10 +29,8 @@ import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Process;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.Log;
@@ -68,7 +65,7 @@ public class UninstallAppProgress extends Activity implements

    private ApplicationInfo mAppInfo;
    private boolean mAllUsers;
    private IBinder mCallback;
    private PackageManager.UninstallCompleteCallback mCallback;

    private volatile int mResultCode = -1;

@@ -122,13 +119,7 @@ public class UninstallAppProgress extends Activity implements
                final String packageName = (String) msg.obj;

                if (mCallback != null) {
                    final IPackageDeleteObserver2 observer = IPackageDeleteObserver2.Stub
                            .asInterface(mCallback);
                    try {
                        observer.onPackageDeleted(mAppInfo.packageName, mResultCode,
                                packageName);
                    } catch (RemoteException ignored) {
                    }
                    mCallback.onUninstallComplete(mAppInfo.packageName, mResultCode, packageName);
                    finish();
                    return;
                }
@@ -252,7 +243,8 @@ public class UninstallAppProgress extends Activity implements

        Intent intent = getIntent();
        mAppInfo = intent.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
        mCallback = intent.getIBinderExtra(PackageInstaller.EXTRA_CALLBACK);
        mCallback = intent.getParcelableExtra(PackageInstaller.EXTRA_CALLBACK,
                PackageManager.UninstallCompleteCallback.class);

        // This currently does not support going through a onDestroy->onCreate cycle. Hence if that
        // happened, just fail the operation for mysterious reasons.
@@ -260,12 +252,7 @@ public class UninstallAppProgress extends Activity implements
            mResultCode = PackageManager.DELETE_FAILED_INTERNAL_ERROR;

            if (mCallback != null) {
                final IPackageDeleteObserver2 observer = IPackageDeleteObserver2.Stub
                        .asInterface(mCallback);
                try {
                    observer.onPackageDeleted(mAppInfo.packageName, mResultCode, null);
                } catch (RemoteException ignored) {
                }
                mCallback.onUninstallComplete(mAppInfo.packageName, mResultCode, null);
                finish();
            } else {
                setResultAndFinish();
+2 −1
Original line number Diff line number Diff line
@@ -1211,7 +1211,8 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
            // Take a short detour to confirm with user
            final Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE);
            intent.setData(Uri.fromParts("package", versionedPackage.getPackageName(), null));
            intent.putExtra(PackageInstaller.EXTRA_CALLBACK, adapter.getBinder().asBinder());
            intent.putExtra(PackageInstaller.EXTRA_CALLBACK,
                    new PackageManager.UninstallCompleteCallback(adapter.getBinder().asBinder()));
            adapter.onUserActionRequired(intent);
        }
    }