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

Commit bc40490a authored by Alex Kershaw's avatar Alex Kershaw Committed by Android (Google) Code Review
Browse files

Merge "Managed system update API council changes."

parents 7a8c08a8 97d0e8f3
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;
        }