Replaced send broadcast with user aware version
When device is running in HSUM mode, clients might be running
as a different user than system user. The broadcast needs to send
to all users to ensure both system and current user can receive it.
Bug: 362554272
Test: Manually test in HSUM devices
Test: atest FrameworksTelephonyTests
Flag: com.android.internal.telephony.flags.hsum_broadcast
Change-Id: I53fe535355ac7191ba499ac4d100b6c32f86bebd
diff --git a/flags/misc.aconfig b/flags/misc.aconfig
index 65ce401..a750331 100644
--- a/flags/misc.aconfig
+++ b/flags/misc.aconfig
@@ -195,3 +195,14 @@
purpose: PURPOSE_BUGFIX
}
}
+
+# OWNER=jackyu TARGET=25Q2
+flag {
+ name: "hsum_broadcast"
+ namespace: "telephony"
+ description: "Fixed the bug that broadcast intent is only sent to the system user."
+ bug:"362554272"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
diff --git a/src/java/com/android/internal/telephony/CarrierResolver.java b/src/java/com/android/internal/telephony/CarrierResolver.java
index 8a9b3e3..829bf6c 100644
--- a/src/java/com/android/internal/telephony/CarrierResolver.java
+++ b/src/java/com/android/internal/telephony/CarrierResolver.java
@@ -30,6 +30,7 @@
import android.os.AsyncResult;
import android.os.Handler;
import android.os.Message;
+import android.os.UserHandle;
import android.provider.Telephony;
import android.service.carrier.CarrierIdentifier;
import android.telephony.CarrierConfigManager;
@@ -41,6 +42,7 @@
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.metrics.CarrierIdMatchStats;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.subscription.SubscriptionManagerService;
@@ -112,6 +114,9 @@
private final LocalLog mCarrierIdLocalLog = new LocalLog(16);
private final TelephonyManager mTelephonyMgr;
+ @NonNull
+ private final FeatureFlags mFeatureFlags;
+
private final ContentObserver mContentObserver = new ContentObserver(this) {
@Override
public void onChange(boolean selfChange, Uri uri) {
@@ -172,9 +177,10 @@
}
};
- public CarrierResolver(Phone phone) {
+ public CarrierResolver(Phone phone, @NonNull FeatureFlags flags) {
logd("Creating CarrierResolver[" + phone.getPhoneId() + "]");
mContext = phone.getContext();
+ mFeatureFlags = flags;
mPhone = phone;
mTelephonyMgr = TelephonyManager.from(mContext);
@@ -500,7 +506,11 @@
intent.putExtra(TelephonyManager.EXTRA_SPECIFIC_CARRIER_ID, mSpecificCarrierId);
intent.putExtra(TelephonyManager.EXTRA_SPECIFIC_CARRIER_NAME, mSpecificCarrierName);
intent.putExtra(TelephonyManager.EXTRA_SUBSCRIPTION_ID, mPhone.getSubId());
- mContext.sendBroadcast(intent);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
+ } else {
+ mContext.sendBroadcast(intent);
+ }
// notify content observers for specific carrier id change event.
ContentValues cv = new ContentValues();
@@ -535,7 +545,11 @@
intent.putExtra(TelephonyManager.EXTRA_CARRIER_ID, mCarrierId);
intent.putExtra(TelephonyManager.EXTRA_CARRIER_NAME, mCarrierName);
intent.putExtra(TelephonyManager.EXTRA_SUBSCRIPTION_ID, mPhone.getSubId());
- mContext.sendBroadcast(intent);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
+ } else {
+ mContext.sendBroadcast(intent);
+ }
// notify content observers for carrier id change event
ContentValues cv = new ContentValues();
diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
index 6fe1232..94a0a94 100644
--- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java
+++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
@@ -390,7 +390,7 @@
.makeDataNetworkController(this, getLooper(), featureFlags);
mCarrierResolver = mTelephonyComponentFactory.inject(CarrierResolver.class.getName())
- .makeCarrierResolver(this);
+ .makeCarrierResolver(this, featureFlags);
mCarrierPrivilegesTracker = new CarrierPrivilegesTracker(Looper.myLooper(), this, context);
getCarrierActionAgent().registerForCarrierAction(
diff --git a/src/java/com/android/internal/telephony/InboundSmsHandler.java b/src/java/com/android/internal/telephony/InboundSmsHandler.java
index 891f3f4..8e7505e 100644
--- a/src/java/com/android/internal/telephony/InboundSmsHandler.java
+++ b/src/java/com/android/internal/telephony/InboundSmsHandler.java
@@ -806,7 +806,12 @@
Intent intent = new Intent(Intents.SMS_REJECTED_ACTION);
intent.putExtra("result", result);
intent.putExtra("subId", mPhone.getSubId());
- mContext.sendBroadcast(intent, android.Manifest.permission.RECEIVE_SMS);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
+ android.Manifest.permission.RECEIVE_SMS);
+ } else {
+ mContext.sendBroadcast(intent, android.Manifest.permission.RECEIVE_SMS);
+ }
}
acknowledgeLastIncomingSms(success, result, response);
}
diff --git a/src/java/com/android/internal/telephony/MultiSimSettingController.java b/src/java/com/android/internal/telephony/MultiSimSettingController.java
index e98b996..3c35f1a 100644
--- a/src/java/com/android/internal/telephony/MultiSimSettingController.java
+++ b/src/java/com/android/internal/telephony/MultiSimSettingController.java
@@ -43,6 +43,7 @@
import android.os.Looper;
import android.os.Message;
import android.os.ParcelUuid;
+import android.os.UserHandle;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.telephony.CarrierConfigManager;
@@ -792,7 +793,11 @@
intent.putExtra(EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE, type);
intent.putExtra(EXTRA_SUBSCRIPTION_ID, defaultSubId);
- mContext.sendBroadcast(intent);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
+ } else {
+ mContext.sendBroadcast(intent);
+ }
}
private void sendSubChangeNotificationIfNeeded(int change, boolean dataSelected,
@@ -830,7 +835,11 @@
if (simCombinationParams.mWarningType == EXTRA_SIM_COMBINATION_WARNING_TYPE_DUAL_CDMA) {
intent.putExtra(EXTRA_SIM_COMBINATION_NAMES, simCombinationParams.mSimNames);
}
- mContext.sendBroadcast(intent);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
+ } else {
+ mContext.sendBroadcast(intent);
+ }
}
}
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index fb9b2c3..2bbcc99 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -657,7 +657,7 @@
// Initialize device storage and outgoing SMS usage monitors for SMSDispatchers.
mTelephonyComponentFactory = telephonyComponentFactory;
mSmsStorageMonitor = mTelephonyComponentFactory.inject(SmsStorageMonitor.class.getName())
- .makeSmsStorageMonitor(this);
+ .makeSmsStorageMonitor(this, mFeatureFlags);
mSmsUsageMonitor = mTelephonyComponentFactory.inject(SmsUsageMonitor.class.getName())
.makeSmsUsageMonitor(context);
mUiccController = UiccController.getInstance();
@@ -3179,7 +3179,11 @@
Intent intent = new Intent(TelephonyIntents.SECRET_CODE_ACTION,
Uri.parse("android_secret_code://" + code));
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
- mContext.sendBroadcast(intent, null, options.toBundle());
+ if (mFeatureFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL, null, options.toBundle());
+ } else {
+ mContext.sendBroadcast(intent, null, options.toBundle());
+ }
// {@link TelephonyManager.ACTION_SECRET_CODE} will replace {@link
// TelephonyIntents#SECRET_CODE_ACTION} in the next Android version. Before
@@ -3187,7 +3191,12 @@
Intent secrectCodeIntent = new Intent(TelephonyManager.ACTION_SECRET_CODE,
Uri.parse("android_secret_code://" + code));
secrectCodeIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
- mContext.sendBroadcast(secrectCodeIntent, null, options.toBundle());
+ if (mFeatureFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(secrectCodeIntent, UserHandle.ALL, null,
+ options.toBundle());
+ } else {
+ mContext.sendBroadcast(secrectCodeIntent, null, options.toBundle());
+ }
}
}
diff --git a/src/java/com/android/internal/telephony/PhoneConfigurationManager.java b/src/java/com/android/internal/telephony/PhoneConfigurationManager.java
index b96887c..dd96594 100644
--- a/src/java/com/android/internal/telephony/PhoneConfigurationManager.java
+++ b/src/java/com/android/internal/telephony/PhoneConfigurationManager.java
@@ -29,6 +29,7 @@
import android.os.PowerManager;
import android.os.RegistrantList;
import android.os.SystemProperties;
+import android.os.UserHandle;
import android.provider.DeviceConfig;
import android.sysprop.TelephonyProperties;
import android.telephony.PhoneCapability;
@@ -773,7 +774,11 @@
Intent intent = new Intent(ACTION_MULTI_SIM_CONFIG_CHANGED);
intent.putExtra(EXTRA_ACTIVE_SIM_SUPPORTED_COUNT, numOfActiveModems);
- mContext.sendBroadcast(intent);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
+ } else {
+ mContext.sendBroadcast(intent);
+ }
}
/**
* This is invoked from shell commands during CTS testing only.
diff --git a/src/java/com/android/internal/telephony/PhoneFactory.java b/src/java/com/android/internal/telephony/PhoneFactory.java
index f7ce388..c077ca9 100644
--- a/src/java/com/android/internal/telephony/PhoneFactory.java
+++ b/src/java/com/android/internal/telephony/PhoneFactory.java
@@ -207,7 +207,7 @@
// Instantiate UiccController so that all other classes can just
// call getInstance()
- sUiccController = UiccController.make(context);
+ sUiccController = UiccController.make(context, featureFlags);
Rlog.i(LOG_TAG, "Creating SubscriptionManagerService");
sSubscriptionManagerService = new SubscriptionManagerService(context,
diff --git a/src/java/com/android/internal/telephony/ProxyController.java b/src/java/com/android/internal/telephony/ProxyController.java
index 01aed07..3b30d2f 100644
--- a/src/java/com/android/internal/telephony/ProxyController.java
+++ b/src/java/com/android/internal/telephony/ProxyController.java
@@ -28,6 +28,7 @@
import android.os.Message;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
+import android.os.UserHandle;
import android.telephony.RadioAccessFamily;
import android.telephony.TelephonyManager;
import android.util.Log;
@@ -364,7 +365,11 @@
logd("onStartRadioCapabilityResponse got exception=" + ar.exception);
mRadioCapabilitySessionId = mUniqueIdGenerator.getAndIncrement();
Intent intent = new Intent(TelephonyIntents.ACTION_SET_RADIO_CAPABILITY_FAILED);
- mContext.sendBroadcast(intent);
+ if (mFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
+ } else {
+ mContext.sendBroadcast(intent);
+ }
clearTransaction();
return;
}
@@ -611,7 +616,12 @@
}
// Broadcast that we're done
- mContext.sendBroadcast(intent, android.Manifest.permission.READ_PHONE_STATE);
+ if (mFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
+ android.Manifest.permission.READ_PHONE_STATE);
+ } else {
+ mContext.sendBroadcast(intent, android.Manifest.permission.READ_PHONE_STATE);
+ }
}
// Clear this transaction
diff --git a/src/java/com/android/internal/telephony/SmsStorageMonitor.java b/src/java/com/android/internal/telephony/SmsStorageMonitor.java
index 2736f7a..07b7a18 100644
--- a/src/java/com/android/internal/telephony/SmsStorageMonitor.java
+++ b/src/java/com/android/internal/telephony/SmsStorageMonitor.java
@@ -16,6 +16,7 @@
package com.android.internal.telephony;
+import android.annotation.NonNull;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
@@ -33,6 +34,7 @@
import android.telephony.SubscriptionManager;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.util.TelephonyUtils;
import com.android.telephony.Rlog;
@@ -91,6 +93,9 @@
private boolean mMemoryStatusOverrideFlag = false;
+ @NonNull
+ private final FeatureFlags mFeatureFlags;
+
/**
* Hold the wake lock for 5 seconds, which should be enough time for
* any receiver(s) to grab its own wake lock.
@@ -100,9 +105,11 @@
/**
* Creates an SmsStorageMonitor and registers for events.
* @param phone the Phone to use
+ * @param flags The Android feature flags
*/
- public SmsStorageMonitor(Phone phone) {
+ public SmsStorageMonitor(@NonNull Phone phone, @NonNull FeatureFlags flags) {
mPhone = phone;
+ mFeatureFlags = flags;
mContext = phone.getContext();
mCi = phone.mCi;
@@ -278,7 +285,12 @@
intent.setComponent(componentName);
mWakeLock.acquire(WAKE_LOCK_TIMEOUT);
SubscriptionManager.putPhoneIdAndSubIdExtra(intent, mPhone.getPhoneId());
- mContext.sendBroadcast(intent, android.Manifest.permission.RECEIVE_SMS);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
+ android.Manifest.permission.RECEIVE_SMS);
+ } else {
+ mContext.sendBroadcast(intent, android.Manifest.permission.RECEIVE_SMS);
+ }
}
/** Returns whether or not there is storage available for an incoming SMS. */
diff --git a/src/java/com/android/internal/telephony/TelephonyComponentFactory.java b/src/java/com/android/internal/telephony/TelephonyComponentFactory.java
index 0b0f9d3..10e97b6 100644
--- a/src/java/com/android/internal/telephony/TelephonyComponentFactory.java
+++ b/src/java/com/android/internal/telephony/TelephonyComponentFactory.java
@@ -289,8 +289,16 @@
return new GsmCdmaCallTracker(phone, featureFlags);
}
- public SmsStorageMonitor makeSmsStorageMonitor(Phone phone) {
- return new SmsStorageMonitor(phone);
+ /**
+ * Create {@link SmsStorageMonitor} instance.
+ *
+ * @param phone Phone instance
+ * @param flags Android feature flags
+ *
+ * @return The created instance
+ */
+ public SmsStorageMonitor makeSmsStorageMonitor(Phone phone, @NonNull FeatureFlags flags) {
+ return new SmsStorageMonitor(phone, flags);
}
public SmsUsageMonitor makeSmsUsageMonitor(Context context) {
@@ -331,8 +339,16 @@
return new CarrierActionAgent(phone);
}
- public CarrierResolver makeCarrierResolver(Phone phone) {
- return new CarrierResolver(phone);
+ /**
+ * Create {@link CarrierResolver} instance
+ *
+ * @param phone The phone instance
+ * @param flags Android feature flags
+ *
+ * @return The created instance
+ */
+ public CarrierResolver makeCarrierResolver(Phone phone, FeatureFlags flags) {
+ return new CarrierResolver(phone, flags);
}
public IccPhoneBookInterfaceManager makeIccPhoneBookInterfaceManager(Phone phone) {
diff --git a/src/java/com/android/internal/telephony/VisualVoicemailSmsFilter.java b/src/java/com/android/internal/telephony/VisualVoicemailSmsFilter.java
index e374811..64ecdc9 100644
--- a/src/java/com/android/internal/telephony/VisualVoicemailSmsFilter.java
+++ b/src/java/com/android/internal/telephony/VisualVoicemailSmsFilter.java
@@ -35,6 +35,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.VisualVoicemailSmsParser.WrappedMessageData;
+import com.android.internal.telephony.flags.Flags;
import java.nio.ByteBuffer;
import java.nio.charset.CharacterCodingException;
@@ -286,7 +287,11 @@
intent.putExtra(VoicemailContract.EXTRA_VOICEMAIL_SMS, builder.build());
intent.putExtra(VoicemailContract.EXTRA_TARGET_PACKAGE, filterSettings.packageName);
intent.setPackage(TELEPHONY_SERVICE_PACKAGE);
- context.sendBroadcast(intent);
+ if (Flags.hsumBroadcast()) {
+ context.sendBroadcastAsUser(intent, UserHandle.ALL);
+ } else {
+ context.sendBroadcast(intent);
+ }
}
/**
diff --git a/src/java/com/android/internal/telephony/cat/CatService.java b/src/java/com/android/internal/telephony/cat/CatService.java
index 4da1622..5fdb8ce 100644
--- a/src/java/com/android/internal/telephony/cat/CatService.java
+++ b/src/java/com/android/internal/telephony/cat/CatService.java
@@ -40,6 +40,7 @@
import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
+import android.os.UserHandle;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -712,7 +713,12 @@
intent.putExtra("SLOT_ID", mSlotId);
intent.setComponent(AppInterface.getDefaultSTKApplication());
CatLog.d(this, "Sending CmdMsg: " + cmdMsg+ " on slotid:" + mSlotId);
- mContext.sendBroadcast(intent, AppInterface.STK_PERMISSION);
+
+ if (sFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL, AppInterface.STK_PERMISSION);
+ } else {
+ mContext.sendBroadcast(intent, AppInterface.STK_PERMISSION);
+ }
}
/**
@@ -726,7 +732,11 @@
Intent intent = new Intent(AppInterface.CAT_SESSION_END_ACTION);
intent.putExtra("SLOT_ID", mSlotId);
intent.setComponent(AppInterface.getDefaultSTKApplication());
- mContext.sendBroadcast(intent, AppInterface.STK_PERMISSION);
+ if (sFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL, AppInterface.STK_PERMISSION);
+ } else {
+ mContext.sendBroadcast(intent, AppInterface.STK_PERMISSION);
+ }
}
@@ -1090,7 +1100,11 @@
intent.putExtra("SLOT_ID", mSlotId);
CatLog.d(this, "Sending Card Status: "
+ cardState + " " + "cardPresent: " + cardPresent + "SLOT_ID: " + mSlotId);
- mContext.sendBroadcast(intent, AppInterface.STK_PERMISSION);
+ if (sFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL, AppInterface.STK_PERMISSION);
+ } else {
+ mContext.sendBroadcast(intent, AppInterface.STK_PERMISSION);
+ }
}
private void broadcastAlphaMessage(String alphaString) {
@@ -1100,7 +1114,11 @@
intent.putExtra(AppInterface.ALPHA_STRING, alphaString);
intent.putExtra("SLOT_ID", mSlotId);
intent.setComponent(AppInterface.getDefaultSTKApplication());
- mContext.sendBroadcast(intent, AppInterface.STK_PERMISSION);
+ if (sFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL, AppInterface.STK_PERMISSION);
+ } else {
+ mContext.sendBroadcast(intent, AppInterface.STK_PERMISSION);
+ }
}
@Override
diff --git a/src/java/com/android/internal/telephony/data/DataStallRecoveryManager.java b/src/java/com/android/internal/telephony/data/DataStallRecoveryManager.java
index b9b60a0..42e1a78 100644
--- a/src/java/com/android/internal/telephony/data/DataStallRecoveryManager.java
+++ b/src/java/com/android/internal/telephony/data/DataStallRecoveryManager.java
@@ -32,6 +32,7 @@
import android.os.Looper;
import android.os.Message;
import android.os.SystemClock;
+import android.os.UserHandle;
import android.provider.Settings;
import android.telephony.Annotation.RadioPowerState;
import android.telephony.Annotation.ValidationStatus;
@@ -714,7 +715,12 @@
// Put the bundled stats extras on the intent.
intent.putExtra("EXTRA_DSRS_STATS_BUNDLE", bundle);
- mPhone.getContext().sendBroadcast(intent, READ_PRIVILEGED_PHONE_STATE);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mPhone.getContext().sendBroadcastAsUser(intent, UserHandle.ALL,
+ READ_PRIVILEGED_PHONE_STATE);
+ } else {
+ mPhone.getContext().sendBroadcast(intent, READ_PRIVILEGED_PHONE_STATE);
+ }
}
/** Recovery Action: RECOVERY_ACTION_GET_DATA_CALL_LIST */
diff --git a/src/java/com/android/internal/telephony/euicc/EuiccController.java b/src/java/com/android/internal/telephony/euicc/EuiccController.java
index 5ed3eaa..715116e 100644
--- a/src/java/com/android/internal/telephony/euicc/EuiccController.java
+++ b/src/java/com/android/internal/telephony/euicc/EuiccController.java
@@ -1855,7 +1855,12 @@
if (bestComponent != null) {
intent.setPackage(bestComponent.packageName);
}
- mContext.sendBroadcast(intent, permission.WRITE_EMBEDDED_SUBSCRIPTIONS);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
+ permission.WRITE_EMBEDDED_SUBSCRIPTIONS);
+ } else {
+ mContext.sendBroadcast(intent, permission.WRITE_EMBEDDED_SUBSCRIPTIONS);
+ }
}
@Nullable
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
index 1b2aee0..26b6e18 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
@@ -70,6 +70,7 @@
import android.os.RegistrantList;
import android.os.RemoteException;
import android.os.SystemClock;
+import android.os.UserHandle;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.sysprop.TelephonyProperties;
@@ -1543,7 +1544,11 @@
Intent intent = new Intent(intentAction);
intent.putExtra(ImsManager.EXTRA_PHONE_ID, mPhone.getPhoneId());
if (mPhone != null && mPhone.getContext() != null) {
- mPhone.getContext().sendBroadcast(intent);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mPhone.getContext().sendBroadcastAsUser(intent, UserHandle.ALL);
+ } else {
+ mPhone.getContext().sendBroadcast(intent);
+ }
}
}
@@ -4680,8 +4685,14 @@
configChangedIntent.putExtra(ImsConfig.EXTRA_CHANGED_ITEM, item);
configChangedIntent.putExtra(ImsConfig.EXTRA_NEW_VALUE, value);
if (mPhone != null && mPhone.getContext() != null) {
- mPhone.getContext().sendBroadcast(configChangedIntent,
- Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mPhone.getContext().sendBroadcastAsUser(configChangedIntent,
+ UserHandle.ALL,
+ Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
+ } else {
+ mPhone.getContext().sendBroadcast(configChangedIntent,
+ Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
+ }
}
}
@@ -6341,8 +6352,13 @@
configChangedIntent.putExtra(ImsConfig.EXTRA_CHANGED_ITEM, item);
configChangedIntent.putExtra(ImsConfig.EXTRA_NEW_VALUE, value);
if (mPhone != null && mPhone.getContext() != null) {
- mPhone.getContext().sendBroadcast(
- configChangedIntent, Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mPhone.getContext().sendBroadcastAsUser(configChangedIntent, UserHandle.ALL,
+ Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
+ } else {
+ mPhone.getContext().sendBroadcast(
+ configChangedIntent, Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
+ }
}
}
}
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteController.java b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
index c6e1abe..7566ef6 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteController.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
@@ -6074,7 +6074,11 @@
Intent intent = new Intent(action);
intent.setComponent(new ComponentName(packageName, className));
- mContext.sendBroadcast(intent);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
+ } else {
+ mContext.sendBroadcast(intent);
+ }
logd("sendBroadCastForProvisionedESOSSubs" + intent);
}
diff --git a/src/java/com/android/internal/telephony/uicc/IsimUiccRecords.java b/src/java/com/android/internal/telephony/uicc/IsimUiccRecords.java
index 9591a498..9fd6ba5 100644
--- a/src/java/com/android/internal/telephony/uicc/IsimUiccRecords.java
+++ b/src/java/com/android/internal/telephony/uicc/IsimUiccRecords.java
@@ -16,17 +16,20 @@
package com.android.internal.telephony.uicc;
+import android.annotation.NonNull;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncResult;
import android.os.Build;
import android.os.Message;
+import android.os.UserHandle;
import android.telephony.SubscriptionManager;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.CommandsInterface;
+import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.gsm.SimTlv;
import com.android.telephony.Rlog;
@@ -64,6 +67,9 @@
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private String auth_rsp;
+ @NonNull
+ private final FeatureFlags mFeatureFlags;
+
private static final int TAG_ISIM_VALUE = 0x80; // From 3GPP TS 31.103
@Override
@@ -78,9 +84,10 @@
+ " mSmss TPMR=" + getSmssTpmrValue()) : "");
}
- public IsimUiccRecords(UiccCardApplication app, Context c, CommandsInterface ci) {
+ public IsimUiccRecords(@NonNull UiccCardApplication app, @NonNull Context c,
+ @NonNull CommandsInterface ci, @NonNull FeatureFlags flags) {
super(app, c, ci);
-
+ mFeatureFlags = flags;
mRecordsRequested = false; // No load request is made till SIM ready
//todo: currently locked state for ISIM is not handled well and may cause app state to not
//be broadcast
@@ -387,7 +394,11 @@
Intent intent = new Intent(INTENT_ISIM_REFRESH);
log("send ISim REFRESH: " + INTENT_ISIM_REFRESH);
SubscriptionManager.putPhoneIdAndSubIdExtra(intent, mParentApp.getPhoneId());
- mContext.sendBroadcast(intent);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
+ } else {
+ mContext.sendBroadcast(intent);
+ }
}
/**
diff --git a/src/java/com/android/internal/telephony/uicc/UiccCardApplication.java b/src/java/com/android/internal/telephony/uicc/UiccCardApplication.java
index fe19e99..3bda29f 100644
--- a/src/java/com/android/internal/telephony/uicc/UiccCardApplication.java
+++ b/src/java/com/android/internal/telephony/uicc/UiccCardApplication.java
@@ -16,6 +16,7 @@
package com.android.internal.telephony.uicc;
+import android.annotation.NonNull;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.os.AsyncResult;
@@ -29,6 +30,7 @@
import com.android.internal.telephony.CommandException;
import com.android.internal.telephony.CommandsInterface;
import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppState;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppType;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.PersoSubState;
@@ -105,11 +107,14 @@
private RegistrantList mPinLockedRegistrants = new RegistrantList();
private RegistrantList mNetworkLockedRegistrants = new RegistrantList();
- public UiccCardApplication(UiccProfile uiccProfile,
- IccCardApplicationStatus as,
- Context c,
- CommandsInterface ci) {
+ @NonNull
+ private final FeatureFlags mFeatureFlags;
+
+ public UiccCardApplication(@NonNull UiccProfile uiccProfile,
+ @NonNull IccCardApplicationStatus as, @NonNull Context c, @NonNull CommandsInterface ci,
+ @NonNull FeatureFlags flags) {
if (DBG) log("Creating UiccApp: " + as);
+ mFeatureFlags = flags;
mUiccProfile = uiccProfile;
mAppState = as.app_state;
mAppType = as.app_type;
@@ -208,7 +213,7 @@
} else if (type == AppType.APPTYPE_RUIM || type == AppType.APPTYPE_CSIM){
return new RuimRecords(this, c, ci);
} else if (type == AppType.APPTYPE_ISIM) {
- return new IsimUiccRecords(this, c, ci);
+ return new IsimUiccRecords(this, c, ci, mFeatureFlags);
} else {
// Unknown app type (maybe detection is still in progress)
return null;
diff --git a/src/java/com/android/internal/telephony/uicc/UiccController.java b/src/java/com/android/internal/telephony/uicc/UiccController.java
index a0ee2d1..e2117e4 100644
--- a/src/java/com/android/internal/telephony/uicc/UiccController.java
+++ b/src/java/com/android/internal/telephony/uicc/UiccController.java
@@ -35,6 +35,7 @@
import android.os.Handler;
import android.os.Message;
import android.os.RegistrantList;
+import android.os.UserHandle;
import android.preference.PreferenceManager;
import android.sysprop.TelephonyProperties;
import android.telephony.AnomalyReporter;
@@ -64,6 +65,7 @@
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.RadioConfig;
import com.android.internal.telephony.TelephonyIntents;
+import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.subscription.SubscriptionManagerService;
import com.android.internal.telephony.uicc.euicc.EuiccCard;
@@ -245,22 +247,26 @@
// LocalLog buffer to hold important SIM related events for debugging
private static LocalLog sLocalLog = new LocalLog(TelephonyUtils.IS_DEBUGGABLE ? 256 : 64);
+ @NonNull
+ private final FeatureFlags mFeatureFlags;
+
/**
* API to make UiccController singleton if not already created.
*/
- public static UiccController make(Context c) {
+ public static UiccController make(@NonNull Context c, @NonNull FeatureFlags flags) {
synchronized (mLock) {
if (mInstance != null) {
throw new RuntimeException("UiccController.make() should only be called once");
}
- mInstance = new UiccController(c);
+ mInstance = new UiccController(c, flags);
return mInstance;
}
}
- private UiccController(Context c) {
+ private UiccController(@NonNull Context c, @NonNull FeatureFlags flags) {
if (DBG) log("Creating UiccController");
mContext = c;
+ mFeatureFlags = flags;
mCis = PhoneFactory.getCommandsInterfaces();
int numPhysicalSlots = c.getResources().getInteger(
com.android.internal.R.integer.config_num_physical_slots);
@@ -292,7 +298,7 @@
mCis[i].registerForIccRefresh(this, EVENT_SIM_REFRESH, i);
}
- mLauncher = new UiccStateChangedLauncher(c, this);
+ mLauncher = new UiccStateChangedLauncher(c, this, mFeatureFlags);
mCardStrings = loadCardStrings();
mDefaultEuiccCardId = UNINITIALIZED_CARD_ID;
@@ -814,7 +820,12 @@
Rlog.d(LOG_TAG, "Broadcasting intent ACTION_SIM_CARD_STATE_CHANGED "
+ TelephonyManager.simStateToString(state) + " for phone: " + phoneId
+ " slot: " + slotId + " port: " + portIndex + " sub: " + subId);
- mContext.sendBroadcast(intent, Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
+ Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
+ } else {
+ mContext.sendBroadcast(intent, Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
+ }
TelephonyMetrics.getInstance().updateSimState(phoneId, state);
}
}
@@ -854,7 +865,12 @@
+ TelephonyManager.simStateToString(state)
+ " for phone: " + phoneId + " slot: " + slotId + " port: "
+ slot.getPortIndexFromPhoneId(phoneId) + " sub: " + subId);
- mContext.sendBroadcast(intent, Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
+ Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
+ } else {
+ mContext.sendBroadcast(intent, Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
+ }
TelephonyMetrics.getInstance().updateSimState(phoneId, state);
}
}
@@ -1456,8 +1472,13 @@
options.setBackgroundActivityStartsAllowed(true);
Intent intent = new Intent(TelephonyManager.ACTION_SIM_SLOT_STATUS_CHANGED);
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
- mContext.sendBroadcast(intent, android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE,
- options.toBundle());
+ if (mFeatureFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
+ android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, options.toBundle());
+ } else {
+ mContext.sendBroadcast(intent, android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE,
+ options.toBundle());
+ }
}
private boolean hasActivePort(IccSimPortInfo[] simPortInfos) {
diff --git a/src/java/com/android/internal/telephony/uicc/UiccProfile.java b/src/java/com/android/internal/telephony/uicc/UiccProfile.java
index 0e4a5ef..00025a7 100644
--- a/src/java/com/android/internal/telephony/uicc/UiccProfile.java
+++ b/src/java/com/android/internal/telephony/uicc/UiccProfile.java
@@ -106,7 +106,8 @@
private static final String OPERATOR_BRAND_OVERRIDE_PREFIX = "operator_branding_";
- private final @NonNull FeatureFlags mFlags;
+ @NonNull
+ private final FeatureFlags mFlags;
// The lock object is created by UiccSlot that owns the UiccCard that owns this UiccProfile.
// This is to share the lock between UiccSlot, UiccCard and UiccProfile for now.
private final Object mLock;
@@ -1140,7 +1141,7 @@
//Create newly added Applications
if (i < ics.mApplications.length) {
mUiccApplications[i] = new UiccCardApplication(this,
- ics.mApplications[i], mContext, mCi);
+ ics.mApplications[i], mContext, mCi, mFlags);
}
} else if (i >= ics.mApplications.length) {
//Delete removed applications
diff --git a/src/java/com/android/internal/telephony/uicc/UiccStateChangedLauncher.java b/src/java/com/android/internal/telephony/uicc/UiccStateChangedLauncher.java
index 3ef421a..ff48fd1 100644
--- a/src/java/com/android/internal/telephony/uicc/UiccStateChangedLauncher.java
+++ b/src/java/com/android/internal/telephony/uicc/UiccStateChangedLauncher.java
@@ -16,15 +16,18 @@
package com.android.internal.telephony.uicc;
+import android.annotation.NonNull;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
+import android.os.UserHandle;
import android.telephony.TelephonyManager;
import android.util.Log;
import com.android.internal.R;
import com.android.internal.telephony.TelephonyIntents;
+import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.uicc.IccCardStatus.CardState;
/**
@@ -46,7 +49,12 @@
private UiccController mUiccController;
private boolean[] mIsRestricted = null;
- public UiccStateChangedLauncher(Context context, UiccController controller) {
+ @NonNull
+ private final FeatureFlags mFeatureFlags;
+
+ public UiccStateChangedLauncher(Context context, UiccController controller,
+ @NonNull FeatureFlags flags) {
+ mFeatureFlags = flags;
sDeviceProvisioningPackage = context.getResources().getString(
R.string.config_deviceProvisioningPackage);
if (sDeviceProvisioningPackage != null && !sDeviceProvisioningPackage.isEmpty()) {
@@ -92,7 +100,11 @@
Intent intent = new Intent(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
intent.setPackage(sDeviceProvisioningPackage);
try {
- mContext.sendBroadcast(intent);
+ if (mFeatureFlags.hsumBroadcast()) {
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
+ } else {
+ mContext.sendBroadcast(intent);
+ }
} catch (Exception e) {
Log.e(TAG, e.toString());
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/CarrierResolverTest.java b/tests/telephonytests/src/com/android/internal/telephony/CarrierResolverTest.java
index a3fcd4e..753f85c 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/CarrierResolverTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/CarrierResolverTest.java
@@ -98,7 +98,7 @@
super.setUp(getClass().getSimpleName());
((MockContentResolver) mContext.getContentResolver()).addProvider(
CarrierId.AUTHORITY, new CarrierIdContentProvider());
- mCarrierResolver = new CarrierResolver(mPhone);
+ mCarrierResolver = new CarrierResolver(mPhone, mFeatureFlags);
mCarrierResolver.sendEmptyMessage(ICC_CHANGED_EVENT);
processAllMessages();
logd("CarrierResolverTest -Setup!");
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java b/tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java
index 4612ad9..3ecb1e2 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java
@@ -541,6 +541,12 @@
}
@Override
+ public void sendBroadcastAsUser(Intent intent, UserHandle user,
+ String receiverPermission, Bundle options) {
+ sendBroadcast(intent);
+ }
+
+ @Override
public void sendBroadcastMultiplePermissions(Intent intent,
String[] includePermissions, String[] excludePermissions) {
sendBroadcast(intent);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/SmsDispatchersControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/SmsDispatchersControllerTest.java
index 12a119c..acf793e 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/SmsDispatchersControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/SmsDispatchersControllerTest.java
@@ -244,7 +244,7 @@
@Test @SmallTest
public void testReportSmsMemoryStatus() throws Exception {
int eventReportMemoryStatusDone = 3;
- SmsStorageMonitor smsStorageMonnitor = new SmsStorageMonitor(mPhone);
+ SmsStorageMonitor smsStorageMonnitor = new SmsStorageMonitor(mPhone, mFeatureFlags);
Message result = smsStorageMonnitor.obtainMessage(eventReportMemoryStatusDone);
ImsSmsDispatcher mImsSmsDispatcher = Mockito.mock(ImsSmsDispatcher.class);
mSmsDispatchersController.setImsSmsDispatcher(mImsSmsDispatcher);
@@ -257,7 +257,7 @@
@Test @SmallTest
public void testReportSmsMemoryStatusFailure() throws Exception {
int eventReportMemoryStatusDone = 3;
- SmsStorageMonitor smsStorageMonnitor = new SmsStorageMonitor(mPhone);
+ SmsStorageMonitor smsStorageMonnitor = new SmsStorageMonitor(mPhone, mFeatureFlags);
Message result = smsStorageMonnitor.obtainMessage(eventReportMemoryStatusDone);
mSmsDispatchersController.setImsSmsDispatcher(null);
mSmsDispatchersController.reportSmsMemoryStatus(result);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/SmsStorageMonitorTest.java b/tests/telephonytests/src/com/android/internal/telephony/SmsStorageMonitorTest.java
index 4483c61..bdf7e78 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/SmsStorageMonitorTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/SmsStorageMonitorTest.java
@@ -52,7 +52,7 @@
@Before
public void setUp() throws Exception {
super.setUp(getClass().getSimpleName());
- mSmsStorageMonitor = new SmsStorageMonitor(mPhone);
+ mSmsStorageMonitor = new SmsStorageMonitor(mPhone, mFeatureFlags);
mSmsStorageMonitor.setMaxRetries(MAX_RETRIES);
mSmsStorageMonitor.setRetryDelayInMillis(RETRY_DELAY);
processAllMessages();
diff --git a/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java b/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java
index 36ac992..dd4d63a 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java
@@ -581,6 +581,7 @@
doReturn(true).when(mFeatureFlags).minimalTelephonyCdmCheck();
doReturn(true).when(mFeatureFlags).supportNetworkProvider();
+ doReturn(true).when(mFeatureFlags).hsumBroadcast();
TelephonyManager.disableServiceHandleCaching();
PropertyInvalidatedCache.disableForTestMode();
diff --git a/tests/telephonytests/src/com/android/internal/telephony/gsm/GsmSmsDispatcherTest.java b/tests/telephonytests/src/com/android/internal/telephony/gsm/GsmSmsDispatcherTest.java
index 58cc261..8a10fde 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/gsm/GsmSmsDispatcherTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/gsm/GsmSmsDispatcherTest.java
@@ -565,7 +565,7 @@
@Test
public void testSendTextWithMessageRefNegativeBoundaryCondition() throws Exception {
mIsimUiccRecords = new IsimUiccRecords(mUiccCardApplication3gpp, mContext,
- mSimulatedCommands);
+ mSimulatedCommands, mFeatureFlags);
doReturn(mIsimUiccRecords).when(mPhone).getIccRecords();
Message msg = mGsmSmsDispatcher.obtainMessage(17);
mPhone.getIccRecords().setSmssTpmrValue(-1, msg);
@@ -584,7 +584,7 @@
@Test
public void testSendTextWithMessageRefMaxBoundaryCondition() throws Exception {
mIsimUiccRecords = new IsimUiccRecords(mUiccCardApplication3gpp, mContext,
- mSimulatedCommands);
+ mSimulatedCommands, mFeatureFlags);
doReturn(mIsimUiccRecords).when(mPhone).getIccRecords();
Message msg = mGsmSmsDispatcher.obtainMessage(17);
mPhone.getIccRecords().setSmssTpmrValue(255, msg);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/uicc/IsimUiccRecordsTest.java b/tests/telephonytests/src/com/android/internal/telephony/uicc/IsimUiccRecordsTest.java
index 6f4666c..f33b002 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/uicc/IsimUiccRecordsTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/uicc/IsimUiccRecordsTest.java
@@ -66,7 +66,7 @@
private class IsimUiccRecordsUT extends IsimUiccRecords {
IsimUiccRecordsUT(UiccCardApplication app, Context c,
CommandsInterface ci, IccFileHandler mFhMock) {
- super(app, c, ci);
+ super(app, c, ci, mFeatureFlags);
mFh = mFhMock;
}
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccCardApplicationTest.java b/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccCardApplicationTest.java
index d2490ef..10c51c3 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccCardApplicationTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccCardApplicationTest.java
@@ -74,7 +74,7 @@
mUiccCardAppStatus.pin2 = IccCardStatus.PinState.PINSTATE_ENABLED_VERIFIED;
mUiccCardApplication = new UiccCardApplication(mUiccProfile, mUiccCardAppStatus,
- mContext, mSimulatedCommands);
+ mContext, mSimulatedCommands, mFeatureFlags);
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
diff --git a/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccControllerTest.java
index 9265a62..58a8153 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccControllerTest.java
@@ -123,7 +123,7 @@
// (before 1.2) of hal
mIccCardStatus.mSlotPortMapping = new IccSlotPortMapping();
mIccCardStatus.mSlotPortMapping.mPhysicalSlotIndex = 0;
- mUiccControllerUT = UiccController.make(mContext);
+ mUiccControllerUT = UiccController.make(mContext, mFeatureFlags);
// reset sLastSlotStatus so that onGetSlotStatusDone always sees a change in the slot status
mUiccControllerUT.sLastSlotStatus = null;
processAllMessages();
@@ -145,7 +145,7 @@
com.android.internal.R.array.non_removable_euicc_slots,
nonRemovableEuiccSlots);
replaceInstance(UiccController.class, "mInstance", null, null);
- mUiccControllerUT = UiccController.make(mContext);
+ mUiccControllerUT = UiccController.make(mContext, mFeatureFlags);
processAllMessages();
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccStateChangedLauncherTest.java b/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccStateChangedLauncherTest.java
index 8209dfa..f88bc1e 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccStateChangedLauncherTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccStateChangedLauncherTest.java
@@ -32,6 +32,7 @@
import android.content.res.Resources;
import android.os.Looper;
import android.os.Message;
+import android.os.UserHandle;
import android.telephony.TelephonyManager;
import androidx.test.filters.SmallTest;
@@ -89,7 +90,7 @@
}
UiccStateChangedLauncher uiccLauncher =
- new UiccStateChangedLauncher(mContext, UiccController.getInstance());
+ new UiccStateChangedLauncher(mContext, UiccController.getInstance(), mFeatureFlags);
ArgumentCaptor<Integer> integerArgumentCaptor = ArgumentCaptor.forClass(Integer.class);
verify(UiccController.getInstance(), times(1)).registerForIccChanged(eq(uiccLauncher),
integerArgumentCaptor.capture(),
@@ -108,7 +109,8 @@
// Amount of sent broadcasts to the device provisioning package.
int broadcast_count = 1;
- verify(mContext, times(broadcast_count)).sendBroadcast(intentArgumentCaptor.capture());
+ verify(mContext, times(broadcast_count)).sendBroadcastAsUser(intentArgumentCaptor.capture(),
+ eq(UserHandle.ALL));
assertEquals(PROVISIONING_PACKAGE_NAME, intentArgumentCaptor.getValue().getPackage());
assertEquals(TelephonyIntents.ACTION_SIM_STATE_CHANGED,
intentArgumentCaptor.getValue().getAction());
@@ -119,14 +121,16 @@
uiccLauncher.handleMessage(msg);
broadcast_count++;
- verify(mContext, times(broadcast_count)).sendBroadcast(intentArgumentCaptor.capture());
+ verify(mContext, times(broadcast_count)).sendBroadcastAsUser(intentArgumentCaptor.capture(),
+ eq(UserHandle.ALL));
assertEquals(PROVISIONING_PACKAGE_NAME, intentArgumentCaptor.getValue().getPackage());
assertEquals(TelephonyIntents.ACTION_SIM_STATE_CHANGED,
intentArgumentCaptor.getValue().getAction());
// Nothing's changed. Broadcast should not be sent.
uiccLauncher.handleMessage(msg);
- verify(mContext, times(broadcast_count)).sendBroadcast(any(Intent.class));
+ verify(mContext, times(broadcast_count)).sendBroadcastAsUser(any(Intent.class),
+ eq(UserHandle.ALL));
// Card state's changed from restricted. Broadcast should be sent.
card.update(mContext, mSimulatedCommands,
@@ -134,7 +138,8 @@
uiccLauncher.handleMessage(msg);
broadcast_count++;
- verify(mContext, times(broadcast_count)).sendBroadcast(intentArgumentCaptor.capture());
+ verify(mContext, times(broadcast_count)).sendBroadcastAsUser(any(Intent.class),
+ eq(UserHandle.ALL));
assertEquals(PROVISIONING_PACKAGE_NAME, intentArgumentCaptor.getValue().getPackage());
assertEquals(TelephonyIntents.ACTION_SIM_STATE_CHANGED,
intentArgumentCaptor.getValue().getAction());
@@ -151,7 +156,7 @@
}
UiccStateChangedLauncher uiccLauncher =
- new UiccStateChangedLauncher(mContext, UiccController.getInstance());
+ new UiccStateChangedLauncher(mContext, UiccController.getInstance(), mFeatureFlags);
verify(UiccController.getInstance(), never()).registerForIccChanged(eq(uiccLauncher),
anyInt(), anyObject());
}