diff --git a/packages/SystemUI/res/layout/internet_connectivity_dialog.xml b/packages/SystemUI/res/layout/internet_connectivity_dialog.xml index 98518c2bbf978..4a5b637a05d9e 100644 --- a/packages/SystemUI/res/layout/internet_connectivity_dialog.xml +++ b/packages/SystemUI/res/layout/internet_connectivity_dialog.xml @@ -185,7 +185,7 @@ @@ -227,7 +227,7 @@ diff --git a/packages/SystemUI/res/layout/internet_list_item.xml b/packages/SystemUI/res/layout/internet_list_item.xml index 868331ec830f8..f6a213662a18e 100644 --- a/packages/SystemUI/res/layout/internet_list_item.xml +++ b/packages/SystemUI/res/layout/internet_list_item.xml @@ -25,7 +25,7 @@ diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index aee1f43529bd4..2ab4c0a708de7 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -1240,6 +1240,8 @@ 662dp + + 72dp @dimen/match_parent 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 883552a1f7c3c..6bba1ed57c93f 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 @@ -130,6 +130,7 @@ public class InternetDialog extends SystemUIDialog implements private boolean mCanConfigMobileData; // Wi-Fi entries + private int mWifiNetworkHeight; @VisibleForTesting protected WifiEntry mConnectedWifiEntry; @VisibleForTesting @@ -187,6 +188,9 @@ public class InternetDialog extends SystemUIDialog implements window.setWindowAnimations(R.style.Animation_InternetDialog); + mWifiNetworkHeight = mContext.getResources() + .getDimensionPixelSize(R.dimen.internet_dialog_wifi_network_height); + mInternetDialogLayout = mDialogView.requireViewById(R.id.internet_connectivity_dialog); mInternetDialogTitle = mDialogView.requireViewById(R.id.internet_dialog_title); mInternetDialogSubTitle = mDialogView.requireViewById(R.id.internet_dialog_subtitle); @@ -335,9 +339,6 @@ public class InternetDialog extends SystemUIDialog implements mSeeAllLayout.setOnClickListener(v -> onClickSeeMoreButton()); mWiFiToggle.setOnCheckedChangeListener( (buttonView, isChecked) -> { - if (isChecked) { - mWifiScanNotifyLayout.setVisibility(View.GONE); - } buttonView.setChecked(isChecked); mWifiManager.setWifiEnabled(isChecked); }); @@ -427,9 +428,26 @@ public class InternetDialog extends SystemUIDialog implements mSeeAllLayout.setVisibility(View.GONE); return; } - mWifiRecyclerView.setVisibility(mWifiEntriesCount > 0 ? View.VISIBLE : View.GONE); - mSeeAllLayout.setVisibility( - (mConnectedWifiEntry != null || mWifiEntriesCount > 0) ? View.VISIBLE : View.GONE); + mWifiRecyclerView.setMinimumHeight(mWifiNetworkHeight * getWifiListMaxCount()); + mWifiRecyclerView.setVisibility(View.VISIBLE); + final boolean showSeeAll = mConnectedWifiEntry != null || mWifiEntriesCount > 0; + mSeeAllLayout.setVisibility(showSeeAll ? View.VISIBLE : View.INVISIBLE); + } + + @VisibleForTesting + @MainThread + int getWifiListMaxCount() { + int count = InternetDialogController.MAX_WIFI_ENTRY_COUNT; + if (mEthernetLayout.getVisibility() == View.VISIBLE) { + count -= 1; + } + if (mMobileNetworkLayout.getVisibility() == View.VISIBLE) { + count -= 1; + } + if (mConnectedWifListLayout.getVisibility() == View.VISIBLE) { + count -= 1; + } + return count; } @MainThread 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 b32b4d4f3810d..339d5bb04d745 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 @@ -1,5 +1,7 @@ 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.any; @@ -219,7 +221,7 @@ public class InternetDialogTest extends SysuiTestCase { } @Test - public void updateDialog_wifiOnAndNoWifiEntry_hideWifiEntryAndSeeAll() { + public void updateDialog_wifiOnAndNoWifiEntry_showWifiListAndSeeAllArea() { // The precondition WiFi ON is already in setUp() mInternetDialog.mConnectedWifiEntry = null; mInternetDialog.mWifiEntriesCount = 0; @@ -227,19 +229,21 @@ public class InternetDialogTest extends SysuiTestCase { mInternetDialog.updateDialog(false); assertThat(mConnectedWifi.getVisibility()).isEqualTo(View.GONE); - assertThat(mWifiList.getVisibility()).isEqualTo(View.GONE); - assertThat(mSeeAll.getVisibility()).isEqualTo(View.GONE); + // Show a blank block to fix the dialog height even if there is no WiFi list + assertThat(mWifiList.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(mSeeAll.getVisibility()).isEqualTo(View.INVISIBLE); } @Test - public void updateDialog_wifiOnAndHasConnectedWifi_showConnectedWifiAndSeeAll() { + public void updateDialog_wifiOnAndHasConnectedWifi_showAllWifiAndSeeAllArea() { // The preconditions WiFi ON and WiFi entries are already in setUp() mInternetDialog.mWifiEntriesCount = 0; mInternetDialog.updateDialog(false); assertThat(mConnectedWifi.getVisibility()).isEqualTo(View.VISIBLE); - assertThat(mWifiList.getVisibility()).isEqualTo(View.GONE); + // Show a blank block to fix the dialog height even if there is no WiFi list + assertThat(mWifiList.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mSeeAll.getVisibility()).isEqualTo(View.VISIBLE); } @@ -412,4 +416,54 @@ public class InternetDialogTest extends SysuiTestCase { assertThat(mInternetDialog.mIsProgressBarVisible).isTrue(); assertThat(mInternetDialog.mIsSearchingHidden).isTrue(); } + + @Test + public void getWifiListMaxCount_returnCountCorrectly() { + // Ethernet, MobileData, ConnectedWiFi are all hidden. + // Then the maximum count is equal to MAX_WIFI_ENTRY_COUNT. + setNetworkVisible(false, false, false); + + assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT); + + // Only one of Ethernet, MobileData, ConnectedWiFi is displayed. + // Then the maximum count is equal to MAX_WIFI_ENTRY_COUNT - 1. + setNetworkVisible(true, false, false); + + assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 1); + + setNetworkVisible(false, true, false); + + assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 1); + + setNetworkVisible(false, false, true); + + assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 1); + + // Only one of Ethernet, MobileData, ConnectedWiFi is hidden. + // Then the maximum count is equal to MAX_WIFI_ENTRY_COUNT - 2. + setNetworkVisible(true, true, false); + + assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 2); + + setNetworkVisible(true, false, true); + + assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 2); + + setNetworkVisible(false, true, true); + + assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 2); + + // Ethernet, MobileData, ConnectedWiFi are all displayed. + // Then the maximum count is equal to MAX_WIFI_ENTRY_COUNT - 3. + setNetworkVisible(true, true, true); + + assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 3); + } + + private void setNetworkVisible(boolean ethernetVisible, boolean mobileDataVisible, + boolean connectedWifiVisible) { + mEthernet.setVisibility(ethernetVisible ? View.VISIBLE : View.GONE); + mMobileDataToggle.setVisibility(mobileDataVisible ? View.VISIBLE : View.GONE); + mConnectedWifi.setVisibility(connectedWifiVisible ? View.VISIBLE : View.GONE); + } }