[Provider Model] Add progress bar to internet panel

- Show progress bar when Wi-Fi scanning

- Show "Searching for networks..." sub-title when Wi-Fi scanning

- Remove "Wi-Fi" from searching networks string

Bug: 178774497
Test: manual test
atest -c InternetConnectivityPanelTest
make RunSettingsRoboTests ROBOTEST_FILTER=PanelFragmentTest

Change-Id: Ic05b939bef3b106845fe90db41eb09f0e15756f4
This commit is contained in:
Weng Su
2021-04-29 10:20:11 +08:00
parent b4a9916adf
commit c407a2d9f8
9 changed files with 204 additions and 5 deletions

View File

@@ -48,6 +48,7 @@ public class FakePanelContent implements PanelContent {
private int mViewType;
private boolean mIsCustomizedButtonUsed = false;
private CharSequence mCustomizedButtonTitle;
private boolean mIsProgressBarVisible;
@Override
public IconCompat getIcon() {
@@ -117,4 +118,13 @@ public class FakePanelContent implements PanelContent {
public void setCustomizedButtonTitle(CharSequence title) {
mCustomizedButtonTitle = title;
}
@Override
public boolean isProgressBarVisible() {
return mIsProgressBarVisible;
}
public void setIsProgressBarVisible(boolean isProgressBarVisible) {
mIsProgressBarVisible = isProgressBarVisible;
}
}

View File

@@ -35,6 +35,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.core.graphics.drawable.IconCompat;
@@ -308,4 +309,25 @@ public class PanelFragmentTest {
assertThat(seeMoreButton.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(seeMoreButton.getText()).isEqualTo("test_title");
}
@Test
public void onProgressBarVisibleChanged_isProgressBarVisible_showProgressBar() {
final ActivityController<FakeSettingsPanelActivity> activityController =
Robolectric.buildActivity(FakeSettingsPanelActivity.class);
activityController.setup();
final PanelFragment panelFragment = (PanelFragment)
Objects.requireNonNull(activityController
.get()
.getSupportFragmentManager()
.findFragmentById(R.id.main_content));
final ProgressBar progressBar = panelFragment.mLayoutView.findViewById(R.id.progress_bar);
mFakePanelContent.setIsProgressBarVisible(true);
verify(mFakePanelContent).registerCallback(mPanelContentCbs.capture());
final PanelContentCallback panelContentCallbacks = mPanelContentCbs.getValue();
panelContentCallbacks.onProgressBarVisibleChanged();
assertThat(progressBar.getVisibility()).isEqualTo(View.VISIBLE);
}
}

View File

@@ -18,8 +18,12 @@ package com.android.settings.panel;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -28,6 +32,7 @@ import android.content.Context;
import android.net.Uri;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Handler;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -70,6 +75,8 @@ public class InternetConnectivityPanelTest {
@Rule
public final MockitoRule mMocks = MockitoJUnit.rule();
@Mock
Handler mMainThreadHandler;
@Mock
PanelContentCallback mPanelContentCallback;
@Mock
InternetUpdater mInternetUpdater;
@@ -85,6 +92,7 @@ public class InternetConnectivityPanelTest {
public void setUp() {
mContext = spy(ApplicationProvider.getApplicationContext());
when(mContext.getApplicationContext()).thenReturn(mContext);
when(mContext.getMainThreadHandler()).thenReturn(mMainThreadHandler);
when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
mPanel = InternetConnectivityPanel.create(mContext);
@@ -310,6 +318,65 @@ public class InternetConnectivityPanelTest {
verify(mPanelContentCallback).onCustomizedButtonStateChanged();
}
@Test
public void showProgressBar_wifiDisabled_hideProgress() {
mPanel.mIsProgressBarVisible = true;
doReturn(false).when(mInternetUpdater).isWifiEnabled();
clearInvocations(mPanelContentCallback);
mPanel.showProgressBar();
assertThat(mPanel.isProgressBarVisible()).isFalse();
verify(mPanelContentCallback).onProgressBarVisibleChanged();
}
@Test
public void showProgressBar_noWifiScanResults_showProgressForever() {
mPanel.mIsProgressBarVisible = false;
doReturn(true).when(mInternetUpdater).isWifiEnabled();
List<ScanResult> noWifiScanResults = new ArrayList<>();
doReturn(noWifiScanResults).when(mWifiManager).getScanResults();
clearInvocations(mPanelContentCallback);
mPanel.showProgressBar();
assertThat(mPanel.isProgressBarVisible()).isTrue();
verify(mPanelContentCallback).onProgressBarVisibleChanged();
verify(mPanelContentCallback).onHeaderChanged();
verify(mMainThreadHandler, never())
.postDelayed(any() /* mHideProgressBarRunnable */, anyLong());
}
@Test
public void showProgressBar_hasWifiScanResults_showProgressDelayedHide() {
mPanel.mIsProgressBarVisible = false;
doReturn(true).when(mInternetUpdater).isWifiEnabled();
List<ScanResult> hasWifiScanResults = mock(ArrayList.class);
doReturn(1).when(hasWifiScanResults).size();
doReturn(hasWifiScanResults).when(mWifiManager).getScanResults();
clearInvocations(mPanelContentCallback);
mPanel.showProgressBar();
assertThat(mPanel.isProgressBarVisible()).isTrue();
verify(mPanelContentCallback).onProgressBarVisibleChanged();
verify(mPanelContentCallback).onHeaderChanged();
verify(mMainThreadHandler).postDelayed(any() /* mHideProgressBarRunnable */, anyLong());
}
@Test
public void setProgressBarVisible_onProgressBarVisibleChanged() {
mPanel.mIsProgressBarVisible = false;
doReturn(true).when(mInternetUpdater).isWifiEnabled();
clearInvocations(mPanelContentCallback);
mPanel.setProgressBarVisible(true);
assertThat(mPanel.mIsProgressBarVisible).isTrue();
verify(mPanelContentCallback).onProgressBarVisibleChanged();
verify(mPanelContentCallback).onHeaderChanged();
}
private void mockCondition(boolean airplaneMode, boolean hasCarrier,
boolean isDataSimActive, boolean isMobileDataEnabled, boolean isServiceInService,
boolean isWifiEnabled, List<ScanResult> wifiItems) {