Merge "Strings for pSIM on/off toggle removal" into qt-dev
diff --git a/res/layout/notif_importance_preference.xml b/res/layout/notif_importance_preference.xml
index 29c337a..44c135b 100644
--- a/res/layout/notif_importance_preference.xml
+++ b/res/layout/notif_importance_preference.xml
@@ -99,7 +99,7 @@
<TextView
android:id="@+id/silence_summary"
android:paddingTop="@dimen/notification_importance_button_padding"
- android:text="@string/notification_channel_summary_default"
+ android:text="@string/notification_channel_summary_low"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="false"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 161f816..f1acce7 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7032,6 +7032,8 @@
<string name="help_uri_wifi_scanning_required" translatable="false"></string>
<!-- url for the bluetooth toggle required dialog help page -->
<string name="help_uri_bluetooth_screen" translatable="false"></string>
+ <!-- url for the SIM combination warning required dialog help page -->
+ <string name="help_uri_sim_combination_warning" translatable="false"></string>
<!-- User account title [CHAR LIMIT=30] -->
<string name="user_account_title">Account for content</string>
@@ -11288,4 +11290,12 @@
<!-- Title for enable MMS notification channel. [CHAR LIMIT=40] -->
<string name="enable_mms_notification_channel_title">MMS message</string>
+
+ <!-- Title for SIM combination warning. [CHAR LIMIT=80] -->
+ <string name="sim_combination_warning_notification_title">Issue with SIM combination</string>
+ <!-- Message for DSDS dual CDMA SIM combination warning. [CHAR LIMIT=100] -->
+ <string name="dual_cdma_sim_warning_notification_summary">Using <xliff:g id="operator_names" example="T-Mobile & Verizon">%1$s</xliff:g> may limit functionality. Tap to learn more.</string>
+
+ <!-- Title for enable MMS notification channel. [CHAR LIMIT=40] -->
+ <string name="dual_cdma_sim_warning_notification_channel_title">SIM combination</string>
</resources>
diff --git a/src/com/android/settings/applications/appinfo/ExternalSourcesDetails.java b/src/com/android/settings/applications/appinfo/ExternalSourcesDetails.java
index b723274..fe1d81c 100644
--- a/src/com/android/settings/applications/appinfo/ExternalSourcesDetails.java
+++ b/src/com/android/settings/applications/appinfo/ExternalSourcesDetails.java
@@ -18,6 +18,7 @@
import static android.app.Activity.RESULT_CANCELED;
import static android.app.Activity.RESULT_OK;
+import android.app.ActivityManager;
import android.app.AppOpsManager;
import android.app.settings.SettingsEnums;
import android.content.Context;
@@ -29,6 +30,7 @@
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.applications.AppInfoWithHeader;
@@ -44,6 +46,7 @@
private AppStateInstallAppsBridge mAppBridge;
private AppOpsManager mAppOpsManager;
+ private ActivityManager mActivityManager;
private UserManager mUserManager;
private RestrictedSwitchPreference mSwitchPref;
private InstallAppsState mInstallAppsState;
@@ -55,6 +58,7 @@
final Context context = getActivity();
mAppBridge = new AppStateInstallAppsBridge(context, mState, null);
mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
+ mActivityManager = context.getSystemService(ActivityManager.class);
mUserManager = UserManager.get(context);
addPreferencesFromResource(R.xml.external_sources_details);
@@ -99,10 +103,21 @@
: R.string.app_permission_summary_not_allowed);
}
- private void setCanInstallApps(boolean newState) {
+ @VisibleForTesting
+ void setCanInstallApps(boolean newState) {
mAppOpsManager.setMode(AppOpsManager.OP_REQUEST_INSTALL_PACKAGES,
mPackageInfo.applicationInfo.uid, mPackageName,
newState ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_ERRORED);
+ if (!newState) {
+ killApp(mPackageInfo.applicationInfo.uid);
+ }
+ }
+
+ private void killApp(int uid) {
+ if (UserHandle.isCore(uid)) {
+ return;
+ }
+ mActivityManager.killUid(uid, "User denied OP_REQUEST_INSTALL_PACKAGES");
}
@Override
diff --git a/src/com/android/settings/notification/ImportancePreference.java b/src/com/android/settings/notification/ImportancePreference.java
index 3e81d0c..b059f91 100644
--- a/src/com/android/settings/notification/ImportancePreference.java
+++ b/src/com/android/settings/notification/ImportancePreference.java
@@ -27,6 +27,7 @@
import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
import android.transition.AutoTransition;
+import android.transition.Transition;
import android.transition.TransitionManager;
import android.util.AttributeSet;
import android.view.View;
@@ -112,6 +113,7 @@
mAlertButton.setEnabled(false);
}
+ setImportanceSummary((ViewGroup) holder.itemView, mImportance, false);
switch (mImportance) {
case IMPORTANCE_MIN:
case IMPORTANCE_LOW:
@@ -126,23 +128,29 @@
mAlertButton.setSelected(true);
break;
}
- setImportanceSummary((ViewGroup) holder.itemView, mImportance, false);
mSilenceButton.setOnClickListener(v -> {
callChangeListener(IMPORTANCE_LOW);
mAlertButton.setBackground(unselectedBackground);
- mAlertButton.setSelected(false);
mSilenceButton.setBackground(selectedBackground);
- mSilenceButton.setSelected(true);
setImportanceSummary((ViewGroup) holder.itemView, IMPORTANCE_LOW, true);
+ // a11y service won't always read the newly appearing text in the right order if the
+ // selection happens too soon (readback happens on a different thread as layout). post
+ // the selection to make that conflict less likely
+ holder.itemView.post(() -> {
+ mAlertButton.setSelected(false);
+ mSilenceButton.setSelected(true);
+ });
});
mAlertButton.setOnClickListener(v -> {
callChangeListener(IMPORTANCE_DEFAULT);
mSilenceButton.setBackground(unselectedBackground);
- mSilenceButton.setSelected(false);
mAlertButton.setBackground(selectedBackground);
- mAlertButton.setSelected(true);
setImportanceSummary((ViewGroup) holder.itemView, IMPORTANCE_DEFAULT, true);
+ holder.itemView.post(() -> {
+ mSilenceButton.setSelected(false);
+ mAlertButton.setSelected(true);
+ });
});
}
@@ -172,9 +180,7 @@
((ImageView) parent.findViewById(R.id.alert_icon)).setImageTintList(colorAccent);
((TextView) parent.findViewById(R.id.alert_label)).setTextColor(colorAccent);
- TextView view = parent.findViewById(R.id.alert_summary);
- view.setText(R.string.notification_channel_summary_default);
- view.setVisibility(VISIBLE);
+ parent.findViewById(R.id.alert_summary).setVisibility(VISIBLE);
} else {
parent.findViewById(R.id.alert_summary).setVisibility(GONE);
((ImageView) parent.findViewById(R.id.alert_icon)).setImageTintList(colorNormal);
@@ -182,9 +188,7 @@
((ImageView) parent.findViewById(R.id.silence_icon)).setImageTintList(colorAccent);
((TextView) parent.findViewById(R.id.silence_label)).setTextColor(colorAccent);
- TextView view = parent.findViewById(R.id.silence_summary);
- view.setVisibility(VISIBLE);
- view.setText(R.string.notification_channel_summary_low);
+ parent.findViewById(R.id.silence_summary).setVisibility(VISIBLE);
}
}
}
diff --git a/src/com/android/settings/sim/SimSelectNotification.java b/src/com/android/settings/sim/SimSelectNotification.java
index d228b6e..a303e42 100644
--- a/src/com/android/settings/sim/SimSelectNotification.java
+++ b/src/com/android/settings/sim/SimSelectNotification.java
@@ -24,6 +24,10 @@
import static android.telephony.TelephonyManager.EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_ALL;
import static android.telephony.TelephonyManager.EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_DATA;
import static android.telephony.TelephonyManager.EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_NONE;
+import static android.telephony.TelephonyManager.EXTRA_SIM_COMBINATION_NAMES;
+import static android.telephony.TelephonyManager.EXTRA_SIM_COMBINATION_WARNING_TYPE;
+import static android.telephony.TelephonyManager.EXTRA_SIM_COMBINATION_WARNING_TYPE_DUAL_CDMA;
+import static android.telephony.TelephonyManager.EXTRA_SIM_COMBINATION_WARNING_TYPE_NONE;
import static android.telephony.TelephonyManager.EXTRA_SUBSCRIPTION_ID;
import static android.telephony.data.ApnSetting.TYPE_MMS;
@@ -43,6 +47,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.network.telephony.MobileNetworkActivity;
+import com.android.settingslib.HelpUtils;
public class SimSelectNotification extends BroadcastReceiver {
private static final String TAG = "SimSelectNotification";
@@ -50,6 +55,8 @@
public static final int SIM_SELECT_NOTIFICATION_ID = 1;
@VisibleForTesting
public static final int ENABLE_MMS_NOTIFICATION_ID = 2;
+ @VisibleForTesting
+ public static final int SIM_WARNING_NOTIFICATION_ID = 3;
@VisibleForTesting
public static final String SIM_SELECT_NOTIFICATION_CHANNEL =
@@ -59,6 +66,10 @@
public static final String ENABLE_MMS_NOTIFICATION_CHANNEL =
"enable_mms_notification_channel";
+ @VisibleForTesting
+ public static final String SIM_WARNING_NOTIFICATION_CHANNEL =
+ "sim_warning_notification_channel";
+
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
@@ -125,13 +136,23 @@
}
private void onPrimarySubscriptionListChanged(Context context, Intent intent) {
+ startSimSelectDialogIfNeeded(context, intent);
+ sendSimCombinationWarningIfNeeded(context, intent);
+ }
+
+ private void startSimSelectDialogIfNeeded(Context context, Intent intent) {
+ int dialogType = intent.getIntExtra(EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE,
+ EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_NONE);
+
+ if (dialogType == EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_NONE) {
+ return;
+ }
+
// Cancel any previous notifications
cancelSimSelectNotification(context);
// Create a notification to tell the user that some defaults are missing
createSimSelectNotification(context);
- int dialogType = intent.getIntExtra(EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE,
- EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_NONE);
if (dialogType == EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_ALL) {
int subId = intent.getIntExtra(EXTRA_SUBSCRIPTION_ID,
SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
@@ -139,11 +160,12 @@
// If there is only one subscription, ask if user wants to use if for everything
Intent newIntent = new Intent(context, SimDialogActivity.class);
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- newIntent.putExtra(SimDialogActivity.DIALOG_TYPE_KEY, SimDialogActivity.PREFERRED_PICK);
+ newIntent.putExtra(SimDialogActivity.DIALOG_TYPE_KEY,
+ SimDialogActivity.PREFERRED_PICK);
newIntent.putExtra(SimDialogActivity.PREFERRED_SIM, slotIndex);
context.startActivity(newIntent);
} else if (dialogType == EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_DATA) {
- // If there are mulitple, ensure they pick default data
+ // If there are multiple, ensure they pick default data
Intent newIntent = new Intent(context, SimDialogActivity.class);
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
newIntent.putExtra(SimDialogActivity.DIALOG_TYPE_KEY, SimDialogActivity.DATA_PICK);
@@ -151,6 +173,18 @@
}
}
+ private void sendSimCombinationWarningIfNeeded(Context context, Intent intent) {
+ final int warningType = intent.getIntExtra(EXTRA_SIM_COMBINATION_WARNING_TYPE,
+ EXTRA_SIM_COMBINATION_WARNING_TYPE_NONE);
+
+ if (warningType == EXTRA_SIM_COMBINATION_WARNING_TYPE_DUAL_CDMA) {
+ // Cancel any previous notifications
+ cancelSimCombinationWarningNotification(context);
+ // Create a notification to tell the user that some defaults are missing
+ createSimCombinationWarningNotification(context, intent);
+ }
+ }
+
private void createSimSelectNotification(Context context){
final Resources resources = context.getResources();
@@ -222,4 +256,52 @@
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(ENABLE_MMS_NOTIFICATION_ID);
}
+
+ private void createSimCombinationWarningNotification(Context context, Intent intent){
+ final Resources resources = context.getResources();
+ final String simNames = intent.getStringExtra(EXTRA_SIM_COMBINATION_NAMES);
+
+ if (simNames == null) {
+ return;
+ }
+
+ CharSequence dualCdmaSimWarningSummary = resources.getString(
+ R.string.dual_cdma_sim_warning_notification_summary, simNames);
+
+ NotificationChannel notificationChannel = new NotificationChannel(
+ SIM_WARNING_NOTIFICATION_CHANNEL,
+ resources.getText(R.string.dual_cdma_sim_warning_notification_channel_title),
+ NotificationManager.IMPORTANCE_HIGH);
+
+ Notification.Builder builder =
+ new Notification.Builder(context, SIM_WARNING_NOTIFICATION_CHANNEL)
+ .setSmallIcon(R.drawable.ic_sim_card_alert_white_48dp)
+ .setColor(context.getColor(R.color.sim_noitification))
+ .setContentTitle(resources.getText(
+ R.string.sim_combination_warning_notification_title))
+ .setContentText(dualCdmaSimWarningSummary)
+ .setStyle(new Notification.BigTextStyle().bigText(
+ dualCdmaSimWarningSummary))
+ .setAutoCancel(true);
+
+ // Create the pending intent that will lead to the helper page.
+ Intent resultIntent = HelpUtils.getHelpIntent(
+ context,
+ context.getString(R.string.help_uri_sim_combination_warning),
+ context.getClass().getName());
+ PendingIntent resultPendingIntent = PendingIntent.getActivity(context, 0, resultIntent,
+ PendingIntent.FLAG_CANCEL_CURRENT);
+ builder.setContentIntent(resultPendingIntent);
+
+ NotificationManager notificationManager =
+ context.getSystemService(NotificationManager.class);
+ notificationManager.createNotificationChannel(notificationChannel);
+ notificationManager.notify(SIM_WARNING_NOTIFICATION_ID, builder.build());
+ }
+
+ public static void cancelSimCombinationWarningNotification(Context context) {
+ NotificationManager notificationManager =
+ context.getSystemService(NotificationManager.class);
+ notificationManager.cancel(SIM_WARNING_NOTIFICATION_ID);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourcesDetailsTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourcesDetailsTest.java
index 10c2675..002a0bc 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourcesDetailsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourcesDetailsTest.java
@@ -19,11 +19,17 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.ActivityManager;
+import android.app.AppOpsManager;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.pm.ApplicationInfo;
@@ -55,6 +61,10 @@
@Mock
private UserManager mUserManager;
@Mock
+ private ActivityManager mActivityManager;
+ @Mock
+ private AppOpsManager mAppOpsManager;
+ @Mock
private RestrictedSwitchPreference mSwitchPref;
@Mock
private RestrictedPreferenceHelper mHelper;
@@ -69,10 +79,47 @@
mFragment = new ExternalSourcesDetails();
ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
+ ReflectionHelpers.setField(mFragment, "mActivityManager", mActivityManager);
+ ReflectionHelpers.setField(mFragment, "mAppOpsManager", mAppOpsManager);
ReflectionHelpers.setField(mFragment, "mSwitchPref", mSwitchPref);
}
@Test
+ public void setCanInstallApps_false_shouldKillNonCoreUid() {
+ int mockUid = 23456;
+ ReflectionHelpers.setField(mFragment, "mPackageInfo", mPackageInfo);
+
+ mPackageInfo.applicationInfo = new ApplicationInfo();
+ mPackageInfo.applicationInfo.uid = mockUid;
+ assertThat(UserHandle.isCore(mockUid)).isFalse();
+ mFragment.setCanInstallApps(false);
+ verify(mActivityManager).killUid(eq(mockUid), anyString());
+ }
+
+ @Test
+ public void setCanInstallApps_false_shouldNotKillCoreUid() {
+ int mockUid = 1234;
+ ReflectionHelpers.setField(mFragment, "mPackageInfo", mPackageInfo);
+
+ mPackageInfo.applicationInfo = new ApplicationInfo();
+ mPackageInfo.applicationInfo.uid = mockUid;
+ assertThat(UserHandle.isCore(mockUid)).isTrue();
+ mFragment.setCanInstallApps(false);
+ verify(mActivityManager, never()).killUid(eq(mockUid), anyString());
+ }
+
+ @Test
+ public void setCanInstallApps_true_shouldNotKillUid() {
+ int mockUid = 23456;
+ ReflectionHelpers.setField(mFragment, "mPackageInfo", mPackageInfo);
+
+ mPackageInfo.applicationInfo = new ApplicationInfo();
+ mPackageInfo.applicationInfo.uid = mockUid;
+ mFragment.setCanInstallApps(true);
+ verify(mActivityManager, never()).killUid(eq(mockUid), anyString());
+ }
+
+ @Test
public void refreshUi_noPackageInfo_shouldReturnFalseAndNoCrash() {
mFragment.refreshUi();
diff --git a/tests/robotests/src/com/android/settings/sim/SimSelectNotificationTest.java b/tests/robotests/src/com/android/settings/sim/SimSelectNotificationTest.java
index 69c0919..5a2dd48 100644
--- a/tests/robotests/src/com/android/settings/sim/SimSelectNotificationTest.java
+++ b/tests/robotests/src/com/android/settings/sim/SimSelectNotificationTest.java
@@ -21,10 +21,15 @@
import static android.provider.Settings.ENABLE_MMS_DATA_REQUEST_REASON_OUTGOING_MMS;
import static android.provider.Settings.EXTRA_ENABLE_MMS_DATA_REQUEST_REASON;
import static android.provider.Settings.EXTRA_SUB_ID;
+import static android.telephony.TelephonyManager.EXTRA_SIM_COMBINATION_NAMES;
+import static android.telephony.TelephonyManager.EXTRA_SIM_COMBINATION_WARNING_TYPE;
+import static android.telephony.TelephonyManager.EXTRA_SIM_COMBINATION_WARNING_TYPE_DUAL_CDMA;
import static android.telephony.data.ApnSetting.TYPE_MMS;
import static com.android.settings.sim.SimSelectNotification.ENABLE_MMS_NOTIFICATION_CHANNEL;
import static com.android.settings.sim.SimSelectNotification.ENABLE_MMS_NOTIFICATION_ID;
+import static com.android.settings.sim.SimSelectNotification.SIM_WARNING_NOTIFICATION_CHANNEL;
+import static com.android.settings.sim.SimSelectNotification.SIM_WARNING_NOTIFICATION_ID;
import static com.google.common.truth.Truth.assertThat;
@@ -76,10 +81,16 @@
@Mock
private Resources mResources;
- private String mFakeOperatorName = "fake_operator_name";
- private CharSequence mFakeNotificationChannelTitle = "fake_notification_channel_title";
- private CharSequence mFakeNotificationTitle = "fake_notification_title";
- private String mFakeNotificationSummary = "fake_notification_Summary";
+ private final String mFakeOperatorName = "fake_operator_name";
+ private final CharSequence mFakeNotificationChannelTitle = "fake_notification_channel_title";
+ private final CharSequence mFakeNotificationTitle = "fake_notification_title";
+ private final String mFakeNotificationSummary = "fake_notification_Summary";
+
+ // Dual CDMA combination notification.
+ private final String mFakeDualCdmaWarningChannelTitle = "fake_dual_cdma_warning_channel_title";
+ private final String mFakeDualCdmaWarningTitle = "fake_dual_cdma_warning_title";
+ private final String mFakeDualCdmaWarningSummary = "fake_dual_cdma_warning_summary";
+ private final String mSimCombinationName = " carrier1 & carrier 2";
private int mSubId = 1;
@@ -90,6 +101,8 @@
MockitoAnnotations.initMocks(this);
when(mContext.getSystemService(Context.NOTIFICATION_SERVICE))
.thenReturn(mNotificationManager);
+ when(mContext.getSystemService(NotificationManager.class))
+ .thenReturn(mNotificationManager);
when(mContext.getSystemService(Context.TELEPHONY_SERVICE))
.thenReturn(mTelephonyManager);
when(mContext.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE))
@@ -111,6 +124,13 @@
.thenReturn(mFakeNotificationChannelTitle);
when(mResources.getString(R.string.enable_mms_notification_summary,
mFakeOperatorName)).thenReturn(mFakeNotificationSummary);
+
+ when(mResources.getText(R.string.dual_cdma_sim_warning_notification_channel_title))
+ .thenReturn(mFakeDualCdmaWarningChannelTitle);
+ when(mResources.getText(R.string.sim_combination_warning_notification_title))
+ .thenReturn(mFakeDualCdmaWarningTitle);
+ when(mResources.getString(R.string.dual_cdma_sim_warning_notification_summary,
+ mSimCombinationName)).thenReturn(mFakeDualCdmaWarningSummary);
}
@Test
@@ -162,5 +182,43 @@
mSimSelectNotification.onReceive(mContext, intent);
verify(mNotificationManager, never()).createNotificationChannel(any());
}
+
+ @Test
+ public void onReceivePrimarySubListChange_NoExtra_notificationShouldNotSend() {
+ Intent intent = new Intent(TelephonyManager.ACTION_PRIMARY_SUBSCRIPTION_LIST_CHANGED);
+
+ // EXTRA_SUB_ID and EXTRA_ENABLE_MMS_DATA_REQUEST_REASON are required.
+ mSimSelectNotification.onReceive(mContext, intent);
+ verify(mNotificationManager, never()).createNotificationChannel(any());
+ }
+
+ @Test
+ public void onReceivePrimarySubListChange_DualCdmaWarning_notificationShouldSend() {
+ Intent intent = new Intent(TelephonyManager.ACTION_PRIMARY_SUBSCRIPTION_LIST_CHANGED);
+
+ intent.putExtra(EXTRA_SIM_COMBINATION_NAMES, mSimCombinationName);
+ intent.putExtra(EXTRA_SIM_COMBINATION_WARNING_TYPE,
+ EXTRA_SIM_COMBINATION_WARNING_TYPE_DUAL_CDMA);
+
+ mSimSelectNotification.onReceive(mContext, intent);
+
+ // Capture the notification channel created and verify its fields.
+ ArgumentCaptor<NotificationChannel> nc = ArgumentCaptor.forClass(NotificationChannel.class);
+ verify(mNotificationManager).createNotificationChannel(nc.capture());
+
+ assertThat(nc.getValue().getId()).isEqualTo(SIM_WARNING_NOTIFICATION_CHANNEL);
+ assertThat(nc.getValue().getName()).isEqualTo(mFakeDualCdmaWarningChannelTitle);
+ assertThat(nc.getValue().getImportance()).isEqualTo(IMPORTANCE_HIGH);
+
+ // Capture the notification it notifies and verify its fields.
+ ArgumentCaptor<Notification> notification = ArgumentCaptor.forClass(Notification.class);
+ verify(mNotificationManager).notify(
+ eq(SIM_WARNING_NOTIFICATION_ID), notification.capture());
+ assertThat(notification.getValue().extras.getCharSequence(Notification.EXTRA_TITLE))
+ .isEqualTo(mFakeDualCdmaWarningTitle);
+ assertThat(notification.getValue().extras.getCharSequence(Notification.EXTRA_BIG_TEXT))
+ .isEqualTo(mFakeDualCdmaWarningSummary);
+ assertThat(notification.getValue().contentIntent).isNotNull();
+ }
}