Loading src/java/com/android/internal/telephony/euicc/EuiccController.java +16 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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() { Loading @@ -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( Loading tests/telephonytests/src/com/android/internal/telephony/euicc/EuiccControllerTest.java +18 −8 Original line number Diff line number Diff line Loading @@ -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()); Loading @@ -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()); Loading @@ -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 */); } Loading @@ -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 */); } Loading Loading @@ -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 Loading @@ -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) { Loading Loading
src/java/com/android/internal/telephony/euicc/EuiccController.java +16 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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() { Loading @@ -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( Loading
tests/telephonytests/src/com/android/internal/telephony/euicc/EuiccControllerTest.java +18 −8 Original line number Diff line number Diff line Loading @@ -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()); Loading @@ -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()); Loading @@ -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 */); } Loading @@ -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 */); } Loading Loading @@ -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 Loading @@ -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) { Loading