From 0664d3cc458cfc739d53c2493da41b82bf841ea8 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Thu, 30 Nov 2023 12:03:51 +0800 Subject: [PATCH] Clean up AllInOneTetherSettings This project is not on-going. Clean up to help improve latency. Bug: 311604902 Test: manual - on Network & internet page Test: robo test Change-Id: I6addb92e5587206661d1b64bdc56473a85ba9c9f --- res/values/strings.xml | 25 +- res/xml/all_tether_prefs.xml | 100 ---- res/xml/network_provider_internet.xml | 12 - .../settings/AllInOneTetherSettings.java | 444 ------------------ src/com/android/settings/Settings.java | 41 +- .../core/gateway/SettingsGateway.java | 2 - .../AllInOneTetherPreferenceController.java | 246 ---------- .../BluetoothTetherPreferenceController.java | 93 ---- .../EthernetTetherPreferenceController.java | 99 ---- .../network/NetworkDashboardFragment.java | 8 - .../TetherBasePreferenceController.java | 162 ------- .../network/TetherPreferenceController.kt | 10 +- .../UsbTetherPreferenceController.java | 95 ---- ...WifiTetherDisablePreferenceController.java | 120 ----- .../network/tether/TetherSettings.java | 7 - .../WifiTetherApBandPreferenceController.java | 139 ------ ...ifiTetherPasswordPreferenceController.java | 7 +- .../WifiTetherSSIDPreferenceController.java | 7 +- ...ifiTetherSecurityPreferenceController.java | 7 +- .../wifi/tether/WifiTetherSettings.java | 7 +- .../settings/AllInOneTetherSettingsTest.java | 240 ---------- ...llInOneTetherPreferenceControllerTest.java | 187 -------- ...uetoothTetherPreferenceControllerTest.java | 132 ------ ...thernetTetherPreferenceControllerTest.java | 143 ------ .../UsbTetherPreferenceControllerTest.java | 128 ----- ...TetherDisablePreferenceControllerTest.java | 142 ------ .../network/tether/TetherSettingsTest.java | 5 - ...iTetherApBandPreferenceControllerTest.java | 171 ------- .../wifi/tether/WifiTetherSettingsTest.java | 3 - 29 files changed, 8 insertions(+), 2774 deletions(-) delete mode 100644 res/xml/all_tether_prefs.xml delete mode 100644 src/com/android/settings/AllInOneTetherSettings.java delete mode 100644 src/com/android/settings/network/AllInOneTetherPreferenceController.java delete mode 100644 src/com/android/settings/network/BluetoothTetherPreferenceController.java delete mode 100644 src/com/android/settings/network/EthernetTetherPreferenceController.java delete mode 100644 src/com/android/settings/network/TetherBasePreferenceController.java delete mode 100644 src/com/android/settings/network/UsbTetherPreferenceController.java delete mode 100644 src/com/android/settings/network/WifiTetherDisablePreferenceController.java delete mode 100644 src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java delete mode 100644 tests/robotests/src/com/android/settings/AllInOneTetherSettingsTest.java delete mode 100644 tests/robotests/src/com/android/settings/network/AllInOneTetherPreferenceControllerTest.java delete mode 100644 tests/robotests/src/com/android/settings/network/BluetoothTetherPreferenceControllerTest.java delete mode 100644 tests/robotests/src/com/android/settings/network/EthernetTetherPreferenceControllerTest.java delete mode 100644 tests/robotests/src/com/android/settings/network/UsbTetherPreferenceControllerTest.java delete mode 100644 tests/robotests/src/com/android/settings/network/WifiTetherDisablePreferenceControllerTest.java delete mode 100644 tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java diff --git a/res/values/strings.xml b/res/values/strings.xml index 8dca8d0e2af..f7b77ea4bfd 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2308,8 +2308,6 @@ Hotspot name Hotspot password - - AP Band Turn off hotspot automatically @@ -3409,29 +3407,8 @@ Off - - Tethering - - - - Don\u2019t use Wi\u2011Fi hotspot - - Only share internet via USB - - Only share internet via Bluetooth - - Only share internet via Ethernet - - Only share internet via USB and Bluetooth - - Only share internet via USB and Ethernet - - Only share internet via Bluetooth and Ethernet - - Only share internet via USB, Bluetooth and Ethernet - - USB + USB tethering diff --git a/res/xml/all_tether_prefs.xml b/res/xml/all_tether_prefs.xml deleted file mode 100644 index 8673d3176e6..00000000000 --- a/res/xml/all_tether_prefs.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/res/xml/network_provider_internet.xml b/res/xml/network_provider_internet.xml index 76ef984c403..cd44ab1620e 100644 --- a/res/xml/network_provider_internet.xml +++ b/res/xml/network_provider_internet.xml @@ -70,18 +70,6 @@ settings:userRestriction="no_config_tethering" settings:useAdminDisabledSummary="true" /> - - mBluetoothPan = new AtomicReference<>(); - - private WifiTetherSSIDPreferenceController mSSIDPreferenceController; - private WifiTetherPasswordPreferenceController mPasswordPreferenceController; - private WifiTetherApBandPreferenceController mApBandPreferenceController; - private WifiTetherSecurityPreferenceController mSecurityPreferenceController; - private PreferenceGroup mWifiTetherGroup; - private boolean mShouldShowWifiConfig = true; - private boolean mHasShownAdvance; - private TetherEnabler mTetherEnabler; - @VisibleForTesting - final TetherEnabler.OnTetherStateUpdateListener mStateUpdateListener = - state -> { - mShouldShowWifiConfig = TetherEnabler.isTethering(state, TETHERING_WIFI) - || state == TetherEnabler.TETHERING_OFF; - getPreferenceScreen().setInitialExpandedChildrenCount( - getInitialExpandedChildCount()); - mWifiTetherGroup.setVisible(mShouldShowWifiConfig); - }; - - private final BroadcastReceiver mTetherChangeReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context content, Intent intent) { - String action = intent.getAction(); - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, - "updating display config due to receiving broadcast action " + action); - } - updateDisplayWithNewConfig(); - if (TextUtils.equals(action, ACTION_TETHER_STATE_CHANGED)) { - restartWifiTetherIfNeed(mWifiManager.getWifiApState()); - } else if (TextUtils.equals(action, WIFI_AP_STATE_CHANGED_ACTION)) { - restartWifiTetherIfNeed(intent.getIntExtra(WifiManager.EXTRA_WIFI_AP_STATE, 0)); - } - } - - private void restartWifiTetherIfNeed(int state) { - if (state == WifiManager.WIFI_AP_STATE_DISABLED - && mRestartWifiApAfterConfigChange) { - mRestartWifiApAfterConfigChange = false; - mTetherEnabler.startTethering(TETHERING_WIFI); - } - } - }; - - private final BluetoothProfile.ServiceListener mProfileServiceListener = - new BluetoothProfile.ServiceListener() { - public void onServiceConnected(int profile, BluetoothProfile proxy) { - mBluetoothPan.set((BluetoothPan) proxy); - } - - public void onServiceDisconnected(int profile) { - mBluetoothPan.set(null); - } - }; - - @Override - public int getMetricsCategory() { - return SettingsEnums.TETHER; - } - - public AllInOneTetherSettings() { - super(UserManager.DISALLOW_CONFIG_TETHERING); - } - - @Override - public void onAttach(Context context) { - super.onAttach(context); - mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); - - mSSIDPreferenceController = use(WifiTetherSSIDPreferenceController.class); - mSecurityPreferenceController = use(WifiTetherSecurityPreferenceController.class); - mPasswordPreferenceController = use(WifiTetherPasswordPreferenceController.class); - mApBandPreferenceController = use(WifiTetherApBandPreferenceController.class); - getSettingsLifecycle().addObserver(use(UsbTetherPreferenceController.class)); - getSettingsLifecycle().addObserver(use(BluetoothTetherPreferenceController.class)); - getSettingsLifecycle().addObserver(use(EthernetTetherPreferenceController.class)); - getSettingsLifecycle().addObserver(use(WifiTetherDisablePreferenceController.class)); - } - - @Override - public void onCreate(Bundle icicle) { - super.onCreate(icicle); - mDataSaverBackend = new DataSaverBackend(getContext()); - mDataSaverEnabled = mDataSaverBackend.isDataSaverEnabled(); - mDataSaverFooter = findPreference(KEY_DATA_SAVER_FOOTER); - mWifiTetherGroup = findPreference(KEY_WIFI_TETHER_GROUP); - - setIfOnlyAvailableForAdmins(true); - if (isUiRestricted()) { - mUnavailable = true; - return; - } - - mDataSaverBackend.addListener(this); - - // Set initial state based on Data Saver mode. - onDataSaverChanged(mDataSaverBackend.isDataSaverEnabled()); - } - - @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 BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); - if (adapter != null) { - adapter.getProfileProxy(activity.getApplicationContext(), mProfileServiceListener, - BluetoothProfile.PAN); - } - final SettingsMainSwitchBar mainSwitch = activity.getSwitchBar(); - mTetherEnabler = new TetherEnabler(activity, - new MainSwitchBarController(mainSwitch), mBluetoothPan); - getSettingsLifecycle().addObserver(mTetherEnabler); - use(UsbTetherPreferenceController.class).setTetherEnabler(mTetherEnabler); - use(BluetoothTetherPreferenceController.class).setTetherEnabler(mTetherEnabler); - use(EthernetTetherPreferenceController.class).setTetherEnabler(mTetherEnabler); - use(WifiTetherDisablePreferenceController.class).setTetherEnabler(mTetherEnabler); - mainSwitch.show(); - } - - @Override - public void onStart() { - super.onStart(); - - if (mUnavailable) { - if (!isUiRestrictedByOnlyAdmin()) { - getEmptyTextView().setText( - com.android.settingslib.R.string.tethering_settings_not_available); - } - getPreferenceScreen().removeAll(); - return; - } - final Context context = getContext(); - if (context != null) { - // The intent WIFI_AP_STATE_CHANGED_ACTION is not sticky intent after SC-V2 - // But ACTION_TETHER_STATE_CHANGED is still sticky intent. So no need to handle - // initial state for WIFI_AP_STATE_CHANGED_ACTION - IntentFilter filter = new IntentFilter(ACTION_TETHER_STATE_CHANGED); - filter.addAction(WIFI_AP_STATE_CHANGED_ACTION); - context.registerReceiver(mTetherChangeReceiver, filter); - } - } - - @Override - public void onResume() { - super.onResume(); - if (mUnavailable) { - return; - } - if (mTetherEnabler != null) { - mTetherEnabler.addListener(mStateUpdateListener); - } - } - - @Override - public void onPause() { - super.onPause(); - if (mUnavailable) { - return; - } - if (mTetherEnabler != null) { - mTetherEnabler.removeListener(mStateUpdateListener); - } - } - - @Override - public void onStop() { - super.onStop(); - if (mUnavailable) { - return; - } - final Context context = getContext(); - if (context != null) { - context.unregisterReceiver(mTetherChangeReceiver); - } - } - - @Override - public void onDestroy() { - mDataSaverBackend.remListener(this); - super.onDestroy(); - } - - @Override - public void onDataSaverChanged(boolean isDataSaving) { - mDataSaverEnabled = isDataSaving; - mDataSaverFooter.setVisible(mDataSaverEnabled); - } - - @Override - public void onAllowlistStatusChanged(int uid, boolean isAllowlisted) { - // Do nothing - } - - @Override - public void onDenylistStatusChanged(int uid, boolean isDenylisted) { - // Do nothing - } - - @Override - protected List createPreferenceControllers(Context context) { - return buildPreferenceControllers(context, this); - } - - private static List buildPreferenceControllers(Context context, - WifiTetherBasePreferenceController.OnTetherConfigUpdateListener listener) { - final List controllers = new ArrayList<>(); - controllers.add( - new WifiTetherSSIDPreferenceController(context, listener)); - controllers.add( - new WifiTetherPasswordPreferenceController(context, listener)); - controllers.add( - new WifiTetherApBandPreferenceController(context, listener)); - controllers.add( - new WifiTetherSecurityPreferenceController(context, listener)); - controllers.add( - new WifiTetherAutoOffPreferenceController(context, KEY_WIFI_TETHER_AUTO_OFF)); - controllers.add( - new WifiTetherFooterPreferenceController(context)); - - return controllers; - } - - @Override - protected int getPreferenceScreenResId() { - return R.xml.all_tether_prefs; - } - - @Override - protected String getLogTag() { - return TAG; - } - - @Override - public int getHelpResource() { - return R.string.help_url_tether; - } - - @Override - public void onTetherConfigUpdated(AbstractPreferenceController controller) { - final SoftApConfiguration config = buildNewConfig(); - mPasswordPreferenceController.setSecurityType(config.getSecurityType()); - mWifiManager.setSoftApConfiguration(config); - - if (mWifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_ENABLED) { - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Wifi AP config changed while enabled, stop and restart"); - } - mRestartWifiApAfterConfigChange = true; - mTetherEnabler.stopTethering(TETHERING_WIFI); - } - } - - private SoftApConfiguration buildNewConfig() { - final SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder(); - final int securityType = mSecurityPreferenceController.getSecurityType(); - configBuilder.setSsid(mSSIDPreferenceController.getSSID()); - if (securityType == SoftApConfiguration.SECURITY_TYPE_WPA2_PSK) { - configBuilder.setPassphrase( - mPasswordPreferenceController.getPasswordValidated(securityType), - SoftApConfiguration.SECURITY_TYPE_WPA2_PSK); - } - configBuilder.setBand(mApBandPreferenceController.getBandIndex()); - return configBuilder.build(); - } - - private void updateDisplayWithNewConfig() { - mSSIDPreferenceController.updateDisplay(); - mSecurityPreferenceController.updateDisplay(); - mPasswordPreferenceController.updateDisplay(); - mApBandPreferenceController.updateDisplay(); - } - - @Override - public int getInitialExpandedChildCount() { - if (mHasShownAdvance || !mShouldShowWifiConfig) { - mHasShownAdvance = true; - return EXPANDED_CHILD_COUNT_MAX; - } - - if (mSecurityPreferenceController == null) { - return EXPANDED_CHILD_COUNT_DEFAULT; - } - - return (mSecurityPreferenceController.getSecurityType() - == SoftApConfiguration.SECURITY_TYPE_OPEN) - ? EXPANDED_CHILD_COUNT_WITH_SECURITY_NON : EXPANDED_CHILD_COUNT_DEFAULT; - } - - @Override - public void onExpandButtonClick() { - super.onExpandButtonClick(); - mHasShownAdvance = true; - } - - public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = - new BaseSearchIndexProvider(R.xml.all_tether_prefs) { - - @Override - public List getNonIndexableKeys(Context context) { - final List 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); - keys.add(KEY_WIFI_TETHER_SECURITY); - } - return keys; - } - - @Override - protected boolean isPageSearchEnabled(Context context) { - return FeatureFlagUtils.isEnabled(context, FeatureFlags.TETHER_ALL_IN_ONE); - } - - @Override - public List createPreferenceControllers( - Context context) { - return buildPreferenceControllers(context, null /*listener*/); - } - }; -} diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 64e3244a910..68ae0aebe61 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -19,18 +19,15 @@ package com.android.settings; import static android.provider.Settings.ACTION_PRIVACY_SETTINGS; import android.content.ActivityNotFoundException; -import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.ims.ImsRcsManager; import android.text.TextUtils; -import android.util.FeatureFlagUtils; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.biometrics.face.FaceSettings; import com.android.settings.communal.CommunalPreferenceController; -import com.android.settings.core.FeatureFlags; import com.android.settings.enterprise.EnterprisePrivacySettings; import com.android.settings.network.MobileNetworkIntentConverter; import com.android.settings.overlay.FeatureFactory; @@ -58,42 +55,8 @@ public class Settings extends SettingsActivity { public static class FingerprintSettingsActivityV2 extends SettingsActivity { /* empty */ } public static class CombinedBiometricSettingsActivity extends SettingsActivity { /* empty */ } public static class CombinedBiometricProfileSettingsActivity extends SettingsActivity { /* empty */ } - public static class TetherSettingsActivity extends SettingsActivity { - // TODO(b/147675042): Clean the override up when we enable the new Fragment persistently. - @Override - public Intent getIntent() { - return wrapIntentWithAllInOneTetherSettingsIfNeeded( - getApplicationContext(), super.getIntent()); - } - } - public static class WifiTetherSettingsActivity extends SettingsActivity { - // TODO(b/147675042): Clean the override up when we enable the new Fragment persistently. - @Override - public Intent getIntent() { - return wrapIntentWithAllInOneTetherSettingsIfNeeded( - getApplicationContext(), super.getIntent()); - } - } - - private static Intent wrapIntentWithAllInOneTetherSettingsIfNeeded( - Context context, Intent superIntent) { - if (!FeatureFlagUtils.isEnabled(context, FeatureFlags.TETHER_ALL_IN_ONE)) { - return superIntent; - } - - final Intent modIntent = new Intent(superIntent); - modIntent.putExtra(EXTRA_SHOW_FRAGMENT, - AllInOneTetherSettings.class.getCanonicalName()); - Bundle args = superIntent.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS); - if (args != null) { - args = new Bundle(args); - } else { - args = new Bundle(); - } - args.putParcelable("intent", superIntent); - modIntent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, args); - return modIntent; - } + public static class TetherSettingsActivity extends SettingsActivity { /* empty */ } + public static class WifiTetherSettingsActivity extends SettingsActivity { /* empty */ } public static class VpnSettingsActivity extends SettingsActivity { /* empty */ } /** Activity for Data saver settings. */ diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java index 554d23eafd2..6d1d4e83d1c 100644 --- a/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/src/com/android/settings/core/gateway/SettingsGateway.java @@ -16,7 +16,6 @@ package com.android.settings.core.gateway; -import com.android.settings.AllInOneTetherSettings; import com.android.settings.DisplaySettings; import com.android.settings.IccLockSettings; import com.android.settings.MainClear; @@ -205,7 +204,6 @@ public class SettingsGateway { WifiNetworkDetailsFragment.class.getName(), ConfigureWifiSettings.class.getName(), SavedAccessPointsWifiSettings2.class.getName(), - AllInOneTetherSettings.class.getName(), TetherSettings.class.getName(), SmartAutoRotatePreferenceFragment.class.getName(), WifiP2pSettings.class.getName(), diff --git a/src/com/android/settings/network/AllInOneTetherPreferenceController.java b/src/com/android/settings/network/AllInOneTetherPreferenceController.java deleted file mode 100644 index 7baa917448e..00000000000 --- a/src/com/android/settings/network/AllInOneTetherPreferenceController.java +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.settings.network; - -import static android.os.UserManager.DISALLOW_CONFIG_TETHERING; - -import static com.android.settings.network.TetherEnabler.TETHERING_BLUETOOTH_ON; -import static com.android.settings.network.TetherEnabler.TETHERING_ETHERNET_ON; -import static com.android.settings.network.TetherEnabler.TETHERING_OFF; -import static com.android.settings.network.TetherEnabler.TETHERING_USB_ON; -import static com.android.settings.network.TetherEnabler.TETHERING_WIFI_ON; -import static com.android.settingslib.RestrictedLockUtilsInternal.checkIfRestrictionEnforced; - -import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothPan; -import android.bluetooth.BluetoothProfile; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.UserHandle; -import android.text.TextUtils; -import android.util.FeatureFlagUtils; -import android.util.Log; - -import androidx.annotation.VisibleForTesting; -import androidx.lifecycle.Lifecycle; -import androidx.lifecycle.Lifecycle.Event; -import androidx.lifecycle.LifecycleObserver; -import androidx.lifecycle.OnLifecycleEvent; -import androidx.preference.PreferenceScreen; - -import com.android.settings.R; -import com.android.settings.core.BasePreferenceController; -import com.android.settings.core.FeatureFlags; -import com.android.settings.widget.GenericSwitchController; -import com.android.settingslib.PrimarySwitchPreference; -import com.android.settingslib.TetherUtil; - -import java.util.concurrent.atomic.AtomicReference; - -/** - * This controller helps to manage the switch state and visibility of "Hotspot & tethering" switch - * preference. It updates the preference summary text based on tethering state. - */ -public class AllInOneTetherPreferenceController extends BasePreferenceController implements - LifecycleObserver, TetherEnabler.OnTetherStateUpdateListener { - private static final String TAG = "AllInOneTetherPreferenceController"; - - private int mTetheringState; - - private final boolean mAdminDisallowedTetherConfig; - private final AtomicReference mBluetoothPan; - private final BluetoothAdapter mBluetoothAdapter; - @VisibleForTesting - final BluetoothProfile.ServiceListener mBtProfileServiceListener = - new BluetoothProfile.ServiceListener() { - @Override - public void onServiceConnected(int profile, BluetoothProfile proxy) { - if (mBluetoothPan.get() == null) { - mBluetoothPan.set((BluetoothPan) proxy); - } - } - - @Override - public void onServiceDisconnected(int profile) { /* Do nothing */ } - }; - - private PrimarySwitchPreference mPreference; - private TetherEnabler mTetherEnabler; - private BroadcastReceiver mBluetoothStateReceiver; - - @VisibleForTesting(otherwise = VisibleForTesting.NONE) - AllInOneTetherPreferenceController() { - super(null /*context*/, "test"); - mAdminDisallowedTetherConfig = false; - mBluetoothPan = new AtomicReference<>(); - mBluetoothAdapter = null; - } - - public AllInOneTetherPreferenceController(Context context, String key) { - super(context, key); - mBluetoothPan = new AtomicReference<>(); - mAdminDisallowedTetherConfig = checkIfRestrictionEnforced( - context, DISALLOW_CONFIG_TETHERING, UserHandle.myUserId()) != null; - mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); - } - - @Override - public void displayPreference(PreferenceScreen screen) { - super.displayPreference(screen); - mPreference = screen.findPreference(mPreferenceKey); - } - - @Override - public int getAvailabilityStatus() { - if (!TetherUtil.isTetherAvailable(mContext) - || !FeatureFlagUtils.isEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE)) { - return CONDITIONALLY_UNAVAILABLE; - } else { - return AVAILABLE; - } - } - - @Override - public CharSequence getSummary() { - switch (mTetheringState) { - case TETHERING_OFF: - return mContext.getString(R.string.tether_settings_summary_off); - case TETHERING_WIFI_ON: - return mContext.getString(R.string.tether_settings_summary_hotspot_only); - case TETHERING_USB_ON: - return mContext.getString(R.string.tether_settings_summary_usb_tethering_only); - case TETHERING_BLUETOOTH_ON: - return mContext.getString( - R.string.tether_settings_summary_bluetooth_tethering_only); - case TETHERING_ETHERNET_ON: - return mContext.getString(R.string.tether_settings_summary_ethernet_tethering_only); - case TETHERING_WIFI_ON | TETHERING_USB_ON: - return mContext.getString(R.string.tether_settings_summary_hotspot_and_usb); - case TETHERING_WIFI_ON | TETHERING_BLUETOOTH_ON: - return mContext.getString(R.string.tether_settings_summary_hotspot_and_bluetooth); - case TETHERING_WIFI_ON | TETHERING_ETHERNET_ON: - return mContext.getString(R.string.tether_settings_summary_hotspot_and_ethernet); - case TETHERING_USB_ON | TETHERING_BLUETOOTH_ON: - return mContext.getString(R.string.tether_settings_summary_usb_and_bluetooth); - case TETHERING_USB_ON | TETHERING_ETHERNET_ON: - return mContext.getString(R.string.tether_settings_summary_usb_and_ethernet); - case TETHERING_BLUETOOTH_ON | TETHERING_ETHERNET_ON: - return mContext.getString(R.string.tether_settings_summary_bluetooth_and_ethernet); - case TETHERING_WIFI_ON | TETHERING_USB_ON | TETHERING_BLUETOOTH_ON: - return mContext.getString( - R.string.tether_settings_summary_hotspot_and_usb_and_bluetooth); - case TETHERING_WIFI_ON | TETHERING_USB_ON | TETHERING_ETHERNET_ON: - return mContext.getString( - R.string.tether_settings_summary_hotspot_and_usb_and_ethernet); - case TETHERING_WIFI_ON | TETHERING_BLUETOOTH_ON | TETHERING_ETHERNET_ON: - return mContext.getString( - R.string.tether_settings_summary_hotspot_and_bluetooth_and_ethernet); - case TETHERING_USB_ON | TETHERING_BLUETOOTH_ON | TETHERING_ETHERNET_ON: - return mContext.getString( - R.string.tether_settings_summary_usb_and_bluetooth_and_ethernet); - case TETHERING_WIFI_ON | TETHERING_USB_ON | TETHERING_BLUETOOTH_ON - | TETHERING_ETHERNET_ON: - return mContext.getString(R.string.tether_settings_summary_all); - default: - Log.e(TAG, "Unknown tethering state"); - return mContext.getString(R.string.summary_placeholder); - } - } - - @OnLifecycleEvent(Event.ON_CREATE) - public void onCreate() { - if (mBluetoothAdapter != null - && mBluetoothAdapter.getState() == BluetoothAdapter.STATE_ON) { - mBluetoothAdapter.getProfileProxy(mContext, mBtProfileServiceListener, - BluetoothProfile.PAN); - } - if (mBluetoothStateReceiver == null) { - mBluetoothStateReceiver = new BluetoothStateReceiver(); - mContext.registerReceiver( - mBluetoothStateReceiver, - new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)); - } - } - - @OnLifecycleEvent(Event.ON_RESUME) - public void onResume() { - if (mTetherEnabler != null) { - mTetherEnabler.addListener(this); - } - } - - @OnLifecycleEvent(Event.ON_PAUSE) - public void onPause() { - if (mTetherEnabler != null) { - mTetherEnabler.removeListener(this); - } - } - - @OnLifecycleEvent(Event.ON_DESTROY) - public void onDestroy() { - final BluetoothProfile profile = mBluetoothPan.getAndSet(null); - if (profile != null && mBluetoothAdapter != null) { - mBluetoothAdapter.closeProfileProxy(BluetoothProfile.PAN, profile); - } - if (mBluetoothStateReceiver != null) { - mContext.unregisterReceiver(mBluetoothStateReceiver); - mBluetoothStateReceiver = null; - } - } - - void initEnabler(Lifecycle lifecycle) { - if (mPreference != null) { - mTetherEnabler = new TetherEnabler( - mContext, new GenericSwitchController(mPreference), mBluetoothPan); - if (lifecycle != null) { - lifecycle.addObserver(mTetherEnabler); - } - } else { - Log.e(TAG, "TetherEnabler is not initialized"); - } - } - - @Override - public void onTetherStateUpdated(@TetherEnabler.TetheringState int state) { - mTetheringState = state; - updateState(mPreference); - } - - private class BluetoothStateReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - final String action = intent.getAction(); - Log.i(TAG, "onReceive: action: " + action); - - if (TextUtils.equals(action, BluetoothAdapter.ACTION_STATE_CHANGED)) { - final int state = - intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); - Log.i(TAG, "onReceive: state: " + BluetoothAdapter.nameForState(state)); - final BluetoothProfile profile = mBluetoothPan.get(); - switch(state) { - case BluetoothAdapter.STATE_ON: - if (profile == null && mBluetoothAdapter != null) { - mBluetoothAdapter.getProfileProxy(mContext, mBtProfileServiceListener, - BluetoothProfile.PAN); - } - break; - } - } - } - } -} diff --git a/src/com/android/settings/network/BluetoothTetherPreferenceController.java b/src/com/android/settings/network/BluetoothTetherPreferenceController.java deleted file mode 100644 index 96d39e37c33..00000000000 --- a/src/com/android/settings/network/BluetoothTetherPreferenceController.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.network; - -import android.bluetooth.BluetoothAdapter; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.net.ConnectivityManager; -import android.text.TextUtils; - -import androidx.lifecycle.Lifecycle; -import androidx.lifecycle.OnLifecycleEvent; - -import com.google.common.annotations.VisibleForTesting; - -/** - * This controller helps to manage the switch state and visibility of bluetooth tether switch - * preference. - */ -public final class BluetoothTetherPreferenceController extends TetherBasePreferenceController { - private int mBluetoothState; - - public BluetoothTetherPreferenceController(Context context, String preferenceKey) { - super(context, preferenceKey); - } - - @OnLifecycleEvent(Lifecycle.Event.ON_START) - public void onStart() { - mBluetoothState = BluetoothAdapter.getDefaultAdapter().getState(); - mContext.registerReceiver(mBluetoothChangeReceiver, - new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)); - } - - @OnLifecycleEvent(Lifecycle.Event.ON_STOP) - public void onStop() { - mContext.unregisterReceiver(mBluetoothChangeReceiver); - } - - @Override - public boolean shouldEnable() { - switch (mBluetoothState) { - case BluetoothAdapter.STATE_ON: - case BluetoothAdapter.STATE_OFF: - // fall through. - case BluetoothAdapter.ERROR: - return true; - case BluetoothAdapter.STATE_TURNING_OFF: - case BluetoothAdapter.STATE_TURNING_ON: - // fall through. - default: - return false; - } - } - - @Override - public boolean shouldShow() { - final String[] bluetoothRegexs = mTm.getTetherableBluetoothRegexs(); - return bluetoothRegexs != null && bluetoothRegexs.length != 0; - } - - @Override - public int getTetherType() { - return ConnectivityManager.TETHERING_BLUETOOTH; - } - - @VisibleForTesting - final BroadcastReceiver mBluetoothChangeReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (TextUtils.equals(BluetoothAdapter.ACTION_STATE_CHANGED, intent.getAction())) { - mBluetoothState = - intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); - updateState(mPreference); - } - } - }; -} diff --git a/src/com/android/settings/network/EthernetTetherPreferenceController.java b/src/com/android/settings/network/EthernetTetherPreferenceController.java deleted file mode 100644 index 2fd92f36cf0..00000000000 --- a/src/com/android/settings/network/EthernetTetherPreferenceController.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.network; - -import android.content.Context; -import android.net.EthernetManager; -import android.net.TetheringManager; -import android.os.Handler; -import android.os.Looper; - -import androidx.lifecycle.Lifecycle; -import androidx.lifecycle.OnLifecycleEvent; - -import com.android.internal.annotations.VisibleForTesting; -import com.android.settings.Utils; -import com.android.settingslib.utils.ThreadUtils; - -import java.util.HashSet; - -/** - * This controller helps to manage the switch state and visibility of ethernet tether switch - * preference. - */ -public final class EthernetTetherPreferenceController extends TetherBasePreferenceController { - - private final HashSet mAvailableInterfaces = new HashSet<>(); - private final EthernetManager mEthernetManager; - - @VisibleForTesting - EthernetManager.InterfaceStateListener mEthernetListener; - - public EthernetTetherPreferenceController(Context context, String preferenceKey) { - super(context, preferenceKey); - mEthernetManager = context.getSystemService(EthernetManager.class); - } - - @OnLifecycleEvent(Lifecycle.Event.ON_START) - public void onStart() { - mEthernetListener = (iface, state, role, configuration) -> { - if (state != EthernetManager.STATE_ABSENT) { - mAvailableInterfaces.add(iface); - } else { - mAvailableInterfaces.remove(iface); - } - updateState(mPreference); - }; - final Handler handler = new Handler(Looper.getMainLooper()); - // Executor will execute to post the updateState event to a new handler which is created - // from the main looper when the {@link EthernetManager.Listener.onAvailabilityChanged} - // is triggerd. - if (mEthernetManager != null) { - mEthernetManager.addInterfaceStateListener(r -> handler.post(r), mEthernetListener); - } - } - - @OnLifecycleEvent(Lifecycle.Event.ON_STOP) - public void onStop() { - if (mEthernetManager != null) { - mEthernetManager.removeInterfaceStateListener(mEthernetListener); - } - } - - @Override - public boolean shouldEnable() { - ThreadUtils.ensureMainThread(); - String[] available = mTm.getTetherableIfaces(); - for (String s : available) { - if (mAvailableInterfaces.contains(s)) { - return true; - } - } - return false; - } - - @Override - public boolean shouldShow() { - return mEthernetManager != null && !Utils.isMonkeyRunning(); - } - - @Override - public int getTetherType() { - return TetheringManager.TETHERING_ETHERNET; - } - -} diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java index e79c1b29503..e5d9242db9f 100644 --- a/src/com/android/settings/network/NetworkDashboardFragment.java +++ b/src/com/android/settings/network/NetworkDashboardFragment.java @@ -18,7 +18,6 @@ package com.android.settings.network; import android.app.settings.SettingsEnums; import android.content.Context; import android.content.Intent; -import android.os.Bundle; import androidx.lifecycle.LifecycleOwner; @@ -60,13 +59,6 @@ public class NetworkDashboardFragment extends DashboardFragment implements super.onAttach(context); use(AirplaneModePreferenceController.class).setFragment(this); - getSettingsLifecycle().addObserver(use(AllInOneTetherPreferenceController.class)); - } - - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - super.onCreatePreferences(savedInstanceState, rootKey); - use(AllInOneTetherPreferenceController.class).initEnabler(getSettingsLifecycle()); } @Override diff --git a/src/com/android/settings/network/TetherBasePreferenceController.java b/src/com/android/settings/network/TetherBasePreferenceController.java deleted file mode 100644 index b1627f2ec22..00000000000 --- a/src/com/android/settings/network/TetherBasePreferenceController.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.network; - -import android.content.Context; -import android.net.TetheringManager; - -import androidx.lifecycle.Lifecycle; -import androidx.lifecycle.LifecycleObserver; -import androidx.lifecycle.OnLifecycleEvent; -import androidx.preference.Preference; -import androidx.preference.PreferenceScreen; - -import com.android.settings.R; -import com.android.settings.core.TogglePreferenceController; -import com.android.settings.datausage.DataSaverBackend; - -public abstract class TetherBasePreferenceController extends TogglePreferenceController - implements LifecycleObserver, DataSaverBackend.Listener, - TetherEnabler.OnTetherStateUpdateListener { - - private static final String TAG = "TetherBasePreferenceController"; - final TetheringManager mTm; - private final DataSaverBackend mDataSaverBackend; - - private TetherEnabler mTetherEnabler; - Preference mPreference; - private boolean mDataSaverEnabled; - int mTetheringState; - - TetherBasePreferenceController(Context context, String preferenceKey) { - super(context, preferenceKey); - mTm = context.getSystemService(TetheringManager.class); - mDataSaverBackend = new DataSaverBackend(context); - mDataSaverEnabled = mDataSaverBackend.isDataSaverEnabled(); - } - - /** - * Set TetherEnabler for the controller. Call this method to initialize the controller. - * @param tetherEnabler The tetherEnabler to set for the controller. - */ - public void setTetherEnabler(TetherEnabler tetherEnabler) { - mTetherEnabler = tetherEnabler; - } - - @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) - public void onResume() { - // Must call setEnabler() before - if (mTetherEnabler != null) { - mTetherEnabler.addListener(this); - } - mDataSaverBackend.addListener(this); - } - - @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) - public void onPause() { - if (mTetherEnabler != null) { - mTetherEnabler.removeListener(this); - } - mDataSaverBackend.remListener(this); - } - - @Override - public boolean isChecked() { - return TetherEnabler.isTethering(mTetheringState, getTetherType()); - } - - @Override - public boolean setChecked(boolean isChecked) { - if (mTetherEnabler == null) { - return false; - } - if (isChecked) { - mTetherEnabler.startTethering(getTetherType()); - } else { - mTetherEnabler.stopTethering(getTetherType()); - } - return true; - } - - @Override - public void displayPreference(PreferenceScreen screen) { - super.displayPreference(screen); - mPreference = screen.findPreference(mPreferenceKey); - } - - @Override - public void updateState(Preference preference) { - super.updateState(preference); - if (isAvailable()) { - preference.setEnabled(getAvailabilityStatus() != DISABLED_DEPENDENT_SETTING); - } - } - - @Override - public int getAvailabilityStatus() { - if (!shouldShow()) { - return CONDITIONALLY_UNAVAILABLE; - } - - if (mDataSaverEnabled || !shouldEnable()) { - return DISABLED_DEPENDENT_SETTING; - } - return AVAILABLE; - } - - @Override - public int getSliceHighlightMenuRes() { - return R.string.menu_key_network; - } - - @Override - public void onTetherStateUpdated(@TetherEnabler.TetheringState int state) { - mTetheringState = state; - updateState(mPreference); - } - - @Override - public void onDataSaverChanged(boolean isDataSaving) { - mDataSaverEnabled = isDataSaving; - } - - @Override - public void onAllowlistStatusChanged(int uid, boolean isAllowlisted) { - } - - @Override - public void onDenylistStatusChanged(int uid, boolean isDenylisted) { - } - - /** - * Used to enable or disable the preference. - * @return true if the preference should be enabled; false otherwise. - */ - public abstract boolean shouldEnable(); - - /** - * Used to determine visibility of the preference. - * @return true if the preference should be visible; false otherwise. - */ - public abstract boolean shouldShow(); - - /** - * Get the type of tether interface that is controlled by the preference. - * @return the tether interface, like {@link ConnectivityManager#TETHERING_WIFI} - */ - public abstract int getTetherType(); -} diff --git a/src/com/android/settings/network/TetherPreferenceController.kt b/src/com/android/settings/network/TetherPreferenceController.kt index 8f55f509117..c36a2382c62 100644 --- a/src/com/android/settings/network/TetherPreferenceController.kt +++ b/src/com/android/settings/network/TetherPreferenceController.kt @@ -20,7 +20,6 @@ import android.content.Context import android.net.TetheringManager import android.os.UserHandle import android.os.UserManager -import android.util.FeatureFlagUtils import androidx.annotation.StringRes import androidx.annotation.VisibleForTesting import androidx.lifecycle.Lifecycle @@ -31,7 +30,6 @@ import androidx.preference.Preference import androidx.preference.PreferenceScreen import com.android.settings.R import com.android.settings.core.BasePreferenceController -import com.android.settings.core.FeatureFlags import com.android.settingslib.RestrictedLockUtilsInternal import com.android.settingslib.TetherUtil import com.android.settingslib.Utils @@ -49,13 +47,7 @@ class TetherPreferenceController(context: Context, key: String) : private var preference: Preference? = null override fun getAvailabilityStatus() = - if (TetherUtil.isTetherAvailable(mContext) - && !FeatureFlagUtils.isEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE) - ) { - AVAILABLE - } else { - CONDITIONALLY_UNAVAILABLE - } + if (TetherUtil.isTetherAvailable(mContext)) AVAILABLE else CONDITIONALLY_UNAVAILABLE override fun displayPreference(screen: PreferenceScreen) { super.displayPreference(screen) diff --git a/src/com/android/settings/network/UsbTetherPreferenceController.java b/src/com/android/settings/network/UsbTetherPreferenceController.java deleted file mode 100644 index 7a5cc21f0a3..00000000000 --- a/src/com/android/settings/network/UsbTetherPreferenceController.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.network; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.hardware.usb.UsbManager; -import android.net.ConnectivityManager; -import android.os.Environment; -import android.text.TextUtils; - -import androidx.annotation.VisibleForTesting; -import androidx.lifecycle.Lifecycle; -import androidx.lifecycle.OnLifecycleEvent; - -import com.android.settings.Utils; - -/** - * This controller helps to manage the switch state and visibility of USB tether switch - * preference. - * - */ -public final class UsbTetherPreferenceController extends TetherBasePreferenceController { - - private static final String TAG = "UsbTetherPrefController"; - - private boolean mUsbConnected; - private boolean mMassStorageActive; - - public UsbTetherPreferenceController(Context context, String prefKey) { - super(context, prefKey); - } - - @OnLifecycleEvent(Lifecycle.Event.ON_START) - public void onStart() { - mMassStorageActive = Environment.MEDIA_SHARED.equals(Environment.getExternalStorageState()); - IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_STATE); - filter.addAction(Intent.ACTION_MEDIA_SHARED); - filter.addAction(Intent.ACTION_MEDIA_UNSHARED); - mContext.registerReceiver(mUsbChangeReceiver, filter); - } - - @OnLifecycleEvent(Lifecycle.Event.ON_STOP) - public void onStop() { - mContext.unregisterReceiver(mUsbChangeReceiver); - } - - @Override - public boolean shouldEnable() { - return mUsbConnected && !mMassStorageActive; - } - - @Override - public boolean shouldShow() { - String[] usbRegexs = mTm.getTetherableUsbRegexs(); - return usbRegexs != null && usbRegexs.length != 0 && !Utils.isMonkeyRunning(); - } - - @Override - public int getTetherType() { - return ConnectivityManager.TETHERING_USB; - } - - @VisibleForTesting - final BroadcastReceiver mUsbChangeReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (TextUtils.equals(Intent.ACTION_MEDIA_SHARED, action)) { - mMassStorageActive = true; - } else if (TextUtils.equals(Intent.ACTION_MEDIA_UNSHARED, action)) { - mMassStorageActive = false; - } else if (TextUtils.equals(UsbManager.ACTION_USB_STATE, action)) { - mUsbConnected = intent.getBooleanExtra(UsbManager.USB_CONNECTED, false); - } - updateState(mPreference); - } - }; -} diff --git a/src/com/android/settings/network/WifiTetherDisablePreferenceController.java b/src/com/android/settings/network/WifiTetherDisablePreferenceController.java deleted file mode 100644 index 783f78fb9d1..00000000000 --- a/src/com/android/settings/network/WifiTetherDisablePreferenceController.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.network; - -import static com.android.settings.network.TetherEnabler.TETHERING_BLUETOOTH_ON; -import static com.android.settings.network.TetherEnabler.TETHERING_ETHERNET_ON; -import static com.android.settings.network.TetherEnabler.TETHERING_USB_ON; -import static com.android.settings.network.TetherEnabler.TETHERING_WIFI_ON; - -import android.content.Context; -import android.net.ConnectivityManager; - -import androidx.preference.Preference; -import androidx.preference.PreferenceScreen; - -import com.android.settings.R; -import com.android.settings.Utils; - -/** - * This controller helps to manage the switch state and visibility of wifi tether disable switch - * preference. When the preference checked, wifi tether will be disabled. - * - * @see BluetoothTetherPreferenceController - * @see UsbTetherPreferenceController - */ -public final class WifiTetherDisablePreferenceController extends TetherBasePreferenceController { - - private static final String TAG = "WifiTetherDisablePreferenceController"; - - private PreferenceScreen mScreen; - - public WifiTetherDisablePreferenceController(Context context, String prefKey) { - super(context, prefKey); - } - - @Override - public boolean isChecked() { - return !super.isChecked(); - } - - @Override - public boolean setChecked(boolean isChecked) { - return super.setChecked(!isChecked); - } - - private int getTetheringStateOfOtherInterfaces() { - return mTetheringState & (~TETHERING_WIFI_ON); - } - - @Override - public boolean shouldEnable() { - return true; - } - - @Override - public boolean shouldShow() { - final String[] wifiRegexs = mTm.getTetherableWifiRegexs(); - return wifiRegexs != null && wifiRegexs.length != 0 && !Utils.isMonkeyRunning() - && getTetheringStateOfOtherInterfaces() != TetherEnabler.TETHERING_OFF; - } - - @Override - public int getTetherType() { - return ConnectivityManager.TETHERING_WIFI; - } - - @Override - public CharSequence getSummary() { - switch (getTetheringStateOfOtherInterfaces()) { - case TETHERING_USB_ON: - return mContext.getString(R.string.disable_wifi_hotspot_when_usb_on); - case TETHERING_BLUETOOTH_ON: - return mContext.getString(R.string.disable_wifi_hotspot_when_bluetooth_on); - case TETHERING_ETHERNET_ON: - return mContext.getString(R.string.disable_wifi_hotspot_when_ethernet_on); - case TETHERING_USB_ON | TETHERING_BLUETOOTH_ON: - return mContext.getString(R.string.disable_wifi_hotspot_when_usb_and_bluetooth_on); - case TETHERING_USB_ON | TETHERING_ETHERNET_ON: - return mContext.getString(R.string.disable_wifi_hotspot_when_usb_and_ethernet_on); - case TETHERING_BLUETOOTH_ON | TETHERING_ETHERNET_ON: - return mContext.getString( - R.string.disable_wifi_hotspot_when_bluetooth_and_ethernet_on); - case TETHERING_USB_ON | TETHERING_BLUETOOTH_ON | TETHERING_ETHERNET_ON: - return mContext.getString( - R.string.disable_wifi_hotspot_when_usb_and_bluetooth_and_ethernet_on); - default: - return mContext.getString(R.string.summary_placeholder); - } - } - - @Override - public void displayPreference(PreferenceScreen screen) { - super.displayPreference(screen); - mScreen = screen; - if (mPreference != null) { - mPreference.setOnPreferenceChangeListener(this); - } - } - - @Override - public void updateState(Preference preference) { - super.updateState(preference); - preference.setVisible(isAvailable()); - refreshSummary(preference); - } -} diff --git a/src/com/android/settings/network/tether/TetherSettings.java b/src/com/android/settings/network/tether/TetherSettings.java index 46cfb55ccf5..77ef4b6ef12 100644 --- a/src/com/android/settings/network/tether/TetherSettings.java +++ b/src/com/android/settings/network/tether/TetherSettings.java @@ -45,7 +45,6 @@ import android.os.UserHandle; import android.os.UserManager; import android.provider.SearchIndexableResource; import android.text.TextUtils; -import android.util.FeatureFlagUtils; import android.util.Log; import androidx.annotation.NonNull; @@ -57,7 +56,6 @@ import androidx.preference.TwoStatePreference; import com.android.settings.R; import com.android.settings.RestrictedSettingsFragment; import com.android.settings.Utils; -import com.android.settings.core.FeatureFlags; import com.android.settings.datausage.DataSaverBackend; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.wifi.tether.WifiTetherPreferenceController; @@ -629,11 +627,6 @@ public class TetherSettings extends RestrictedSettingsFragment return Arrays.asList(sir); } - @Override - protected boolean isPageSearchEnabled(Context context) { - return !FeatureFlagUtils.isEnabled(context, FeatureFlags.TETHER_ALL_IN_ONE); - } - @Override public List getNonIndexableKeys(Context context) { final List keys = super.getNonIndexableKeys(context); diff --git a/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java deleted file mode 100644 index 8a4be105986..00000000000 --- a/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.wifi.tether; - -import static com.android.settings.AllInOneTetherSettings.DEDUP_POSTFIX; - -import android.content.Context; -import android.content.res.Resources; -import android.net.wifi.SoftApConfiguration; -import android.util.FeatureFlagUtils; -import android.util.Log; - -import androidx.annotation.VisibleForTesting; -import androidx.preference.ListPreference; -import androidx.preference.Preference; - -import com.android.settings.R; -import com.android.settings.core.FeatureFlags; - -public class WifiTetherApBandPreferenceController extends WifiTetherBasePreferenceController { - - private static final String TAG = "WifiTetherApBandPref"; - private static final String PREF_KEY = "wifi_tether_network_ap_band"; - - private String[] mBandEntries; - private String[] mBandSummaries; - private int mBandIndex; - - public WifiTetherApBandPreferenceController(Context context, - OnTetherConfigUpdateListener listener) { - super(context, listener); - updatePreferenceEntries(); - } - - @Override - public void updateDisplay() { - final SoftApConfiguration config = mWifiManager.getSoftApConfiguration(); - if (config == null) { - mBandIndex = SoftApConfiguration.BAND_2GHZ; - Log.d(TAG, "Updating band index to BAND_2GHZ because no config"); - } else if (is5GhzBandSupported()) { - mBandIndex = validateSelection(config.getBand()); - Log.d(TAG, "Updating band index to " + mBandIndex); - } else { - mWifiManager.setSoftApConfiguration( - new SoftApConfiguration.Builder(config).setBand(SoftApConfiguration.BAND_2GHZ) - .build()); - mBandIndex = SoftApConfiguration.BAND_2GHZ; - Log.d(TAG, "5Ghz not supported, updating band index to 2GHz"); - } - ListPreference preference = - (ListPreference) mPreference; - preference.setEntries(mBandSummaries); - preference.setEntryValues(mBandEntries); - - if (!is5GhzBandSupported()) { - preference.setEnabled(false); - preference.setSummary(R.string.wifi_ap_choose_2G); - } else { - preference.setValue(Integer.toString(config.getBand())); - preference.setSummary(getConfigSummary()); - } - } - - String getConfigSummary() { - switch (mBandIndex) { - case SoftApConfiguration.BAND_2GHZ: - return mBandSummaries[0]; - case SoftApConfiguration.BAND_5GHZ: - return mBandSummaries[1]; - default: - return mContext.getString(R.string.wifi_ap_prefer_5G); - } - } - - @Override - public String getPreferenceKey() { - return FeatureFlagUtils.isEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE) - ? PREF_KEY + DEDUP_POSTFIX : PREF_KEY; - } - - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - mBandIndex = validateSelection(Integer.parseInt((String) newValue)); - Log.d(TAG, "Band preference changed, updating band index to " + mBandIndex); - preference.setSummary(getConfigSummary()); - mListener.onTetherConfigUpdated(this); - return true; - } - - private int validateSelection(int band) { - // unsupported states: - // 1: BAND_5GHZ only - include 2GHZ since some of countries doesn't support 5G hotspot - // 2: no 5 GHZ support means we can't have BAND_5GHZ - default to 2GHZ - if (SoftApConfiguration.BAND_5GHZ == band) { - if (!is5GhzBandSupported()) { - return SoftApConfiguration.BAND_2GHZ; - } - return SoftApConfiguration.BAND_5GHZ | SoftApConfiguration.BAND_2GHZ; - } - - return band; - } - - @VisibleForTesting - void updatePreferenceEntries() { - Resources res = mContext.getResources(); - int entriesRes = R.array.wifi_ap_band; - int summariesRes = R.array.wifi_ap_band_summary; - mBandEntries = res.getStringArray(entriesRes); - mBandSummaries = res.getStringArray(summariesRes); - } - - private boolean is5GhzBandSupported() { - final String countryCode = mWifiManager.getCountryCode(); - if (!mWifiManager.is5GHzBandSupported() || countryCode == null) { - return false; - } - return true; - } - - public int getBandIndex() { - return mBandIndex; - } -} diff --git a/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java index 7d0a86bc25f..d61b3d043cd 100644 --- a/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java +++ b/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java @@ -16,20 +16,16 @@ package com.android.settings.wifi.tether; -import static com.android.settings.AllInOneTetherSettings.DEDUP_POSTFIX; - import android.app.settings.SettingsEnums; import android.content.Context; import android.net.wifi.SoftApConfiguration; import android.text.TextUtils; -import android.util.FeatureFlagUtils; import androidx.annotation.VisibleForTesting; import androidx.preference.EditTextPreference; import androidx.preference.Preference; import com.android.settings.R; -import com.android.settings.core.FeatureFlags; import com.android.settings.overlay.FeatureFactory; import com.android.settings.widget.ValidatedEditTextPreference; import com.android.settings.wifi.WifiUtils; @@ -68,8 +64,7 @@ public class WifiTetherPasswordPreferenceController extends WifiTetherBasePrefer @Override public String getPreferenceKey() { - return FeatureFlagUtils.isEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE) - ? PREF_KEY + DEDUP_POSTFIX : PREF_KEY; + return PREF_KEY; } @Override diff --git a/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java index 1e415b345d3..1bcff1ea45e 100644 --- a/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java +++ b/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java @@ -16,21 +16,17 @@ package com.android.settings.wifi.tether; -import static com.android.settings.AllInOneTetherSettings.DEDUP_POSTFIX; - import android.app.settings.SettingsEnums; import android.content.Context; import android.content.Intent; import android.net.wifi.SoftApConfiguration; import android.text.TextUtils; -import android.util.FeatureFlagUtils; import android.util.Log; import androidx.annotation.VisibleForTesting; import androidx.preference.EditTextPreference; import androidx.preference.Preference; -import com.android.settings.core.FeatureFlags; import com.android.settings.overlay.FeatureFactory; import com.android.settings.widget.ValidatedEditTextPreference; import com.android.settings.wifi.dpp.WifiDppUtils; @@ -68,8 +64,7 @@ public class WifiTetherSSIDPreferenceController extends WifiTetherBasePreference @Override public String getPreferenceKey() { - return FeatureFlagUtils.isEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE) - ? PREF_KEY + DEDUP_POSTFIX : PREF_KEY; + return PREF_KEY; } @Override diff --git a/src/com/android/settings/wifi/tether/WifiTetherSecurityPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherSecurityPreferenceController.java index 79a97ae5fa4..41b6dd939bf 100644 --- a/src/com/android/settings/wifi/tether/WifiTetherSecurityPreferenceController.java +++ b/src/com/android/settings/wifi/tether/WifiTetherSecurityPreferenceController.java @@ -16,14 +16,11 @@ package com.android.settings.wifi.tether; -import static com.android.settings.AllInOneTetherSettings.DEDUP_POSTFIX; - import android.annotation.NonNull; import android.content.Context; import android.net.wifi.SoftApCapability; import android.net.wifi.SoftApConfiguration; import android.net.wifi.WifiManager; -import android.util.FeatureFlagUtils; import android.util.Log; import androidx.annotation.VisibleForTesting; @@ -31,7 +28,6 @@ import androidx.preference.ListPreference; 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; @@ -82,8 +78,7 @@ public class WifiTetherSecurityPreferenceController extends WifiTetherBasePrefer @Override public String getPreferenceKey() { - return FeatureFlagUtils.isEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE) - ? PREF_KEY + DEDUP_POSTFIX : PREF_KEY; + return PREF_KEY; } @Override diff --git a/src/com/android/settings/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java index df31f496060..bad29eb79da 100644 --- a/src/com/android/settings/wifi/tether/WifiTetherSettings.java +++ b/src/com/android/settings/wifi/tether/WifiTetherSettings.java @@ -30,7 +30,6 @@ import android.content.IntentFilter; import android.net.wifi.SoftApConfiguration; import android.os.Bundle; import android.os.UserManager; -import android.util.FeatureFlagUtils; import android.util.Log; import androidx.annotation.Nullable; @@ -39,7 +38,6 @@ import androidx.preference.Preference; import com.android.settings.R; import com.android.settings.SettingsActivity; -import com.android.settings.core.FeatureFlags; import com.android.settings.dashboard.RestrictedDashboardFragment; import com.android.settings.overlay.FeatureFactory; import com.android.settings.search.BaseSearchIndexProvider; @@ -387,10 +385,7 @@ public class WifiTetherSettings extends RestrictedDashboardFragment if (userManager == null || !userManager.isAdminUser()) { return false; } - if (!WifiUtils.canShowWifiHotspot(context)) { - return false; - } - return !FeatureFlagUtils.isEnabled(context, FeatureFlags.TETHER_ALL_IN_ONE); + return WifiUtils.canShowWifiHotspot(context); } @Override diff --git a/tests/robotests/src/com/android/settings/AllInOneTetherSettingsTest.java b/tests/robotests/src/com/android/settings/AllInOneTetherSettingsTest.java deleted file mode 100644 index f2a55c1d935..00000000000 --- a/tests/robotests/src/com/android/settings/AllInOneTetherSettingsTest.java +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings; - -import static com.android.settings.AllInOneTetherSettings.BLUETOOTH_TETHER_KEY; -import static com.android.settings.AllInOneTetherSettings.ETHERNET_TETHER_KEY; -import static com.android.settings.AllInOneTetherSettings.EXPANDED_CHILD_COUNT_DEFAULT; -import static com.android.settings.AllInOneTetherSettings.EXPANDED_CHILD_COUNT_MAX; -import static com.android.settings.AllInOneTetherSettings.EXPANDED_CHILD_COUNT_WITH_SECURITY_NON; -import static com.android.settings.AllInOneTetherSettings.USB_TETHER_KEY; -import static com.android.settings.AllInOneTetherSettings.WIFI_TETHER_DISABLE_KEY; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; - -import android.content.Context; -import android.net.ConnectivityManager; -import android.net.EthernetManager; -import android.net.TetheringManager; -import android.net.wifi.SoftApConfiguration; -import android.net.wifi.WifiManager; -import android.os.UserHandle; -import android.os.UserManager; -import android.util.FeatureFlagUtils; - -import androidx.preference.PreferenceGroup; -import androidx.preference.PreferenceScreen; - -import com.android.settings.core.FeatureFlags; -import com.android.settings.testutils.FakeFeatureFactory; -import com.android.settings.wifi.repository.WifiHotspotRepository; -import com.android.settings.wifi.tether.WifiTetherAutoOffPreferenceController; -import com.android.settings.wifi.tether.WifiTetherSecurityPreferenceController; -import com.android.settingslib.core.lifecycle.Lifecycle; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.util.ReflectionHelpers; - -import java.util.ArrayList; -import java.util.List; - -@RunWith(RobolectricTestRunner.class) -public class AllInOneTetherSettingsTest { - private static final String[] WIFI_REGEXS = {"wifi_regexs"}; - private static final String[] USB_REGEXS = {"usb_regexs"}; - private static final String[] BT_REGEXS = {"bt_regexs"}; - private static final String[] ETHERNET_REGEXS = {"ethernet_regexs"}; - - private Context mContext; - private AllInOneTetherSettings mAllInOneTetherSettings; - - @Mock - private WifiManager mWifiManager; - @Mock - private ConnectivityManager mConnectivityManager; - @Mock - private TetheringManager mTetheringManager; - @Mock - private UserManager mUserManager; - @Mock - private WifiTetherSecurityPreferenceController mSecurityPreferenceController; - @Mock - private PreferenceScreen mPreferenceScreen; - @Mock - private PreferenceGroup mWifiTetherGroup; - @Mock - private EthernetManager mEthernetManager; - - @Before - public void setUp() { - mContext = spy(RuntimeEnvironment.application); - - MockitoAnnotations.initMocks(this); - when(FakeFeatureFactory.setupForTest().getWifiFeatureProvider().getWifiHotspotRepository()) - .thenReturn(mock(WifiHotspotRepository.class)); - doReturn(mWifiManager).when(mContext).getSystemService(WifiManager.class); - doReturn(mConnectivityManager) - .when(mContext).getSystemService(Context.CONNECTIVITY_SERVICE); - doReturn(mTetheringManager) - .when(mContext).getSystemService(Context.TETHERING_SERVICE); - doReturn(mEthernetManager).when(mContext).getSystemService(EthernetManager.class); - doReturn(WIFI_REGEXS).when(mTetheringManager).getTetherableWifiRegexs(); - doReturn(USB_REGEXS).when(mTetheringManager).getTetherableUsbRegexs(); - doReturn(BT_REGEXS).when(mTetheringManager).getTetherableBluetoothRegexs(); - doReturn(ETHERNET_REGEXS).when(mTetheringManager).getTetherableIfaces(); - doReturn(mUserManager).when(mContext).getSystemService(Context.USER_SERVICE); - // Assume the feature is enabled for most test cases. - FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, true); - mAllInOneTetherSettings = spy(new AllInOneTetherSettings()); - doReturn(mPreferenceScreen).when(mAllInOneTetherSettings).getPreferenceScreen(); - ReflectionHelpers.setField(mAllInOneTetherSettings, "mLifecycle", mock(Lifecycle.class)); - ReflectionHelpers.setField(mAllInOneTetherSettings, "mSecurityPreferenceController", - mSecurityPreferenceController); - ReflectionHelpers.setField(mAllInOneTetherSettings, "mWifiTetherGroup", mWifiTetherGroup); - } - - @Test - public void getNonIndexableKeys_tetherAvailable_featureEnabled_keysReturnedCorrectly() { - // To let TetherUtil.isTetherAvailable return true, select one of the combinations - setupIsTetherAvailable(true); - - FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, true); - final List niks = - AllInOneTetherSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext); - - assertThat(niks).doesNotContain(AllInOneTetherSettings.KEY_WIFI_TETHER_NETWORK_NAME); - assertThat(niks).doesNotContain( - AllInOneTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); - assertThat(niks).doesNotContain(AllInOneTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); - assertThat(niks).doesNotContain(AllInOneTetherSettings.KEY_WIFI_TETHER_NETWORK_AP_BAND); - assertThat(niks).doesNotContain(AllInOneTetherSettings.KEY_WIFI_TETHER_SECURITY); - assertThat(niks).doesNotContain(BLUETOOTH_TETHER_KEY); - assertThat(niks).doesNotContain(USB_TETHER_KEY); - assertThat(niks).doesNotContain(ETHERNET_TETHER_KEY); - - // This key should be returned because it's not visible by default. - assertThat(niks).contains(WIFI_TETHER_DISABLE_KEY); - } - - @Test - public void getNonIndexableKeys_tetherAvailable_featureDisabled_keysReturned() { - setupIsTetherAvailable(true); - FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false); - - final List niks = - AllInOneTetherSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext); - - assertThat(niks).contains(AllInOneTetherSettings.KEY_WIFI_TETHER_NETWORK_NAME); - assertThat(niks).contains(AllInOneTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); - assertThat(niks).contains(AllInOneTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); - assertThat(niks).contains(AllInOneTetherSettings.KEY_WIFI_TETHER_NETWORK_AP_BAND); - assertThat(niks).contains(AllInOneTetherSettings.KEY_WIFI_TETHER_SECURITY); - assertThat(niks).contains(WIFI_TETHER_DISABLE_KEY); - assertThat(niks).contains(BLUETOOTH_TETHER_KEY); - assertThat(niks).contains(USB_TETHER_KEY); - assertThat(niks).contains(ETHERNET_TETHER_KEY); - } - - @Test - public void getNonIndexableKeys_tetherNotAvailable_keysReturned() { - // To let TetherUtil.isTetherAvailable return false, select one of the combinations - setupIsTetherAvailable(false); - - final List niks = - AllInOneTetherSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext); - - assertThat(niks).contains(AllInOneTetherSettings.KEY_WIFI_TETHER_NETWORK_NAME); - assertThat(niks).contains(AllInOneTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); - assertThat(niks).contains(AllInOneTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); - assertThat(niks).contains(AllInOneTetherSettings.KEY_WIFI_TETHER_NETWORK_AP_BAND); - assertThat(niks).contains(AllInOneTetherSettings.KEY_WIFI_TETHER_SECURITY); - assertThat(niks).contains(WIFI_TETHER_DISABLE_KEY); - assertThat(niks).doesNotContain(BLUETOOTH_TETHER_KEY); - assertThat(niks).doesNotContain(USB_TETHER_KEY); - assertThat(niks).doesNotContain(ETHERNET_TETHER_KEY); - } - - @Test - public void getPreferenceControllers_notEmpty() { - assertThat(AllInOneTetherSettings.SEARCH_INDEX_DATA_PROVIDER - .getPreferenceControllers(mContext)).isNotEmpty(); - } - - @Test - public void createPreferenceControllers_hasAutoOffPreference() { - assertThat(mAllInOneTetherSettings.createPreferenceControllers(mContext) - .stream() - .filter(controller -> controller instanceof WifiTetherAutoOffPreferenceController) - .count()) - .isEqualTo(1); - } - - @Test - public void getInitialChildCount_withSecurity() { - when(mSecurityPreferenceController.getSecurityType()) - .thenReturn(SoftApConfiguration.SECURITY_TYPE_WPA2_PSK); - assertThat(mAllInOneTetherSettings.getInitialExpandedChildCount()).isEqualTo( - EXPANDED_CHILD_COUNT_DEFAULT); - } - - @Test - public void getInitialChildCount_withoutSecurity() { - when(mSecurityPreferenceController.getSecurityType()) - .thenReturn(SoftApConfiguration.SECURITY_TYPE_OPEN); - assertThat(mAllInOneTetherSettings.getInitialExpandedChildCount()).isEqualTo( - EXPANDED_CHILD_COUNT_WITH_SECURITY_NON); - } - - @Test - public void getInitialExpandedChildCount_expandAllChild() { - assertThat(mAllInOneTetherSettings.getInitialExpandedChildCount()) - .isNotEqualTo(EXPANDED_CHILD_COUNT_MAX); - ReflectionHelpers.setField(mAllInOneTetherSettings, "mShouldShowWifiConfig", false); - assertThat(mAllInOneTetherSettings.getInitialExpandedChildCount()) - .isEqualTo(EXPANDED_CHILD_COUNT_MAX); - ReflectionHelpers.setField(mAllInOneTetherSettings, "mShouldShowWifiConfig", true); - assertThat(mAllInOneTetherSettings.getInitialExpandedChildCount()) - .isEqualTo(EXPANDED_CHILD_COUNT_MAX); - } - - private void setupIsTetherAvailable(boolean returnValue) { - when(mConnectivityManager.isTetheringSupported()).thenReturn(true); - - // For RestrictedLockUtils.checkIfRestrictionEnforced - final int userId = UserHandle.myUserId(); - List enforcingUsers = new ArrayList<>(); - when(mUserManager.getUserRestrictionSources( - UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.of(userId))) - .thenReturn(enforcingUsers); - - // For RestrictedLockUtils.hasBaseUserRestriction - when(mUserManager.hasBaseUserRestriction( - UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.of(userId))) - .thenReturn(!returnValue); - } -} diff --git a/tests/robotests/src/com/android/settings/network/AllInOneTetherPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/AllInOneTetherPreferenceControllerTest.java deleted file mode 100644 index 15e24e15f3b..00000000000 --- a/tests/robotests/src/com/android/settings/network/AllInOneTetherPreferenceControllerTest.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.network; - -import static com.android.settings.network.TetherEnabler.TETHERING_BLUETOOTH_ON; -import static com.android.settings.network.TetherEnabler.TETHERING_ETHERNET_ON; -import static com.android.settings.network.TetherEnabler.TETHERING_OFF; -import static com.android.settings.network.TetherEnabler.TETHERING_USB_ON; -import static com.android.settings.network.TetherEnabler.TETHERING_WIFI_ON; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoMoreInteractions; -import static org.mockito.Mockito.when; - -import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothPan; -import android.bluetooth.BluetoothProfile; -import android.content.Context; - -import androidx.preference.PreferenceScreen; -import androidx.test.core.app.ApplicationProvider; - -import com.android.settings.R; -import com.android.settingslib.PrimarySwitchPreference; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.ParameterizedRobolectricTestRunner; -import org.robolectric.util.ReflectionHelpers; - -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.atomic.AtomicReference; - -@RunWith(ParameterizedRobolectricTestRunner.class) -public class AllInOneTetherPreferenceControllerTest { - - @ParameterizedRobolectricTestRunner.Parameters(name = "TetherState: {0}") - public static List params() { - return Arrays.asList(new Object[][] { - {TETHERING_OFF, R.string.tether_settings_summary_off}, - {TETHERING_WIFI_ON, R.string.tether_settings_summary_hotspot_only}, - {TETHERING_USB_ON, R.string.tether_settings_summary_usb_tethering_only}, - {TETHERING_BLUETOOTH_ON, R.string.tether_settings_summary_bluetooth_tethering_only}, - {TETHERING_ETHERNET_ON, R.string.tether_settings_summary_ethernet_tethering_only}, - { - TETHERING_WIFI_ON | TETHERING_USB_ON, - R.string.tether_settings_summary_hotspot_and_usb - }, - { - TETHERING_WIFI_ON | TETHERING_BLUETOOTH_ON, - R.string.tether_settings_summary_hotspot_and_bluetooth - }, - { - TETHERING_WIFI_ON | TETHERING_ETHERNET_ON, - R.string.tether_settings_summary_hotspot_and_ethernet - }, - { - TETHERING_USB_ON | TETHERING_BLUETOOTH_ON, - R.string.tether_settings_summary_usb_and_bluetooth - }, - { - TETHERING_USB_ON | TETHERING_ETHERNET_ON, - R.string.tether_settings_summary_usb_and_ethernet - }, - { - TETHERING_BLUETOOTH_ON | TETHERING_ETHERNET_ON, - R.string.tether_settings_summary_bluetooth_and_ethernet - }, - { - TETHERING_WIFI_ON | TETHERING_USB_ON | TETHERING_BLUETOOTH_ON, - R.string.tether_settings_summary_hotspot_and_usb_and_bluetooth - }, - { - TETHERING_WIFI_ON | TETHERING_USB_ON | TETHERING_ETHERNET_ON, - R.string.tether_settings_summary_hotspot_and_usb_and_ethernet - }, - { - TETHERING_WIFI_ON | TETHERING_BLUETOOTH_ON | TETHERING_ETHERNET_ON, - R.string.tether_settings_summary_hotspot_and_bluetooth_and_ethernet - }, - { - TETHERING_USB_ON | TETHERING_BLUETOOTH_ON | TETHERING_ETHERNET_ON, - R.string.tether_settings_summary_usb_and_bluetooth_and_ethernet - }, - { - TETHERING_WIFI_ON | TETHERING_USB_ON | TETHERING_BLUETOOTH_ON - | TETHERING_ETHERNET_ON, - R.string.tether_settings_summary_all - } - }); - } - - private Context mContext; - @Mock - private BluetoothAdapter mBluetoothAdapter; - @Mock - private PrimarySwitchPreference mPreference; - - private static final String PREF_KEY = "tether"; - private AllInOneTetherPreferenceController mController; - private final int mTetherState; - private final int mSummaryResId; - - public AllInOneTetherPreferenceControllerTest(int tetherState, int summaryResId) { - mTetherState = tetherState; - mSummaryResId = summaryResId; - } - - @Before - public void setUp() { - mContext = spy(ApplicationProvider.getApplicationContext()); - MockitoAnnotations.initMocks(this); - doReturn(null).when(mContext) - .getSystemService(Context.DEVICE_POLICY_SERVICE); - mController = spy(new AllInOneTetherPreferenceController(mContext, /* key= */ "test")); - ReflectionHelpers.setField(mController, "mContext", mContext); - ReflectionHelpers.setField(mController, "mBluetoothAdapter", mBluetoothAdapter); - ReflectionHelpers.setField(mController, "mPreferenceKey", PREF_KEY); - PreferenceScreen screen = mock(PreferenceScreen.class); - when(screen.findPreference(PREF_KEY)).thenReturn(mPreference); - doReturn(mController.AVAILABLE).when(mController).getAvailabilityStatus(); - mController.displayPreference(screen); - } - - @Test - public void onCreate_shouldInitBluetoothPan() { - when(mBluetoothAdapter.getState()).thenReturn(BluetoothAdapter.STATE_ON); - mController.onCreate(); - - verify(mBluetoothAdapter).getState(); - verify(mBluetoothAdapter).getProfileProxy(mContext, mController.mBtProfileServiceListener, - BluetoothProfile.PAN); - } - - @Test - public void onCreate_shouldNotInitBluetoothPanWhenBluetoothOff() { - when(mBluetoothAdapter.getState()).thenReturn(BluetoothAdapter.STATE_OFF); - mController.onCreate(); - - verify(mBluetoothAdapter).getState(); - verifyNoMoreInteractions(mBluetoothAdapter); - } - - @Test - public void goThroughLifecycle_shouldDestroyBluetoothProfile() { - final BluetoothPan pan = mock(BluetoothPan.class); - final AtomicReference panRef = - ReflectionHelpers.getField(mController, "mBluetoothPan"); - panRef.set(pan); - - mController.onDestroy(); - - verify(mBluetoothAdapter).closeProfileProxy(BluetoothProfile.PAN, pan); - } - - @Test - public void getSummary_afterTetherStateChanged() { - mController.onTetherStateUpdated(mTetherState); - assertThat(mController.getSummary()).isEqualTo(mContext.getString(mSummaryResId)); - - verify(mController).updateState(mPreference); - verify(mPreference).setSummary(mContext.getString(mSummaryResId)); - } -} diff --git a/tests/robotests/src/com/android/settings/network/BluetoothTetherPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/BluetoothTetherPreferenceControllerTest.java deleted file mode 100644 index d3a3129f4a2..00000000000 --- a/tests/robotests/src/com/android/settings/network/BluetoothTetherPreferenceControllerTest.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.network; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.bluetooth.BluetoothAdapter; -import android.content.Context; -import android.net.TetheringManager; - -import androidx.preference.SwitchPreference; -import androidx.test.core.app.ApplicationProvider; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.util.ReflectionHelpers; - -@RunWith(RobolectricTestRunner.class) -public class BluetoothTetherPreferenceControllerTest { - - @Mock - private TetheringManager mTetheringManager; - @Mock - private TetherEnabler mTetherEnabler; - - private SwitchPreference mSwitchPreference; - private BluetoothTetherPreferenceController mController; - private Context mContext; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - - mContext = spy(ApplicationProvider.getApplicationContext()); - mSwitchPreference = spy(SwitchPreference.class); - when(mContext.getSystemService(Context.TETHERING_SERVICE)).thenReturn(mTetheringManager); - when(mTetheringManager.getTetherableBluetoothRegexs()).thenReturn(new String[] {""}); - mController = new BluetoothTetherPreferenceController(mContext, "BLUETOOTH"); - mController.setTetherEnabler(mTetherEnabler); - ReflectionHelpers.setField(mController, "mPreference", mSwitchPreference); - } - - @Test - public void lifecycle_shouldRegisterReceiverOnStart() { - mController.onStart(); - - verify(mContext).registerReceiver( - eq(mController.mBluetoothChangeReceiver), - any()); - } - - @Test - public void lifecycle_shouldAddListenerOnResume() { - mController.onResume(); - verify(mTetherEnabler).addListener(mController); - } - - @Test - public void lifecycle_shouldRemoveListenrOnPause() { - mController.onPause(); - verify(mTetherEnabler).removeListener(mController); - } - - @Test - public void lifecycle_shouldUnregisterReceiverOnStop() { - mController.onStart(); - mController.onStop(); - - verify(mContext).unregisterReceiver( - eq(mController.mBluetoothChangeReceiver)); - } - - @Test - public void shouldShow_noBluetoothTetherable() { - when(mTetheringManager.getTetherableBluetoothRegexs()).thenReturn(new String[0]); - assertThat(mController.isAvailable()).isFalse(); - } - - @Test - public void shouldEnable_transientState() { - ReflectionHelpers.setField(mController, "mBluetoothState", - BluetoothAdapter.STATE_TURNING_OFF); - assertThat(mController.shouldEnable()).isFalse(); - } - @Test - public void setChecked_shouldStartBluetoothTethering() { - mController.setChecked(true); - verify(mTetherEnabler).startTethering(TetheringManager.TETHERING_BLUETOOTH); - } - - @Test - public void setUnchecked_shouldStopBluetoothTethering() { - mController.setChecked(false); - verify(mTetherEnabler).stopTethering(TetheringManager.TETHERING_BLUETOOTH); - } - - @Test - public void switch_shouldCheckedWhenBluetoothTethering() { - mController.onTetherStateUpdated(TetherEnabler.TETHERING_BLUETOOTH_ON); - assertThat(mController.isChecked()).isTrue(); - } - - @Test - public void switch_shouldUnCheckedWhenBluetoothNotTethering() { - mController.onTetherStateUpdated(TetherEnabler.TETHERING_OFF); - assertThat(mController.isChecked()).isFalse(); - } -} diff --git a/tests/robotests/src/com/android/settings/network/EthernetTetherPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/EthernetTetherPreferenceControllerTest.java deleted file mode 100644 index 68d80d4a0e1..00000000000 --- a/tests/robotests/src/com/android/settings/network/EthernetTetherPreferenceControllerTest.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.network; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.content.Context; -import android.net.EthernetManager; -import android.net.TetheringManager; - -import androidx.preference.SwitchPreference; -import androidx.test.core.app.ApplicationProvider; - -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.util.ReflectionHelpers; - -@RunWith(RobolectricTestRunner.class) -public class EthernetTetherPreferenceControllerTest { - - @Rule - public MockitoRule mocks = MockitoJUnit.rule(); - - @Mock - private TetheringManager mTetheringManager; - @Mock - private EthernetManager mEthernetManager; - @Mock - private TetherEnabler mTetherEnabler; - - private Context mContext; - private EthernetTetherPreferenceController mController; - private SwitchPreference mPreference; - private static final String ETHERNET_REGEX = "ethernet"; - - @Before - public void setUp() { - mContext = spy(ApplicationProvider.getApplicationContext()); - mPreference = spy(SwitchPreference.class); - when(mContext.getSystemService(Context.TETHERING_SERVICE)).thenReturn(mTetheringManager); - when(mTetheringManager.getTetherableIfaces()).thenReturn(new String[]{ETHERNET_REGEX}); - when(mContext.getSystemService(EthernetManager.class)).thenReturn(mEthernetManager); - mController = new EthernetTetherPreferenceController(mContext, "ethernet"); - mController.setTetherEnabler(mTetherEnabler); - ReflectionHelpers.setField(mController, "mPreference", mPreference); - } - - @Test - @Ignore - public void lifecycle_shouldRegisterReceiverOnStart() { - mController.onStart(); - - verify(mEthernetManager).addInterfaceStateListener(any(), - eq(mController.mEthernetListener)); - } - - @Test - public void lifecycle_shouldAddListenerOnResume() { - mController.onResume(); - verify(mTetherEnabler).addListener(mController); - } - - @Test - public void lifecycle_shouldRemoveListenerOnPause() { - mController.onPause(); - verify(mTetherEnabler).removeListener(mController); - } - - @Test - public void lifecycle_shouldUnregisterReceiverOnStop() { - mController.onStart(); - EthernetManager.InterfaceStateListener listener = mController.mEthernetListener; - mController.onStop(); - - verify(mEthernetManager).removeInterfaceStateListener(eq(listener)); - } - - @Test - public void shouldEnable_noTetherable() { - when(mTetheringManager.getTetherableIfaces()).thenReturn(new String[0]); - assertThat(mController.shouldEnable()).isFalse(); - } - - @Test - public void shouldShow_noEthernetInterface() { - when(mContext.getSystemService(EthernetManager.class)).thenReturn(null); - - final EthernetTetherPreferenceController controller = - new EthernetTetherPreferenceController(mContext, "ethernet"); - assertThat(controller.shouldShow()).isFalse(); - } - - @Test - public void setChecked_shouldStartEthernetTethering() { - mController.setChecked(true); - verify(mTetherEnabler).startTethering(TetheringManager.TETHERING_ETHERNET); - } - - @Test - public void setUnchecked_shouldStopEthernetTethering() { - mController.setChecked(false); - verify(mTetherEnabler).stopTethering(TetheringManager.TETHERING_ETHERNET); - } - - @Test - public void switch_shouldCheckedWhenEthernetTethering() { - mController.onTetherStateUpdated(TetherEnabler.TETHERING_ETHERNET_ON); - assertThat(mController.isChecked()).isTrue(); - } - - @Test - public void switch_shouldUnCheckedWhenEthernetNotTethering() { - mController.onTetherStateUpdated(TetherEnabler.TETHERING_OFF); - assertThat(mController.isChecked()).isFalse(); - } -} diff --git a/tests/robotests/src/com/android/settings/network/UsbTetherPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/UsbTetherPreferenceControllerTest.java deleted file mode 100644 index e02da9002a9..00000000000 --- a/tests/robotests/src/com/android/settings/network/UsbTetherPreferenceControllerTest.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.network; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.content.Context; -import android.net.TetheringManager; - -import androidx.preference.SwitchPreference; -import androidx.test.core.app.ApplicationProvider; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.util.ReflectionHelpers; - -@RunWith(RobolectricTestRunner.class) -public class UsbTetherPreferenceControllerTest { - - @Mock - private TetheringManager mTetheringManager; - @Mock - private TetherEnabler mTetherEnabler; - - private Context mContext; - private UsbTetherPreferenceController mController; - private SwitchPreference mSwitchPreference; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - - mContext = spy(ApplicationProvider.getApplicationContext()); - when(mContext.getSystemService(Context.TETHERING_SERVICE)).thenReturn(mTetheringManager); - when(mTetheringManager.getTetherableUsbRegexs()).thenReturn(new String[]{""}); - mController = new UsbTetherPreferenceController(mContext, "USB"); - mController.setTetherEnabler(mTetherEnabler); - mSwitchPreference = spy(SwitchPreference.class); - ReflectionHelpers.setField(mController, "mPreference", mSwitchPreference); - } - - @Test - public void lifecycle_shouldRegisterReceiverOnStart() { - mController.onStart(); - - verify(mContext).registerReceiver(eq(mController.mUsbChangeReceiver), any()); - } - - @Test - public void lifecycle_shouldAddListenerOnResume() { - mController.onResume(); - verify(mTetherEnabler).addListener(mController); - } - - @Test - public void lifecycle_shouldRemoveListenrOnPause() { - mController.onPause(); - verify(mTetherEnabler).removeListener(mController); - } - - @Test - public void lifecycle_shouldUnregisterReceiverOnStop() { - mController.onStart(); - mController.onStop(); - - verify(mContext).unregisterReceiver(eq(mController.mUsbChangeReceiver)); - } - - @Test - public void shouldShow_noTetherableUsb() { - when(mTetheringManager.getTetherableUsbRegexs()).thenReturn(new String[0]); - assertThat(mController.shouldShow()).isFalse(); - } - - @Test - public void shouldEnable_noUsbConnected() { - ReflectionHelpers.setField(mController, "mUsbConnected", false); - assertThat(mController.shouldEnable()).isFalse(); - } - - @Test - public void setChecked_shouldStartUsbTethering() { - mController.setChecked(true); - verify(mTetherEnabler).startTethering(TetheringManager.TETHERING_USB); - } - - @Test - public void setUnchecked_shouldStopUsbTethering() { - mController.setChecked(false); - verify(mTetherEnabler).stopTethering(TetheringManager.TETHERING_USB); - } - - @Test - public void switch_shouldCheckedWhenUsbTethering() { - mController.onTetherStateUpdated(TetherEnabler.TETHERING_USB_ON); - assertThat(mController.isChecked()).isTrue(); - } - - @Test - public void switch_shouldUnCheckedWhenUsbNotTethering() { - mController.onTetherStateUpdated(TetherEnabler.TETHERING_OFF); - assertThat(mController.isChecked()).isFalse(); - } -} diff --git a/tests/robotests/src/com/android/settings/network/WifiTetherDisablePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/WifiTetherDisablePreferenceControllerTest.java deleted file mode 100644 index a82a71f18f5..00000000000 --- a/tests/robotests/src/com/android/settings/network/WifiTetherDisablePreferenceControllerTest.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.network; - -import static com.android.settings.AllInOneTetherSettings.WIFI_TETHER_DISABLE_KEY; -import static com.android.settings.network.TetherEnabler.TETHERING_BLUETOOTH_ON; -import static com.android.settings.network.TetherEnabler.TETHERING_ETHERNET_ON; -import static com.android.settings.network.TetherEnabler.TETHERING_OFF; -import static com.android.settings.network.TetherEnabler.TETHERING_USB_ON; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; - -import android.content.Context; -import android.net.TetheringManager; - -import androidx.preference.PreferenceScreen; -import androidx.preference.SwitchPreference; -import androidx.test.core.app.ApplicationProvider; - -import com.android.settings.R; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.ParameterizedRobolectricTestRunner; -import org.robolectric.util.ReflectionHelpers; - -import java.util.Arrays; -import java.util.List; - -@RunWith(ParameterizedRobolectricTestRunner.class) -public class WifiTetherDisablePreferenceControllerTest { - - @ParameterizedRobolectricTestRunner.Parameters(name = "TetherState: {0}") - public static List params() { - return Arrays.asList(new Object[][] { - {TETHERING_OFF, R.string.summary_placeholder}, - {TETHERING_USB_ON, R.string.disable_wifi_hotspot_when_usb_on}, - {TETHERING_BLUETOOTH_ON, R.string.disable_wifi_hotspot_when_bluetooth_on}, - {TETHERING_ETHERNET_ON, R.string.disable_wifi_hotspot_when_ethernet_on}, - { - TETHERING_USB_ON | TETHERING_BLUETOOTH_ON, - R.string.disable_wifi_hotspot_when_usb_and_bluetooth_on - }, - { - TETHERING_USB_ON | TETHERING_ETHERNET_ON, - R.string.disable_wifi_hotspot_when_usb_and_ethernet_on - }, - { - TETHERING_BLUETOOTH_ON | TETHERING_ETHERNET_ON, - R.string.disable_wifi_hotspot_when_bluetooth_and_ethernet_on - }, - { - TETHERING_USB_ON | TETHERING_BLUETOOTH_ON | TETHERING_ETHERNET_ON, - R.string.disable_wifi_hotspot_when_usb_and_bluetooth_and_ethernet_on - } - }); - } - - @Mock - private TetheringManager mTetheringManager; - @Mock - private PreferenceScreen mPreferenceScreen; - @Mock - private TetherEnabler mTetherEnabler; - - private SwitchPreference mPreference; - private Context mContext; - private WifiTetherDisablePreferenceController mController; - private final int mTetherState; - private final int mSummaryResId; - - public WifiTetherDisablePreferenceControllerTest(int tetherState, int summaryResId) { - mTetherState = tetherState; - mSummaryResId = summaryResId; - } - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - - mContext = spy(ApplicationProvider.getApplicationContext()); - mPreference = spy(SwitchPreference.class); - when(mContext.getSystemService(Context.TETHERING_SERVICE)).thenReturn(mTetheringManager); - when(mTetheringManager.getTetherableWifiRegexs()).thenReturn(new String[]{""}); - mController = new WifiTetherDisablePreferenceController(mContext, WIFI_TETHER_DISABLE_KEY); - mController.setTetherEnabler(mTetherEnabler); - ReflectionHelpers.setField(mController, "mScreen", mPreferenceScreen); - ReflectionHelpers.setField(mController, "mPreference", mPreference); - when(mPreferenceScreen.findPreference(WIFI_TETHER_DISABLE_KEY)).thenReturn(mPreference); - } - - @Test - public void shouldShow_noTetherableWifi() { - when(mTetheringManager.getTetherableWifiRegexs()).thenReturn(new String[0]); - assertThat(mController.shouldShow()).isFalse(); - } - - @Test - public void onTetherStateUpdated_visibilityChangeCorrectly() { - int state = TetherEnabler.TETHERING_BLUETOOTH_ON; - mController.onTetherStateUpdated(state); - assertThat(mController.shouldShow()).isTrue(); - - state |= TetherEnabler.TETHERING_USB_ON; - mController.onTetherStateUpdated(state); - assertThat(mController.shouldShow()).isTrue(); - - state = TetherEnabler.TETHERING_USB_ON; - mController.onTetherStateUpdated(state); - assertThat(mController.shouldShow()).isTrue(); - - state = TetherEnabler.TETHERING_OFF; - mController.onTetherStateUpdated(state); - assertThat(mController.shouldShow()).isFalse(); - } - - @Test - public void getSummary_onTetherStateUpdated() { - mController.onTetherStateUpdated(mTetherState); - assertThat(mController.getSummary()).isEqualTo(mContext.getString(mSummaryResId)); - } -} diff --git a/tests/robotests/src/com/android/settings/network/tether/TetherSettingsTest.java b/tests/robotests/src/com/android/settings/network/tether/TetherSettingsTest.java index 92697547e7e..4e0fb03cefe 100644 --- a/tests/robotests/src/com/android/settings/network/tether/TetherSettingsTest.java +++ b/tests/robotests/src/com/android/settings/network/tether/TetherSettingsTest.java @@ -48,7 +48,6 @@ import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; -import android.util.FeatureFlagUtils; import androidx.fragment.app.FragmentActivity; import androidx.preference.Preference; @@ -56,7 +55,6 @@ import androidx.preference.SwitchPreference; import com.android.settings.R; import com.android.settings.RestrictedSettingsFragment; -import com.android.settings.core.FeatureFlags; import com.android.settings.wifi.tether.WifiTetherPreferenceController; import com.android.settingslib.RestrictedSwitchPreference; @@ -145,7 +143,6 @@ public class TetherSettingsTest { @Test public void testTetherNonIndexableKeys_tetherAvailable_keysNotReturned() { - FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false); // To let TetherUtil.isTetherAvailable return true, select one of the combinations setupIsTetherAvailable(true); @@ -190,7 +187,6 @@ public class TetherSettingsTest { @Test public void testTetherNonIndexableKeys_usbAvailable_usbKeyNotReturned() { - FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false); // We can ignore the condition of Utils.isMonkeyRunning() // In normal case, monkey and robotest should not execute at the same time when(mTetheringManager.getTetherableUsbRegexs()).thenReturn(new String[]{"fakeRegex"}); @@ -213,7 +209,6 @@ public class TetherSettingsTest { @Test public void testTetherNonIndexableKeys_bluetoothAvailable_bluetoothKeyNotReturned() { - FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false); when(mTetheringManager.getTetherableBluetoothRegexs()) .thenReturn(new String[]{"fakeRegex"}); diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java deleted file mode 100644 index d777a597936..00000000000 --- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.wifi.tether; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.content.Context; -import android.net.TetheringManager; -import android.net.wifi.SoftApConfiguration; -import android.net.wifi.WifiManager; - -import androidx.preference.ListPreference; -import androidx.preference.PreferenceScreen; - -import com.android.settings.R; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; - -@RunWith(RobolectricTestRunner.class) -public class WifiTetherApBandPreferenceControllerTest { - - private static final String ALL_BANDS = "5.0 GHz Band preferred"; - private static final String TWO_GHZ_STRING = "2.4 GHz Band"; - private static final String FIVE_GHZ_STRING = "5.0 GHz Band"; - private static final String VAL_2GHZ_STR = "1"; - private static final String VAL_5GHZ_STR = "2"; - private static final String VAL_2_5_GHZ_STR = "3"; - private static final int VAL_2GHZ_INT = 1; - private static final int VAL_5GHZ_INT = 2; - private static final int VAL_2_5_GHZ_INT = 3; - - private Context mContext; - @Mock - private TetheringManager mTetheringManager; - @Mock - private WifiManager mWifiManager; - @Mock - private WifiTetherBasePreferenceController.OnTetherConfigUpdateListener mListener; - @Mock - private PreferenceScreen mScreen; - - private WifiTetherApBandPreferenceController mController; - private ListPreference mPreference; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mContext = spy(RuntimeEnvironment.application); - mPreference = new ListPreference(RuntimeEnvironment.application); - when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager); - when(mContext.getSystemService(Context.TETHERING_SERVICE)).thenReturn(mTetheringManager); - when(mTetheringManager.getTetherableWifiRegexs()).thenReturn(new String[]{"1", "2"}); - when(mContext.getResources()).thenReturn(RuntimeEnvironment.application.getResources()); - when(mScreen.findPreference(anyString())).thenReturn(mPreference); - when(mWifiManager.getSoftApConfiguration()).thenReturn( - new SoftApConfiguration.Builder().build()); - - mController = new WifiTetherApBandPreferenceController(mContext, mListener); - } - - @Test - public void display_5GhzSupported_shouldDisplayFullList() { - when(mWifiManager.getCountryCode()).thenReturn("US"); - when(mWifiManager.is5GHzBandSupported()).thenReturn(true); - - // Create a new instance - mController = new WifiTetherApBandPreferenceController(mContext, mListener); - - mController.displayPreference(mScreen); - mController.onPreferenceChange(mPreference, VAL_2_5_GHZ_STR); - - assertThat(mPreference.getSummary()).isEqualTo(ALL_BANDS); - } - - @Test - public void display_noCountryCode_shouldDisable() { - when(mWifiManager.getCountryCode()).thenReturn(null); - when(mWifiManager.is5GHzBandSupported()).thenReturn(true); - - mController.displayPreference(mScreen); - - assertThat(mPreference.isEnabled()).isFalse(); - assertThat(mPreference.getSummary()) - .isEqualTo(RuntimeEnvironment.application.getString(R.string.wifi_ap_choose_2G)); - } - - @Test - public void display_5GhzNotSupported_shouldDisable() { - when(mWifiManager.getCountryCode()).thenReturn("US"); - when(mWifiManager.is5GHzBandSupported()).thenReturn(false); - - mController.displayPreference(mScreen); - - assertThat(mPreference.isEnabled()).isFalse(); - assertThat(mPreference.getSummary()) - .isEqualTo(RuntimeEnvironment.application.getString(R.string.wifi_ap_choose_2G)); - } - - @Test - public void changePreference_With5G_shouldUpdateValue() { - when(mWifiManager.getCountryCode()).thenReturn("US"); - when(mWifiManager.is5GHzBandSupported()).thenReturn(true); - - // Create a new instance to pick the proper value of isDualModeSupported() - mController = new WifiTetherApBandPreferenceController(mContext, mListener); - - mController.displayPreference(mScreen); - - // 'Auto' option - mController.onPreferenceChange(mPreference, VAL_2_5_GHZ_STR); - assertThat(mController.getBandIndex()).isEqualTo(VAL_2_5_GHZ_INT); - assertThat(mPreference.getSummary()).isEqualTo(ALL_BANDS); - verify(mListener, times(1)).onTetherConfigUpdated(mController); - - // should revert to the default for 5 Ghz only since this is not supported with this config - mController.onPreferenceChange(mPreference, VAL_5GHZ_STR); - assertThat(mController.getBandIndex()).isEqualTo(VAL_2_5_GHZ_INT); - assertThat(mPreference.getSummary()).isEqualTo(ALL_BANDS); - verify(mListener, times(2)).onTetherConfigUpdated(mController); - - // set to 2 Ghz - mController.onPreferenceChange(mPreference, VAL_2GHZ_STR); - assertThat(mController.getBandIndex()).isEqualTo(VAL_2GHZ_INT); - assertThat(mPreference.getSummary()).isEqualTo(TWO_GHZ_STRING); - verify(mListener, times(3)).onTetherConfigUpdated(mController); - } - - @Test - public void updateDisplay_shouldUpdateValue() { - when(mWifiManager.getCountryCode()).thenReturn("US"); - when(mWifiManager.is5GHzBandSupported()).thenReturn(true); - - // Set controller band index to 5GHz and verify is set. - mController.displayPreference(mScreen); - mController.onPreferenceChange(mPreference, VAL_5GHZ_STR); - assertThat(mController.getBandIndex()).isEqualTo(VAL_2_5_GHZ_INT); - - // Disable 5Ghz band - when(mWifiManager.is5GHzBandSupported()).thenReturn(false); - - // Call updateDisplay and verify it's changed. - mController.updateDisplay(); - assertThat(mController.getBandIndex()).isEqualTo(VAL_2GHZ_INT); - } -} diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java index 84a7b364d2e..28fb8b37721 100644 --- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java +++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java @@ -49,7 +49,6 @@ import android.net.wifi.SoftApConfiguration; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.UserManager; -import android.util.FeatureFlagUtils; import android.widget.TextView; import androidx.fragment.app.FragmentActivity; @@ -60,7 +59,6 @@ import androidx.preference.PreferenceScreen; import androidx.test.core.app.ApplicationProvider; import com.android.settings.R; -import com.android.settings.core.FeatureFlags; import com.android.settings.dashboard.RestrictedDashboardFragment; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.shadow.ShadowFragment; @@ -144,7 +142,6 @@ public class WifiTetherSettingsTest { @Before public void setUp() { - FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false); setCanShowWifiHotspotCached(true); doReturn(mWifiManager).when(mContext).getSystemService(WifiManager.class); doReturn(mConnectivityManager)