Loading src/java/com/android/internal/telephony/CellBroadcastHandler.java +27 −10 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.PermissionChecker; import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; Loading Loading @@ -214,7 +215,7 @@ public class CellBroadcastHandler extends WakeLockStateMachine { */ protected void broadcastMessage(@NonNull SmsCbMessage message, @Nullable Uri messageUri) { String receiverPermission; int appOp; String appOp; String msg; Intent intent; if (message.isEmergencyMessage()) { Loading @@ -225,7 +226,7 @@ public class CellBroadcastHandler extends WakeLockStateMachine { //Emergency alerts need to be delivered with high priority intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); receiverPermission = Manifest.permission.RECEIVE_EMERGENCY_BROADCAST; appOp = AppOpsManager.OP_RECEIVE_EMERGECY_SMS; appOp = AppOpsManager.OPSTR_RECEIVE_EMERGENCY_BROADCAST; intent.putExtra(EXTRA_MESSAGE, message); SubscriptionManager.putPhoneIdAndSubIdExtra(intent, mPhone.getPhoneId()); Loading @@ -238,9 +239,14 @@ public class CellBroadcastHandler extends WakeLockStateMachine { if (additionalPackage != null) { Intent additionalIntent = new Intent(intent); additionalIntent.setPackage(additionalPackage); mContext.sendOrderedBroadcastAsUser(additionalIntent, UserHandle.ALL, receiverPermission, appOp, null, getHandler(), Activity.RESULT_OK, null, null); try { mContext.createPackageContextAsUser( mContext.getPackageName(), 0, UserHandle.ALL) .sendOrderedBroadcast(additionalIntent, receiverPermission, appOp, null /* resultReceiver */, getHandler(), Activity.RESULT_OK, null /* initialData */, null /* initialExtras */); } catch (PackageManager.NameNotFoundException ignored) { } } } Loading @@ -250,8 +256,14 @@ public class CellBroadcastHandler extends WakeLockStateMachine { for (String pkg : pkgs) { // Explicitly send the intent to all the configured cell broadcast receivers. intent.setPackage(pkg); mContext.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, receiverPermission, appOp, mReceiver, getHandler(), Activity.RESULT_OK, null, null); try { mContext.createPackageContextAsUser( mContext.getPackageName(), 0, UserHandle.ALL) .sendOrderedBroadcast(intent, receiverPermission, appOp, mReceiver, getHandler(), Activity.RESULT_OK, null /* initialData */, null /* initialExtras */); } catch (PackageManager.NameNotFoundException ignored) { } } } else { msg = "Dispatching SMS CB, SmsCbMessage is: " + message; Loading @@ -262,14 +274,19 @@ public class CellBroadcastHandler extends WakeLockStateMachine { // this intent. intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND); receiverPermission = Manifest.permission.RECEIVE_SMS; appOp = AppOpsManager.OP_RECEIVE_SMS; appOp = AppOpsManager.OPSTR_RECEIVE_SMS; intent.putExtra(EXTRA_MESSAGE, message); SubscriptionManager.putPhoneIdAndSubIdExtra(intent, mPhone.getPhoneId()); mReceiverCount.incrementAndGet(); mContext.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, receiverPermission, appOp, mReceiver, getHandler(), Activity.RESULT_OK, null, null); try { mContext.createPackageContextAsUser(mContext.getPackageName(), 0, UserHandle.ALL) .sendOrderedBroadcast(intent, receiverPermission, appOp, mReceiver, getHandler(), Activity.RESULT_OK, null /* initialData */, null /* initialExtras */); } catch (PackageManager.NameNotFoundException ignored) { } } if (messageUri != null) { Loading src/java/com/android/internal/telephony/InboundSmsHandler.java +20 −9 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.database.Cursor; import android.database.SQLException; import android.net.Uri; Loading Loading @@ -1124,7 +1125,7 @@ public abstract class InboundSmsHandler extends StateMachine { * @param user user to deliver the intent to */ @UnsupportedAppUsage public void dispatchIntent(Intent intent, String permission, int appOp, public void dispatchIntent(Intent intent, String permission, String appOp, Bundle opts, BroadcastReceiver resultReceiver, UserHandle user, int subId) { intent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT); final String action = intent.getAction(); Loading Loading @@ -1174,13 +1175,23 @@ public abstract class InboundSmsHandler extends StateMachine { } } // Only pass in the resultReceiver when the USER_SYSTEM is processed. mContext.sendOrderedBroadcastAsUser(intent, targetUser, permission, appOp, opts, try { mContext.createPackageContextAsUser(mContext.getPackageName(), 0, targetUser) .sendOrderedBroadcast(intent, permission, appOp, opts, users[i] == UserHandle.USER_SYSTEM ? resultReceiver : null, getHandler(), Activity.RESULT_OK, null, null); getHandler(), Activity.RESULT_OK, null /* initialData */, null /* initialExtras */); } catch (PackageManager.NameNotFoundException ignored) { } } } else { mContext.sendOrderedBroadcastAsUser(intent, user, permission, appOp, opts, resultReceiver, getHandler(), Activity.RESULT_OK, null, null); try { mContext.createPackageContextAsUser(mContext.getPackageName(), 0, user) .sendOrderedBroadcast(intent, permission, appOp, opts, resultReceiver, getHandler(), Activity.RESULT_OK, null /* initialData */, null /* initialExtras */); } catch (PackageManager.NameNotFoundException ignored) { } } } Loading Loading @@ -1278,7 +1289,7 @@ public abstract class InboundSmsHandler extends StateMachine { Bundle options = handleSmsWhitelisting(intent.getComponent(), isClass0); dispatchIntent(intent, android.Manifest.permission.RECEIVE_SMS, AppOpsManager.OP_RECEIVE_SMS, options, resultReceiver, UserHandle.SYSTEM, subId); AppOpsManager.OPSTR_RECEIVE_SMS, options, resultReceiver, UserHandle.SYSTEM, subId); } /** Loading Loading @@ -1465,7 +1476,7 @@ public abstract class InboundSmsHandler extends StateMachine { Bundle options = handleSmsWhitelisting(null, false /* bgActivityStartAllowed */); dispatchIntent(intent, android.Manifest.permission.RECEIVE_SMS, AppOpsManager.OP_RECEIVE_SMS, AppOpsManager.OPSTR_RECEIVE_SMS, options, this, UserHandle.ALL, subId); } else if (action.equals(Intents.WAP_PUSH_DELIVER_ACTION)) { // Now dispatch the notification only intent Loading @@ -1488,7 +1499,7 @@ public abstract class InboundSmsHandler extends StateMachine { String mimeType = intent.getType(); dispatchIntent(intent, WapPushOverSms.getPermissionForType(mimeType), WapPushOverSms.getAppOpsPermissionForIntent(mimeType), options, this, WapPushOverSms.getAppOpsStringPermissionForIntent(mimeType), options, this, UserHandle.SYSTEM, subId); } else { // Now that the intents have been deleted we can clean up the PDU data. Loading src/java/com/android/internal/telephony/WapPushOverSms.java +10 −5 Original line number Diff line number Diff line Loading @@ -420,7 +420,7 @@ public class WapPushOverSms implements ServiceConnection { } handler.dispatchIntent(intent, getPermissionForType(result.mimeType), getAppOpsPermissionForIntent(result.mimeType), options, receiver, getAppOpsStringPermissionForIntent(result.mimeType), options, receiver, UserHandle.SYSTEM, subId); return Activity.RESULT_OK; } Loading Loading @@ -611,12 +611,17 @@ public class WapPushOverSms implements ServiceConnection { return permission; } public static int getAppOpsPermissionForIntent(String mimeType) { int appOp; /** * Return a appOps String for the given MIME type. * @param mimeType MIME type of the Intent * @return The appOps String */ public static String getAppOpsStringPermissionForIntent(String mimeType) { String appOp; if (WspTypeDecoder.CONTENT_TYPE_B_MMS.equals(mimeType)) { appOp = AppOpsManager.OP_RECEIVE_MMS; appOp = AppOpsManager.OPSTR_RECEIVE_MMS; } else { appOp = AppOpsManager.OP_RECEIVE_WAP_PUSH; appOp = AppOpsManager.OPSTR_RECEIVE_WAP_PUSH; } return appOp; } Loading tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java +15 −1 Original line number Diff line number Diff line Loading @@ -61,7 +61,6 @@ import android.os.IInterface; import android.os.PersistableBundle; import android.os.UserHandle; import android.os.UserManager; import android.telephony.TelephonyRegistryManager; import android.preference.PreferenceManager; import android.provider.Settings; import android.provider.Telephony.ServiceStateTable; Loading @@ -69,6 +68,7 @@ import android.telecom.TelecomManager; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.TelephonyRegistryManager; import android.telephony.euicc.EuiccManager; import android.test.mock.MockContentProvider; import android.test.mock.MockContentResolver; Loading Loading @@ -450,6 +450,20 @@ public class ContextFixture implements TestFixture<Context> { } } @Override public void sendOrderedBroadcast(Intent intent, String receiverPermission, String receiverAppOp, Bundle options, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras) { logd("sendOrderedBroadcast called for " + intent.getAction()); mLastBroadcastOptions = options; sendBroadcast(intent); if (resultReceiver != null) { synchronized (mOrderedBroadcastReceivers) { mOrderedBroadcastReceivers.put(intent, resultReceiver); } } } @Override public void sendStickyBroadcast(Intent intent) { logd("sendStickyBroadcast called for " + intent.getAction()); Loading tests/telephonytests/src/com/android/internal/telephony/WapPushOverSmsTest.java +2 −2 Original line number Diff line number Diff line Loading @@ -89,7 +89,7 @@ public class WapPushOverSmsTest extends TelephonyTest { ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mInboundSmsHandler).dispatchIntent(intentArgumentCaptor.capture(), eq(android.Manifest.permission.RECEIVE_WAP_PUSH), eq(AppOpsManager.OP_RECEIVE_WAP_PUSH), eq(AppOpsManager.OPSTR_RECEIVE_WAP_PUSH), nullable(Bundle.class), isNull(BroadcastReceiver.class), eq(UserHandle.SYSTEM), Loading Loading @@ -143,7 +143,7 @@ public class WapPushOverSmsTest extends TelephonyTest { verify(mInboundSmsHandler, never()).dispatchIntent( any(Intent.class), any(String.class), anyInt(), any(String.class), any(Bundle.class), any(BroadcastReceiver.class), any(UserHandle.class), Loading Loading
src/java/com/android/internal/telephony/CellBroadcastHandler.java +27 −10 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.PermissionChecker; import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; Loading Loading @@ -214,7 +215,7 @@ public class CellBroadcastHandler extends WakeLockStateMachine { */ protected void broadcastMessage(@NonNull SmsCbMessage message, @Nullable Uri messageUri) { String receiverPermission; int appOp; String appOp; String msg; Intent intent; if (message.isEmergencyMessage()) { Loading @@ -225,7 +226,7 @@ public class CellBroadcastHandler extends WakeLockStateMachine { //Emergency alerts need to be delivered with high priority intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); receiverPermission = Manifest.permission.RECEIVE_EMERGENCY_BROADCAST; appOp = AppOpsManager.OP_RECEIVE_EMERGECY_SMS; appOp = AppOpsManager.OPSTR_RECEIVE_EMERGENCY_BROADCAST; intent.putExtra(EXTRA_MESSAGE, message); SubscriptionManager.putPhoneIdAndSubIdExtra(intent, mPhone.getPhoneId()); Loading @@ -238,9 +239,14 @@ public class CellBroadcastHandler extends WakeLockStateMachine { if (additionalPackage != null) { Intent additionalIntent = new Intent(intent); additionalIntent.setPackage(additionalPackage); mContext.sendOrderedBroadcastAsUser(additionalIntent, UserHandle.ALL, receiverPermission, appOp, null, getHandler(), Activity.RESULT_OK, null, null); try { mContext.createPackageContextAsUser( mContext.getPackageName(), 0, UserHandle.ALL) .sendOrderedBroadcast(additionalIntent, receiverPermission, appOp, null /* resultReceiver */, getHandler(), Activity.RESULT_OK, null /* initialData */, null /* initialExtras */); } catch (PackageManager.NameNotFoundException ignored) { } } } Loading @@ -250,8 +256,14 @@ public class CellBroadcastHandler extends WakeLockStateMachine { for (String pkg : pkgs) { // Explicitly send the intent to all the configured cell broadcast receivers. intent.setPackage(pkg); mContext.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, receiverPermission, appOp, mReceiver, getHandler(), Activity.RESULT_OK, null, null); try { mContext.createPackageContextAsUser( mContext.getPackageName(), 0, UserHandle.ALL) .sendOrderedBroadcast(intent, receiverPermission, appOp, mReceiver, getHandler(), Activity.RESULT_OK, null /* initialData */, null /* initialExtras */); } catch (PackageManager.NameNotFoundException ignored) { } } } else { msg = "Dispatching SMS CB, SmsCbMessage is: " + message; Loading @@ -262,14 +274,19 @@ public class CellBroadcastHandler extends WakeLockStateMachine { // this intent. intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND); receiverPermission = Manifest.permission.RECEIVE_SMS; appOp = AppOpsManager.OP_RECEIVE_SMS; appOp = AppOpsManager.OPSTR_RECEIVE_SMS; intent.putExtra(EXTRA_MESSAGE, message); SubscriptionManager.putPhoneIdAndSubIdExtra(intent, mPhone.getPhoneId()); mReceiverCount.incrementAndGet(); mContext.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, receiverPermission, appOp, mReceiver, getHandler(), Activity.RESULT_OK, null, null); try { mContext.createPackageContextAsUser(mContext.getPackageName(), 0, UserHandle.ALL) .sendOrderedBroadcast(intent, receiverPermission, appOp, mReceiver, getHandler(), Activity.RESULT_OK, null /* initialData */, null /* initialExtras */); } catch (PackageManager.NameNotFoundException ignored) { } } if (messageUri != null) { Loading
src/java/com/android/internal/telephony/InboundSmsHandler.java +20 −9 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.database.Cursor; import android.database.SQLException; import android.net.Uri; Loading Loading @@ -1124,7 +1125,7 @@ public abstract class InboundSmsHandler extends StateMachine { * @param user user to deliver the intent to */ @UnsupportedAppUsage public void dispatchIntent(Intent intent, String permission, int appOp, public void dispatchIntent(Intent intent, String permission, String appOp, Bundle opts, BroadcastReceiver resultReceiver, UserHandle user, int subId) { intent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT); final String action = intent.getAction(); Loading Loading @@ -1174,13 +1175,23 @@ public abstract class InboundSmsHandler extends StateMachine { } } // Only pass in the resultReceiver when the USER_SYSTEM is processed. mContext.sendOrderedBroadcastAsUser(intent, targetUser, permission, appOp, opts, try { mContext.createPackageContextAsUser(mContext.getPackageName(), 0, targetUser) .sendOrderedBroadcast(intent, permission, appOp, opts, users[i] == UserHandle.USER_SYSTEM ? resultReceiver : null, getHandler(), Activity.RESULT_OK, null, null); getHandler(), Activity.RESULT_OK, null /* initialData */, null /* initialExtras */); } catch (PackageManager.NameNotFoundException ignored) { } } } else { mContext.sendOrderedBroadcastAsUser(intent, user, permission, appOp, opts, resultReceiver, getHandler(), Activity.RESULT_OK, null, null); try { mContext.createPackageContextAsUser(mContext.getPackageName(), 0, user) .sendOrderedBroadcast(intent, permission, appOp, opts, resultReceiver, getHandler(), Activity.RESULT_OK, null /* initialData */, null /* initialExtras */); } catch (PackageManager.NameNotFoundException ignored) { } } } Loading Loading @@ -1278,7 +1289,7 @@ public abstract class InboundSmsHandler extends StateMachine { Bundle options = handleSmsWhitelisting(intent.getComponent(), isClass0); dispatchIntent(intent, android.Manifest.permission.RECEIVE_SMS, AppOpsManager.OP_RECEIVE_SMS, options, resultReceiver, UserHandle.SYSTEM, subId); AppOpsManager.OPSTR_RECEIVE_SMS, options, resultReceiver, UserHandle.SYSTEM, subId); } /** Loading Loading @@ -1465,7 +1476,7 @@ public abstract class InboundSmsHandler extends StateMachine { Bundle options = handleSmsWhitelisting(null, false /* bgActivityStartAllowed */); dispatchIntent(intent, android.Manifest.permission.RECEIVE_SMS, AppOpsManager.OP_RECEIVE_SMS, AppOpsManager.OPSTR_RECEIVE_SMS, options, this, UserHandle.ALL, subId); } else if (action.equals(Intents.WAP_PUSH_DELIVER_ACTION)) { // Now dispatch the notification only intent Loading @@ -1488,7 +1499,7 @@ public abstract class InboundSmsHandler extends StateMachine { String mimeType = intent.getType(); dispatchIntent(intent, WapPushOverSms.getPermissionForType(mimeType), WapPushOverSms.getAppOpsPermissionForIntent(mimeType), options, this, WapPushOverSms.getAppOpsStringPermissionForIntent(mimeType), options, this, UserHandle.SYSTEM, subId); } else { // Now that the intents have been deleted we can clean up the PDU data. Loading
src/java/com/android/internal/telephony/WapPushOverSms.java +10 −5 Original line number Diff line number Diff line Loading @@ -420,7 +420,7 @@ public class WapPushOverSms implements ServiceConnection { } handler.dispatchIntent(intent, getPermissionForType(result.mimeType), getAppOpsPermissionForIntent(result.mimeType), options, receiver, getAppOpsStringPermissionForIntent(result.mimeType), options, receiver, UserHandle.SYSTEM, subId); return Activity.RESULT_OK; } Loading Loading @@ -611,12 +611,17 @@ public class WapPushOverSms implements ServiceConnection { return permission; } public static int getAppOpsPermissionForIntent(String mimeType) { int appOp; /** * Return a appOps String for the given MIME type. * @param mimeType MIME type of the Intent * @return The appOps String */ public static String getAppOpsStringPermissionForIntent(String mimeType) { String appOp; if (WspTypeDecoder.CONTENT_TYPE_B_MMS.equals(mimeType)) { appOp = AppOpsManager.OP_RECEIVE_MMS; appOp = AppOpsManager.OPSTR_RECEIVE_MMS; } else { appOp = AppOpsManager.OP_RECEIVE_WAP_PUSH; appOp = AppOpsManager.OPSTR_RECEIVE_WAP_PUSH; } return appOp; } Loading
tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java +15 −1 Original line number Diff line number Diff line Loading @@ -61,7 +61,6 @@ import android.os.IInterface; import android.os.PersistableBundle; import android.os.UserHandle; import android.os.UserManager; import android.telephony.TelephonyRegistryManager; import android.preference.PreferenceManager; import android.provider.Settings; import android.provider.Telephony.ServiceStateTable; Loading @@ -69,6 +68,7 @@ import android.telecom.TelecomManager; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.TelephonyRegistryManager; import android.telephony.euicc.EuiccManager; import android.test.mock.MockContentProvider; import android.test.mock.MockContentResolver; Loading Loading @@ -450,6 +450,20 @@ public class ContextFixture implements TestFixture<Context> { } } @Override public void sendOrderedBroadcast(Intent intent, String receiverPermission, String receiverAppOp, Bundle options, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras) { logd("sendOrderedBroadcast called for " + intent.getAction()); mLastBroadcastOptions = options; sendBroadcast(intent); if (resultReceiver != null) { synchronized (mOrderedBroadcastReceivers) { mOrderedBroadcastReceivers.put(intent, resultReceiver); } } } @Override public void sendStickyBroadcast(Intent intent) { logd("sendStickyBroadcast called for " + intent.getAction()); Loading
tests/telephonytests/src/com/android/internal/telephony/WapPushOverSmsTest.java +2 −2 Original line number Diff line number Diff line Loading @@ -89,7 +89,7 @@ public class WapPushOverSmsTest extends TelephonyTest { ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mInboundSmsHandler).dispatchIntent(intentArgumentCaptor.capture(), eq(android.Manifest.permission.RECEIVE_WAP_PUSH), eq(AppOpsManager.OP_RECEIVE_WAP_PUSH), eq(AppOpsManager.OPSTR_RECEIVE_WAP_PUSH), nullable(Bundle.class), isNull(BroadcastReceiver.class), eq(UserHandle.SYSTEM), Loading Loading @@ -143,7 +143,7 @@ public class WapPushOverSmsTest extends TelephonyTest { verify(mInboundSmsHandler, never()).dispatchIntent( any(Intent.class), any(String.class), anyInt(), any(String.class), any(Bundle.class), any(BroadcastReceiver.class), any(UserHandle.class), Loading