[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
Merged-In: I8394f5808d776589cbf115e6df8a7d456df5bc17
(cherry picked from commit dc7dea8673)
This commit is contained in:
Weng Su
2021-07-23 02:29:10 +08:00
committed by Zoey Chen
parent c3e15d3ff2
commit 659b2885d3
4 changed files with 91 additions and 14 deletions

View File

@@ -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<ScanResult> 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);
}
}

View File

@@ -269,17 +269,17 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
return mContext.getText(SUBTITLE_TEXT_WIFI_IS_OFF);
}
final List<ScanResult> 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<ScanResult> 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

View File

@@ -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<ScanResult> 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")));

View File

@@ -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<ScanResult> wifiScanResults = mock(ArrayList.class);
when(wifiScanResults.size()).thenReturn(1);
when(mMockWifiManager.getScanResults()).thenReturn(wifiScanResults);
mInternetDialog.showProgressBar();
// Show progress bar
assertThat(mInternetDialog.mIsProgressBarVisible).isTrue();
ArgumentCaptor<Runnable> 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<ScanResult> wifiScanResults = mock(ArrayList.class);
when(wifiScanResults.size()).thenReturn(0);
when(mMockWifiManager.getScanResults()).thenReturn(wifiScanResults);
mInternetDialog.showProgressBar();
// Show progress bar
assertThat(mInternetDialog.mIsProgressBarVisible).isTrue();
ArgumentCaptor<Runnable> 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;