diff --git a/res/values/strings.xml b/res/values/strings.xml index 6da92608e92..c56fae7b663 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -11032,4 +11032,7 @@ Automatically capture system heap dumps Automatically capture a heap dump for Android System when it uses too much memory + + + Disconnect diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java index f880a19d559..92132e82d7c 100644 --- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java +++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java @@ -160,6 +160,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController private final WifiTracker mWifiTracker; private final MetricsFeatureProvider mMetricsFeatureProvider; private boolean mIsOutOfRange; + private boolean mIsEphemeral; private boolean mConnected; private int mConnectingState; private WifiManager.ActionListener mConnectListener; @@ -251,12 +252,14 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController @Override public void onLost(Network network) { - // If support detail page for saved network, should update as disconnect but not exit. - if (SavedAccessPointsWifiSettings.usingDetailsFragment(mContext)) { - return; - } + final boolean lostCurrentNetwork = network.equals(mNetwork); + if (lostCurrentNetwork) { + // If support detail page for saved network, should update as disconnect but not + // exit. Except for ephemeral network which should not show on saved network list. + if (SavedAccessPointsWifiSettings.usingDetailsFragment(mContext) && !mIsEphemeral) { + return; + } - if (network.equals(mNetwork)) { exitActivity(); } } @@ -350,6 +353,9 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController mWifiTracker = null; } mConnected = mAccessPoint.isActive(); + // When lost the network connection, WifiInfo/NetworkInfo will be clear. So causes we + // could not check if the AccessPoint is ephemeral. Need to cache it in first. + mIsEphemeral = mAccessPoint.isEphemeral(); mConnectingState = STATE_NONE; mConnectListener = new WifiManager.ActionListener() { @Override @@ -703,6 +709,10 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController } private void refreshButtons() { + // Ephemeral network won't be removed permanently, but be putted in blacklist. + mButtonsPref.setButton1Text( + mIsEphemeral ? R.string.wifi_disconnect_button_text : R.string.forget); + mButtonsPref.setButton1Visible(canForgetNetwork()); mButtonsPref.setButton2Visible(canSignIntoNetwork()); mButtonsPref.setButton3Visible(canConnectNetwork());