Merge changes I23540440,I67269e1a into oc-dev am: 4249a7092b
am: 844c385c09
Change-Id: I258837998e0c242d4c4dd4fb7c69da8049837173
This commit is contained in:
@@ -16,6 +16,7 @@
|
|||||||
package com.android.settings.wifi.details;
|
package com.android.settings.wifi.details;
|
||||||
|
|
||||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL;
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL;
|
||||||
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
|
||||||
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
|
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
|
||||||
|
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
@@ -165,9 +166,24 @@ public class WifiDetailPreferenceController extends PreferenceController impleme
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean hasCapabilityChanged(NetworkCapabilities nc, int cap) {
|
||||||
|
// If this is the first time we get NetworkCapabilities, report that something changed.
|
||||||
|
if (mNetworkCapabilities == null) return true;
|
||||||
|
|
||||||
|
// nc can never be null, see ConnectivityService#callCallbackForRequest.
|
||||||
|
return mNetworkCapabilities.hasCapability(cap) != nc.hasCapability(cap);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCapabilitiesChanged(Network network, NetworkCapabilities nc) {
|
public void onCapabilitiesChanged(Network network, NetworkCapabilities nc) {
|
||||||
|
// If the network just validated or lost Internet access, 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.
|
||||||
if (network.equals(mNetwork) && !nc.equals(mNetworkCapabilities)) {
|
if (network.equals(mNetwork) && !nc.equals(mNetworkCapabilities)) {
|
||||||
|
if (hasCapabilityChanged(nc, NET_CAPABILITY_VALIDATED) ||
|
||||||
|
hasCapabilityChanged(nc, NET_CAPABILITY_CAPTIVE_PORTAL)) {
|
||||||
|
refreshNetworkState();
|
||||||
|
}
|
||||||
mNetworkCapabilities = nc;
|
mNetworkCapabilities = nc;
|
||||||
updateIpLayerInfo();
|
updateIpLayerInfo();
|
||||||
}
|
}
|
||||||
|
@@ -446,6 +446,17 @@ public class WifiDetailPreferenceControllerTest {
|
|||||||
mCallbackCaptor.getValue().onLinkPropertiesChanged(mockNetwork, new LinkProperties(lp));
|
mCallbackCaptor.getValue().onLinkPropertiesChanged(mockNetwork, new LinkProperties(lp));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateNetworkCapabilities(NetworkCapabilities nc) {
|
||||||
|
mCallbackCaptor.getValue().onCapabilitiesChanged(mockNetwork, new NetworkCapabilities(nc));
|
||||||
|
}
|
||||||
|
|
||||||
|
private NetworkCapabilities makeNetworkCapabilities() {
|
||||||
|
NetworkCapabilities nc = new NetworkCapabilities();
|
||||||
|
nc.clearAll();
|
||||||
|
nc.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
|
||||||
|
return nc;
|
||||||
|
}
|
||||||
|
|
||||||
private void verifyDisplayedIpv6Addresses(InOrder inOrder, LinkAddress... addresses) {
|
private void verifyDisplayedIpv6Addresses(InOrder inOrder, LinkAddress... addresses) {
|
||||||
String text = Arrays.stream(addresses)
|
String text = Arrays.stream(addresses)
|
||||||
.map(address -> asString(address))
|
.map(address -> asString(address))
|
||||||
@@ -508,6 +519,45 @@ public class WifiDetailPreferenceControllerTest {
|
|||||||
inOrder.verify(mockDnsPref).setVisible(true);
|
inOrder.verify(mockDnsPref).setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void onCapabilitiesChanged_callsRefreshIfNecessary() {
|
||||||
|
NetworkCapabilities nc = makeNetworkCapabilities();
|
||||||
|
when(mockConnectivityManager.getNetworkCapabilities(mockNetwork))
|
||||||
|
.thenReturn(new NetworkCapabilities(nc));
|
||||||
|
|
||||||
|
String summary = "Connected, no Internet";
|
||||||
|
when(mockAccessPoint.getSettingsSummary()).thenReturn(summary);
|
||||||
|
|
||||||
|
InOrder inOrder = inOrder(mockConnectionDetailPref);
|
||||||
|
mController.displayPreference(mockScreen);
|
||||||
|
mController.onResume();
|
||||||
|
inOrder.verify(mockConnectionDetailPref).setTitle(summary);
|
||||||
|
|
||||||
|
// Check that an irrelevant capability update does not update the access point summary, as
|
||||||
|
// doing so could cause unnecessary jank...
|
||||||
|
summary = "Connected";
|
||||||
|
when(mockAccessPoint.getSettingsSummary()).thenReturn(summary);
|
||||||
|
updateNetworkCapabilities(nc);
|
||||||
|
inOrder.verify(mockConnectionDetailPref, never()).setTitle(any());
|
||||||
|
|
||||||
|
// ... but that if the network validates, then we do refresh.
|
||||||
|
nc.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
|
||||||
|
updateNetworkCapabilities(nc);
|
||||||
|
inOrder.verify(mockConnectionDetailPref).setTitle(summary);
|
||||||
|
|
||||||
|
summary = "Connected, no Internet";
|
||||||
|
when(mockAccessPoint.getSettingsSummary()).thenReturn(summary);
|
||||||
|
|
||||||
|
// Another irrelevant update won't cause the UI to refresh...
|
||||||
|
updateNetworkCapabilities(nc);
|
||||||
|
inOrder.verify(mockConnectionDetailPref, never()).setTitle(any());
|
||||||
|
|
||||||
|
// ... but if the network is no longer validated, then we display "connected, no Internet".
|
||||||
|
nc.removeCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
|
||||||
|
updateNetworkCapabilities(nc);
|
||||||
|
inOrder.verify(mockConnectionDetailPref).setTitle(summary);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void canForgetNetwork_noNetwork() {
|
public void canForgetNetwork_noNetwork() {
|
||||||
when(mockAccessPoint.getConfig()).thenReturn(null);
|
when(mockAccessPoint.getConfig()).thenReturn(null);
|
||||||
@@ -590,7 +640,7 @@ public class WifiDetailPreferenceControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void networkDisconnectdState_shouldFinishActivity() {
|
public void networkDisconnectedState_shouldFinishActivity() {
|
||||||
mController.onResume();
|
mController.onResume();
|
||||||
|
|
||||||
when(mockConnectivityManager.getNetworkInfo(any(Network.class))).thenReturn(null);
|
when(mockConnectivityManager.getNetworkInfo(any(Network.class))).thenReturn(null);
|
||||||
@@ -645,22 +695,16 @@ public class WifiDetailPreferenceControllerTest {
|
|||||||
|
|
||||||
inOrder.verify(mockSignInButton).setVisibility(View.INVISIBLE);
|
inOrder.verify(mockSignInButton).setVisibility(View.INVISIBLE);
|
||||||
|
|
||||||
NetworkCapabilities nc = new NetworkCapabilities();
|
NetworkCapabilities nc = makeNetworkCapabilities();
|
||||||
nc.clearAll();
|
updateNetworkCapabilities(nc);
|
||||||
nc.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
|
|
||||||
|
|
||||||
NetworkCallback callback = mCallbackCaptor.getValue();
|
|
||||||
callback.onCapabilitiesChanged(mockNetwork, nc);
|
|
||||||
inOrder.verify(mockSignInButton).setVisibility(View.INVISIBLE);
|
inOrder.verify(mockSignInButton).setVisibility(View.INVISIBLE);
|
||||||
|
|
||||||
nc = new NetworkCapabilities(nc);
|
|
||||||
nc.addCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
|
nc.addCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
|
||||||
callback.onCapabilitiesChanged(mockNetwork, nc);
|
updateNetworkCapabilities(nc);
|
||||||
inOrder.verify(mockSignInButton).setVisibility(View.VISIBLE);
|
inOrder.verify(mockSignInButton).setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
nc = new NetworkCapabilities(nc);
|
|
||||||
nc.removeCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
|
nc.removeCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
|
||||||
callback.onCapabilitiesChanged(mockNetwork, nc);
|
updateNetworkCapabilities(nc);
|
||||||
inOrder.verify(mockSignInButton).setVisibility(View.INVISIBLE);
|
inOrder.verify(mockSignInButton).setVisibility(View.INVISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user