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 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) {