OSDN Git Service

Fixed Passpoint network "Not in range" issue and forget button
authorQuang Luong <qal@google.com>
Fri, 12 Apr 2019 19:43:48 +0000 (12:43 -0700)
committerQuang Luong <qal@google.com>
Tue, 16 Apr 2019 19:52:25 +0000 (12:52 -0700)
Passpoint networks now correctly allow the user to connect and forget
from the saved networks network detail page.

Bug: 130373102
Test: atest WifiDetailPreferenceControllerTest

Change-Id: I6ed2817bb3a1ac657695272ceb9d5e3f3e944f16

src/com/android/settings/wifi/details/WifiDetailPreferenceController.java

index 5706e9b..b2c0e4d 100644 (file)
@@ -556,14 +556,10 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
 
         mIsOutOfRange = true;
 
-        if (mAccessPoint.getConfig() == null) {
-            return;
-        }
-
         for (AccessPoint ap : mWifiTracker.getAccessPoints()) {
-            if (ap.getConfig() != null
-                    && mAccessPoint.matches(ap.getConfig())) {
+            if (mAccessPoint.matches(ap)) {
                 mAccessPoint = ap;
+                mWifiConfig = ap.getConfig();
                 mIsOutOfRange = !mAccessPoint.isReachable();
                 return;
             }
@@ -822,7 +818,8 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
      * Returns whether the network represented by this preference can be forgotten.
      */
     private boolean canForgetNetwork() {
-        return (mWifiInfo != null && mWifiInfo.isEphemeral()) || canModifyNetwork();
+        return (mWifiInfo != null && mWifiInfo.isEphemeral()) || canModifyNetwork()
+                || mAccessPoint.isPasspoint() || mAccessPoint.isPasspointConfig();
     }
 
     /**
@@ -852,19 +849,23 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
     private void forgetNetwork() {
         if (mWifiInfo != null && mWifiInfo.isEphemeral()) {
             mWifiManager.disableEphemeralNetwork(mWifiInfo.getSSID());
-        } else if (mWifiConfig != null) {
-            if (mWifiConfig.isPasspoint()) {
-                // Post a dialog to confirm if user really want to forget the passpoint network.
-                if (FeatureFlagPersistent.isEnabled(mContext, FeatureFlags.NETWORK_INTERNET_V2)) {
-                    showConfirmForgetDialog();
-                    return;
-                }
+        } else if (mAccessPoint.isPasspoint() || mAccessPoint.isPasspointConfig()) {
+            // Post a dialog to confirm if user really want to forget the passpoint network.
+            if (FeatureFlagPersistent.isEnabled(mContext, FeatureFlags.NETWORK_INTERNET_V2)) {
+                showConfirmForgetDialog();
+                return;
+            }
 
-                mWifiManager.removePasspointConfiguration(mWifiConfig.FQDN);
-            } else {
-                mWifiManager.forget(mWifiConfig.networkId, null /* action listener */);
+            try {
+                mWifiManager.removePasspointConfiguration(mAccessPoint.getPasspointFqdn());
+            } catch (RuntimeException e) {
+                Log.e(TAG, "Failed to remove Passpoint configuration for "
+                        + mAccessPoint.getPasspointFqdn());
             }
+        } else if (mWifiConfig != null) {
+            mWifiManager.forget(mWifiConfig.networkId, null /* action listener */);
         }
+
         mMetricsFeatureProvider.action(
                 mFragment.getActivity(), SettingsEnums.ACTION_WIFI_FORGET);
         mFragment.getActivity().finish();
@@ -874,7 +875,12 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
     protected void showConfirmForgetDialog() {
         final AlertDialog dialog = new AlertDialog.Builder(mContext)
                 .setPositiveButton(R.string.forget, ((dialog1, which) -> {
-                    mWifiManager.removePasspointConfiguration(mWifiConfig.FQDN);
+                    try {
+                        mWifiManager.removePasspointConfiguration(mAccessPoint.getPasspointFqdn());
+                    } catch (RuntimeException e) {
+                        Log.e(TAG, "Failed to remove Passpoint configuration for "
+                                + mAccessPoint.getPasspointFqdn());
+                    }
                     mMetricsFeatureProvider.action(
                             mFragment.getActivity(), SettingsEnums.ACTION_WIFI_FORGET);
                     mFragment.getActivity().finish();
@@ -996,7 +1002,11 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
                 } else if (state == STATE_CONNECTING) {
                     Log.d(TAG, "connecting...");
                     updateConnectedButton(STATE_CONNECTING);
-                    mWifiManager.connect(mWifiConfig.networkId, mConnectListener);
+                    if (mAccessPoint.isPasspoint()) {
+                        mWifiManager.connect(mWifiConfig, mConnectListener);
+                    } else {
+                        mWifiManager.connect(mWifiConfig.networkId, mConnectListener);
+                    }
                     // start timer for error handling since framework didn't call back if failed
                     startTimer();
                 } else if (state == STATE_ENABLE_WIFI_FAILED) {