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

Commit edad08de authored by Song Chun Fan's avatar Song Chun Fan
Browse files

[ADI][31/N] address API feedback on USER_RESPONSE_* constants

USER_RESPONSE_CANCEL and USER_RESPONSE_OK are pretty much the same from
the perspective of the installer. Thus combining them into a single
constant USER_RESPONSE_ABORT which indicates that the user has confirmed
to not to proceed with the installation because the developer
verification has failed or could not be completed.

FLAG: android.content.pm.verification_service

BUG: 422400021
FIXES: 422400021
BUG: 360129657
Test: CtsRootDeveloperVerificationPrivInstallerTarget36TestCases CtsRootDeveloperVerificationInstallerTarget36TestCases CtsRootDeveloperVerificationPrivInstallerTarget35TestCases CtsRootDeveloperVerificationInstallerTarget35TestCases CtsRootDeveloperVerificationVerifierTestCases

API-Coverage-Bug: 420966373

Change-Id: I1966a8e8e43961d17dd153aaaae1a15d5e4ca76b
parent 94ec75e3
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -4324,11 +4324,10 @@ package android.content.pm {
    field @FlaggedApi("android.content.pm.verification_service") public static final int DEVELOPER_VERIFICATION_POLICY_BLOCK_FAIL_OPEN = 1; // 0x1
    field @FlaggedApi("android.content.pm.verification_service") public static final int DEVELOPER_VERIFICATION_POLICY_BLOCK_FAIL_WARN = 2; // 0x2
    field @FlaggedApi("android.content.pm.verification_service") public static final int DEVELOPER_VERIFICATION_POLICY_NONE = 0; // 0x0
    field @FlaggedApi("android.content.pm.verification_service") public static final int DEVELOPER_VERIFICATION_USER_RESPONSE_CANCEL = 1; // 0x1
    field @FlaggedApi("android.content.pm.verification_service") public static final int DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT = 1; // 0x1
    field @FlaggedApi("android.content.pm.verification_service") public static final int DEVELOPER_VERIFICATION_USER_RESPONSE_ERROR = 0; // 0x0
    field @FlaggedApi("android.content.pm.verification_service") public static final int DEVELOPER_VERIFICATION_USER_RESPONSE_INSTALL_ANYWAY = 4; // 0x4
    field @FlaggedApi("android.content.pm.verification_service") public static final int DEVELOPER_VERIFICATION_USER_RESPONSE_OK = 2; // 0x2
    field @FlaggedApi("android.content.pm.verification_service") public static final int DEVELOPER_VERIFICATION_USER_RESPONSE_RETRY = 3; // 0x3
    field @FlaggedApi("android.content.pm.verification_service") public static final int DEVELOPER_VERIFICATION_USER_RESPONSE_INSTALL_ANYWAY = 3; // 0x3
    field @FlaggedApi("android.content.pm.verification_service") public static final int DEVELOPER_VERIFICATION_USER_RESPONSE_RETRY = 2; // 0x2
    field public static final String EXTRA_CALLBACK = "android.content.pm.extra.CALLBACK";
    field public static final String EXTRA_DATA_LOADER_TYPE = "android.content.pm.extra.DATA_LOADER_TYPE";
    field @FlaggedApi("android.content.pm.archiving") public static final String EXTRA_DELETE_FLAGS = "android.content.pm.extra.DELETE_FLAGS";
+4 −13
Original line number Diff line number Diff line
@@ -947,22 +947,14 @@ public class PackageInstaller {
     */
    @FlaggedApi(Flags.FLAG_VERIFICATION_SERVICE)
    @SystemApi
    public static final int DEVELOPER_VERIFICATION_USER_RESPONSE_CANCEL = 1;
    /**
     * This indicates that the user has acknowledged that installation cannot be completed due to
     * a failed / incomplete developer verification.
     * @hide
     */
    @FlaggedApi(Flags.FLAG_VERIFICATION_SERVICE)
    @SystemApi
    public static final int DEVELOPER_VERIFICATION_USER_RESPONSE_OK = 2;
    public static final int DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT = 1;
    /**
     * For an incomplete developer verification, the user has asked to retry the verification.
     * @hide
     */
    @FlaggedApi(Flags.FLAG_VERIFICATION_SERVICE)
    @SystemApi
    public static final int DEVELOPER_VERIFICATION_USER_RESPONSE_RETRY = 3;
    public static final int DEVELOPER_VERIFICATION_USER_RESPONSE_RETRY = 2;
    /**
     * For an incomplete developer verification, the user has confirmed proceeding with the
     * installation anyway.
@@ -970,14 +962,13 @@ public class PackageInstaller {
     */
    @FlaggedApi(Flags.FLAG_VERIFICATION_SERVICE)
    @SystemApi
    public static final int DEVELOPER_VERIFICATION_USER_RESPONSE_INSTALL_ANYWAY = 4;
    public static final int DEVELOPER_VERIFICATION_USER_RESPONSE_INSTALL_ANYWAY = 3;
    /**
     * @hide
     */
    @IntDef(value = {
            DEVELOPER_VERIFICATION_USER_RESPONSE_ERROR,
            DEVELOPER_VERIFICATION_USER_RESPONSE_CANCEL,
            DEVELOPER_VERIFICATION_USER_RESPONSE_OK,
            DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT,
            DEVELOPER_VERIFICATION_USER_RESPONSE_RETRY,
            DEVELOPER_VERIFICATION_USER_RESPONSE_INSTALL_ANYWAY,
    })
+6 −7
Original line number Diff line number Diff line
@@ -21,10 +21,9 @@ import static android.content.pm.PackageInstaller.SessionInfo;
import static android.content.pm.PackageInstaller.SessionInfo.INVALID_ID;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_POLICY_BLOCK_FAIL_OPEN;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_POLICY_BLOCK_FAIL_WARN;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_CANCEL;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_ERROR;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_INSTALL_ANYWAY;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_OK;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_RETRY;
import static android.content.pm.PackageInstaller.DeveloperVerificationUserConfirmationInfo.DEVELOPER_VERIFICATION_USER_ACTION_NEEDED_REASON_LITE_VERIFICATION;
import static android.content.pm.PackageInstaller.DeveloperVerificationUserConfirmationInfo.DEVELOPER_VERIFICATION_USER_ACTION_NEEDED_REASON_NETWORK_UNAVAILABLE;
@@ -129,7 +128,7 @@ public class ConfirmDeveloperVerification extends Activity {
                finish();
            }).setNegativeButton(R.string.dont_install, (dialog, which) -> {
                mPackageInstaller.setDeveloperVerificationUserResponse(sessionId,
                        DEVELOPER_VERIFICATION_USER_RESPONSE_CANCEL);
                        DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT);
                finish();
            }).setNeutralButton(R.string.install_anyway, (dialog, which) -> {
                mPackageInstaller.setDeveloperVerificationUserResponse(sessionId,
@@ -140,7 +139,7 @@ public class ConfirmDeveloperVerification extends Activity {
            // only allow retry
            builder.setPositiveButton(R.string.ok, (dialog, which) -> {
                mPackageInstaller.setDeveloperVerificationUserResponse(sessionId,
                        DEVELOPER_VERIFICATION_USER_RESPONSE_OK);
                        PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT);
                finish();
            }).setNegativeButton(R.string.try_again, (dialog, which) -> {
                mPackageInstaller.setDeveloperVerificationUserResponse(sessionId,
@@ -151,7 +150,7 @@ public class ConfirmDeveloperVerification extends Activity {
            // only allow bypass
            builder.setPositiveButton(R.string.dont_install, (dialog, which) -> {
                mPackageInstaller.setDeveloperVerificationUserResponse(sessionId,
                        DEVELOPER_VERIFICATION_USER_RESPONSE_CANCEL);
                        DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT);
                finish();
            }).setNegativeButton(R.string.install_anyway, (dialog, which) -> {
                mPackageInstaller.setDeveloperVerificationUserResponse(sessionId,
@@ -167,7 +166,7 @@ public class ConfirmDeveloperVerification extends Activity {
                            : R.string.ok,
                    (dialog, which) -> {
                        mPackageInstaller.setDeveloperVerificationUserResponse(sessionId,
                                DEVELOPER_VERIFICATION_USER_RESPONSE_OK);
                                PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT);
                        finish();
                    });
        }
@@ -180,7 +179,7 @@ public class ConfirmDeveloperVerification extends Activity {

        mDialog.setOnCancelListener(dialog -> {
            mPackageInstaller.setDeveloperVerificationUserResponse(sessionId,
                    DEVELOPER_VERIFICATION_USER_RESPONSE_CANCEL);
                    DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT);
            finish();
        });

+7 −8
Original line number Diff line number Diff line
@@ -18,13 +18,12 @@ package com.android.packageinstaller.v2.ui.fragments;

import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_POLICY_BLOCK_FAIL_OPEN;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_POLICY_BLOCK_FAIL_WARN;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_CANCEL;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_INSTALL_ANYWAY;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_OK;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_RETRY;
import static android.content.pm.PackageInstaller.DeveloperVerificationUserConfirmationInfo.DEVELOPER_VERIFICATION_USER_ACTION_NEEDED_REASON_DEVELOPER_BLOCKED;
import static android.content.pm.PackageInstaller.DeveloperVerificationUserConfirmationInfo.DEVELOPER_VERIFICATION_USER_ACTION_NEEDED_REASON_LITE_VERIFICATION;
import static android.content.pm.PackageInstaller.DeveloperVerificationUserConfirmationInfo.DEVELOPER_VERIFICATION_USER_ACTION_NEEDED_REASON_NETWORK_UNAVAILABLE;
import static android.content.pm.PackageInstaller.DeveloperVerificationUserConfirmationInfo.DEVELOPER_VERIFICATION_USER_ACTION_NEEDED_REASON_DEVELOPER_BLOCKED;
import static android.content.pm.PackageInstaller.DeveloperVerificationUserConfirmationInfo.DEVELOPER_VERIFICATION_USER_ACTION_NEEDED_REASON_UNKNOWN;

import static com.android.packageinstaller.ConfirmDeveloperVerification.FLAG_VERIFICATION_FAILED_MAY_BYPASS;
@@ -96,7 +95,7 @@ public class VerificationConfirmationFragment extends DialogFragment {
                                    DEVELOPER_VERIFICATION_USER_RESPONSE_RETRY))
                    .setNegativeButton(R.string.dont_install,
                            (dialog, which) -> mInstallActionListener.setVerificationUserResponse(
                                    DEVELOPER_VERIFICATION_USER_RESPONSE_CANCEL))
                                    DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT))
                    .setNeutralButton(R.string.install_anyway,
                            (dialog, which) -> mInstallActionListener.setVerificationUserResponse(
                                    DEVELOPER_VERIFICATION_USER_RESPONSE_INSTALL_ANYWAY));
@@ -104,7 +103,7 @@ public class VerificationConfirmationFragment extends DialogFragment {
            // only allow retry
            builder.setPositiveButton(R.string.ok,
                            (dialog, which) -> mInstallActionListener.setVerificationUserResponse(
                                    DEVELOPER_VERIFICATION_USER_RESPONSE_OK))
                                    DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT))
                    .setNegativeButton(R.string.try_again,
                            (dialog, which) -> mInstallActionListener.setVerificationUserResponse(
                                    DEVELOPER_VERIFICATION_USER_RESPONSE_RETRY));
@@ -112,7 +111,7 @@ public class VerificationConfirmationFragment extends DialogFragment {
            // only allow bypass
            builder.setPositiveButton(R.string.dont_install,
                            (dialog, which) -> mInstallActionListener.setVerificationUserResponse(
                                    DEVELOPER_VERIFICATION_USER_RESPONSE_CANCEL))
                                    DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT))
                    .setNegativeButton(R.string.install_anyway,
                            (dialog, which) -> mInstallActionListener.setVerificationUserResponse(
                                    DEVELOPER_VERIFICATION_USER_RESPONSE_INSTALL_ANYWAY));
@@ -123,11 +122,11 @@ public class VerificationConfirmationFragment extends DialogFragment {
                            == DEVELOPER_VERIFICATION_USER_ACTION_NEEDED_REASON_DEVELOPER_BLOCKED)
                            ? R.string.close : R.string.ok,
                    (dialog, which) -> mInstallActionListener.setVerificationUserResponse(
                            DEVELOPER_VERIFICATION_USER_RESPONSE_OK));
                            DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT));
        }
        builder.setOnCancelListener(dialog ->
                mInstallActionListener.setVerificationUserResponse(
                        DEVELOPER_VERIFICATION_USER_RESPONSE_CANCEL));
                        DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT));

        mDialog = builder.create();
        return mDialog;
+12 −31
Original line number Diff line number Diff line
@@ -26,10 +26,9 @@ import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_FAILED_
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_FAILED_REASON_UNKNOWN;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_POLICY_BLOCK_FAIL_CLOSED;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_POLICY_NONE;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_CANCEL;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_ERROR;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_INSTALL_ANYWAY;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_OK;
import static android.content.pm.PackageInstaller.DEVELOPER_VERIFICATION_USER_RESPONSE_RETRY;
import static android.content.pm.PackageInstaller.DeveloperVerificationUserConfirmationInfo.DEVELOPER_VERIFICATION_USER_ACTION_NEEDED_REASON_DEVELOPER_BLOCKED;
import static android.content.pm.PackageInstaller.DeveloperVerificationUserConfirmationInfo.DEVELOPER_VERIFICATION_USER_ACTION_NEEDED_REASON_LITE_VERIFICATION;
@@ -213,6 +212,7 @@ import com.android.modules.utils.TypedXmlPullParser;
import com.android.modules.utils.TypedXmlSerializer;
import com.android.server.IoThread;
import com.android.server.LocalServices;
import com.android.server.Watchdog;
import com.android.server.art.ArtManagedInstallFileHelper;
import com.android.server.pm.Installer.InstallerException;
import com.android.server.pm.dex.DexManager;
@@ -220,7 +220,6 @@ import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageStateInternal;
import com.android.server.pm.verify.developer.DeveloperVerificationStatusInternal;
import com.android.server.pm.verify.developer.DeveloperVerifierController;
import com.android.server.Watchdog;

import libcore.io.IoUtils;
import libcore.util.EmptyArray;
@@ -5082,24 +5081,18 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
                    + "SessionID: " + sessionId);
            return;
        }
        if (userResponse != DEVELOPER_VERIFICATION_USER_RESPONSE_ERROR) {
            // Only log user response when the response is not error
            synchronized (mMetrics) {
                mMetrics.onDeveloperVerificationUserResponseReceived(userResponse);
            }
        switch (userResponse) {
            case DEVELOPER_VERIFICATION_USER_RESPONSE_ERROR -> {
                String errorMsg = "User could not be notified about the pending verification.";
                Bundle bundle = new Bundle();
                bundle.putInt(EXTRA_DEVELOPER_VERIFICATION_FAILURE_REASON,
                        getVerificationFailureReason(mVerificationUserActionNeededReason));
                bundle.putBoolean(EXTRA_DEVELOPER_VERIFICATION_LITE_PERFORMED,
                        mDeveloperVerificationStatusInternal.isLiteVerification());

                setSessionFailed(INSTALL_FAILED_VERIFICATION_FAILURE, errorMsg);
                onSessionVerificationFailure(INSTALL_FAILED_VERIFICATION_FAILURE, errorMsg, bundle);
        }

            case DEVELOPER_VERIFICATION_USER_RESPONSE_CANCEL -> {
                String errorMsg = "User denied proceeding with the pending verification.";
        switch (userResponse) {
            case DEVELOPER_VERIFICATION_USER_RESPONSE_ERROR,
                 DEVELOPER_VERIFICATION_USER_RESPONSE_ABORT -> {
                String errorMsg = userResponse == DEVELOPER_VERIFICATION_USER_RESPONSE_ERROR
                        ? "User could not be notified about the pending verification."
                        : "User denied proceeding with the pending verification.";
                Bundle bundle = new Bundle();
                bundle.putInt(EXTRA_DEVELOPER_VERIFICATION_FAILURE_REASON,
                        getVerificationFailureReason(mVerificationUserActionNeededReason));
@@ -5110,18 +5103,6 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
                onSessionVerificationFailure(INSTALL_FAILED_VERIFICATION_FAILURE, errorMsg, bundle);
            }

            case DEVELOPER_VERIFICATION_USER_RESPONSE_OK -> {
                Bundle bundle = new Bundle();
                bundle.putInt(EXTRA_DEVELOPER_VERIFICATION_FAILURE_REASON,
                        getVerificationFailureReason(mVerificationUserActionNeededReason));
                bundle.putBoolean(EXTRA_DEVELOPER_VERIFICATION_LITE_PERFORMED,
                        mDeveloperVerificationStatusInternal.isLiteVerification());

                setSessionFailed(INSTALL_FAILED_VERIFICATION_FAILURE, mVerificationFailedMessage);
                onSessionVerificationFailure(INSTALL_FAILED_VERIFICATION_FAILURE,
                        mVerificationFailedMessage, bundle);
            }

            case DEVELOPER_VERIFICATION_USER_RESPONSE_RETRY -> {
                retryDeveloperVerificationSession(mPm::snapshotComputer /* retry= */);
            }
Loading