From 16e32fae3f12a1d323fd7d93fc78ee357ac84ae6 Mon Sep 17 00:00:00 2001 From: noshinmir Date: Fri, 14 Feb 2025 02:31:23 +0000 Subject: [PATCH] Add nested toggle switches under Adaptive connectivity settings UI Bug: 393645580 Flag: com.android.settings.flags.enable_nested_toggle_switches Test: Manual testing atest AdaptiveConnectivityScreenTest hsv: https://hsv.googleplex.com/5165236934934528 Change-Id: I12403f5c80290ebccc04f11771ec3f06ee216610 --- ...ive_connectivity_flag_declarations.aconfig | 9 +++ res/values/strings.xml | 10 ++- res/xml/adaptive_connectivity_settings.xml | 11 +++ .../network/AdaptiveConnectivitySettings.java | 71 ++++++++++++------- .../network/AdaptiveConnectivityScreenTest.kt | 23 ++++++ 5 files changed, 98 insertions(+), 26 deletions(-) create mode 100644 aconfig/settings_adaptive_connectivity_flag_declarations.aconfig 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() + } + }