From 9362b83b9a35ea9bcde86be4d7b89f6efc3ff095 Mon Sep 17 00:00:00 2001 From: Weng Su Date: Thu, 4 Nov 2021 01:37:46 +0800 Subject: [PATCH] Avoid flicker in Internet dialog - Hide WiFi scan notifications immediately to avoid flicker See b/201046726#comment16 for the result videos. Bug: 201046726 Test: Manual atest -c InternetDialogTest Change-Id: Ib0573a50766d377b2b4f0bfa696e5aa6e10e68f1 --- .../systemui/qs/tiles/dialog/InternetDialog.java | 13 +++++++++---- .../qs/tiles/dialog/InternetDialogTest.java | 10 ++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) 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 f6dbb0b95ecd8..563c4cd628d2a 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 @@ -128,7 +128,9 @@ public class InternetDialog extends SystemUIDialog implements private boolean mCanConfigMobileData; // Wi-Fi entries + @VisibleForTesting protected WifiEntry mConnectedWifiEntry; + @VisibleForTesting protected int mWifiEntriesCount; // Wi-Fi scanning progress bar @@ -334,6 +336,9 @@ 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); }); @@ -576,12 +581,12 @@ public class InternetDialog extends SystemUIDialog implements @WorkerThread public void onAccessPointsChanged(@Nullable List wifiEntries, @Nullable WifiEntry connectedEntry) { - mConnectedWifiEntry = connectedEntry; - mWifiEntriesCount = wifiEntries == null ? 0 : wifiEntries.size(); - mAdapter.setWifiEntries(wifiEntries, mWifiEntriesCount); mHandler.post(() -> { - mAdapter.notifyDataSetChanged(); + mConnectedWifiEntry = connectedEntry; + mWifiEntriesCount = wifiEntries == null ? 0 : wifiEntries.size(); updateDialog(false /* shouldUpdateMobileNetwork */); + mAdapter.setWifiEntries(wifiEntries, mWifiEntriesCount); + mAdapter.notifyDataSetChanged(); }); } 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 5e1fea512d556..b6e8979db1896 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 @@ -99,7 +99,8 @@ public class InternetDialogTest extends SysuiTestCase { mInternetDialogController, true, true, true, mock(UiEventLogger.class), mHandler, mBgExecutor); mInternetDialog.mAdapter = mInternetAdapter; - mInternetDialog.onAccessPointsChanged(mWifiEntries, mInternetWifiEntry); + mInternetDialog.mConnectedWifiEntry = mInternetWifiEntry; + mInternetDialog.mWifiEntriesCount = mWifiEntries.size(); mInternetDialog.show(); mDialogView = mInternetDialog.mDialogView; @@ -209,7 +210,7 @@ public class InternetDialogTest extends SysuiTestCase { @Test public void updateDialog_wifiOnAndNoConnectedWifi_hideConnectedWifi() { // The precondition WiFi ON is already in setUp() - mInternetDialog.onAccessPointsChanged(mWifiEntries, null /* connectedEntry*/); + mInternetDialog.mConnectedWifiEntry = null; doReturn(false).when(mInternetDialogController).activeNetworkIsCellular(); mInternetDialog.updateDialog(false); @@ -220,7 +221,7 @@ public class InternetDialogTest extends SysuiTestCase { @Test public void updateDialog_wifiOnAndNoWifiList_hideWifiListAndSeeAll() { // The precondition WiFi ON is already in setUp() - mInternetDialog.onAccessPointsChanged(null /* wifiEntries */, mInternetWifiEntry); + mInternetDialog.mWifiEntriesCount = 0; mInternetDialog.updateDialog(false); @@ -366,7 +367,8 @@ public class InternetDialogTest extends SysuiTestCase { public void showProgressBar_wifiEnabledWithoutWifiEntries_showProgressBarThenHideSearch() { Mockito.reset(mHandler); when(mWifiManager.isWifiEnabled()).thenReturn(true); - mInternetDialog.onAccessPointsChanged(null /* wifiEntries */, null /* connectedEntry*/); + mInternetDialog.mConnectedWifiEntry = null; + mInternetDialog.mWifiEntriesCount = 0; mInternetDialog.showProgressBar();