Modify dialog message for partial connectivity
In some networks, network validation may only get success
result for http probe but fail result for https probe.
For this kind of network, it may still work at some websites
or apps, but user didn't know about that. In order to fix this
issue, we will check if network has partial connectivity and
notify user to make a choice if they want to use this partial
connectivity or not.
Bug: 113450764
Bug: 128489091
Test: 1. Build pass.
2. make -j44 RunSettingsRoboTests
ROBOTEST_FILTER=WifiDetailPreferenceControllerTest
3. Change captive_portal_https_url to https://invalid.com
to simulate partial connectivity.
Change-Id: I0e87f6f2ede173f45a7b6fcf842b4f9a83d8efa1
Merged-In: I0e87f6f2ede173f45a7b6fcf842b4f9a83d8efa1
This commit is contained in:
@@ -38,6 +38,7 @@ import com.android.internal.app.AlertController;
|
||||
import com.android.settings.R;
|
||||
|
||||
import static android.net.ConnectivityManager.ACTION_PROMPT_LOST_VALIDATION;
|
||||
import static android.net.ConnectivityManager.ACTION_PROMPT_PARTIAL_CONNECTIVITY;
|
||||
import static android.net.ConnectivityManager.ACTION_PROMPT_UNVALIDATED;
|
||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
|
||||
|
||||
@@ -53,8 +54,9 @@ public final class WifiNoInternetDialog extends AlertActivity implements
|
||||
private String mAction;
|
||||
|
||||
private boolean isKnownAction(Intent intent) {
|
||||
return intent.getAction().equals(ACTION_PROMPT_UNVALIDATED) ||
|
||||
intent.getAction().equals(ACTION_PROMPT_LOST_VALIDATION);
|
||||
return intent.getAction().equals(ACTION_PROMPT_UNVALIDATED)
|
||||
|| intent.getAction().equals(ACTION_PROMPT_LOST_VALIDATION)
|
||||
|| intent.getAction().equals(ACTION_PROMPT_PARTIAL_CONNECTIVITY);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -131,6 +133,11 @@ public final class WifiNoInternetDialog extends AlertActivity implements
|
||||
ap.mMessage = getString(R.string.no_internet_access_text);
|
||||
ap.mPositiveButtonText = getString(R.string.yes);
|
||||
ap.mNegativeButtonText = getString(R.string.no);
|
||||
} else if (ACTION_PROMPT_PARTIAL_CONNECTIVITY.equals(mAction)) {
|
||||
ap.mTitle = mNetworkName;
|
||||
ap.mMessage = getString(R.string.partial_connectivity_text);
|
||||
ap.mPositiveButtonText = getString(R.string.yes);
|
||||
ap.mNegativeButtonText = getString(R.string.no);
|
||||
} else {
|
||||
ap.mTitle = getString(R.string.lost_internet_access_title);
|
||||
ap.mMessage = getString(R.string.lost_internet_access_text);
|
||||
@@ -146,7 +153,8 @@ public final class WifiNoInternetDialog extends AlertActivity implements
|
||||
ap.mView = checkbox;
|
||||
mAlwaysAllow = (CheckBox) checkbox.findViewById(com.android.internal.R.id.alwaysUse);
|
||||
|
||||
if (ACTION_PROMPT_UNVALIDATED.equals(mAction)) {
|
||||
if (ACTION_PROMPT_UNVALIDATED.equals(mAction)
|
||||
|| ACTION_PROMPT_PARTIAL_CONNECTIVITY.equals(mAction)) {
|
||||
mAlwaysAllow.setText(getString(R.string.no_internet_access_remember));
|
||||
} else {
|
||||
mAlwaysAllow.setText(getString(R.string.lost_internet_access_persist));
|
||||
@@ -174,6 +182,11 @@ public final class WifiNoInternetDialog extends AlertActivity implements
|
||||
final boolean accept = (which == BUTTON_POSITIVE);
|
||||
action = (accept ? "Connect" : "Ignore");
|
||||
mCM.setAcceptUnvalidated(mNetwork, accept, always);
|
||||
} else if (ACTION_PROMPT_PARTIAL_CONNECTIVITY.equals(mAction)) {
|
||||
what = "PARTIAL_CONNECTIVITY";
|
||||
final boolean accept = (which == BUTTON_POSITIVE);
|
||||
action = (accept ? "Connect" : "Ignore");
|
||||
mCM.setAcceptPartialConnectivity(mNetwork, accept, always);
|
||||
} else {
|
||||
what = "LOST_INTERNET";
|
||||
final boolean avoid = (which == BUTTON_POSITIVE);
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.android.settings.wifi.details;
|
||||
|
||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL;
|
||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_PARTIAL_CONNECTIVITY;
|
||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
|
||||
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
|
||||
|
||||
@@ -192,12 +193,14 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
|
||||
|
||||
@Override
|
||||
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 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.
|
||||
if (network.equals(mNetwork) && !nc.equals(mNetworkCapabilities)) {
|
||||
if (hasCapabilityChanged(nc, NET_CAPABILITY_VALIDATED) ||
|
||||
hasCapabilityChanged(nc, NET_CAPABILITY_CAPTIVE_PORTAL)) {
|
||||
if (hasCapabilityChanged(nc, NET_CAPABILITY_VALIDATED)
|
||||
|| hasCapabilityChanged(nc, NET_CAPABILITY_CAPTIVE_PORTAL)
|
||||
|| hasCapabilityChanged(nc, NET_CAPABILITY_PARTIAL_CONNECTIVITY)) {
|
||||
refreshNetworkState();
|
||||
}
|
||||
mNetworkCapabilities = nc;
|
||||
|
||||
Reference in New Issue
Block a user