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());