From dc7dea86733b71d034fa229b3d545c3f3b402430 Mon Sep 17 00:00:00 2001 From: Weng Su Date: Fri, 23 Jul 2021 02:29:10 +0800 Subject: [PATCH] [Provider Model] Show searching sub-title for 2 seconds - When Wi-Fi entry is empty - Show searching sub-title for 2 seconds - Then show following sub-title - "No other networks available" if only Wi-Fi unavailable - "No networks available" if both Wi-Fi and mobile-data unavailable Bug: 192818223 Bug: 192934101 Bug: 192935392 Test: manual test atest InternetDialogTest \ InternetDialogControllerTest Change-Id: I8394f5808d776589cbf115e6df8a7d456df5bc17 --- .../qs/tiles/dialog/InternetDialog.java | 29 ++++++--- .../dialog/InternetDialogController.java | 10 +-- .../dialog/InternetDialogControllerTest.java | 5 +- .../qs/tiles/dialog/InternetDialogTest.java | 61 +++++++++++++++++++ 4 files changed, 91 insertions(+), 14 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java index ce1c2fd08a4d9..44c933cd16e9a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java @@ -79,11 +79,11 @@ public class InternetDialog extends SystemUIDialog implements InternetDialogController.InternetDialogCallback, Window.Callback { private static final String TAG = "InternetDialog"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); + + static final long PROGRESS_DELAY_MS = 2000L; + private final Handler mHandler; private final LinearLayoutManager mLayoutManager; - private final Runnable mHideProgressBarRunnable = () -> { - setProgressBarVisible(false); - }; @VisibleForTesting protected InternetAdapter mAdapter; @@ -125,9 +125,19 @@ public class InternetDialog extends SystemUIDialog implements private WifiEntry mConnectedWifiEntry; private int mListMaxHeight; private int mDefaultDataSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; - private boolean mIsProgressBarVisible; private boolean mCanConfigMobileData; + // Wi-Fi scanning progress bar + protected boolean mIsProgressBarVisible; + protected boolean mIsSearchingHidden; + protected final Runnable mHideProgressBarRunnable = () -> { + setProgressBarVisible(false); + }; + protected Runnable mHideSearchingRunnable = () -> { + mIsSearchingHidden = true; + mInternetDialogSubTitle.setText(getSubtitleText()); + }; + private final ViewTreeObserver.OnGlobalLayoutListener mInternetListLayoutListener = () -> { // Set max height for list if (mInternetListLayout.getHeight() > mListMaxHeight) { @@ -243,6 +253,7 @@ public class InternetDialog extends SystemUIDialog implements Log.d(TAG, "onStop"); } mHandler.removeCallbacks(mHideProgressBarRunnable); + mHandler.removeCallbacks(mHideSearchingRunnable); mMobileNetworkLayout.setOnClickListener(null); mMobileDataToggle.setOnCheckedChangeListener(null); mConnectedWifListLayout.setOnClickListener(null); @@ -374,7 +385,8 @@ public class InternetDialog extends SystemUIDialog implements } CharSequence getSubtitleText() { - return mInternetDialogController.getSubtitleText(mIsProgressBarVisible); + return mInternetDialogController.getSubtitleText( + mIsProgressBarVisible && !mIsSearchingHidden); } private Drawable getConnectedWifiDrawable() { @@ -406,7 +418,7 @@ public class InternetDialog extends SystemUIDialog implements return mInternetDialogController.getConnectedWifiSummary(); } - private void showProgressBar() { + protected void showProgressBar() { if (mWifiManager == null || !mWifiManager.isWifiEnabled()) { setProgressBarVisible(false); return; @@ -414,8 +426,9 @@ public class InternetDialog extends SystemUIDialog implements setProgressBarVisible(true); List wifiScanResults = mWifiManager.getScanResults(); if (wifiScanResults != null && wifiScanResults.size() > 0) { - mContext.getMainThreadHandler().postDelayed(mHideProgressBarRunnable, - 2000 /* delay millis */); + mHandler.postDelayed(mHideProgressBarRunnable, PROGRESS_DELAY_MS); + } else if (!mIsSearchingHidden) { + mHandler.postDelayed(mHideSearchingRunnable, PROGRESS_DELAY_MS); } } 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 edab33aa6aff5..13c576301e643 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 @@ -269,17 +269,17 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, return mContext.getText(SUBTITLE_TEXT_WIFI_IS_OFF); } + final List wifiList = mWifiManager.getScanResults(); + if (wifiList != null && wifiList.size() != 0) { + return mContext.getText(SUBTITLE_TEXT_TAP_A_NETWORK_TO_CONNECT); + } + if (isProgressBarVisible) { // When the Wi-Fi scan result callback is received // Sub-Title: Searching for networks... return mContext.getText(SUBTITLE_TEXT_SEARCHING_FOR_NETWORKS); } - final List wifiList = mWifiManager.getScanResults(); - if (wifiList != null && wifiList.size() != 0) { - return mContext.getText(SUBTITLE_TEXT_TAP_A_NETWORK_TO_CONNECT); - } - // Sub-Title: // show non_carrier_network_unavailable // - while Wi-Fi on + no Wi-Fi item 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 facb19fae95a4..68df19ef93c9a 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 @@ -138,9 +138,12 @@ public class InternetDialogControllerTest extends SysuiTestCase { } @Test - public void getSubtitleText_withWifiOn_returnSearchWifi() { + public void getSubtitleText_withNoWifiEntry_returnSearchWifi() { mInternetDialogController.setAirplaneModeEnabled(false); when(mWifiManager.isWifiEnabled()).thenReturn(true); + List wifiScanResults = mock(ArrayList.class); + doReturn(0).when(wifiScanResults).size(); + when(mWifiManager.getScanResults()).thenReturn(wifiScanResults); assertTrue(TextUtils.equals(mInternetDialogController.getSubtitleText(true), getResourcesString("wifi_empty_list_wifi_on"))); diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java index 94bd959c9585a..a1a7e716e6c0d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java @@ -2,8 +2,12 @@ package com.android.systemui.qs.tiles.dialog; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -11,6 +15,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.net.wifi.ScanResult; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Handler; @@ -34,10 +39,13 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; @SmallTest @RunWith(AndroidTestingRunner.class) @@ -170,6 +178,59 @@ public class InternetDialogTest extends SysuiTestCase { verify(mInternetDialogController).launchNetworkSetting(); } + @Test + public void showProgressBar_wifiDisabled_hideProgressBar() { + when(mMockWifiManager.isWifiEnabled()).thenReturn(false); + + mInternetDialog.showProgressBar(); + + assertThat(mInternetDialog.mIsProgressBarVisible).isFalse(); + verify(mHandler, never()).postDelayed(any(Runnable.class), anyLong()); + } + + @Test + public void showProgressBar_wifiEnabledWithWifiEntry_showProgressBarThenHide() { + when(mMockWifiManager.isWifiEnabled()).thenReturn(true); + List wifiScanResults = mock(ArrayList.class); + when(wifiScanResults.size()).thenReturn(1); + when(mMockWifiManager.getScanResults()).thenReturn(wifiScanResults); + + mInternetDialog.showProgressBar(); + + // Show progress bar + assertThat(mInternetDialog.mIsProgressBarVisible).isTrue(); + + ArgumentCaptor runnableCaptor = ArgumentCaptor.forClass(Runnable.class); + verify(mHandler).postDelayed(runnableCaptor.capture(), + eq(InternetDialog.PROGRESS_DELAY_MS)); + runnableCaptor.getValue().run(); + + // Then hide progress bar + assertThat(mInternetDialog.mIsProgressBarVisible).isFalse(); + } + + @Test + public void showProgressBar_wifiEnabledWithoutWifiScanResults_showProgressBarThenHideSearch() { + when(mMockWifiManager.isWifiEnabled()).thenReturn(true); + List wifiScanResults = mock(ArrayList.class); + when(wifiScanResults.size()).thenReturn(0); + when(mMockWifiManager.getScanResults()).thenReturn(wifiScanResults); + + mInternetDialog.showProgressBar(); + + // Show progress bar + assertThat(mInternetDialog.mIsProgressBarVisible).isTrue(); + + ArgumentCaptor runnableCaptor = ArgumentCaptor.forClass(Runnable.class); + verify(mHandler).postDelayed(runnableCaptor.capture(), + eq(InternetDialog.PROGRESS_DELAY_MS)); + runnableCaptor.getValue().run(); + + // Then hide searching sub-title only + assertThat(mInternetDialog.mIsProgressBarVisible).isTrue(); + assertThat(mInternetDialog.mIsSearchingHidden).isTrue(); + } + private class MockInternetDialog extends InternetDialog { private String mMobileNetworkTitle;