Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b5dac6ba authored by cosmohsieh's avatar cosmohsieh
Browse files

[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
parent 6934475d
Loading
Loading
Loading
Loading
+26 −3
Original line number Diff line number Diff line
@@ -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);
+66 −0
Original line number Diff line number Diff line
/*
 * 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();
    }
}
+28 −9
Original line number Diff line number Diff line
@@ -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,6 +125,21 @@ public class WifiNetworkDetailsFragment extends DashboardFragment {
    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
        final List<AbstractPreferenceController> controllers = new ArrayList<>();
        final ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);

        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,
@@ -131,6 +149,7 @@ public class WifiNetworkDetailsFragment extends DashboardFragment {
                    getSettingsLifecycle(),
                    context.getSystemService(WifiManager.class),
                    mMetricsFeatureProvider);
        }

        controllers.add(mWifiDetailPreferenceController);
        controllers.add(new WifiMeteredPreferenceController(context, mAccessPoint.getConfig()));
+33 −1
Original line number Diff line number Diff line
@@ -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,8 +100,24 @@ public class SavedAccessPointsWifiSettings extends DashboardFragment
            mAccessPointSavedState = null;
        }

        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
    public Dialog onCreateDialog(int dialogId) {
@@ -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;
    }
}