diff options
Diffstat (limited to 'src/com/android/settings/wifi/tether/WifiTetherSettings.java')
-rw-r--r-- | src/com/android/settings/wifi/tether/WifiTetherSettings.java | 105 |
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 |