Settings: SoftAp: add support for setting shutdown timeout
Change-Id: I80aebe3ca8e13e3dc5c503d5a8527282e96e486a Co-authored-by: Pranav Vashi <neobuddy89@gmail.com> Co-authored-by: jhonboy121 <alfredmathew05@gmail.com> Signed-off-by: cjybyjk <cjybyjk@zjnu.edu.cn> Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
This commit is contained in:
@@ -44,10 +44,12 @@
|
||||
android:persistent="false"
|
||||
android:title="@string/wifi_hotspot_password_title"/>
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
<ListPreference
|
||||
android:key="wifi_tether_auto_turn_off"
|
||||
android:title="@string/wifi_hotspot_auto_off_title"
|
||||
android:summary="@string/wifi_hotspot_auto_off_summary"/>
|
||||
android:summary="%s"
|
||||
android:entries="@array/custom_timeout_entries"
|
||||
android:entryValues="@array/custom_timeout_values" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
android:key="wifi_tether_maximize_compatibility"
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
* Copyright (C) 2022 Project Kaleidoscope
|
||||
* Copyright (C) 2022 FlamingoOS Project
|
||||
* Copyright (C) 2024 crDroid Android Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -21,9 +23,11 @@ import android.net.wifi.SoftApConfiguration;
|
||||
import android.net.wifi.WifiManager;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.TwoStatePreference;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settings.wifi.repository.WifiHotspotRepository;
|
||||
@@ -32,10 +36,11 @@ public class WifiTetherAutoOffPreferenceController extends BasePreferenceControl
|
||||
Preference.OnPreferenceChangeListener {
|
||||
|
||||
private final WifiManager mWifiManager;
|
||||
private boolean mSettingsOn;
|
||||
@VisibleForTesting
|
||||
boolean mNeedShutdownSecondarySap;
|
||||
|
||||
private ListPreference mPreference;
|
||||
|
||||
public WifiTetherAutoOffPreferenceController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
WifiHotspotRepository wifiHotspotRepository = FeatureFactory.getFeatureFactory()
|
||||
@@ -52,27 +57,63 @@ public class WifiTetherAutoOffPreferenceController extends BasePreferenceControl
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
SoftApConfiguration softApConfiguration = mWifiManager.getSoftApConfiguration();
|
||||
mSettingsOn = softApConfiguration.isAutoShutdownEnabled();
|
||||
public void displayPreference(PreferenceScreen screen) {
|
||||
super.displayPreference(screen);
|
||||
mPreference = screen.findPreference(getPreferenceKey());
|
||||
updateDisplay();
|
||||
}
|
||||
|
||||
((TwoStatePreference) preference).setChecked(mSettingsOn);
|
||||
private long getAutoOffTimeout() {
|
||||
final SoftApConfiguration softApConfiguration = mWifiManager.getSoftApConfiguration();
|
||||
final boolean settingsOn = softApConfiguration.isAutoShutdownEnabled();
|
||||
return settingsOn ? softApConfiguration.getShutdownTimeoutMillis() : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
boolean settingsOn = (Boolean) newValue;
|
||||
SoftApConfiguration.Builder configBuilder =
|
||||
new SoftApConfiguration.Builder(mWifiManager.getSoftApConfiguration());
|
||||
configBuilder.setAutoShutdownEnabled(settingsOn);
|
||||
if (mNeedShutdownSecondarySap) {
|
||||
configBuilder.setBridgedModeOpportunisticShutdownEnabled(settingsOn);
|
||||
final long timeout;
|
||||
try {
|
||||
timeout = Long.parseLong((String) newValue);
|
||||
} catch (NumberFormatException e) {
|
||||
return false;
|
||||
}
|
||||
final SoftApConfiguration.Builder configBuilder =
|
||||
new SoftApConfiguration.Builder(mWifiManager.getSoftApConfiguration());
|
||||
setShutdownTimeout(configBuilder, timeout);
|
||||
if (mNeedShutdownSecondarySap) {
|
||||
configBuilder.setBridgedModeOpportunisticShutdownEnabled(timeout > 0);
|
||||
}
|
||||
mSettingsOn = settingsOn;
|
||||
return mWifiManager.setSoftApConfiguration(configBuilder.build());
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return mSettingsOn;
|
||||
public void updateConfig(SoftApConfiguration.Builder builder) {
|
||||
if (builder == null) return;
|
||||
final long timeout = getAutoOffTimeout();
|
||||
setShutdownTimeout(builder, timeout);
|
||||
}
|
||||
|
||||
private void setShutdownTimeout(SoftApConfiguration.Builder builder, long timeout) {
|
||||
builder.setAutoShutdownEnabled(timeout > 0);
|
||||
if (timeout > 0) {
|
||||
builder.setShutdownTimeoutMillis(timeout);
|
||||
}
|
||||
updateDisplay(timeout);
|
||||
}
|
||||
|
||||
public void updateDisplay() {
|
||||
updateDisplay(getAutoOffTimeout());
|
||||
}
|
||||
|
||||
private void updateDisplay(long timeout) {
|
||||
if (mPreference != null) {
|
||||
mPreference.setValue(String.valueOf(timeout));
|
||||
if (timeout > 0) {
|
||||
int index = mPreference.findIndexOfValue(String.valueOf(timeout));
|
||||
mPreference.setSummary(mPreference.getEntries()[index]);
|
||||
} else {
|
||||
mPreference.setSummary(mContext.getResources().getString(
|
||||
R.string.wifi_hotspot_auto_off_summary));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -336,8 +336,7 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
|
||||
if (!mWifiTetherViewModel.isSpeedFeatureAvailable()) {
|
||||
mMaxCompatibilityPrefController.setupMaximizeCompatibility(configBuilder);
|
||||
}
|
||||
configBuilder.setAutoShutdownEnabled(
|
||||
mWifiTetherAutoOffPreferenceController.isEnabled());
|
||||
mWifiTetherAutoOffPreferenceController.updateConfig(configBuilder);
|
||||
mClientPrefController.updateConfig(configBuilder);
|
||||
return configBuilder.build();
|
||||
}
|
||||
@@ -347,6 +346,7 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
|
||||
use(WifiTetherSecurityPreferenceController.class).updateDisplay();
|
||||
use(WifiTetherPasswordPreferenceController.class).updateDisplay();
|
||||
use(WifiTetherMaximizeCompatibilityPreferenceController.class).updateDisplay();
|
||||
use(WifiTetherAutoOffPreferenceController.class).updateDisplay();
|
||||
}
|
||||
|
||||
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||
|
||||
Reference in New Issue
Block a user