From 570f7dbc4b9b25e4fffcd8305f8aa828e9819080 Mon Sep 17 00:00:00 2001 From: lucaslin Date: Thu, 26 Sep 2019 15:55:01 +0800 Subject: [PATCH] Improve the wifi description for the case of private DNS broken Currently, users don't know if the wifi description shows "No internet" means it really doesn't have internet access or no internet is because of private DNS resolution failed. So, Add a new description for wifi when private DNS is broken. Bug: 113242081 Test: make -j44 RunSettingsRoboTests \ ROBOTEST_FILTER=WifiDetailPreferenceControllerTest Change-Id: I44a7e51cf76dc3f2a6b9583f226af6649f9b1f5f --- .../WifiDetailPreferenceController.java | 22 +++++++++++++++---- .../WifiDetailPreferenceControllerTest.java | 8 +++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java index 5e49b2e7498..ca2caa32ac2 100644 --- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java +++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java @@ -235,14 +235,28 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController return mNetworkCapabilities.hasCapability(cap) != nc.hasCapability(cap); } + private boolean hasPrivateDnsStatusChanged(NetworkCapabilities nc) { + // If this is the first time that WifiDetailPreferenceController gets + // NetworkCapabilities, report that something has changed and assign nc to + // mNetworkCapabilities in onCapabilitiesChanged. Note that the NetworkCapabilities + // from onCapabilitiesChanged() will never be null, so calling + // mNetworkCapabilities.isPrivateDnsBroken() would be safe next time. + if (mNetworkCapabilities == null) { + return true; + } + + return mNetworkCapabilities.isPrivateDnsBroken() != nc.isPrivateDnsBroken(); + } + @Override public void onCapabilitiesChanged(Network network, NetworkCapabilities nc) { // If the network just validated or lost Internet access or detected partial internet - // connectivity, refresh network state. Don't do this on every NetworkCapabilities - // change because refreshNetworkState sends IPCs to the system server from the UI - // thread, which can cause jank. + // connectivity or private dns was broken, refresh network state. Don't do this on + // every NetworkCapabilities change because refreshEntityHeader sends IPCs to the + // system server from the UI thread, which can cause jank. if (network.equals(mNetwork) && !nc.equals(mNetworkCapabilities)) { - if (hasCapabilityChanged(nc, NET_CAPABILITY_VALIDATED) + if (hasPrivateDnsStatusChanged(nc) + || hasCapabilityChanged(nc, NET_CAPABILITY_VALIDATED) || hasCapabilityChanged(nc, NET_CAPABILITY_CAPTIVE_PORTAL) || hasCapabilityChanged(nc, NET_CAPABILITY_PARTIAL_CONNECTIVITY)) { mAccessPoint.update(mWifiConfig, mWifiInfo, mNetworkInfo); diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java index 9a1dd4c0f82..fc682b1dd96 100644 --- a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java @@ -993,6 +993,14 @@ public class WifiDetailPreferenceControllerTest { updateNetworkCapabilities(nc); inOrder.verify(mockHeaderController).setSummary(summary); + // UI will be refreshed when private DNS is broken. + summary = "Private DNS server cannot be accessed"; + when(mockAccessPoint.getSettingsSummary(true /* convertSavedAsDisconnected */)) + .thenReturn(summary); + nc.setPrivateDnsBroken(true); + updateNetworkCapabilities(nc); + inOrder.verify(mockHeaderController).setSummary(summary); + // UI will be refreshed when device connects to a partial connectivity network. summary = "Limited connection"; when(mockAccessPoint.getSettingsSummary(true /*convertSavedAsDisconnected*/))