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

Commit 5aa5f494 authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Android (Google) Code Review
Browse files

Merge "Progress toward installer public API: callbacks."

parents 8ee8d882 bb580670
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -130,6 +130,7 @@ LOCAL_SRC_FILES += \
	core/java/android/content/pm/IPackageInstallObserver.aidl \
	core/java/android/content/pm/IPackageInstallObserver2.aidl \
	core/java/android/content/pm/IPackageInstaller.aidl \
	core/java/android/content/pm/IPackageInstallerObserver.aidl \
	core/java/android/content/pm/IPackageInstallerSession.aidl \
	core/java/android/content/pm/IPackageManager.aidl \
	core/java/android/content/pm/IPackageMoveObserver.aidl \
+36 −10
Original line number Diff line number Diff line
@@ -27,10 +27,11 @@ import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageDeleteObserver;
import android.content.pm.IPackageInstaller;
import android.content.pm.IPackageManager;
import android.content.pm.InstallSessionParams;
import android.content.pm.InstrumentationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageInstallerParams;
import android.content.pm.PackageInstaller.InstallResultCallback;
import android.content.pm.PackageItemInfo;
import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice;
@@ -768,6 +769,31 @@ public final class Pm {
        }
    }

    class LocalInstallResultCallback extends InstallResultCallback {
        boolean finished;
        boolean success;
        String msg;

        private void setResult(boolean success, String msg) {
            synchronized (this) {
                this.finished = true;
                this.success = success;
                this.msg = msg;
                notifyAll();
            }
        }

        @Override
        public void onSuccess() {
            setResult(true, null);
        }

        @Override
        public void onFailure(String msg) {
            setResult(false, msg);
        }
    }

    /**
     * Converts a failure code into a string by using reflection to find a matching constant
     * in PackageManager.
@@ -989,7 +1015,7 @@ public final class Pm {
    private void runInstallCreate() throws RemoteException {
        String installerPackageName = null;

        final PackageInstallerParams params = new PackageInstallerParams();
        final InstallSessionParams params = new InstallSessionParams();
        params.installFlags = PackageManager.INSTALL_ALL_USERS;
        params.fullInstall = true;

@@ -1084,21 +1110,21 @@ public final class Pm {
        try {
            session = new PackageInstaller.Session(mInstaller.openSession(sessionId));

            final LocalPackageInstallObserver observer = new LocalPackageInstallObserver();
            session.install(observer);
            final LocalInstallResultCallback callback = new LocalInstallResultCallback();
            session.install(callback);

            synchronized (observer) {
                while (!observer.finished) {
            synchronized (callback) {
                while (!callback.finished) {
                    try {
                        observer.wait();
                        callback.wait();
                    } catch (InterruptedException e) {
                    }
                }
                if (observer.result != PackageManager.INSTALL_SUCCEEDED) {
                    throw new IllegalStateException(
                            "Failure [" + installFailureToString(observer) + "]");
                if (!callback.success) {
                    throw new IllegalStateException("Failure [" + callback.msg + "]");
                }
            }

            System.out.println("Success");
        } finally {
            IoUtils.closeQuietly(session);
+8 −2
Original line number Diff line number Diff line
@@ -23,13 +23,14 @@ import android.os.Bundle;
public class PackageInstallObserver {
    private final IPackageInstallObserver2.Stub mBinder = new IPackageInstallObserver2.Stub() {
        @Override
        public void packageInstalled(String basePackageName, Bundle extras, int returnCode) {
        public void packageInstalled(String basePackageName, Bundle extras, int returnCode,
                String msg) {
            PackageInstallObserver.this.packageInstalled(basePackageName, extras, returnCode);
        }
    };

    /** {@hide} */
    public IPackageInstallObserver2.Stub getBinder() {
    public IPackageInstallObserver2 getBinder() {
        return mBinder;
    }

@@ -50,4 +51,9 @@ public class PackageInstallObserver {
     */
    public void packageInstalled(String basePackageName, Bundle extras, int returnCode) {
    }

    public void packageInstalled(String basePackageName, Bundle extras, int returnCode,
            String msg) {
        packageInstalled(basePackageName, extras, returnCode);
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ public class PackageUninstallObserver {
    };

    /** {@hide} */
    public IPackageDeleteObserver.Stub getBinder() {
    public IPackageDeleteObserver getBinder() {
        return mBinder;
    }

+1 −1
Original line number Diff line number Diff line
@@ -40,5 +40,5 @@ oneway interface IPackageInstallObserver2 {
     * </tr>
     * </table>
     */
    void packageInstalled(String basePackageName, in Bundle extras, int returnCode);
    void packageInstalled(String basePackageName, in Bundle extras, int returnCode, String msg);
}
Loading