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

Commit bf3e98e1 authored by Peter Wang's avatar Peter Wang Committed by Gerrit Code Review
Browse files

Merge "[Telephony Mainline] Exposed sendOrderedBroadcast"

parents 6c66c260 69398340
Loading
Loading
Loading
Loading
+27 −10
Original line number Diff line number Diff line
@@ -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;
@@ -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()) {
@@ -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());
@@ -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) {
                    }
                }
            }

@@ -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;
@@ -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) {
+20 −9
Original line number Diff line number Diff line
@@ -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;
@@ -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();
@@ -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) {
            }
        }
    }

@@ -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);
    }

    /**
@@ -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
@@ -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.
+10 −5
Original line number Diff line number Diff line
@@ -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;
    }
@@ -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;
    }
+15 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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());
+2 −2
Original line number Diff line number Diff line
@@ -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),
@@ -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),