From 54824c3e64b269b171ad74f8b620875510d7595f Mon Sep 17 00:00:00 2001 From: Weng Su Date: Thu, 19 May 2022 20:09:20 +0800 Subject: Show mobile data icon with carrier Wi-Fi level in Quick-Settings - If carrier Wi-Fi is active then use carrier Wi-Fi level instead of mobile data level. - If carrier Wi-Fi level is less than min-level, use min-level instead. Bug: 222885558 Test: manual test atest -c InternetDialogControllerTest Change-Id: If8d2871e61396dd8eb3ebab5eda0906d46a06c33 --- .../qs/tiles/dialog/InternetDialogController.java | 21 +++++-- .../tiles/dialog/InternetDialogControllerTest.java | 65 +++++++++++++++++++++- 2 files changed, 80 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java index 90a3d4586fd3..f1fdae7db482 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java @@ -451,11 +451,11 @@ public class InternetDialogController implements AccessPointController.AccessPoi final SignalStrength strength = mTelephonyManager.getSignalStrength(); int level = (strength == null) ? 0 : strength.getLevel(); int numLevels = SignalStrength.NUM_SIGNAL_STRENGTH_BINS; - if ((mSubscriptionManager != null && shouldInflateSignalStrength(mDefaultDataSubId)) - || isCarrierNetworkActive) { - level = isCarrierNetworkActive - ? SignalStrength.NUM_SIGNAL_STRENGTH_BINS - : (level + 1); + if (isCarrierNetworkActive) { + level = getCarrierNetworkLevel(); + numLevels = WifiEntry.WIFI_LEVEL_MAX + 1; + } else if (mSubscriptionManager != null && shouldInflateSignalStrength(mDefaultDataSubId)) { + level += 1; numLevels += 1; } return getSignalStrengthIcon(mContext, level, numLevels, NO_CELL_DATA_TYPE_ICON, @@ -689,6 +689,17 @@ public class InternetDialogController implements AccessPointController.AccessPoi return mergedCarrierEntry != null && mergedCarrierEntry.isDefaultNetwork(); } + int getCarrierNetworkLevel() { + final MergedCarrierEntry mergedCarrierEntry = + mAccessPointController.getMergedCarrierEntry(); + if (mergedCarrierEntry == null) return WifiEntry.WIFI_LEVEL_MIN; + + int level = mergedCarrierEntry.getLevel(); + // To avoid icons not found with WIFI_LEVEL_UNREACHABLE(-1), use WIFI_LEVEL_MIN(0) instead. + if (level < WifiEntry.WIFI_LEVEL_MIN) level = WifiEntry.WIFI_LEVEL_MIN; + return level; + } + @WorkerThread void setMergedCarrierWifiEnabledIfNeed(int subId, boolean enabled) { // If the Carrier Provisions Wi-Fi Merged Networks enabled, do not set the merged carrier diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java index 4a8cb0b76dc4..7b1e5c9f7264 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java @@ -1,9 +1,15 @@ package com.android.systemui.qs.tiles.dialog; import static android.provider.Settings.Global.AIRPLANE_MODE_ON; +import static android.telephony.SignalStrength.NUM_SIGNAL_STRENGTH_BINS; +import static android.telephony.SignalStrength.SIGNAL_STRENGTH_GREAT; +import static android.telephony.SignalStrength.SIGNAL_STRENGTH_POOR; import static com.android.systemui.qs.tiles.dialog.InternetDialogController.TOAST_PARAMS_HORIZONTAL_WEIGHT; import static com.android.systemui.qs.tiles.dialog.InternetDialogController.TOAST_PARAMS_VERTICAL_WEIGHT; +import static com.android.wifitrackerlib.WifiEntry.WIFI_LEVEL_MAX; +import static com.android.wifitrackerlib.WifiEntry.WIFI_LEVEL_MIN; +import static com.android.wifitrackerlib.WifiEntry.WIFI_LEVEL_UNREACHABLE; import static com.google.common.truth.Truth.assertThat; @@ -17,6 +23,7 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -28,6 +35,7 @@ import android.net.ConnectivityManager; import android.net.wifi.WifiManager; import android.os.Handler; import android.telephony.ServiceState; +import android.telephony.SignalStrength; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.testing.AndroidTestingRunner; @@ -140,6 +148,8 @@ public class InternetDialogControllerTest extends SysuiTestCase { private View mDialogLaunchView; @Mock private WifiStateWorker mWifiStateWorker; + @Mock + private SignalStrength mSignalStrength; private TestableResources mTestableResources; private InternetDialogController mInternetDialogController; @@ -152,6 +162,8 @@ public class InternetDialogControllerTest extends SysuiTestCase { MockitoAnnotations.initMocks(this); mTestableResources = mContext.getOrCreateTestableResources(); doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(anyInt()); + when(mTelephonyManager.getSignalStrength()).thenReturn(mSignalStrength); + when(mSignalStrength.getLevel()).thenReturn(SIGNAL_STRENGTH_GREAT); when(mKeyguardStateController.isUnlocked()).thenReturn(true); when(mConnectedEntry.isDefaultNetwork()).thenReturn(true); when(mConnectedEntry.hasInternetAccess()).thenReturn(true); @@ -380,7 +392,7 @@ public class InternetDialogControllerTest extends SysuiTestCase { @Test public void getInternetWifiDrawable_withWifiLevelUnreachable_returnNull() { - when(mConnectedEntry.getLevel()).thenReturn(WifiEntry.WIFI_LEVEL_UNREACHABLE); + when(mConnectedEntry.getLevel()).thenReturn(WIFI_LEVEL_UNREACHABLE); Drawable drawable = mInternetDialogController.getInternetWifiDrawable(mConnectedEntry); @@ -638,6 +650,57 @@ public class InternetDialogControllerTest extends SysuiTestCase { assertThat(mInternetDialogController.isWifiScanEnabled()).isTrue(); } + @Test + public void getSignalStrengthDrawableWithLevel_carrierNetworkIsNotActive_useMobileDataLevel() { + // Fake mobile data level as SIGNAL_STRENGTH_POOR(1) + when(mSignalStrength.getLevel()).thenReturn(SIGNAL_STRENGTH_POOR); + // Fake carrier network level as WIFI_LEVEL_MAX(4) + when(mInternetDialogController.getCarrierNetworkLevel()).thenReturn(WIFI_LEVEL_MAX); + + InternetDialogController spyController = spy(mInternetDialogController); + spyController.getSignalStrengthDrawableWithLevel(false /* isCarrierNetworkActive */); + + verify(spyController).getSignalStrengthIcon(any(), eq(SIGNAL_STRENGTH_POOR), + eq(NUM_SIGNAL_STRENGTH_BINS), anyInt(), anyBoolean()); + } + + @Test + public void getSignalStrengthDrawableWithLevel_carrierNetworkIsActive_useCarrierNetworkLevel() { + // Fake mobile data level as SIGNAL_STRENGTH_POOR(1) + when(mSignalStrength.getLevel()).thenReturn(SIGNAL_STRENGTH_POOR); + // Fake carrier network level as WIFI_LEVEL_MAX(4) + when(mInternetDialogController.getCarrierNetworkLevel()).thenReturn(WIFI_LEVEL_MAX); + + InternetDialogController spyController = spy(mInternetDialogController); + spyController.getSignalStrengthDrawableWithLevel(true /* isCarrierNetworkActive */); + + verify(spyController).getSignalStrengthIcon(any(), eq(WIFI_LEVEL_MAX), + eq(WIFI_LEVEL_MAX + 1), anyInt(), anyBoolean()); + } + + @Test + public void getCarrierNetworkLevel_mergedCarrierEntryIsNull_returnMinLevel() { + when(mAccessPointController.getMergedCarrierEntry()).thenReturn(null); + + assertThat(mInternetDialogController.getCarrierNetworkLevel()).isEqualTo(WIFI_LEVEL_MIN); + } + + @Test + public void getCarrierNetworkLevel_getUnreachableLevel_returnMinLevel() { + when(mMergedCarrierEntry.getLevel()).thenReturn(WIFI_LEVEL_UNREACHABLE); + + assertThat(mInternetDialogController.getCarrierNetworkLevel()).isEqualTo(WIFI_LEVEL_MIN); + } + + @Test + public void getCarrierNetworkLevel_getAvailableLevel_returnSameLevel() { + for (int level = WIFI_LEVEL_MIN; level <= WIFI_LEVEL_MAX; level++) { + when(mMergedCarrierEntry.getLevel()).thenReturn(level); + + assertThat(mInternetDialogController.getCarrierNetworkLevel()).isEqualTo(level); + } + } + private String getResourcesString(String name) { return mContext.getResources().getString(getResourcesId(name)); } -- cgit v1.2.3-59-g8ed1b