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:persistent="false"
|
||||||
android:title="@string/wifi_hotspot_password_title"/>
|
android:title="@string/wifi_hotspot_password_title"/>
|
||||||
|
|
||||||
<SwitchPreferenceCompat
|
<ListPreference
|
||||||
android:key="wifi_tether_auto_turn_off"
|
android:key="wifi_tether_auto_turn_off"
|
||||||
android:title="@string/wifi_hotspot_auto_off_title"
|
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
|
<SwitchPreferenceCompat
|
||||||
android:key="wifi_tether_maximize_compatibility"
|
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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with 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 android.net.wifi.WifiManager;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
import androidx.preference.ListPreference;
|
||||||
import androidx.preference.Preference;
|
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.core.BasePreferenceController;
|
||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
import com.android.settings.wifi.repository.WifiHotspotRepository;
|
import com.android.settings.wifi.repository.WifiHotspotRepository;
|
||||||
@@ -32,10 +36,11 @@ public class WifiTetherAutoOffPreferenceController extends BasePreferenceControl
|
|||||||
Preference.OnPreferenceChangeListener {
|
Preference.OnPreferenceChangeListener {
|
||||||
|
|
||||||
private final WifiManager mWifiManager;
|
private final WifiManager mWifiManager;
|
||||||
private boolean mSettingsOn;
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
boolean mNeedShutdownSecondarySap;
|
boolean mNeedShutdownSecondarySap;
|
||||||
|
|
||||||
|
private ListPreference mPreference;
|
||||||
|
|
||||||
public WifiTetherAutoOffPreferenceController(Context context, String preferenceKey) {
|
public WifiTetherAutoOffPreferenceController(Context context, String preferenceKey) {
|
||||||
super(context, preferenceKey);
|
super(context, preferenceKey);
|
||||||
WifiHotspotRepository wifiHotspotRepository = FeatureFactory.getFeatureFactory()
|
WifiHotspotRepository wifiHotspotRepository = FeatureFactory.getFeatureFactory()
|
||||||
@@ -52,27 +57,63 @@ public class WifiTetherAutoOffPreferenceController extends BasePreferenceControl
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateState(Preference preference) {
|
public void displayPreference(PreferenceScreen screen) {
|
||||||
SoftApConfiguration softApConfiguration = mWifiManager.getSoftApConfiguration();
|
super.displayPreference(screen);
|
||||||
mSettingsOn = softApConfiguration.isAutoShutdownEnabled();
|
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
|
@Override
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
boolean settingsOn = (Boolean) newValue;
|
final long timeout;
|
||||||
SoftApConfiguration.Builder configBuilder =
|
try {
|
||||||
new SoftApConfiguration.Builder(mWifiManager.getSoftApConfiguration());
|
timeout = Long.parseLong((String) newValue);
|
||||||
configBuilder.setAutoShutdownEnabled(settingsOn);
|
} catch (NumberFormatException e) {
|
||||||
if (mNeedShutdownSecondarySap) {
|
return false;
|
||||||
configBuilder.setBridgedModeOpportunisticShutdownEnabled(settingsOn);
|
}
|
||||||
|
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());
|
return mWifiManager.setSoftApConfiguration(configBuilder.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEnabled() {
|
public void updateConfig(SoftApConfiguration.Builder builder) {
|
||||||
return mSettingsOn;
|
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()) {
|
if (!mWifiTetherViewModel.isSpeedFeatureAvailable()) {
|
||||||
mMaxCompatibilityPrefController.setupMaximizeCompatibility(configBuilder);
|
mMaxCompatibilityPrefController.setupMaximizeCompatibility(configBuilder);
|
||||||
}
|
}
|
||||||
configBuilder.setAutoShutdownEnabled(
|
mWifiTetherAutoOffPreferenceController.updateConfig(configBuilder);
|
||||||
mWifiTetherAutoOffPreferenceController.isEnabled());
|
|
||||||
mClientPrefController.updateConfig(configBuilder);
|
mClientPrefController.updateConfig(configBuilder);
|
||||||
return configBuilder.build();
|
return configBuilder.build();
|
||||||
}
|
}
|
||||||
@@ -347,6 +346,7 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
|
|||||||
use(WifiTetherSecurityPreferenceController.class).updateDisplay();
|
use(WifiTetherSecurityPreferenceController.class).updateDisplay();
|
||||||
use(WifiTetherPasswordPreferenceController.class).updateDisplay();
|
use(WifiTetherPasswordPreferenceController.class).updateDisplay();
|
||||||
use(WifiTetherMaximizeCompatibilityPreferenceController.class).updateDisplay();
|
use(WifiTetherMaximizeCompatibilityPreferenceController.class).updateDisplay();
|
||||||
|
use(WifiTetherAutoOffPreferenceController.class).updateDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||||
|
|||||||
Reference in New Issue
Block a user