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

Commit dc027368 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fallback to "Extended Compatibility" if Speed feature is not ready" into udc-dev

parents c57e5c0e d965ff30
Loading
Loading
Loading
Loading
+65 −0
Original line number Diff line number Diff line
@@ -32,9 +32,11 @@ import android.text.TextUtils;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;

import com.android.settings.R;
import com.android.settings.overlay.FeatureFactory;

import java.util.HashMap;
@@ -96,6 +98,10 @@ public class WifiHotspotRepository {
    protected String mCurrentCountryCode;
    protected ActiveCountryCodeChangedCallback mActiveCountryCodeChangedCallback;

    @VisibleForTesting
    Boolean mIsConfigShowSpeed;
    private Boolean mIsSpeedFeatureAvailable;

    public WifiHotspotRepository(@NonNull Context appContext, @NonNull WifiManager wifiManager) {
        mAppContext = appContext;
        mWifiManager = wifiManager;
@@ -314,6 +320,7 @@ public class WifiHotspotRepository {

    /**
     * Return whether Wi-Fi Dual Band is supported or not.
     *
     * @return {@code true} if Wi-Fi Dual Band is supported
     */
    public boolean isDualBand() {
@@ -326,6 +333,7 @@ public class WifiHotspotRepository {

    /**
     * Return whether Wi-Fi 5 GHz band is supported or not.
     *
     * @return {@code true} if Wi-Fi 5 GHz Band is supported
     */
    public boolean is5GHzBandSupported() {
@@ -338,6 +346,7 @@ public class WifiHotspotRepository {

    /**
     * Return whether Wi-Fi Hotspot 5 GHz band is available or not.
     *
     * @return {@code true} if Wi-Fi Hotspot 5 GHz Band is available
     */
    public boolean is5gAvailable() {
@@ -371,6 +380,7 @@ public class WifiHotspotRepository {

    /**
     * Return whether Wi-Fi 6 GHz band is supported or not.
     *
     * @return {@code true} if Wi-Fi 6 GHz Band is supported
     */
    public boolean is6GHzBandSupported() {
@@ -383,6 +393,7 @@ public class WifiHotspotRepository {

    /**
     * Return whether Wi-Fi Hotspot 6 GHz band is available or not.
     *
     * @return {@code true} if Wi-Fi Hotspot 6 GHz Band is available
     */
    public boolean is6gAvailable() {
@@ -432,9 +443,63 @@ public class WifiHotspotRepository {
            // This is expected on some hardware.
            Log.e(TAG, "Querying usable SAP channels is unsupported, band:" + band);
        }
        // Disable Wi-Fi hotspot speed feature if an error occurs while getting usable channels.
        mIsSpeedFeatureAvailable = false;
        Log.w(TAG, "isChannelAvailable(): Wi-Fi hotspot speed feature disabled");
        return defaultValue;
    }

    private boolean isConfigShowSpeed() {
        if (mIsConfigShowSpeed == null) {
            mIsConfigShowSpeed = mAppContext.getResources()
                    .getBoolean(R.bool.config_show_wifi_hotspot_speed);
            log("isConfigShowSpeed():" + mIsConfigShowSpeed);
        }
        return mIsConfigShowSpeed;
    }

    /**
     * Return whether Wi-Fi Hotspot Speed Feature is available or not.
     *
     * @return {@code true} if Wi-Fi Hotspot Speed Feature is available
     */
    public boolean isSpeedFeatureAvailable() {
        if (mIsSpeedFeatureAvailable != null) {
            return mIsSpeedFeatureAvailable;
        }

        // Check config to show Wi-Fi hotspot speed feature
        if (!isConfigShowSpeed()) {
            mIsSpeedFeatureAvailable = false;
            log("isSpeedFeatureAvailable():false, isConfigShowSpeed():false");
            return false;
        }

        // Check if 5 GHz band is not supported
        if (!is5GHzBandSupported()) {
            mIsSpeedFeatureAvailable = false;
            log("isSpeedFeatureAvailable():false, 5 GHz band is not supported on this device");
            return false;
        }
        // Check if 5 GHz band SAP channel is not ready
        isChannelAvailable(WifiScanner.WIFI_BAND_5_GHZ_WITH_DFS, true /* defaultValue */);
        if (mIsSpeedFeatureAvailable != null && !mIsSpeedFeatureAvailable) {
            log("isSpeedFeatureAvailable():false, error occurred while getting 5 GHz SAP channel");
            return false;
        }

        // Check if 6 GHz band SAP channel is not ready
        isChannelAvailable(WifiScanner.WIFI_BAND_6_GHZ, false /* defaultValue */);
        if (mIsSpeedFeatureAvailable != null && !mIsSpeedFeatureAvailable) {
            log("isSpeedFeatureAvailable():false, error occurred while getting 6 GHz SAP channel");
            return false;
        }

        mIsSpeedFeatureAvailable = true;
        log("isSpeedFeatureAvailable():true");
        return true;
    }

    protected void purgeRefreshData() {
        mIs5gAvailable = null;
        mIs6gAvailable = null;
+18 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import androidx.preference.Preference;
import androidx.preference.SwitchPreference;

import com.android.settings.R;
import com.android.settings.overlay.FeatureFactory;

/**
 * This controller helps to manage the state of maximize compatibility switch preference.
@@ -36,13 +37,30 @@ public class WifiTetherMaximizeCompatibilityPreferenceController extends
    public static final String PREF_KEY = "wifi_tether_maximize_compatibility";

    private boolean mIsChecked;
    @VisibleForTesting
    boolean mShouldHidePreference;

    public WifiTetherMaximizeCompatibilityPreferenceController(Context context,
            WifiTetherBasePreferenceController.OnTetherConfigUpdateListener listener) {
        super(context, listener);
        // If the Wi-Fi Hotspot Speed Feature available, then hide this controller.
        mShouldHidePreference = FeatureFactory.getFactory(context)
                .getWifiFeatureProvider().getWifiHotspotRepository().isSpeedFeatureAvailable();
        Log.d(TAG, "mShouldHidePreference:" + mShouldHidePreference);
        if (mShouldHidePreference) {
            return;
        }
        mIsChecked = isMaximizeCompatibilityEnabled();
    }

    @Override
    public boolean isAvailable() {
        if (mShouldHidePreference) {
            return false;
        }
        return super.isAvailable();
    }

    @Override
    public String getPreferenceKey() {
        return PREF_KEY;
+18 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import androidx.preference.Preference;

import com.android.settings.R;
import com.android.settings.core.FeatureFlags;
import com.android.settings.overlay.FeatureFactory;

import java.util.LinkedHashMap;
import java.util.Map;
@@ -48,10 +49,19 @@ public class WifiTetherSecurityPreferenceController extends WifiTetherBasePrefer
    private int mSecurityValue;
    @VisibleForTesting
    boolean mIsWpa3Supported = true;
    @VisibleForTesting
    boolean mShouldHidePreference;

    public WifiTetherSecurityPreferenceController(Context context,
            OnTetherConfigUpdateListener listener) {
        super(context, listener);
        // If the Wi-Fi Hotspot Speed Feature available, then hide this controller.
        mShouldHidePreference = FeatureFactory.getFactory(context)
                .getWifiFeatureProvider().getWifiHotspotRepository().isSpeedFeatureAvailable();
        Log.d(TAG, "shouldHidePreference():" + mShouldHidePreference);
        if (mShouldHidePreference) {
            return;
        }
        final String[] securityNames = mContext.getResources().getStringArray(
                R.array.wifi_tether_security);
        final String[] securityValues = mContext.getResources().getStringArray(
@@ -62,6 +72,14 @@ public class WifiTetherSecurityPreferenceController extends WifiTetherBasePrefer
        mWifiManager.registerSoftApCallback(context.getMainExecutor(), this);
    }

    @Override
    public boolean isAvailable() {
        if (mShouldHidePreference) {
            return false;
        }
        return super.isAvailable();
    }

    @Override
    public String getPreferenceKey() {
        return FeatureFlagUtils.isEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE)
+14 −4
Original line number Diff line number Diff line
@@ -136,12 +136,22 @@ public class WifiTetherSettings extends RestrictedDashboardFragment

        mWifiTetherViewModel = FeatureFactory.getFactory(getContext()).getWifiFeatureProvider()
                .getWifiTetherViewModel(this);
        mWifiHotspotSecurity = findPreference(KEY_WIFI_HOTSPOT_SECURITY);
        if (mWifiHotspotSecurity != null && mWifiHotspotSecurity.isVisible()) {
            mWifiTetherViewModel.getSecuritySummary().observe(this, this::onSecuritySummaryChanged);
        if (mWifiTetherViewModel != null) {
            setupSpeedFeature(mWifiTetherViewModel.isSpeedFeatureAvailable());
        }
    }

    @VisibleForTesting
    void setupSpeedFeature(boolean isSpeedFeatureAvailable) {
        mWifiHotspotSecurity = findPreference(KEY_WIFI_HOTSPOT_SECURITY);
        mWifiHotspotSpeed = findPreference(KEY_WIFI_HOTSPOT_SPEED);
        if (mWifiHotspotSpeed != null && mWifiHotspotSpeed.isVisible()) {
        if (mWifiHotspotSecurity == null || mWifiHotspotSpeed == null) {
            return;
        }
        mWifiHotspotSecurity.setVisible(isSpeedFeatureAvailable);
        mWifiHotspotSpeed.setVisible(isSpeedFeatureAvailable);
        if (isSpeedFeatureAvailable) {
            mWifiTetherViewModel.getSecuritySummary().observe(this, this::onSecuritySummaryChanged);
            mWifiTetherViewModel.getSpeedSummary().observe(this, this::onSpeedSummaryChanged);
        }
    }
+15 −2
Original line number Diff line number Diff line
@@ -83,9 +83,22 @@ public class WifiTetherViewModel extends AndroidViewModel {

    @Override
    protected void onCleared() {
        if (mSecuritySummary != null) {
            mWifiHotspotRepository.getSecurityType().removeObserver(mSecurityTypeObserver);
        }
        if (mSpeedSummary != null) {
            mWifiHotspotRepository.getSpeedType().removeObserver(mSpeedTypeObserver);
        }
    }

    /**
     * Return whether Wi-Fi Hotspot Speed Feature is available or not.
     *
     * @return {@code true} if Wi-Fi Hotspot Speed Feature is available
     */
    public boolean isSpeedFeatureAvailable() {
        return mWifiHotspotRepository.isSpeedFeatureAvailable();
    }

    /**
     * Sets the tethered Wi-Fi AP Configuration.
Loading