Loading src/com/android/settings/wifi/repository/WifiHotspotRepository.java +65 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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() { Loading @@ -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() { Loading @@ -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() { Loading Loading @@ -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() { Loading @@ -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() { Loading Loading @@ -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; Loading src/com/android/settings/wifi/tether/WifiTetherMaximizeCompatibilityPreferenceController.java +18 −0 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -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; Loading src/com/android/settings/wifi/tether/WifiTetherSecurityPreferenceController.java +18 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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( Loading @@ -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) Loading src/com/android/settings/wifi/tether/WifiTetherSettings.java +14 −4 Original line number Diff line number Diff line Loading @@ -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); } } Loading src/com/android/settings/wifi/tether/WifiTetherViewModel.java +15 −2 Original line number Diff line number Diff line Loading @@ -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 Loading
src/com/android/settings/wifi/repository/WifiHotspotRepository.java +65 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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() { Loading @@ -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() { Loading @@ -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() { Loading Loading @@ -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() { Loading @@ -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() { Loading Loading @@ -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; Loading
src/com/android/settings/wifi/tether/WifiTetherMaximizeCompatibilityPreferenceController.java +18 −0 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -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; Loading
src/com/android/settings/wifi/tether/WifiTetherSecurityPreferenceController.java +18 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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( Loading @@ -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) Loading
src/com/android/settings/wifi/tether/WifiTetherSettings.java +14 −4 Original line number Diff line number Diff line Loading @@ -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); } } Loading
src/com/android/settings/wifi/tether/WifiTetherViewModel.java +15 −2 Original line number Diff line number Diff line Loading @@ -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