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

Commit 6dc9ad1e authored by Holly Jiuyu Sun's avatar Holly Jiuyu Sun Committed by android-build-merger
Browse files

Merge "Allow privileged carrier app to update subscription nickname."

am: be92b139

Change-Id: I948d35d36715146a70b1f9c88927175f76bf674c
parents c879b23b be92b139
Loading
Loading
Loading
Loading
+16 −7
Original line number Original line Diff line number Diff line
@@ -669,7 +669,7 @@ public class EuiccController extends IEuiccController.Stub {
            }
            }


            if (!callerCanWriteEmbeddedSubscriptions
            if (!callerCanWriteEmbeddedSubscriptions
                    && !sub.canManageSubscription(mContext, callingPackage)) {
                    && !mSubscriptionManager.canManageSubscription(sub, callingPackage)) {
                Log.e(TAG, "No permissions: " + subscriptionId);
                Log.e(TAG, "No permissions: " + subscriptionId);
                sendResult(callbackIntent, ERROR, null /* extrasIntent */);
                sendResult(callbackIntent, ERROR, null /* extrasIntent */);
                return;
                return;
@@ -838,11 +838,10 @@ public class EuiccController extends IEuiccController.Stub {


    @Override
    @Override
    public void updateSubscriptionNickname(int subscriptionId, String nickname,
    public void updateSubscriptionNickname(int subscriptionId, String nickname,
            PendingIntent callbackIntent) {
            String callingPackage, PendingIntent callbackIntent) {
        if (!callerCanWriteEmbeddedSubscriptions()) {
        boolean callerCanWriteEmbeddedSubscriptions = callerCanWriteEmbeddedSubscriptions();
            throw new SecurityException(
        mAppOpsManager.checkPackage(Binder.getCallingUid(), callingPackage);
                    "Must have WRITE_EMBEDDED_SUBSCRIPTIONS to update nickname");

        }
        long token = Binder.clearCallingIdentity();
        long token = Binder.clearCallingIdentity();
        try {
        try {
            SubscriptionInfo sub = getSubscriptionForSubscriptionId(subscriptionId);
            SubscriptionInfo sub = getSubscriptionForSubscriptionId(subscriptionId);
@@ -851,6 +850,14 @@ public class EuiccController extends IEuiccController.Stub {
                sendResult(callbackIntent, ERROR, null /* extrasIntent */);
                sendResult(callbackIntent, ERROR, null /* extrasIntent */);
                return;
                return;
            }
            }

            if (!callerCanWriteEmbeddedSubscriptions
                    && !mSubscriptionManager.canManageSubscription(sub, callingPackage)) {
                Log.e(TAG, "No permissions: " + subscriptionId);
                sendResult(callbackIntent, ERROR, null /* extrasIntent */);
                return;
            }

            mConnector.updateSubscriptionNickname(
            mConnector.updateSubscriptionNickname(
                    sub.getIccId(), nickname,
                    sub.getIccId(), nickname,
                    new EuiccConnector.UpdateNicknameCommandCallback() {
                    new EuiccConnector.UpdateNicknameCommandCallback() {
@@ -861,7 +868,9 @@ public class EuiccController extends IEuiccController.Stub {
                            switch (result) {
                            switch (result) {
                                case EuiccService.RESULT_OK:
                                case EuiccService.RESULT_OK:
                                    resultCode = OK;
                                    resultCode = OK;
                                    break;
                                    refreshSubscriptionsAndSendResult(
                                            callbackIntent, resultCode, extrasIntent);
                                    return;
                                default:
                                default:
                                    resultCode = ERROR;
                                    resultCode = ERROR;
                                    extrasIntent.putExtra(
                                    extrasIntent.putExtra(
+18 −8
Original line number Original line Diff line number Diff line
@@ -711,18 +711,24 @@ public class EuiccControllerTest extends TelephonyTest {
                EuiccOperation.ACTION_SWITCH_NO_PRIVILEGES);
                EuiccOperation.ACTION_SWITCH_NO_PRIVILEGES);
    }
    }


    @Test(expected = SecurityException.class)
    @Test
    public void testUpdateSubscriptionNickname_noPrivileges() throws Exception {
    public void testUpdateSubscriptionNickname_noPrivileges() throws Exception {
        setHasWriteEmbeddedPermission(false);
        setHasWriteEmbeddedPermission(false);
        prepareOperationSubscription(false);
        callUpdateSubscriptionNickname(
        callUpdateSubscriptionNickname(
                SUBSCRIPTION_ID, ICC_ID, "nickname", false /* complete */, 0 /* result */);
                SUBSCRIPTION_ID, ICC_ID, "nickname", false /* complete */, 0 /* result */,
                PACKAGE_NAME);
        verifyIntentSent(EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_ERROR,
                0 /* detailedCode */);
        verify(mMockConnector, never()).updateSubscriptionNickname(anyString(), anyString(), any());
    }
    }


    @Test
    @Test
    public void testUpdateSubscriptionNickname_noSuchSubscription() throws Exception {
    public void testUpdateSubscriptionNickname_noSuchSubscription() throws Exception {
        setHasWriteEmbeddedPermission(true);
        setHasWriteEmbeddedPermission(true);
        callUpdateSubscriptionNickname(
        callUpdateSubscriptionNickname(
                SUBSCRIPTION_ID, ICC_ID, "nickname", false /* complete */, 0 /* result */);
                SUBSCRIPTION_ID, ICC_ID, "nickname", false /* complete */, 0 /* result */,
                PACKAGE_NAME);
        verifyIntentSent(EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_ERROR,
        verifyIntentSent(EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_ERROR,
                0 /* detailedCode */);
                0 /* detailedCode */);
        verify(mMockConnector, never()).updateSubscriptionNickname(anyString(), anyString(), any());
        verify(mMockConnector, never()).updateSubscriptionNickname(anyString(), anyString(), any());
@@ -733,7 +739,8 @@ public class EuiccControllerTest extends TelephonyTest {
        setHasWriteEmbeddedPermission(true);
        setHasWriteEmbeddedPermission(true);
        prepareOperationSubscription(false /* hasPrivileges */);
        prepareOperationSubscription(false /* hasPrivileges */);
        callUpdateSubscriptionNickname(
        callUpdateSubscriptionNickname(
                SUBSCRIPTION_ID, ICC_ID, "nickname", false /* complete */, 0 /* result */);
                SUBSCRIPTION_ID, ICC_ID, "nickname", false /* complete */, 0 /* result */,
                PACKAGE_NAME);
        verifyIntentSent(EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_ERROR,
        verifyIntentSent(EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_ERROR,
                0 /* detailedCode */);
                0 /* detailedCode */);
        verify(mMockConnector).updateSubscriptionNickname(anyString(), anyString(), any());
        verify(mMockConnector).updateSubscriptionNickname(anyString(), anyString(), any());
@@ -744,7 +751,8 @@ public class EuiccControllerTest extends TelephonyTest {
        setHasWriteEmbeddedPermission(true);
        setHasWriteEmbeddedPermission(true);
        prepareOperationSubscription(false /* hasPrivileges */);
        prepareOperationSubscription(false /* hasPrivileges */);
        callUpdateSubscriptionNickname(
        callUpdateSubscriptionNickname(
                SUBSCRIPTION_ID, ICC_ID, "nickname", true /* complete */, 42 /* result */);
                SUBSCRIPTION_ID, ICC_ID, "nickname", true /* complete */, 42 /* result */,
                PACKAGE_NAME);
        verifyIntentSent(EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_ERROR,
        verifyIntentSent(EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_ERROR,
                42 /* detailedCode */);
                42 /* detailedCode */);
    }
    }
@@ -754,7 +762,8 @@ public class EuiccControllerTest extends TelephonyTest {
        setHasWriteEmbeddedPermission(true);
        setHasWriteEmbeddedPermission(true);
        prepareOperationSubscription(false /* hasPrivileges */);
        prepareOperationSubscription(false /* hasPrivileges */);
        callUpdateSubscriptionNickname(
        callUpdateSubscriptionNickname(
                SUBSCRIPTION_ID, ICC_ID, "nickname", true /* complete */, EuiccService.RESULT_OK);
                SUBSCRIPTION_ID, ICC_ID, "nickname", true /* complete */, EuiccService.RESULT_OK,
                PACKAGE_NAME);
        verifyIntentSent(EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_OK, 0 /* detailedCode */);
        verifyIntentSent(EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_OK, 0 /* detailedCode */);
    }
    }


@@ -1032,7 +1041,7 @@ public class EuiccControllerTest extends TelephonyTest {
    }
    }


    private void callUpdateSubscriptionNickname(int subscriptionId, String iccid, String nickname,
    private void callUpdateSubscriptionNickname(int subscriptionId, String iccid, String nickname,
            final boolean complete, final int result) {
            final boolean complete, final int result, String callingPackage) {
        PendingIntent resultCallback = PendingIntent.getBroadcast(mContext, 0, new Intent(), 0);
        PendingIntent resultCallback = PendingIntent.getBroadcast(mContext, 0, new Intent(), 0);
        doAnswer(new Answer<Void>() {
        doAnswer(new Answer<Void>() {
            @Override
            @Override
@@ -1046,7 +1055,8 @@ public class EuiccControllerTest extends TelephonyTest {
                return null;
                return null;
            }
            }
        }).when(mMockConnector).updateSubscriptionNickname(eq(iccid), eq(nickname), any());
        }).when(mMockConnector).updateSubscriptionNickname(eq(iccid), eq(nickname), any());
        mController.updateSubscriptionNickname(subscriptionId, nickname, resultCallback);
        mController.updateSubscriptionNickname(subscriptionId, nickname, callingPackage,
                resultCallback);
    }
    }


    private void callEraseSubscriptions(final boolean complete, final int result) {
    private void callEraseSubscriptions(final boolean complete, final int result) {