diff --git a/aconfig/settings_adaptive_connectivity_flag_declarations.aconfig b/aconfig/settings_adaptive_connectivity_flag_declarations.aconfig
new file mode 100644
index 00000000000..021c6aeecf2
--- /dev/null
+++ b/aconfig/settings_adaptive_connectivity_flag_declarations.aconfig
@@ -0,0 +1,9 @@
+package: "com.android.settings.flags"
+container: "system_ext"
+
+flag {
+ name: "enable_nested_toggle_switches"
+ namespace: "android_settings"
+ description: "Enable nested toggle switches in Adaptive connectivity settings UI"
+ bug: "393645580"
+}
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 16d3964991c..5639f8fd579 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6771,7 +6771,15 @@
Off
Use adaptive connectivity
-
+
+ Auto\u2011switch Wi\u2011Fi to Cellular
+
+ Automatically use cellular data when Wi\u2011Fi connection is poor or unavailable.
+Data usage charges may apply.
+
+ Auto\u2011switch mobile network for battery life
+
+ Extend battery life by automatically managing network connections
Mobile network security
diff --git a/res/xml/adaptive_connectivity_settings.xml b/res/xml/adaptive_connectivity_settings.xml
index 0c8ff88dd47..2d0eb48f89f 100644
--- a/res/xml/adaptive_connectivity_settings.xml
+++ b/res/xml/adaptive_connectivity_settings.xml
@@ -33,4 +33,15 @@
android:title="@string/adaptive_connectivity_main_switch_title"
settings:controller="com.android.settings.network.AdaptiveConnectivityTogglePreferenceController"/>
+
+
+
diff --git a/src/com/android/settings/network/AdaptiveConnectivitySettings.java b/src/com/android/settings/network/AdaptiveConnectivitySettings.java
index a4e872c67cb..a099d79f007 100644
--- a/src/com/android/settings/network/AdaptiveConnectivitySettings.java
+++ b/src/com/android/settings/network/AdaptiveConnectivitySettings.java
@@ -17,43 +17,64 @@ package com.android.settings.network;
import android.app.settings.SettingsEnums;
import android.content.Context;
-
+import android.os.Bundle;
+import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-
+import androidx.preference.SwitchPreferenceCompat;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.flags.Flags;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.search.SearchIndexable;
-/**
- * Adaptive connectivity is a feature which automatically manages network connections.
- */
+/** Adaptive connectivity is a feature which automatically manages network connections. */
@SearchIndexable
public class AdaptiveConnectivitySettings extends DashboardFragment {
- private static final String TAG = "AdaptiveConnectivitySettings";
+ private static final String TAG = "AdaptiveConnectivitySettings";
+ protected static final String ADAPTIVE_CONNECTIVITY_WIFI_ENABLED =
+ "adaptive_connectivity_wifi_enabled";
+ protected static final String ADAPTIVE_CONNECTIVITY_MOBILE_NETWORK_ENABLED =
+ "adaptive_connectivity_mobile_network_enabled";
- @Override
- public int getMetricsCategory() {
- return SettingsEnums.ADAPTIVE_CONNECTIVITY_CATEGORY;
+ @Override
+ public int getMetricsCategory() {
+ return SettingsEnums.ADAPTIVE_CONNECTIVITY_CATEGORY;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.adaptive_connectivity_settings;
+ }
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.adaptive_connectivity_settings);
+
+ @Override
+ public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
+ return AdaptiveConnectivityScreen.KEY;
+ }
+
+ @Override
+ public void onCreatePreferences(@NonNull Bundle savedInstanceState, @NonNull String rootKey) {
+ Log.i("Settings", "onCreatePreferences");
+ super.onCreatePreferences(savedInstanceState, rootKey);
+ if (Flags.enableNestedToggleSwitches()) {
+ setSwitchVisibility(ADAPTIVE_CONNECTIVITY_WIFI_ENABLED, true);
+ setSwitchVisibility(ADAPTIVE_CONNECTIVITY_MOBILE_NETWORK_ENABLED, true);
}
+ }
- @Override
- protected String getLogTag() {
- return TAG;
- }
-
- @Override
- protected int getPreferenceScreenResId() {
- return R.xml.adaptive_connectivity_settings;
- }
-
- public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider(R.xml.adaptive_connectivity_settings);
-
- @Override
- public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
- return AdaptiveConnectivityScreen.KEY;
+ private void setSwitchVisibility(String key, boolean isVisible) {
+ SwitchPreferenceCompat switchPreference = findPreference(key);
+ if (switchPreference != null) {
+ switchPreference.setVisible(isVisible);
}
+ }
}
diff --git a/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityScreenTest.kt b/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityScreenTest.kt
index f575fe78256..2b3173a051c 100644
--- a/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityScreenTest.kt
+++ b/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityScreenTest.kt
@@ -16,13 +16,17 @@
package com.android.settings.network
+import androidx.preference.SwitchPreferenceCompat
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.settings.flags.Flags
+import com.android.settings.network.AdaptiveConnectivitySettings.ADAPTIVE_CONNECTIVITY_MOBILE_NETWORK_ENABLED
+import com.android.settings.network.AdaptiveConnectivitySettings.ADAPTIVE_CONNECTIVITY_WIFI_ENABLED
import com.android.settingslib.preference.CatalystScreenTestCase
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
+@Suppress("DEPRECATION")
@RunWith(AndroidJUnit4::class)
class AdaptiveConnectivityScreenTest : CatalystScreenTestCase() {
override val preferenceScreenCreator = AdaptiveConnectivityScreen()
@@ -35,4 +39,23 @@ class AdaptiveConnectivityScreenTest : CatalystScreenTestCase() {
fun key() {
assertThat(preferenceScreenCreator.key).isEqualTo(AdaptiveConnectivityScreen.KEY)
}
+
+ @Test
+ fun flagDefaultDisabled_noSwitchPreferenceCompatExists() {
+ // create fragment
+ val fragment: AdaptiveConnectivitySettings =
+ preferenceScreenCreator.fragmentClass().newInstance()
+ // check if switch preference exists
+ assertSwitchPreferenceCompatIsNull(ADAPTIVE_CONNECTIVITY_WIFI_ENABLED, fragment)
+ assertSwitchPreferenceCompatIsNull(ADAPTIVE_CONNECTIVITY_MOBILE_NETWORK_ENABLED, fragment)
+ }
+
+ private fun assertSwitchPreferenceCompatIsNull(
+ key: String,
+ fragment: AdaptiveConnectivitySettings
+ ) {
+ val switchPreference = fragment.findPreference(key)
+ assertThat(switchPreference).isNull()
+ }
+
}