Merge "Suppress Notifications for Hidden Subs" into main
diff --git a/src/com/android/phone/NotificationMgr.java b/src/com/android/phone/NotificationMgr.java
index 3c7b321..4fb96a2 100644
--- a/src/com/android/phone/NotificationMgr.java
+++ b/src/com/android/phone/NotificationMgr.java
@@ -878,7 +878,9 @@
+ (isManualSelection ? selectedNetworkOperatorName : ""));
}
- if (isManualSelection) {
+ if (isManualSelection
+ && isSubscriptionVisibleToUser(
+ mSubscriptionManager.getActiveSubscriptionInfo(subId))) {
mSelectedNetworkOperatorName.put(subId, selectedNetworkOperatorName);
shouldShowNotification(serviceState, subId);
} else {
@@ -934,7 +936,9 @@
+ (isManualSelection ? selectedNetworkOperatorName : ""));
}
- if (isManualSelection) {
+ if (isManualSelection
+ && isSubscriptionVisibleToUser(
+ mSubscriptionManager.getActiveSubscriptionInfo(subId))) {
mSelectedNetworkOperatorName.put(subId, selectedNetworkOperatorName);
shouldShowNotification(serviceState, subId);
} else {
@@ -949,6 +953,12 @@
}
}
+ // TODO(b/261916533) This should be handled by SubscriptionManager#isSubscriptionVisible(),
+ // but that method doesn't support system callers, so here we are.
+ private boolean isSubscriptionVisibleToUser(SubscriptionInfo subInfo) {
+ return subInfo != null && (!subInfo.isOpportunistic() || subInfo.getGroupUuid() == null);
+ }
+
private void dismissNetworkSelectionNotification(int subId) {
if (mSelectedUnavailableNotify.get(subId, false)) {
cancelNetworkSelection(subId);
diff --git a/tests/src/com/android/phone/NotificationMgrTest.java b/tests/src/com/android/phone/NotificationMgrTest.java
index 98c6a4a..2b0ff94 100644
--- a/tests/src/com/android/phone/NotificationMgrTest.java
+++ b/tests/src/com/android/phone/NotificationMgrTest.java
@@ -59,6 +59,7 @@
import android.content.pm.ApplicationInfo;
import android.content.res.Resources;
import android.os.Build;
+import android.os.ParcelUuid;
import android.os.PersistableBundle;
import android.os.SystemClock;
import android.os.UserHandle;
@@ -409,6 +410,35 @@
}
@Test
+ public void testUpdateNetworkSelection_opportunisticSubscription_notificationNotSent()
+ throws Exception {
+ prepareResourcesForNetworkSelection();
+ when(mSubscriptionManager.getActiveSubscriptionInfo(eq(TEST_SUB_ID))).thenReturn(
+ mSubscriptionInfo);
+
+ when(mTelephonyManager.isManualNetworkSelectionAllowed()).thenReturn(true);
+ PersistableBundle config = new PersistableBundle();
+ config.putBoolean(CarrierConfigManager.KEY_OPERATOR_SELECTION_EXPAND_BOOL, true);
+ config.putBoolean(CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL, false);
+ config.putBoolean(CarrierConfigManager.KEY_CSP_ENABLED_BOOL, false);
+ config.putBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL, true);
+ when(mCarrierConfigManager.getConfigForSubId(TEST_SUB_ID)).thenReturn(config);
+
+ when(mSubscriptionInfo.isOpportunistic()).thenReturn(true);
+ when(mSubscriptionInfo.getGroupUuid()).thenReturn(
+ ParcelUuid.fromString("5be5c5f3-3412-452e-86a0-6f18558ae8c8"));
+
+ mNotificationMgr.updateNetworkSelection(ServiceState.STATE_OUT_OF_SERVICE, TEST_SUB_ID);
+ try {
+ Thread.sleep(10000);
+ } catch (InterruptedException ignored) {
+ }
+ mNotificationMgr.updateNetworkSelection(ServiceState.STATE_OUT_OF_SERVICE, TEST_SUB_ID);
+
+ verify(mNotificationManager, never()).notify(any(), anyInt(), any());
+ }
+
+ @Test
public void testUpdateNetworkSelection_worldMode_userSetLTE_notificationNotSent() {
prepareResourcesForNetworkSelection();
@@ -632,6 +662,8 @@
when(mApp.getString(R.string.mobile_network_settings_class)).thenReturn(
MOBILE_NETWORK_SELECTION_CLASS);
when(mSubscriptionManager.isActiveSubId(anyInt())).thenReturn(true);
+ when(mSubscriptionManager.getActiveSubscriptionInfo(eq(TEST_SUB_ID))).thenReturn(
+ mSubscriptionInfo);
}
private void moveTimeForward(long seconds) {