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

Commit 97d0e8f3 authored by Alex Kershaw's avatar Alex Kershaw
Browse files

Managed system update API council changes.

Clarify the errorMessage Javadoc and rename InstallUpdateCallback.

Bug: 123697817
Test: Not applicable
Change-Id: I257b6353310e56bf1877a6f97bf1977ef5962af9
parent fc6e5674
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -6684,7 +6684,7 @@ package android.app.admin {
    method public boolean installKeyPair(@Nullable android.content.ComponentName, @NonNull java.security.PrivateKey, @NonNull java.security.cert.Certificate, @NonNull String);
    method public boolean installKeyPair(@Nullable android.content.ComponentName, @NonNull java.security.PrivateKey, @NonNull java.security.cert.Certificate[], @NonNull String, boolean);
    method public boolean installKeyPair(@Nullable android.content.ComponentName, @NonNull java.security.PrivateKey, @NonNull java.security.cert.Certificate[], @NonNull String, int);
    method public void installSystemUpdate(@NonNull android.content.ComponentName, @NonNull android.net.Uri, @NonNull java.util.concurrent.Executor, @NonNull android.app.admin.DevicePolicyManager.InstallUpdateCallback);
    method public void installSystemUpdate(@NonNull android.content.ComponentName, @NonNull android.net.Uri, @NonNull java.util.concurrent.Executor, @NonNull android.app.admin.DevicePolicyManager.InstallSystemUpdateCallback);
    method public boolean isActivePasswordSufficient();
    method public boolean isAdminActive(@NonNull android.content.ComponentName);
    method public boolean isAffiliatedUser();
@@ -6951,8 +6951,8 @@ package android.app.admin {
    field public static final int WIPE_SILENTLY = 8; // 0x8
  }
  public abstract static class DevicePolicyManager.InstallUpdateCallback {
    ctor public DevicePolicyManager.InstallUpdateCallback();
  public abstract static class DevicePolicyManager.InstallSystemUpdateCallback {
    ctor public DevicePolicyManager.InstallSystemUpdateCallback();
    method public void onInstallUpdateError(int, String);
    field public static final int UPDATE_ERROR_BATTERY_LOW = 5; // 0x5
    field public static final int UPDATE_ERROR_FILE_NOT_FOUND = 4; // 0x4
+19 −13
Original line number Diff line number Diff line
@@ -2125,7 +2125,7 @@ public class DevicePolicyManager {
     * Callback used in {@link #installSystemUpdate} to indicate that there was an error while
     * trying to install an update.
     */
    public abstract static class InstallUpdateCallback {
    public abstract static class InstallSystemUpdateCallback {
        /** Represents an unknown error while trying to install an update. */
        public static final int UPDATE_ERROR_UNKNOWN = 1;

@@ -2144,7 +2144,12 @@ public class DevicePolicyManager {
        /** Represents the battery being too low to apply an update. */
        public static final int UPDATE_ERROR_BATTERY_LOW = 5;

        /** Method invoked when there was an error while installing an update. */
        /**
         * Method invoked when there was an error while installing an update.
         *
         * <p>The given error message is not intended to be user-facing. It is intended to be
         * reported back to the IT admin to be read.
         */
        public void onInstallUpdateError(
                @InstallUpdateCallbackErrorConstants int errorCode, String errorMessage) {
        }
@@ -2154,11 +2159,11 @@ public class DevicePolicyManager {
     * @hide
     */
    @IntDef(prefix = { "UPDATE_ERROR_" }, value = {
            InstallUpdateCallback.UPDATE_ERROR_UNKNOWN,
            InstallUpdateCallback.UPDATE_ERROR_INCORRECT_OS_VERSION,
            InstallUpdateCallback.UPDATE_ERROR_UPDATE_FILE_INVALID,
            InstallUpdateCallback.UPDATE_ERROR_FILE_NOT_FOUND,
            InstallUpdateCallback.UPDATE_ERROR_BATTERY_LOW
            InstallSystemUpdateCallback.UPDATE_ERROR_UNKNOWN,
            InstallSystemUpdateCallback.UPDATE_ERROR_INCORRECT_OS_VERSION,
            InstallSystemUpdateCallback.UPDATE_ERROR_UPDATE_FILE_INVALID,
            InstallSystemUpdateCallback.UPDATE_ERROR_FILE_NOT_FOUND,
            InstallSystemUpdateCallback.UPDATE_ERROR_BATTERY_LOW
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface InstallUpdateCallbackErrorConstants {}
@@ -10431,9 +10436,9 @@ public class DevicePolicyManager {
     * doesn't necessarily mean that the update has been applied successfully. The caller should
     * additionally check the system version with {@link android.os.Build#FINGERPRINT} or {@link
     * android.os.Build.VERSION}. If an error occurs during processing the OTA before the reboot,
     * the caller will be notified by {@link InstallUpdateCallback}. If device does not have
     * the caller will be notified by {@link InstallSystemUpdateCallback}. If device does not have
     * sufficient battery level, the installation will fail with error {@link
     * InstallUpdateCallback#UPDATE_ERROR_BATTERY_LOW}.
     * InstallSystemUpdateCallback#UPDATE_ERROR_BATTERY_LOW}.
     *
     * @param admin The {@link DeviceAdminReceiver} that this request is associated with.
     * @param updateFilePath An Uri of the file that contains the update. The file should be
@@ -10445,7 +10450,7 @@ public class DevicePolicyManager {
    public void installSystemUpdate(
            @NonNull ComponentName admin, @NonNull Uri updateFilePath,
            @NonNull @CallbackExecutor Executor executor,
            @NonNull InstallUpdateCallback callback) {
            @NonNull InstallSystemUpdateCallback callback) {
        throwIfParentInstance("installUpdate");
        if (mService == null) {
            return;
@@ -10465,19 +10470,20 @@ public class DevicePolicyManager {
        } catch (FileNotFoundException e) {
            Log.w(TAG, e);
            executeCallback(
                    InstallUpdateCallback.UPDATE_ERROR_FILE_NOT_FOUND, Log.getStackTraceString(e),
                    InstallSystemUpdateCallback.UPDATE_ERROR_FILE_NOT_FOUND,
                    Log.getStackTraceString(e),
                    executor, callback);
        } catch (IOException e) {
            Log.w(TAG, e);
            executeCallback(
                    InstallUpdateCallback.UPDATE_ERROR_UNKNOWN, Log.getStackTraceString(e),
                    InstallSystemUpdateCallback.UPDATE_ERROR_UNKNOWN, Log.getStackTraceString(e),
                    executor, callback);
        }
    }

    private void executeCallback(int errorCode, String errorMessage,
            @NonNull @CallbackExecutor Executor executor,
            @NonNull InstallUpdateCallback callback) {
            @NonNull InstallSystemUpdateCallback callback) {
        executor.execute(() -> callback.onInstallUpdateError(errorCode, errorMessage));
    }

+20 −17
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@

package com.android.server.devicepolicy;

import android.app.admin.DevicePolicyManager.InstallUpdateCallback;
import android.app.admin.DevicePolicyManager.InstallSystemUpdateCallback;
import android.app.admin.StartInstallingUpdateCallback;
import android.content.Context;
import android.os.ParcelFileDescriptor;
@@ -62,41 +62,43 @@ class AbUpdateInstaller extends UpdateInstaller {

    private static Map<Integer, Integer> buildErrorCodesMap() {
        Map<Integer, Integer> map = new HashMap<>();
        map.put(UpdateEngine.ErrorCodeConstants.ERROR, InstallUpdateCallback.UPDATE_ERROR_UNKNOWN);
        map.put(
                UpdateEngine.ErrorCodeConstants.ERROR,
                InstallSystemUpdateCallback.UPDATE_ERROR_UNKNOWN);
        map.put(
                DOWNLOAD_STATE_INITIALIZATION_ERROR,
                InstallUpdateCallback.UPDATE_ERROR_INCORRECT_OS_VERSION);
                InstallSystemUpdateCallback.UPDATE_ERROR_INCORRECT_OS_VERSION);
        map.put(
                UpdateEngine.ErrorCodeConstants.PAYLOAD_TIMESTAMP_ERROR,
                InstallUpdateCallback.UPDATE_ERROR_INCORRECT_OS_VERSION);
                InstallSystemUpdateCallback.UPDATE_ERROR_INCORRECT_OS_VERSION);

        // Error constants corresponding to errors related to bad update file.
        map.put(
                UpdateEngine.ErrorCodeConstants.DOWNLOAD_PAYLOAD_VERIFICATION_ERROR,
                InstallUpdateCallback.UPDATE_ERROR_UPDATE_FILE_INVALID);
                InstallSystemUpdateCallback.UPDATE_ERROR_UPDATE_FILE_INVALID);
        map.put(
                UpdateEngine.ErrorCodeConstants.PAYLOAD_SIZE_MISMATCH_ERROR,
                InstallUpdateCallback.UPDATE_ERROR_UPDATE_FILE_INVALID);
                InstallSystemUpdateCallback.UPDATE_ERROR_UPDATE_FILE_INVALID);
        map.put(
                UpdateEngine.ErrorCodeConstants.PAYLOAD_MISMATCHED_TYPE_ERROR,
                InstallUpdateCallback.UPDATE_ERROR_UPDATE_FILE_INVALID);
                InstallSystemUpdateCallback.UPDATE_ERROR_UPDATE_FILE_INVALID);
        map.put(
                UpdateEngine.ErrorCodeConstants.PAYLOAD_HASH_MISMATCH_ERROR,
                InstallUpdateCallback.UPDATE_ERROR_UPDATE_FILE_INVALID);
                InstallSystemUpdateCallback.UPDATE_ERROR_UPDATE_FILE_INVALID);

        // Error constants corresponding to errors related to devices bad state.
        map.put(
                UpdateEngine.ErrorCodeConstants.POST_INSTALL_RUNNER_ERROR,
                InstallUpdateCallback.UPDATE_ERROR_UNKNOWN);
                InstallSystemUpdateCallback.UPDATE_ERROR_UNKNOWN);
        map.put(
                UpdateEngine.ErrorCodeConstants.INSTALL_DEVICE_OPEN_ERROR,
                InstallUpdateCallback.UPDATE_ERROR_UNKNOWN);
                InstallSystemUpdateCallback.UPDATE_ERROR_UNKNOWN);
        map.put(
                UpdateEngine.ErrorCodeConstants.DOWNLOAD_TRANSFER_ERROR,
                InstallUpdateCallback.UPDATE_ERROR_UNKNOWN);
                InstallSystemUpdateCallback.UPDATE_ERROR_UNKNOWN);
        map.put(
                UpdateEngine.ErrorCodeConstants.UPDATED_BUT_NOT_ACTIVE,
                InstallUpdateCallback.UPDATE_ERROR_UNKNOWN);
                InstallSystemUpdateCallback.UPDATE_ERROR_UNKNOWN);

        return map;
    }
@@ -153,12 +155,13 @@ class AbUpdateInstaller extends UpdateInstaller {
        } catch (ZipException e) {
            Log.w(UpdateInstaller.TAG, e);
            notifyCallbackOnError(
                    InstallUpdateCallback.UPDATE_ERROR_UPDATE_FILE_INVALID,
                    InstallSystemUpdateCallback.UPDATE_ERROR_UPDATE_FILE_INVALID,
                    Log.getStackTraceString(e));
        } catch (IOException e) {
            Log.w(UpdateInstaller.TAG, e);
            notifyCallbackOnError(
                    InstallUpdateCallback.UPDATE_ERROR_UNKNOWN, Log.getStackTraceString(e));
                    InstallSystemUpdateCallback.UPDATE_ERROR_UNKNOWN,
                    Log.getStackTraceString(e));
        }
    }

@@ -185,7 +188,7 @@ class AbUpdateInstaller extends UpdateInstaller {
        if (mSizeForUpdate == -1) {
            Log.w(UpdateInstaller.TAG, "Failed to find payload entry in the given package.");
            notifyCallbackOnError(
                    InstallUpdateCallback.UPDATE_ERROR_UPDATE_FILE_INVALID,
                    InstallSystemUpdateCallback.UPDATE_ERROR_UPDATE_FILE_INVALID,
                    "Failed to find payload entry in the given package.");
            return;
        }
@@ -210,7 +213,7 @@ class AbUpdateInstaller extends UpdateInstaller {
                if (entry.getMethod() != ZipEntry.STORED) {
                    Log.w(UpdateInstaller.TAG, "Invalid compression method.");
                    notifyCallbackOnError(
                            InstallUpdateCallback.UPDATE_ERROR_UPDATE_FILE_INVALID,
                            InstallSystemUpdateCallback.UPDATE_ERROR_UPDATE_FILE_INVALID,
                            "Invalid compression method.");
                    return false;
                }
@@ -263,7 +266,7 @@ class AbUpdateInstaller extends UpdateInstaller {
            } else {
                mUpdateInstaller.notifyCallbackOnError(
                        errorCodesMap.getOrDefault(
                                errorCode, InstallUpdateCallback.UPDATE_ERROR_UNKNOWN),
                                errorCode, InstallSystemUpdateCallback.UPDATE_ERROR_UNKNOWN),
                        errorStringsMap.getOrDefault(errorCode, UNKNOWN_ERROR + errorCode));
            }
        }
+2 −2
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@

package com.android.server.devicepolicy;

import android.app.admin.DevicePolicyManager;
import android.app.admin.DevicePolicyManager.InstallSystemUpdateCallback;
import android.app.admin.StartInstallingUpdateCallback;
import android.content.Context;
import android.os.ParcelFileDescriptor;
@@ -45,7 +45,7 @@ class NonAbUpdateInstaller extends UpdateInstaller {
        } catch (IOException e) {
            Log.w(TAG, "IO error while trying to install non AB update.", e);
            notifyCallbackOnError(
                    DevicePolicyManager.InstallUpdateCallback.UPDATE_ERROR_UNKNOWN,
                    InstallSystemUpdateCallback.UPDATE_ERROR_UNKNOWN,
                    Log.getStackTraceString(e));
        }
    }
+4 −4
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ package com.android.server.devicepolicy;

import android.annotation.Nullable;
import android.app.admin.DevicePolicyEventLogger;
import android.app.admin.DevicePolicyManager;
import android.app.admin.DevicePolicyManager.InstallSystemUpdateCallback;
import android.app.admin.StartInstallingUpdateCallback;
import android.content.Context;
import android.content.Intent;
@@ -66,7 +66,7 @@ abstract class UpdateInstaller {
        mCopiedUpdateFile = null;
        if (!isBatteryLevelSufficient()) {
            notifyCallbackOnError(
                    DevicePolicyManager.InstallUpdateCallback.UPDATE_ERROR_BATTERY_LOW,
                    InstallSystemUpdateCallback.UPDATE_ERROR_BATTERY_LOW,
                    "The battery level must be above "
                            + mConstants.BATTERY_THRESHOLD_NOT_CHARGING + " while not charging or"
                            + "above " + mConstants.BATTERY_THRESHOLD_CHARGING + " while charging");
@@ -76,7 +76,7 @@ abstract class UpdateInstaller {
            mCopiedUpdateFile = copyUpdateFileToDataOtaPackageDir();
            if (mCopiedUpdateFile == null) {
                notifyCallbackOnError(
                        DevicePolicyManager.InstallUpdateCallback.UPDATE_ERROR_UNKNOWN,
                        InstallSystemUpdateCallback.UPDATE_ERROR_UNKNOWN,
                        "Error while copying file.");
                return;
            }
@@ -111,7 +111,7 @@ abstract class UpdateInstaller {
        } catch (IOException e) {
            Log.w(TAG, "Failed to copy update file to OTA directory", e);
            notifyCallbackOnError(
                    DevicePolicyManager.InstallUpdateCallback.UPDATE_ERROR_UNKNOWN,
                    InstallSystemUpdateCallback.UPDATE_ERROR_UNKNOWN,
                    Log.getStackTraceString(e));
            return null;
        }