summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/wifi/tether/WifiTetherSettings.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/settings/wifi/tether/WifiTetherSettings.java')
-rw-r--r--src/com/android/settings/wifi/tether/WifiTetherSettings.java105
1 files changed, 91 insertions, 14 deletions
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
index 0de7404354..aecc053033 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSettings.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
@@ -19,6 +19,7 @@ package com.android.settings.wifi.tether;
import static android.net.ConnectivityManager.ACTION_TETHER_STATE_CHANGED;
import static android.net.wifi.WifiManager.WIFI_AP_STATE_CHANGED_ACTION;
+import android.app.settings.SettingsEnums;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -27,26 +28,40 @@ import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.UserManager;
-import androidx.annotation.VisibleForTesting;
+import android.provider.SearchIndexableResource;
import android.util.Log;
-import com.android.internal.logging.nano.MetricsProto;
+import androidx.annotation.VisibleForTesting;
+
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.dashboard.RestrictedDashboardFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.SwitchBarController;
+import com.android.settingslib.TetherUtil;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class WifiTetherSettings extends RestrictedDashboardFragment
implements WifiTetherBasePreferenceController.OnTetherConfigUpdateListener {
private static final String TAG = "WifiTetherSettings";
private static final IntentFilter TETHER_STATE_CHANGE_FILTER;
- private static final String KEY_WIFI_TETHER_AUTO_OFF = "wifi_tether_auto_turn_off";
+ private static final String KEY_WIFI_TETHER_SCREEN = "wifi_tether_settings_screen";
+ @VisibleForTesting
+ static final String KEY_WIFI_TETHER_NETWORK_NAME = "wifi_tether_network_name";
+ @VisibleForTesting
+ static final String KEY_WIFI_TETHER_NETWORK_PASSWORD = "wifi_tether_network_password";
+ @VisibleForTesting
+ static final String KEY_WIFI_TETHER_AUTO_OFF = "wifi_tether_auto_turn_off";
+ @VisibleForTesting
+ static final String KEY_WIFI_TETHER_NETWORK_AP_BAND = "wifi_tether_network_ap_band";
private WifiTetherSwitchBarController mSwitchBarController;
private WifiTetherSSIDPreferenceController mSSIDPreferenceController;
@@ -56,6 +71,7 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
private WifiManager mWifiManager;
private boolean mRestartWifiApAfterConfigChange;
+ private boolean mUnavailable;
@VisibleForTesting
TetherChangeReceiver mTetherChangeReceiver;
@@ -71,7 +87,7 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
@Override
public int getMetricsCategory() {
- return MetricsProto.MetricsEvent.WIFI_TETHER_SETTINGS;
+ return SettingsEnums.WIFI_TETHER_SETTINGS;
}
@Override
@@ -80,28 +96,52 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
}
@Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ setIfOnlyAvailableForAdmins(true);
+ if (isUiRestricted()) {
+ mUnavailable = true;
+ }
+ }
+
+ @Override
public void onAttach(Context context) {
super.onAttach(context);
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
mTetherChangeReceiver = new TetherChangeReceiver();
+
+ mSSIDPreferenceController = use(WifiTetherSSIDPreferenceController.class);
+ mSecurityPreferenceController = use(WifiTetherSecurityPreferenceController.class);
+ mPasswordPreferenceController = use(WifiTetherPasswordPreferenceController.class);
+ mApBandPreferenceController = use(WifiTetherApBandPreferenceController.class);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
+ if (mUnavailable) {
+ return;
+ }
// Assume we are in a SettingsActivity. This is only safe because we currently use
// SettingsActivity as base for all preference fragments.
final SettingsActivity activity = (SettingsActivity) getActivity();
final SwitchBar switchBar = activity.getSwitchBar();
mSwitchBarController = new WifiTetherSwitchBarController(activity,
new SwitchBarController(switchBar));
- getLifecycle().addObserver(mSwitchBarController);
+ getSettingsLifecycle().addObserver(mSwitchBarController);
switchBar.show();
}
@Override
public void onStart() {
super.onStart();
+ if (mUnavailable) {
+ if (!isUiRestrictedByOnlyAdmin()) {
+ getEmptyTextView().setText(R.string.tethering_settings_not_available);
+ }
+ getPreferenceScreen().removeAll();
+ return;
+ }
final Context context = getContext();
if (context != null) {
context.registerReceiver(mTetherChangeReceiver, TETHER_STATE_CHANGE_FILTER);
@@ -111,6 +151,9 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
@Override
public void onStop() {
super.onStop();
+ if (mUnavailable) {
+ return;
+ }
final Context context = getContext();
if (context != null) {
context.unregisterReceiver(mTetherChangeReceiver);
@@ -125,18 +168,19 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
@Override
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
+ return buildPreferenceControllers(context, this::onTetherConfigUpdated);
+ }
+
+ private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
+ WifiTetherBasePreferenceController.OnTetherConfigUpdateListener listener) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
- mSSIDPreferenceController = new WifiTetherSSIDPreferenceController(context, this);
- mSecurityPreferenceController = new WifiTetherSecurityPreferenceController(context, this);
- mPasswordPreferenceController = new WifiTetherPasswordPreferenceController(context, this);
- mApBandPreferenceController = new WifiTetherApBandPreferenceController(context, this);
-
- controllers.add(mSSIDPreferenceController);
- controllers.add(mSecurityPreferenceController);
- controllers.add(mPasswordPreferenceController);
- controllers.add(mApBandPreferenceController);
+ controllers.add(new WifiTetherSSIDPreferenceController(context, listener));
+ controllers.add(new WifiTetherSecurityPreferenceController(context, listener));
+ controllers.add(new WifiTetherPasswordPreferenceController(context, listener));
+ controllers.add(new WifiTetherApBandPreferenceController(context, listener));
controllers.add(
new WifiTetherAutoOffPreferenceController(context, KEY_WIFI_TETHER_AUTO_OFF));
+
return controllers;
}
@@ -187,6 +231,39 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
.updateDisplay();
}
+ public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider() {
+ @Override
+ public List<SearchIndexableResource> getXmlResourcesToIndex(
+ Context context, boolean enabled) {
+ final SearchIndexableResource sir = new SearchIndexableResource(context);
+ sir.xmlResId = R.xml.wifi_tether_settings;
+ return Arrays.asList(sir);
+ }
+
+ @Override
+ public List<String> getNonIndexableKeys(Context context) {
+ final List<String> keys = super.getNonIndexableKeys(context);
+
+ if (!TetherUtil.isTetherAvailable(context)) {
+ keys.add(KEY_WIFI_TETHER_NETWORK_NAME);
+ keys.add(KEY_WIFI_TETHER_NETWORK_PASSWORD);
+ keys.add(KEY_WIFI_TETHER_AUTO_OFF);
+ keys.add(KEY_WIFI_TETHER_NETWORK_AP_BAND);
+ }
+
+ // Remove duplicate
+ keys.add(KEY_WIFI_TETHER_SCREEN);
+ return keys;
+ }
+
+ @Override
+ public List<AbstractPreferenceController> createPreferenceControllers(
+ Context context) {
+ return buildPreferenceControllers(context, null /* listener */);
+ }
+ };
+
@VisibleForTesting
class TetherChangeReceiver extends BroadcastReceiver {
@Override