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

Commit 3eb09ed2 authored by Sarah Chin's avatar Sarah Chin Committed by Automerger Merge Worker
Browse files

Merge "Expose PinResult and ICC PIN/PUK APIs as SystemApi" am: 23914036 am: 78fa0b0e

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1506404

Change-Id: Ib2f5b536b9a78a70aa6eb3dbb48dbdd7e94a14c2
parents 4ead09d0 78fa0b0e
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -9745,6 +9745,18 @@ package android.telephony {
    field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int LISTEN_VOICE_ACTIVATION_STATE = 131072; // 0x20000
  }
  public final class PinResult implements android.os.Parcelable {
    method public int describeContents();
    method public int getAttemptsRemaining();
    method public int getResult();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PinResult> CREATOR;
    field public static final int PIN_RESULT_TYPE_ABORTED = 3; // 0x3
    field public static final int PIN_RESULT_TYPE_FAILURE = 2; // 0x2
    field public static final int PIN_RESULT_TYPE_INCORRECT = 1; // 0x1
    field public static final int PIN_RESULT_TYPE_SUCCESS = 0; // 0x0
  }
  public final class PreciseCallState implements android.os.Parcelable {
    ctor public PreciseCallState(int, int, int, int, int);
    method public int describeContents();
@@ -10088,6 +10100,7 @@ package android.telephony {
  public class TelephonyManager {
    method @Deprecated @RequiresPermission(android.Manifest.permission.CALL_PHONE) public void call(String, String);
    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.PinResult changeIccLockPin(@NonNull String, @NonNull String);
    method public int checkCarrierPrivilegesForPackage(String);
    method public int checkCarrierPrivilegesForPackageAnyPhone(String);
    method public void dial(String);
@@ -10192,6 +10205,7 @@ package android.telephony {
    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDataActivationState(int);
    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDataEnabled(int, boolean);
    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDataRoamingEnabled(boolean);
    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.PinResult setIccLockEnabled(boolean, @NonNull String);
    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setMobileDataPolicyEnabledStatus(int, boolean);
    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setMultiSimCarrierRestriction(boolean);
    method public int setNrDualConnectivityState(int);
@@ -10207,10 +10221,12 @@ package android.telephony {
    method @Deprecated public void setVisualVoicemailEnabled(android.telecom.PhoneAccountHandle, boolean);
    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoiceActivationState(int);
    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void shutdownAllRadios();
    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.PinResult supplyIccLockPin(@NonNull String);
    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.PinResult supplyIccLockPuk(@NonNull String, @NonNull String);
    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean supplyPin(String);
    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int[] supplyPinReportResult(String);
    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int[] supplyPinReportResult(String);
    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean supplyPuk(String, String);
    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int[] supplyPukReportResult(String, String);
    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int[] supplyPukReportResult(String, String);
    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean switchSlots(int[]);
    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void toggleRadioOnOff();
    method @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void updateOtaEmergencyNumberDbFilePath(@NonNull android.os.ParcelFileDescriptor);
+8 −23
Original line number Diff line number Diff line
@@ -257,31 +257,16 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView {
        @Override
        public void run() {
            if (DEBUG) {
                Log.v(TAG, "call supplyPinReportResultForSubscriber(subid=" + mSubId + ")");
                Log.v(TAG, "call supplyIccLockPin(subid=" + mSubId + ")");
            }
            TelephonyManager telephonyManager =
                    ((TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE))
                            .createForSubscriptionId(mSubId);
            final PinResult result = telephonyManager.supplyPinReportPinResult(mPin);
            if (result == null) {
                Log.e(TAG, "Error result for supplyPinReportResult.");
                post(new Runnable() {
                    @Override
                    public void run() {
                        onSimCheckResponse(PinResult.getDefaultFailedResult());
                    }
                });
            } else {
            final PinResult result = telephonyManager.supplyIccLockPin(mPin);
            if (DEBUG) {
                    Log.v(TAG, "supplyPinReportResult returned: " + result.toString());
                }
                post(new Runnable() {
                    @Override
                    public void run() {
                        onSimCheckResponse(result);
                    }
                });
                Log.v(TAG, "supplyIccLockPin returned: " + result.toString());
            }
            post(() -> onSimCheckResponse(result));
        }
    }

@@ -341,8 +326,8 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView {
                            }
                            resetPasswordText(true /* animate */,
                                    /* announce */
                                    result.getType() != PinResult.PIN_RESULT_TYPE_SUCCESS);
                            if (result.getType() == PinResult.PIN_RESULT_TYPE_SUCCESS) {
                                    result.getResult() != PinResult.PIN_RESULT_TYPE_SUCCESS);
                            if (result.getResult() == PinResult.PIN_RESULT_TYPE_SUCCESS) {
                                Dependency.get(KeyguardUpdateMonitor.class)
                                        .reportSimUnlocked(mSubId);
                                mRemainingAttempts = -1;
@@ -352,7 +337,7 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView {
                                }
                            } else {
                                mShowDefaultMessage = false;
                                if (result.getType() == PinResult.PIN_RESULT_TYPE_INCORRECT) {
                                if (result.getResult() == PinResult.PIN_RESULT_TYPE_INCORRECT) {
                                    if (result.getAttemptsRemaining() <= 2) {
                                        // this is getting critical - show dialog
                                        getSimRemainingAttemptsDialog(
+10 −23
Original line number Diff line number Diff line
@@ -319,30 +319,17 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView {

        @Override
        public void run() {
            if (DEBUG) Log.v(TAG, "call supplyPukReportResult()");
            if (DEBUG) {
                Log.v(TAG, "call supplyIccLockPuk(subid=" + mSubId + ")");
            }
            TelephonyManager telephonyManager =
                    ((TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE))
                            .createForSubscriptionId(mSubId);
            final PinResult result = telephonyManager.supplyPukReportPinResult(mPuk, mPin);
            if (result == null) {
                Log.e(TAG, "Error result for supplyPukReportResult.");
                post(new Runnable() {
                    @Override
                    public void run() {
                        onSimLockChangedResponse(PinResult.getDefaultFailedResult());
                    }
                });
            } else {
            final PinResult result = telephonyManager.supplyIccLockPuk(mPuk, mPin);
            if (DEBUG) {
                    Log.v(TAG, "supplyPukReportResult returned: " + result.toString());
                }
                post(new Runnable() {
                    @Override
                    public void run() {
                        onSimLockChangedResponse(result);
                    }
                });
                Log.v(TAG, "supplyIccLockPuk returned: " + result.toString());
            }
            post(() -> onSimLockChangedResponse(result));
        }
    }

@@ -415,8 +402,8 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView {
                            }
                            resetPasswordText(true /* animate */,
                                    /* announce */
                                    result.getType() != PinResult.PIN_RESULT_TYPE_SUCCESS);
                            if (result.getType() == PinResult.PIN_RESULT_TYPE_SUCCESS) {
                                    result.getResult() != PinResult.PIN_RESULT_TYPE_SUCCESS);
                            if (result.getResult() == PinResult.PIN_RESULT_TYPE_SUCCESS) {
                                Dependency.get(KeyguardUpdateMonitor.class)
                                        .reportSimUnlocked(mSubId);
                                mRemainingAttempts = -1;
@@ -427,7 +414,7 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView {
                                }
                            } else {
                                mShowDefaultMessage = false;
                                if (result.getType() == PinResult.PIN_RESULT_TYPE_INCORRECT) {
                                if (result.getResult() == PinResult.PIN_RESULT_TYPE_INCORRECT) {
                                    // show message
                                    mSecurityMessageDisplay.setMessage(getPukPasswordErrorMessage(
                                            result.getAttemptsRemaining(), false));
+41 −22
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.telephony;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;

@@ -27,10 +28,16 @@ import com.android.internal.telephony.PhoneConstants;
import java.util.Objects;

/**
 * Holds the result from a pin attempt.
 * Holds the result from a PIN attempt.
 *
 * @see TelephonyManager#supplyIccLockPin
 * @see TelephonyManager#supplyIccLockPuk
 * @see TelephonyManager#setIccLockEnabled
 * @see TelephonyManager#changeIccLockPin
 *
 * @hide
 */
@SystemApi
public final class PinResult implements Parcelable {
    /** @hide */
    @IntDef({
@@ -64,24 +71,24 @@ public final class PinResult implements Parcelable {
    private static final PinResult sFailedResult =
            new PinResult(PinResult.PIN_RESULT_TYPE_FAILURE, -1);

    private final @PinResultType int mType;
    private final @PinResultType int mResult;

    private final int mAttemptsRemaining;

    /**
     * Returns either success, incorrect or failure.
     * Returns the result of the PIN attempt.
     *
     * @see #PIN_RESULT_TYPE_SUCCESS
     * @see #PIN_RESULT_TYPE_INCORRECT
     * @see #PIN_RESULT_TYPE_FAILURE
     * @return The result type of the pin attempt.
     * @return The result of the PIN attempt.
     */
    public @PinResultType int getType() {
        return mType;
    public @PinResultType int getResult() {
        return mResult;
    }

    /**
     * The number of pin attempts remaining.
     * Returns the number of PIN attempts remaining.
     * This will be set when {@link #getResult} is {@link #PIN_RESULT_TYPE_INCORRECT}.
     * Indicates the number of attempts at entering the PIN before the SIM will be locked and
     * require a PUK unlock to be performed.
     *
     * @return Number of attempts remaining.
     */
@@ -89,22 +96,32 @@ public final class PinResult implements Parcelable {
        return mAttemptsRemaining;
    }

    /**
     * Used to indicate a failed PIN attempt result.
     *
     * @return default PinResult for failure.
     *
     * @hide
     */
    @NonNull
    public static PinResult getDefaultFailedResult() {
        return sFailedResult;
    }

    /**
     * PinResult constructor
     * PinResult constructor.
     *
     * @param type The type of pin result.
     * @param result The pin result value.
     * @see #PIN_RESULT_TYPE_SUCCESS
     * @see #PIN_RESULT_TYPE_INCORRECT
     * @see #PIN_RESULT_TYPE_FAILURE
     * @see #PIN_RESULT_TYPE_ABORTED
     * @param attemptsRemaining Number of pin attempts remaining.
     *
     * @hide
     */
    public PinResult(@PinResultType int type, int attemptsRemaining) {
        mType = type;
    public PinResult(@PinResultType int result, int attemptsRemaining) {
        mResult = result;
        mAttemptsRemaining = attemptsRemaining;
    }

@@ -114,7 +131,7 @@ public final class PinResult implements Parcelable {
     * @hide
     */
    private PinResult(Parcel in) {
        mType = in.readInt();
        mResult = in.readInt();
        mAttemptsRemaining = in.readInt();
    }

@@ -124,11 +141,11 @@ public final class PinResult implements Parcelable {
    @NonNull
    @Override
    public String toString() {
        return "type: " + getType() + ", attempts remaining: " + getAttemptsRemaining();
        return "result: " + getResult() + ", attempts remaining: " + getAttemptsRemaining();
    }

    /**
     * Required to be Parcelable
     * Describe the contents of this object.
     */
    @Override
    public int describeContents() {
@@ -136,15 +153,17 @@ public final class PinResult implements Parcelable {
    }

    /**
     * Required to be Parcelable
     * Write this object to a Parcel.
     */
    @Override
    public void writeToParcel(@NonNull Parcel out, int flags) {
        out.writeInt(mType);
        out.writeInt(mResult);
        out.writeInt(mAttemptsRemaining);
    }

    /** Required to be Parcelable */
    /**
     * Parcel creator class.
     */
    public static final @NonNull Parcelable.Creator<PinResult> CREATOR = new Creator<PinResult>() {
        public PinResult createFromParcel(Parcel in) {
            return new PinResult(in);
@@ -156,7 +175,7 @@ public final class PinResult implements Parcelable {

    @Override
    public int hashCode() {
        return Objects.hash(mAttemptsRemaining, mType);
        return Objects.hash(mAttemptsRemaining, mResult);
    }

    @Override
@@ -171,7 +190,7 @@ public final class PinResult implements Parcelable {
            return false;
        }
        PinResult other = (PinResult) obj;
        return (mType == other.mType
        return (mResult == other.mResult
                && mAttemptsRemaining == other.mAttemptsRemaining);
    }
}
+112 −62

File changed.

Preview size limit exceeded, changes collapsed.