diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java index 7be441a4cf6..671624e699e 100644 --- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java +++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java @@ -173,7 +173,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController // fall through case WifiManager.NETWORK_STATE_CHANGED_ACTION: case WifiManager.RSSI_CHANGED_ACTION: - updateInfo(); + updateLiveNetworkInfo(); break; } } @@ -336,7 +336,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController mNetwork = mWifiManager.getCurrentNetwork(); mLinkProperties = mConnectivityManager.getLinkProperties(mNetwork); mNetworkCapabilities = mConnectivityManager.getNetworkCapabilities(mNetwork); - updateInfo(); + updateLiveNetworkInfo(); mContext.registerReceiver(mReceiver, mFilter); mConnectivityManager.registerNetworkCallback(mNetworkRequest, mNetworkCallback, mHandler); @@ -353,7 +353,30 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController mConnectivityManager.unregisterNetworkCallback(mNetworkCallback); } - private void updateInfo() { + // TODO(b/124707751): Refactoring the code later, keeping it currently for stability. + protected void updateSavedNetworkInfo() { + mSignalStrengthPref.setVisible(false); + mFrequencyPref.setVisible(false); + mTxLinkSpeedPref.setVisible(false); + mRxLinkSpeedPref.setVisible(false); + + // MAC Address Pref + mMacAddressPref.setSummary(mWifiConfig.getRandomizedMacAddress().toString()); + + // TODO(b/124700353): Change header to data usage chart + mEntityHeaderController.setSummary(mAccessPoint.getSettingsSummary()) + .done(mFragment.getActivity(), true /* rebind */); + + updateIpLayerInfo(); + + // Update whether the forget button should be displayed. + mButtonsPref.setButton1Visible(canForgetNetwork()); + + // TODO(b/124700405): Check if showing share button is fine to added for saved network + mButtonsPref.setButton3Visible(false); + } + + private void updateLiveNetworkInfo() { // No need to fetch LinkProperties and NetworkCapabilities, they are updated by the // callbacks. mNetwork doesn't change except in onResume. mNetworkInfo = mConnectivityManager.getNetworkInfo(mNetwork); diff --git a/src/com/android/settings/wifi/details/WifiDetailSavedNetworkPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailSavedNetworkPreferenceController.java new file mode 100644 index 00000000000..3407890aaf3 --- /dev/null +++ b/src/com/android/settings/wifi/details/WifiDetailSavedNetworkPreferenceController.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.wifi.details; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.wifi.WifiManager; +import android.os.Handler; + +import androidx.fragment.app.Fragment; + +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; +import com.android.settingslib.core.lifecycle.Lifecycle; +import com.android.settingslib.wifi.AccessPoint; + +public class WifiDetailSavedNetworkPreferenceController extends WifiDetailPreferenceController { + + WifiDetailSavedNetworkPreferenceController(AccessPoint accessPoint, + ConnectivityManager connectivityManager, Context context, + Fragment fragment, Handler handler, + Lifecycle lifecycle, + WifiManager wifiManager, + MetricsFeatureProvider metricsFeatureProvider, + IconInjector injector) { + super(accessPoint, connectivityManager, context, fragment, handler, lifecycle, wifiManager, + metricsFeatureProvider, injector); + } + + public static WifiDetailSavedNetworkPreferenceController newInstance( + AccessPoint accessPoint, + ConnectivityManager connectivityManager, + Context context, + Fragment fragment, + Handler handler, + Lifecycle lifecycle, + WifiManager wifiManager, + MetricsFeatureProvider metricsFeatureProvider) { + return new WifiDetailSavedNetworkPreferenceController( + accessPoint, connectivityManager, context, fragment, handler, lifecycle, + wifiManager, metricsFeatureProvider, new IconInjector(context)); + } + + @Override + public void onPause() { + // Do nothing + } + + @Override + public void onResume() { + updateSavedNetworkInfo(); + } +} diff --git a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java index ab470bf0685..fd2e14a13d8 100644 --- a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java +++ b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java @@ -51,6 +51,9 @@ public class WifiNetworkDetailsFragment extends DashboardFragment { private static final String TAG = "WifiNetworkDetailsFrg"; + // Extra for if current fragment shows saved network status or not. + public static final String EXTRA_IS_SAVED_NETWORK = "SavedNetwork"; + private AccessPoint mAccessPoint; private WifiDetailPreferenceController mWifiDetailPreferenceController; @@ -122,15 +125,31 @@ public class WifiNetworkDetailsFragment extends DashboardFragment { protected List createPreferenceControllers(Context context) { final List controllers = new ArrayList<>(); final ConnectivityManager cm = context.getSystemService(ConnectivityManager.class); - mWifiDetailPreferenceController = WifiDetailPreferenceController.newInstance( - mAccessPoint, - cm, - context, - this, - new Handler(Looper.getMainLooper()), // UI thread. - getSettingsLifecycle(), - context.getSystemService(WifiManager.class), - mMetricsFeatureProvider); + + final boolean isDisplaySavedNetworkDetails = + getArguments().getBoolean(EXTRA_IS_SAVED_NETWORK, false /* defaultValue */); + if (isDisplaySavedNetworkDetails) { + mWifiDetailPreferenceController = + WifiDetailSavedNetworkPreferenceController.newInstance( + mAccessPoint, + cm, + context, + this, + new Handler(Looper.getMainLooper()), // UI thread. + getSettingsLifecycle(), + context.getSystemService(WifiManager.class), + mMetricsFeatureProvider); + } else { + mWifiDetailPreferenceController = WifiDetailPreferenceController.newInstance( + mAccessPoint, + cm, + context, + this, + new Handler(Looper.getMainLooper()), // UI thread. + getSettingsLifecycle(), + context.getSystemService(WifiManager.class), + mMetricsFeatureProvider); + } controllers.add(mWifiDetailPreferenceController); controllers.add(new WifiMeteredPreferenceController(context, mAccessPoint.getConfig())); diff --git a/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettings.java b/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettings.java index 7b2574f0b67..6a9e8a22cfd 100644 --- a/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettings.java +++ b/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettings.java @@ -23,13 +23,18 @@ import android.content.Context; import android.content.DialogInterface; import android.net.wifi.WifiManager; import android.os.Bundle; +import android.util.FeatureFlagUtils; import android.util.Log; import com.android.settings.R; +import com.android.settings.core.FeatureFlags; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.development.featureflags.FeatureFlagPersistent; import com.android.settings.wifi.WifiConfigUiBase; import com.android.settings.wifi.WifiDialog; import com.android.settings.wifi.WifiSettings; +import com.android.settings.wifi.details.WifiNetworkDetailsFragment; import com.android.settingslib.wifi.AccessPoint; import com.android.settingslib.wifi.AccessPointPreference; @@ -95,7 +100,23 @@ public class SavedAccessPointsWifiSettings extends DashboardFragment mAccessPointSavedState = null; } - showDialog(WifiSettings.WIFI_DIALOG_ID); + if (usingDetailsFragment(getContext())) { + if (mSelectedAccessPoint == null) { + mSelectedAccessPoint = new AccessPoint(getActivity(), mAccessPointSavedState); + } + final Bundle savedState = new Bundle(); + mSelectedAccessPoint.saveWifiState(savedState); + savedState.putBoolean(WifiNetworkDetailsFragment.EXTRA_IS_SAVED_NETWORK, true); + + new SubSettingLauncher(getContext()) + .setTitleText(mSelectedAccessPoint.getTitle()) + .setDestination(WifiNetworkDetailsFragment.class.getName()) + .setArguments(savedState) + .setSourceMetricsCategory(getMetricsCategory()) + .launch(); + } else { + showDialog(WifiSettings.WIFI_DIALOG_ID); + } } @Override @@ -166,4 +187,15 @@ public class SavedAccessPointsWifiSettings extends DashboardFragment public void onCancel(DialogInterface dialog) { mSelectedAccessPoint = null; } + + /** + * Checks if showing WifiNetworkDetailsFragment when clicking saved network item. + */ + public static boolean usingDetailsFragment(Context context) { + if (FeatureFlagUtils.isEnabled(context, FeatureFlags.MOBILE_NETWORK_V2) + && FeatureFlagPersistent.isEnabled(context, FeatureFlags.NETWORK_INTERNET_V2)) { + return false; // TODO(b/124695272): mark true when UI is ready. + } + return false; + } }