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

Commit acbe7b52 authored by Weng Su's avatar Weng Su
Browse files

[Provider Model] Fix WiFi list count timing issue (QS Internet Dialog)

- The WiFi list count will be updated when the WiFi scan result is
called back, but it needs to be reduced immediately after turning off
the airplane mode.

- See b/206807144#comment12 for a video.

Bug: 206807144
Test: manual test
atest -c InternetAdapterTest \
         InternetDialogTest

Change-Id: I6082226a63808e8a532bf4e9f341800a1887b8f5
parent 1ff5a29a
Loading
Loading
Loading
Loading
+20 −2
Original line number Diff line number Diff line
@@ -53,7 +53,10 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern

    private final InternetDialogController mInternetDialogController;
    private List<WifiEntry> mWifiEntries;
    private int mWifiEntriesCount;
    @VisibleForTesting
    protected int mWifiEntriesCount;
    @VisibleForTesting
    protected int mMaxEntriesCount = InternetDialogController.MAX_WIFI_ENTRY_COUNT;

    protected View mHolderView;
    protected Context mContext;
@@ -87,7 +90,8 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern
     */
    public void setWifiEntries(@Nullable List<WifiEntry> wifiEntries, int wifiEntriesCount) {
        mWifiEntries = wifiEntries;
        mWifiEntriesCount = wifiEntriesCount;
        mWifiEntriesCount =
                (wifiEntriesCount < mMaxEntriesCount) ? wifiEntriesCount : mMaxEntriesCount;
    }

    /**
@@ -100,6 +104,20 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern
        return mWifiEntriesCount;
    }

    /**
     * Sets the maximum number of Wi-Fi networks.
     */
    public void setMaxEntriesCount(int count) {
        if (count < 0 || mMaxEntriesCount == count) {
            return;
        }
        mMaxEntriesCount = count;
        if (mWifiEntriesCount > count) {
            mWifiEntriesCount = count;
            notifyDataSetChanged();
        }
    }

    /**
     * ViewHolder for binding Wi-Fi view.
     */
+13 −5
Original line number Diff line number Diff line
@@ -138,7 +138,7 @@ public class InternetDialog extends SystemUIDialog implements
    @VisibleForTesting
    protected int mWifiEntriesCount;
    @VisibleForTesting
    protected boolean mHasMoreEntry;
    protected boolean mHasMoreWifiEntries;

    // Wi-Fi scanning progress bar
    protected boolean mIsProgressBarVisible;
@@ -462,9 +462,17 @@ public class InternetDialog extends SystemUIDialog implements
            mSeeAllLayout.setVisibility(View.GONE);
            return;
        }
        mWifiRecyclerView.setMinimumHeight(mWifiNetworkHeight * getWifiListMaxCount());
        final int wifiListMaxCount = getWifiListMaxCount();
        if (mAdapter.getItemCount() > wifiListMaxCount) {
            mAdapter.setMaxEntriesCount(wifiListMaxCount);
            mHasMoreWifiEntries = true;
        }
        final int wifiListMinHeight = mWifiNetworkHeight * wifiListMaxCount;
        if (mWifiRecyclerView.getMinimumHeight() != wifiListMinHeight) {
            mWifiRecyclerView.setMinimumHeight(wifiListMinHeight);
        }
        mWifiRecyclerView.setVisibility(View.VISIBLE);
        mSeeAllLayout.setVisibility(mHasMoreEntry ? View.VISIBLE : View.INVISIBLE);
        mSeeAllLayout.setVisibility(mHasMoreWifiEntries ? View.VISIBLE : View.INVISIBLE);
    }

    @VisibleForTesting
@@ -654,14 +662,14 @@ public class InternetDialog extends SystemUIDialog implements
    @Override
    @WorkerThread
    public void onAccessPointsChanged(@Nullable List<WifiEntry> wifiEntries,
            @Nullable WifiEntry connectedEntry, boolean hasMoreEntry) {
            @Nullable WifiEntry connectedEntry, boolean hasMoreWifiEntries) {
        // Should update the carrier network layout when it is connected under airplane mode ON.
        boolean shouldUpdateCarrierNetwork = mMobileNetworkLayout.getVisibility() == View.VISIBLE
                && mInternetDialogController.isAirplaneModeEnabled();
        mHandler.post(() -> {
            mConnectedWifiEntry = connectedEntry;
            mWifiEntriesCount = wifiEntries == null ? 0 : wifiEntries.size();
            mHasMoreEntry = hasMoreEntry;
            mHasMoreWifiEntries = hasMoreWifiEntries;
            updateDialog(shouldUpdateCarrierNetwork /* shouldUpdateMobileNetwork */);
            mAdapter.setWifiEntries(wifiEntries, mWifiEntriesCount);
            mAdapter.notifyDataSetChanged();
+7 −4
Original line number Diff line number Diff line
@@ -883,8 +883,11 @@ public class InternetDialogController implements AccessPointController.AccessPoi
            return;
        }

        boolean hasMoreEntry = false;
        boolean hasMoreWifiEntries = false;
        int count = MAX_WIFI_ENTRY_COUNT;
        // TODO: (b/206807144) Plan to remove the design of calculating WiFi list here, and
        //  calculate the number of WiFi list by referring to the Visibility of each network in
        //  InternetDialog.
        if (mHasEthernet) {
            count -= 1;
        }
@@ -895,7 +898,7 @@ public class InternetDialogController implements AccessPointController.AccessPoi
        if (count > wifiTotalCount) {
            count = wifiTotalCount;
        } else if (count < wifiTotalCount) {
            hasMoreEntry = true;
            hasMoreWifiEntries = true;
        }

        WifiEntry connectedEntry = null;
@@ -911,7 +914,7 @@ public class InternetDialogController implements AccessPointController.AccessPoi
        mConnectedEntry = connectedEntry;
        mWifiEntriesCount = wifiEntries.size();

        mCallback.onAccessPointsChanged(wifiEntries, mConnectedEntry, hasMoreEntry);
        mCallback.onAccessPointsChanged(wifiEntries, mConnectedEntry, hasMoreWifiEntries);
    }

    @Override
@@ -1061,7 +1064,7 @@ public class InternetDialogController implements AccessPointController.AccessPoi
        void dismissDialog();

        void onAccessPointsChanged(@Nullable List<WifiEntry> wifiEntries,
                @Nullable WifiEntry connectedEntry, boolean hasMoreEntry);
                @Nullable WifiEntry connectedEntry, boolean hasMoreWifiEntries);
    }

    void makeOverlayToast(int stringId) {
+57 −1
Original line number Diff line number Diff line
package com.android.systemui.qs.tiles.dialog;

import static com.android.systemui.qs.tiles.dialog.InternetDialogController.MAX_WIFI_ENTRY_COUNT;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -83,7 +85,7 @@ public class InternetAdapterTest extends SysuiTestCase {

    @Test
    public void getItemCount_returnWifiEntriesCount() {
        for (int i = 0; i < InternetDialogController.MAX_WIFI_ENTRY_COUNT; i++) {
        for (int i = 0; i < MAX_WIFI_ENTRY_COUNT; i++) {
            mInternetAdapter.setWifiEntries(mWifiEntries, i /* wifiEntriesCount */);

            assertThat(mInternetAdapter.getItemCount()).isEqualTo(i);
@@ -140,6 +142,60 @@ public class InternetAdapterTest extends SysuiTestCase {
        verify(mWifiIconInjector).getIcon(eq(true) /* noInternet */, anyInt());
    }

    @Test
    public void setWifiEntries_wifiCountLessThenMaxCount_setWifiCount() {
        final int wifiCount = MAX_WIFI_ENTRY_COUNT - 1;
        mInternetAdapter.mMaxEntriesCount = MAX_WIFI_ENTRY_COUNT;

        mInternetAdapter.setWifiEntries(mWifiEntries, wifiCount);

        assertThat(mInternetAdapter.mWifiEntriesCount).isEqualTo(wifiCount);
    }

    @Test
    public void setWifiEntries_wifiCountGreaterThenMaxCount_setMaxCount() {
        final int wifiCount = MAX_WIFI_ENTRY_COUNT;
        mInternetAdapter.mMaxEntriesCount = MAX_WIFI_ENTRY_COUNT - 1;

        mInternetAdapter.setWifiEntries(mWifiEntries, wifiCount);

        assertThat(mInternetAdapter.mWifiEntriesCount).isEqualTo(mInternetAdapter.mMaxEntriesCount);
    }

    @Test
    public void setMaxEntriesCount_maxCountLessThenZero_doNothing() {
        mInternetAdapter.mMaxEntriesCount = MAX_WIFI_ENTRY_COUNT;
        final int maxCount = -1;

        mInternetAdapter.setMaxEntriesCount(maxCount);

        assertThat(mInternetAdapter.mMaxEntriesCount).isEqualTo(MAX_WIFI_ENTRY_COUNT);
    }

    @Test
    public void setMaxEntriesCount_maxCountGreaterThenWifiCount_updateMaxCount() {
        mInternetAdapter.mWifiEntriesCount = MAX_WIFI_ENTRY_COUNT - 2;
        mInternetAdapter.mMaxEntriesCount = MAX_WIFI_ENTRY_COUNT;
        final int maxCount = MAX_WIFI_ENTRY_COUNT - 1;

        mInternetAdapter.setMaxEntriesCount(maxCount);

        assertThat(mInternetAdapter.mWifiEntriesCount).isEqualTo(MAX_WIFI_ENTRY_COUNT - 2);
        assertThat(mInternetAdapter.mMaxEntriesCount).isEqualTo(maxCount);
    }

    @Test
    public void setMaxEntriesCount_maxCountLessThenWifiCount_updateBothCount() {
        mInternetAdapter.mWifiEntriesCount = MAX_WIFI_ENTRY_COUNT;
        mInternetAdapter.mMaxEntriesCount = MAX_WIFI_ENTRY_COUNT;
        final int maxCount = MAX_WIFI_ENTRY_COUNT - 1;

        mInternetAdapter.setMaxEntriesCount(maxCount);

        assertThat(mInternetAdapter.mWifiEntriesCount).isEqualTo(maxCount);
        assertThat(mInternetAdapter.mMaxEntriesCount).isEqualTo(maxCount);
    }

    @Test
    public void viewHolderUpdateEndIcon_wifiConnected_updateGearIcon() {
        mTestableResources.addOverride(GEAR_ICON_RES_ID, mGearIcon);
+2 −2
Original line number Diff line number Diff line
@@ -347,7 +347,7 @@ public class InternetDialogTest extends SysuiTestCase {
        // The preconditions WiFi ON and WiFi entries are already in setUp()
        mInternetDialog.mConnectedWifiEntry = null;
        mInternetDialog.mWifiEntriesCount = MAX_WIFI_ENTRY_COUNT;
        mInternetDialog.mHasMoreEntry = true;
        mInternetDialog.mHasMoreWifiEntries = true;

        mInternetDialog.updateDialog(false);

@@ -360,7 +360,7 @@ public class InternetDialogTest extends SysuiTestCase {
    public void updateDialog_wifiOnAndHasBothWifiEntry_showBothWifiEntryAndSeeAll() {
        // The preconditions WiFi ON and WiFi entries are already in setUp()
        mInternetDialog.mWifiEntriesCount = MAX_WIFI_ENTRY_COUNT - 1;
        mInternetDialog.mHasMoreEntry = true;
        mInternetDialog.mHasMoreWifiEntries = true;

        mInternetDialog.updateDialog(false);