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

Commit fbd0e9fa authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Jeff Sharkey
Browse files

Surface user action events when un/installing.

This will be used shortly to connect up with permissions
confirmation UI.

Bug: 16515814
Change-Id: If28cecc28549900d960ac107a1fba0b10ce5bd7b
parent 905857f1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -128,6 +128,7 @@ LOCAL_SRC_FILES += \
	core/java/android/content/pm/IOnAppsChangedListener.aidl \
	core/java/android/content/pm/IPackageDataObserver.aidl \
	core/java/android/content/pm/IPackageDeleteObserver.aidl \
	core/java/android/content/pm/IPackageDeleteObserver2.aidl \
	core/java/android/content/pm/IPackageInstallObserver.aidl \
	core/java/android/content/pm/IPackageInstallObserver2.aidl \
	core/java/android/content/pm/IPackageInstaller.aidl \
+2 −0
Original line number Diff line number Diff line
@@ -8673,6 +8673,7 @@ package android.content.pm {
    ctor public PackageInstaller.CommitCallback();
    method public abstract void onFailure(int, java.lang.String, android.os.Bundle);
    method public abstract void onSuccess();
    method public abstract void onUserActionRequired(android.content.Intent);
    field public static final java.lang.String EXTRA_PACKAGE_NAME = "android.content.pm.extra.PACKAGE_NAME";
    field public static final int FAILURE_CONFLICT = 2; // 0x2
    field public static final int FAILURE_INCOMPATIBLE = 4; // 0x4
@@ -8705,6 +8706,7 @@ package android.content.pm {
    ctor public PackageInstaller.UninstallCallback();
    method public abstract void onFailure(java.lang.String);
    method public abstract void onSuccess();
    method public abstract void onUserActionRequired(android.content.Intent);
  }
  public class PackageItemInfo {
+13 −6
Original line number Diff line number Diff line
@@ -19,12 +19,13 @@ package com.android.commands.pm;
import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.app.IActivityManager;
import android.app.PackageDeleteObserver;
import android.app.PackageInstallObserver;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.FeatureInfo;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageDeleteObserver;
import android.content.pm.IPackageInstaller;
import android.content.pm.IPackageManager;
import android.content.pm.InstallSessionInfo;
@@ -760,7 +761,7 @@ public final class Pm {
        String extraPackage;

        @Override
        public void packageInstalled(String name, Bundle extras, int status) {
        public void onPackageInstalled(String name, int status, String msg, Bundle extras) {
            synchronized (this) {
                finished = true;
                result = status;
@@ -789,6 +790,11 @@ public final class Pm {
            }
        }

        @Override
        public void onUserActionRequired(Intent intent) {
            setResult(false, "Unexepected user action required!");
        }

        @Override
        public void onSuccess() {
            setResult(true, null);
@@ -1268,11 +1274,12 @@ public final class Pm {
        }
    }

    class PackageDeleteObserver extends IPackageDeleteObserver.Stub {
    class LocalPackageDeleteObserver extends PackageDeleteObserver {
        boolean finished;
        boolean result;

        public void packageDeleted(String packageName, int returnCode) {
        @Override
        public void onPackageDeleted(String name, int returnCode, String msg) {
            synchronized (this) {
                finished = true;
                result = returnCode == PackageManager.DELETE_SUCCEEDED;
@@ -1346,9 +1353,9 @@ public final class Pm {
    }

    private boolean deletePackage(String packageName, int flags, int userId) {
        PackageDeleteObserver obs = new PackageDeleteObserver();
        LocalPackageDeleteObserver obs = new LocalPackageDeleteObserver();
        try {
            mInstaller.uninstall(packageName, flags, obs, userId);
            mInstaller.uninstall(packageName, flags, obs.getBinder(), userId);

            synchronized (obs) {
                while (!obs.finished) {
+20 −1
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.content.pm.ContainerEncryptionParams;
import android.content.pm.FeatureInfo;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageDeleteObserver;
import android.content.pm.IPackageDeleteObserver2;
import android.content.pm.IPackageInstallObserver;
import android.content.pm.IPackageManager;
import android.content.pm.IPackageMoveObserver;
@@ -1287,6 +1288,7 @@ final class ApplicationPackageManager extends PackageManager {
            // Should never happen!
        }
    }

    @Override
    public void clearApplicationUserData(String packageName,
                                         IPackageDataObserver observer) {
@@ -1661,7 +1663,8 @@ final class ApplicationPackageManager extends PackageManager {
        }

        @Override
        public void packageInstalled(String basePackageName, Bundle extras, int returnCode) {
        public void onPackageInstalled(String basePackageName, int returnCode, String msg,
                Bundle extras) {
            try {
                mLegacy.packageInstalled(basePackageName, returnCode);
            } catch (RemoteException ignored) {
@@ -1669,6 +1672,22 @@ final class ApplicationPackageManager extends PackageManager {
        }
    }

    private static class LegacyPackageDeleteObserver extends PackageDeleteObserver {
        private final IPackageDeleteObserver mLegacy;

        public LegacyPackageDeleteObserver(IPackageDeleteObserver legacy) {
            mLegacy = legacy;
        }

        @Override
        public void onPackageDeleted(String basePackageName, int returnCode, String msg) {
            try {
                mLegacy.packageDeleted(basePackageName, returnCode);
            } catch (RemoteException ignored) {
            }
        }
    }

    private final ContextImpl mContext;
    private final IPackageManager mPM;

+46 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.app;

import android.content.Intent;
import android.content.pm.IPackageDeleteObserver2;

/** {@hide} */
public class PackageDeleteObserver {
    private final IPackageDeleteObserver2.Stub mBinder = new IPackageDeleteObserver2.Stub() {
        @Override
        public void onUserActionRequired(Intent intent) {
            PackageDeleteObserver.this.onUserActionRequired(intent);
        }

        @Override
        public void onPackageDeleted(String basePackageName, int returnCode, String msg) {
            PackageDeleteObserver.this.onPackageDeleted(basePackageName, returnCode, msg);
        }
    };

    /** {@hide} */
    public IPackageDeleteObserver2 getBinder() {
        return mBinder;
    }

    public void onUserActionRequired(Intent intent) {
    }

    public void onPackageDeleted(String basePackageName, int returnCode, String msg) {
    }
}
Loading