[Passpointv2] Implement Wi-Fi detail page for saved network

Will show a Wi-Fi status detail page when clicking a saved network.

Bug: 124695272
Test: Manual
Change-Id: I5f32cf63f369593ad49c93ceeaace9fb623888e5
This commit is contained in:
cosmohsieh
2019-02-20 13:26:08 +08:00
parent 6934475d69
commit b5dac6bacf
4 changed files with 153 additions and 13 deletions

View File

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

View File

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

View File

@@ -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<AbstractPreferenceController> createPreferenceControllers(Context context) {
final List<AbstractPreferenceController> 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()));

View File

@@ -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;
}
}