Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 659b2885 authored by Weng Su's avatar Weng Su Committed by Zoey Chen
Browse files

[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 dc7dea86)
parent c3e15d3f
Loading
Loading
Loading
Loading
+21 −8
Original line number Diff line number Diff line
@@ -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);
        }
    }

+5 −5
Original line number Diff line number Diff line
@@ -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
+4 −1
Original line number Diff line number Diff line
@@ -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")));
+61 −0
Original line number Diff line number Diff line
@@ -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;