Merge "[Wi-Fi] Split WifiEntryCallback into separate callbacks for each action"
diff --git a/src/com/android/settings/wifi/WifiSettings2.java b/src/com/android/settings/wifi/WifiSettings2.java
index bd79b3f..55ce8a1 100644
--- a/src/com/android/settings/wifi/WifiSettings2.java
+++ b/src/com/android/settings/wifi/WifiSettings2.java
@@ -76,11 +76,8 @@
 import com.android.settingslib.search.SearchIndexableRaw;
 import com.android.settingslib.wifi.LongPressWifiEntryPreference;
 import com.android.wifitrackerlib.WifiEntry;
-import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback;
-import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback.ConnectStatus;
-import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback.DisconnectStatus;
-import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback.ForgetStatus;
-import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback.SignInStatus;
+import com.android.wifitrackerlib.WifiEntry.ConnectCallback;
+import com.android.wifitrackerlib.WifiEntry.ConnectCallback.ConnectStatus;
 import com.android.wifitrackerlib.WifiPickerTracker;
 
 import java.time.Clock;
@@ -543,7 +540,7 @@
                 connect(mSelectedWifiEntry, true /* editIfNoConfig */, false /* fullScreenEdit */);
                 return true;
             case MENU_ID_DISCONNECT:
-                mSelectedWifiEntry.disconnect();
+                mSelectedWifiEntry.disconnect(null /* callback */);
                 return true;
             case MENU_ID_FORGET:
                 forget(mSelectedWifiEntry);
@@ -720,7 +717,7 @@
                 mConnectedWifiEntryPreferenceCategory.addPreference(pref);
                 pref.setOnPreferenceClickListener(preference -> {
                     if (connectedEntry.canSignIn()) {
-                        connectedEntry.signIn();
+                        connectedEntry.signIn(null /* callback */);
                     } else {
                         launchNetworkDetailsFragment(pref);
                     }
@@ -961,7 +958,7 @@
 
     private void forget(WifiEntry wifiEntry) {
         mMetricsFeatureProvider.action(getActivity(), SettingsEnums.ACTION_WIFI_FORGET);
-        wifiEntry.forget();
+        wifiEntry.forget(null /* callback */);
     }
 
     private void connect(WifiEntry wifiEntry, boolean editIfNoConfig, boolean fullScreenEdit) {
@@ -969,11 +966,9 @@
                 wifiEntry.isSaved());
 
         // If it's an unsaved secure WifiEntry, it will callback
-        // WifiEntryCallback#onConnectResult with
-        // WifiEntryCallback#CONNECT_STATUS_FAILURE_NO_CONFIG
-        wifiEntry.setListener(new WifiEntryConnectCallback(wifiEntry, editIfNoConfig,
+        // ConnectCallback#onConnectResult with ConnectCallback#CONNECT_STATUS_FAILURE_NO_CONFIG
+        wifiEntry.connect(new WifiEntryConnectCallback(wifiEntry, editIfNoConfig,
                 fullScreenEdit));
-        wifiEntry.connect();
     }
 
     private class WifiSaveThenConnectActionListener implements WifiManager.ActionListener {
@@ -1039,7 +1034,7 @@
                 }
             };
 
-    private class WifiEntryConnectCallback implements WifiEntryCallback {
+    private class WifiEntryConnectCallback implements ConnectCallback {
         final WifiEntry mConnectWifiEntry;
         final boolean mEditIfNoConfig;
         final boolean mFullScreenEdit;
@@ -1052,18 +1047,13 @@
         }
 
         @Override
-        public void onUpdated() {
-            // Do nothing.
-        }
-
-        @Override
         public void onConnectResult(@ConnectStatus int status) {
             final Activity activity = getActivity();
             if (isFisishingOrDestroyed(activity)) {
                 return;
             }
 
-            if (status == WifiEntryCallback.CONNECT_STATUS_FAILURE_NO_CONFIG) {
+            if (status == ConnectCallback.CONNECT_STATUS_FAILURE_NO_CONFIG) {
                 if (mEditIfNoConfig) {
                     // Edit an unsaved secure Wi-Fi network.
                     if (mFullScreenEdit) {
@@ -1077,21 +1067,6 @@
                         Toast.LENGTH_SHORT).show();
             }
         }
-
-        @Override
-        public void onDisconnectResult(@DisconnectStatus int status) {
-            // Do nothing.
-        }
-
-        @Override
-        public void onForgetResult(@ForgetStatus int status) {
-            // Do nothing.
-        }
-
-        @Override
-        public void onSignInResult(@SignInStatus int status) {
-            // Do nothing.
-        }
     }
 
     private boolean isFisishingOrDestroyed(Activity activity) {
diff --git a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
index 5f74d56..50927e3 100644
--- a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
@@ -75,12 +75,14 @@
 import com.android.settingslib.widget.ActionButtonsPreference;
 import com.android.settingslib.widget.LayoutPreference;
 import com.android.wifitrackerlib.WifiEntry;
+import com.android.wifitrackerlib.WifiEntry.ConnectCallback;
+import com.android.wifitrackerlib.WifiEntry.ConnectCallback.ConnectStatus;
 import com.android.wifitrackerlib.WifiEntry.ConnectedInfo;
+import com.android.wifitrackerlib.WifiEntry.ForgetCallback;
+import com.android.wifitrackerlib.WifiEntry.ForgetCallback.ForgetStatus;
+import com.android.wifitrackerlib.WifiEntry.SignInCallback;
+import com.android.wifitrackerlib.WifiEntry.SignInCallback.SignInStatus;
 import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback;
-import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback.ConnectStatus;
-import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback.DisconnectStatus;
-import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback.ForgetStatus;
-import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback.SignInStatus;
 
 import java.net.Inet4Address;
 import java.net.Inet6Address;
@@ -95,7 +97,7 @@
  */
 public class WifiDetailPreferenceController2 extends AbstractPreferenceController
         implements PreferenceControllerMixin, WifiDialog2Listener, LifecycleObserver, OnPause,
-        OnResume, WifiEntryCallback {
+        OnResume, WifiEntryCallback, ConnectCallback, ForgetCallback, SignInCallback {
 
     private static final String TAG = "WifiDetailsPrefCtrl2";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
@@ -214,8 +216,6 @@
                         || hasCapabilityChanged(nc, NET_CAPABILITY_VALIDATED)
                         || hasCapabilityChanged(nc, NET_CAPABILITY_CAPTIVE_PORTAL)
                         || hasCapabilityChanged(nc, NET_CAPABILITY_PARTIAL_CONNECTIVITY)) {
-                    // TODO(b/143326832): What to do with WifiEntry?
-                    // mAccessPoint.update(mWifiConfig, mWifiInfo, mNetworkInfo);
                     refreshEntityHeader();
                 }
                 mNetworkCapabilities = nc;
@@ -706,7 +706,7 @@
             showConfirmForgetDialog();
             return;
         } else {
-            mWifiEntry.forget();
+            mWifiEntry.forget(this);
         }
 
         mMetricsFeatureProvider.action(
@@ -719,7 +719,7 @@
         final AlertDialog dialog = new AlertDialog.Builder(mContext)
                 .setPositiveButton(R.string.forget, ((dialog1, which) -> {
                     try {
-                        mWifiEntry.forget();
+                        mWifiEntry.forget(this);
                     } catch (RuntimeException e) {
                         Log.e(TAG, "Failed to remove Passpoint configuration for "
                                 + WifiEntryShell.getPasspointFqdn(mWifiEntry));
@@ -768,7 +768,7 @@
     private void signIntoNetwork() {
         mMetricsFeatureProvider.action(
                 mFragment.getActivity(), SettingsEnums.ACTION_WIFI_SIGNIN);
-        mConnectivityManager.startCaptivePortalApp(mNetwork);
+        mWifiEntry.signIn(this);
     }
 
     @Override
@@ -814,7 +814,7 @@
 
     @VisibleForTesting
     void connectNetwork() {
-        mWifiEntry.connect();
+        mWifiEntry.connect(this);
     }
 
     private void refreshMacTitle() {
@@ -849,7 +849,7 @@
      */
     @Override
     public void onConnectResult(@ConnectStatus int status) {
-        if (status == WifiEntryCallback.CONNECT_STATUS_SUCCESS) {
+        if (status == ConnectCallback.CONNECT_STATUS_SUCCESS) {
             Toast.makeText(mContext,
                     mContext.getString(R.string.wifi_connected_to_message, mWifiEntry.getTitle()),
                     Toast.LENGTH_SHORT).show();
@@ -868,25 +868,26 @@
                 .setButton3Visible(true);
     }
 
+    // TODO: Add disconnect button.
     /**
      * Result of the disconnect request indicated by the DISCONNECT_STATUS constants.
      */
-    @Override
-    public void onDisconnectResult(@DisconnectStatus int status) {
-        if (status != WifiEntryCallback.DISCONNECT_STATUS_SUCCESS) {
-            Log.e(TAG, "Disconnect Wi-Fi network failed");
-        }
-
-        updateNetworkInfo();
-        refreshPage();
-    }
+    //@Override
+    //public void onDisconnectResult(@DisconnectStatus int status) {
+    //    if (status != DisconnectCallback.DISCONNECT_STATUS_SUCCESS) {
+    //        Log.e(TAG, "Disconnect Wi-Fi network failed");
+    //    }
+    //
+    //    updateNetworkInfo();
+    //    refreshPage();
+    //}
 
     /**
      * Result of the forget request indicated by the FORGET_STATUS constants.
      */
     @Override
     public void onForgetResult(@ForgetStatus int status) {
-        if (status != WifiEntryCallback.FORGET_STATUS_SUCCESS) {
+        if (status != ForgetCallback.FORGET_STATUS_SUCCESS) {
             Log.e(TAG, "Forget Wi-Fi network failed");
         }
 
diff --git a/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java
index db4cb6c..b87b05d 100644
--- a/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java
@@ -88,7 +88,7 @@
             // To activate changing, we need to reconnect network. WiFi will auto connect to
             // current network after disconnect(). Only needed when this is connected network.
             if (mWifiEntry.getConnectedState() == WifiEntry.CONNECTED_STATE_CONNECTED) {
-                mWifiEntry.disconnect();
+                mWifiEntry.disconnect(null /* callback */);
             }
         }
         updateSummary((DropDownPreference) preference, privacy);