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

Commit be92b139 authored by Holly Jiuyu Sun's avatar Holly Jiuyu Sun Committed by Gerrit Code Review
Browse files

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

parents dda9a83d 2b047d52
Loading
Loading
Loading
Loading
+16 −7
Original line number Diff line number Diff line
@@ -669,7 +669,7 @@ public class EuiccController extends IEuiccController.Stub {
            }

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

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

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

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

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

    @Test(expected = SecurityException.class)
    @Test
    public void testUpdateSubscriptionNickname_noPrivileges() throws Exception {
        setHasWriteEmbeddedPermission(false);
        prepareOperationSubscription(false);
        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
    public void testUpdateSubscriptionNickname_noSuchSubscription() throws Exception {
        setHasWriteEmbeddedPermission(true);
        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());
@@ -733,7 +739,8 @@ public class EuiccControllerTest extends TelephonyTest {
        setHasWriteEmbeddedPermission(true);
        prepareOperationSubscription(false /* hasPrivileges */);
        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).updateSubscriptionNickname(anyString(), anyString(), any());
@@ -744,7 +751,8 @@ public class EuiccControllerTest extends TelephonyTest {
        setHasWriteEmbeddedPermission(true);
        prepareOperationSubscription(false /* hasPrivileges */);
        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,
                42 /* detailedCode */);
    }
@@ -754,7 +762,8 @@ public class EuiccControllerTest extends TelephonyTest {
        setHasWriteEmbeddedPermission(true);
        prepareOperationSubscription(false /* hasPrivileges */);
        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 */);
    }

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

    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);
        doAnswer(new Answer<Void>() {
            @Override
@@ -1046,7 +1055,8 @@ public class EuiccControllerTest extends TelephonyTest {
                return null;
            }
        }).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) {