From 2d2f523abe195219a68306c3c932575721c967c5 Mon Sep 17 00:00:00 2001 From: danielwbhuang Date: Mon, 28 Oct 2024 20:38:18 +0800 Subject: [PATCH] [ToA] Use radio button style for single selection 1. Change TickButtonPreference to SelectorWithWidgetPreference 2. Modify tests Bug: 375979373 Flag: EXEMPT bugfix Test: atest TermsOfAddressFeminineControllerTest, TermsOfAddressMasculineControllerTest, TermsOfAddressNeutralControllerTest, TermsOfAddressNotSpecifiedControllerTest Change-Id: I29c01fb3d2fa9545bdd817f50d9c48b3610f9785 --- res/xml/terms_of_address.xml | 8 ++--- .../TermsOfAddressBaseController.java | 29 ++++--------------- .../TermsOfAddressFeminineControllerTest.java | 22 +++++++------- ...TermsOfAddressMasculineControllerTest.java | 22 +++++++------- .../TermsOfAddressNeutralControllerTest.java | 22 +++++++------- ...msOfAddressNotSpecifiedControllerTest.java | 22 +++++++------- 6 files changed, 54 insertions(+), 71 deletions(-) diff --git a/res/xml/terms_of_address.xml b/res/xml/terms_of_address.xml index 90cbe52f6ca..3c1ba312243 100644 --- a/res/xml/terms_of_address.xml +++ b/res/xml/terms_of_address.xml @@ -24,22 +24,22 @@ android:title="@string/terms_of_address_intro_title" android:persistent="false"/> - - - - diff --git a/src/com/android/settings/localepicker/TermsOfAddressBaseController.java b/src/com/android/settings/localepicker/TermsOfAddressBaseController.java index 86b139ece48..889acf0a870 100644 --- a/src/com/android/settings/localepicker/TermsOfAddressBaseController.java +++ b/src/com/android/settings/localepicker/TermsOfAddressBaseController.java @@ -23,8 +23,8 @@ import androidx.preference.PreferenceScreen; import com.android.settings.core.BasePreferenceController; import com.android.settings.overlay.FeatureFactory; -import com.android.settings.widget.TickButtonPreference; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; +import com.android.settingslib.widget.SelectorWithWidgetPreference; import java.util.concurrent.Executor; import java.util.concurrent.Executors; @@ -32,9 +32,9 @@ import java.util.concurrent.Executors; public abstract class TermsOfAddressBaseController extends BasePreferenceController { private static final Executor sExecutor = Executors.newSingleThreadExecutor(); - private PreferenceScreen mPreferenceScreen; private MetricsFeatureProvider mMetricsFeatureProvider; - private TickButtonPreference mPreference; + private SelectorWithWidgetPreference mPreference; + private TermsOfAddressHelper mTermsOfAddressHelper; public TermsOfAddressBaseController(Context context, String preferenceKey) { @@ -49,34 +49,17 @@ public abstract class TermsOfAddressBaseController extends BasePreferenceControl @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); - mPreferenceScreen = screen; mPreference = screen.findPreference(getPreferenceKey()); - mPreference.setOnPreferenceClickListener(clickedPref -> { + mPreference.setChecked( + mTermsOfAddressHelper.getSystemGrammaticalGender() == getGrammaticalGenderType()); + mPreference.setOnClickListener(v -> { sExecutor.execute( () -> { mTermsOfAddressHelper.setSystemGrammaticalGender( getGrammaticalGenderType()); }); - setSelected(mPreference); mMetricsFeatureProvider.action(mContext, getMetricsActionKey()); - return true; }); - updatePreferences(); - } - - private void setSelected(TickButtonPreference preference) { - for (int i = 1; i < mPreferenceScreen.getPreferenceCount(); i++) { - TickButtonPreference pref = (TickButtonPreference) mPreferenceScreen.getPreference(i); - pref.setSelected(pref.getKey().equals(preference.getKey())); - } - } - - private void updatePreferences() { - if (mPreference == null) { - return; - } - mPreference.setSelected( - mTermsOfAddressHelper.getSystemGrammaticalGender() == getGrammaticalGenderType()); } @Override diff --git a/tests/unit/src/com/android/settings/localepicker/TermsOfAddressFeminineControllerTest.java b/tests/unit/src/com/android/settings/localepicker/TermsOfAddressFeminineControllerTest.java index 246fad62af9..8b44c98b7cc 100644 --- a/tests/unit/src/com/android/settings/localepicker/TermsOfAddressFeminineControllerTest.java +++ b/tests/unit/src/com/android/settings/localepicker/TermsOfAddressFeminineControllerTest.java @@ -31,7 +31,7 @@ import androidx.preference.PreferenceScreen; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; -import com.android.settings.widget.TickButtonPreference; +import com.android.settingslib.widget.SelectorWithWidgetPreference; import org.junit.Before; import org.junit.Ignore; @@ -53,10 +53,10 @@ public class TermsOfAddressFeminineControllerTest { private PreferenceCategory mPreferenceCategory; private PreferenceScreen mPreferenceScreen; private TermsOfAddressFeminineController mController; - private TickButtonPreference mFemininePreference; - private TickButtonPreference mMasculinePreference; - private TickButtonPreference mNotSpecifiedPreference; - private TickButtonPreference mNeutralPreference; + private SelectorWithWidgetPreference mFemininePreference; + private SelectorWithWidgetPreference mMasculinePreference; + private SelectorWithWidgetPreference mNotSpecifiedPreference; + private SelectorWithWidgetPreference mNeutralPreference; private GrammaticalInflectionManager mGrammaticalInflectionManager; @Before @@ -74,13 +74,13 @@ public class TermsOfAddressFeminineControllerTest { mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext); mPreferenceCategory = new PreferenceCategory(mContext); mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS); - mNotSpecifiedPreference = new TickButtonPreference(mContext); + mNotSpecifiedPreference = new SelectorWithWidgetPreference(mContext); mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED); - mFemininePreference = new TickButtonPreference(mContext); + mFemininePreference = new SelectorWithWidgetPreference(mContext); mFemininePreference.setKey(KEY_FEMININE); - mMasculinePreference = new TickButtonPreference(mContext); + mMasculinePreference = new SelectorWithWidgetPreference(mContext); mMasculinePreference.setKey(KEY_MASCULINE); - mNeutralPreference = new TickButtonPreference(mContext); + mNeutralPreference = new SelectorWithWidgetPreference(mContext); mNeutralPreference.setKey(KEY_NEUTRAL); mPreferenceScreen.addPreference(mPreferenceCategory); mPreferenceScreen.addPreference(mNotSpecifiedPreference); @@ -95,8 +95,8 @@ public class TermsOfAddressFeminineControllerTest { @Test @Ignore("b/339543490") public void displayPreference_setGrammaticalGenderIsFeminine_FeminineIsSelected() { - TickButtonPreference selectedPreference = - (TickButtonPreference) mPreferenceScreen.getPreference(2); + SelectorWithWidgetPreference selectedPreference = + (SelectorWithWidgetPreference) mPreferenceScreen.getPreference(2); selectedPreference.performClick(); assertThat(selectedPreference.getKey()).isEqualTo(KEY_FEMININE); diff --git a/tests/unit/src/com/android/settings/localepicker/TermsOfAddressMasculineControllerTest.java b/tests/unit/src/com/android/settings/localepicker/TermsOfAddressMasculineControllerTest.java index f5ed3959b76..62ba8990df8 100644 --- a/tests/unit/src/com/android/settings/localepicker/TermsOfAddressMasculineControllerTest.java +++ b/tests/unit/src/com/android/settings/localepicker/TermsOfAddressMasculineControllerTest.java @@ -31,7 +31,7 @@ import androidx.preference.PreferenceScreen; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; -import com.android.settings.widget.TickButtonPreference; +import com.android.settingslib.widget.SelectorWithWidgetPreference; import org.junit.Before; import org.junit.Ignore; @@ -53,10 +53,10 @@ public class TermsOfAddressMasculineControllerTest { private PreferenceCategory mPreferenceCategory; private PreferenceScreen mPreferenceScreen; private TermsOfAddressMasculineController mController; - private TickButtonPreference mFemininePreference; - private TickButtonPreference mMasculinePreference; - private TickButtonPreference mNotSpecifiedPreference; - private TickButtonPreference mNeutralPreference; + private SelectorWithWidgetPreference mFemininePreference; + private SelectorWithWidgetPreference mMasculinePreference; + private SelectorWithWidgetPreference mNotSpecifiedPreference; + private SelectorWithWidgetPreference mNeutralPreference; private GrammaticalInflectionManager mGrammaticalInflectionManager; @Before @@ -74,13 +74,13 @@ public class TermsOfAddressMasculineControllerTest { mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext); mPreferenceCategory = new PreferenceCategory(mContext); mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS); - mNotSpecifiedPreference = new TickButtonPreference(mContext); + mNotSpecifiedPreference = new SelectorWithWidgetPreference(mContext); mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED); - mFemininePreference = new TickButtonPreference(mContext); + mFemininePreference = new SelectorWithWidgetPreference(mContext); mFemininePreference.setKey(KEY_FEMININE); - mMasculinePreference = new TickButtonPreference(mContext); + mMasculinePreference = new SelectorWithWidgetPreference(mContext); mMasculinePreference.setKey(KEY_MASCULINE); - mNeutralPreference = new TickButtonPreference(mContext); + mNeutralPreference = new SelectorWithWidgetPreference(mContext); mNeutralPreference.setKey(KEY_NEUTRAL); mPreferenceScreen.addPreference(mPreferenceCategory); mPreferenceScreen.addPreference(mNotSpecifiedPreference); @@ -95,8 +95,8 @@ public class TermsOfAddressMasculineControllerTest { @Test @Ignore("b/339543490") public void displayPreference_setGrammaticalGenderIsMasculine_MasculineIsSelected() { - TickButtonPreference selectedPreference = - (TickButtonPreference) mPreferenceScreen.getPreference(3); + SelectorWithWidgetPreference selectedPreference = + (SelectorWithWidgetPreference) mPreferenceScreen.getPreference(3); selectedPreference.performClick(); assertThat(selectedPreference.getKey()).isEqualTo(KEY_MASCULINE); diff --git a/tests/unit/src/com/android/settings/localepicker/TermsOfAddressNeutralControllerTest.java b/tests/unit/src/com/android/settings/localepicker/TermsOfAddressNeutralControllerTest.java index 0e53198188e..8fd836bfe43 100644 --- a/tests/unit/src/com/android/settings/localepicker/TermsOfAddressNeutralControllerTest.java +++ b/tests/unit/src/com/android/settings/localepicker/TermsOfAddressNeutralControllerTest.java @@ -31,7 +31,7 @@ import androidx.preference.PreferenceScreen; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; -import com.android.settings.widget.TickButtonPreference; +import com.android.settingslib.widget.SelectorWithWidgetPreference; import org.junit.Before; import org.junit.Ignore; @@ -53,10 +53,10 @@ public class TermsOfAddressNeutralControllerTest { private PreferenceCategory mPreferenceCategory; private PreferenceScreen mPreferenceScreen; private TermsOfAddressNeutralController mController; - private TickButtonPreference mFemininePreference; - private TickButtonPreference mMasculinePreference; - private TickButtonPreference mNotSpecifiedPreference; - private TickButtonPreference mNeutralPreference; + private SelectorWithWidgetPreference mFemininePreference; + private SelectorWithWidgetPreference mMasculinePreference; + private SelectorWithWidgetPreference mNotSpecifiedPreference; + private SelectorWithWidgetPreference mNeutralPreference; private GrammaticalInflectionManager mGrammaticalInflectionManager; @Before @@ -74,13 +74,13 @@ public class TermsOfAddressNeutralControllerTest { mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext); mPreferenceCategory = new PreferenceCategory(mContext); mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS); - mNotSpecifiedPreference = new TickButtonPreference(mContext); + mNotSpecifiedPreference = new SelectorWithWidgetPreference(mContext); mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED); - mFemininePreference = new TickButtonPreference(mContext); + mFemininePreference = new SelectorWithWidgetPreference(mContext); mFemininePreference.setKey(KEY_FEMININE); - mMasculinePreference = new TickButtonPreference(mContext); + mMasculinePreference = new SelectorWithWidgetPreference(mContext); mMasculinePreference.setKey(KEY_MASCULINE); - mNeutralPreference = new TickButtonPreference(mContext); + mNeutralPreference = new SelectorWithWidgetPreference(mContext); mNeutralPreference.setKey(KEY_NEUTRAL); mPreferenceScreen.addPreference(mPreferenceCategory); mPreferenceScreen.addPreference(mNotSpecifiedPreference); @@ -95,8 +95,8 @@ public class TermsOfAddressNeutralControllerTest { @Test @Ignore("b/339543490") public void displayPreference_setGrammaticalGenderIsNotSpecified_NeutralIsSelected() { - TickButtonPreference selectedPreference = - (TickButtonPreference) mPreferenceScreen.getPreference(4); + SelectorWithWidgetPreference selectedPreference = + (SelectorWithWidgetPreference) mPreferenceScreen.getPreference(4); selectedPreference.performClick(); assertThat(selectedPreference.getKey()).isEqualTo(KEY_NEUTRAL); diff --git a/tests/unit/src/com/android/settings/localepicker/TermsOfAddressNotSpecifiedControllerTest.java b/tests/unit/src/com/android/settings/localepicker/TermsOfAddressNotSpecifiedControllerTest.java index 96bac08dde1..4e9c3ee6fcf 100644 --- a/tests/unit/src/com/android/settings/localepicker/TermsOfAddressNotSpecifiedControllerTest.java +++ b/tests/unit/src/com/android/settings/localepicker/TermsOfAddressNotSpecifiedControllerTest.java @@ -31,7 +31,7 @@ import androidx.preference.PreferenceScreen; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; -import com.android.settings.widget.TickButtonPreference; +import com.android.settingslib.widget.SelectorWithWidgetPreference; import org.junit.Before; import org.junit.Ignore; @@ -53,10 +53,10 @@ public class TermsOfAddressNotSpecifiedControllerTest { private PreferenceCategory mPreferenceCategory; private PreferenceScreen mPreferenceScreen; private TermsOfAddressNotSpecifiedController mController; - private TickButtonPreference mFemininePreference; - private TickButtonPreference mMasculinePreference; - private TickButtonPreference mNotSpecifiedPreference; - private TickButtonPreference mNeutralPreference; + private SelectorWithWidgetPreference mFemininePreference; + private SelectorWithWidgetPreference mMasculinePreference; + private SelectorWithWidgetPreference mNotSpecifiedPreference; + private SelectorWithWidgetPreference mNeutralPreference; private GrammaticalInflectionManager mGrammaticalInflectionManager; @Before @@ -74,13 +74,13 @@ public class TermsOfAddressNotSpecifiedControllerTest { mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext); mPreferenceCategory = new PreferenceCategory(mContext); mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS); - mNotSpecifiedPreference = new TickButtonPreference(mContext); + mNotSpecifiedPreference = new SelectorWithWidgetPreference(mContext); mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED); - mFemininePreference = new TickButtonPreference(mContext); + mFemininePreference = new SelectorWithWidgetPreference(mContext); mFemininePreference.setKey(KEY_FEMININE); - mMasculinePreference = new TickButtonPreference(mContext); + mMasculinePreference = new SelectorWithWidgetPreference(mContext); mMasculinePreference.setKey(KEY_MASCULINE); - mNeutralPreference = new TickButtonPreference(mContext); + mNeutralPreference = new SelectorWithWidgetPreference(mContext); mNeutralPreference.setKey(KEY_NEUTRAL); mPreferenceScreen.addPreference(mPreferenceCategory); mPreferenceScreen.addPreference(mNotSpecifiedPreference); @@ -95,8 +95,8 @@ public class TermsOfAddressNotSpecifiedControllerTest { @Test @Ignore("b/339543490") public void displayPreference_setGrammaticalGenderIsNotSpecified_NotSpecifiedIsSelected() { - TickButtonPreference selectedPreference = - (TickButtonPreference) mPreferenceScreen.getPreference(1); + SelectorWithWidgetPreference selectedPreference = + (SelectorWithWidgetPreference) mPreferenceScreen.getPreference(1); selectedPreference.performClick(); assertThat(selectedPreference.getKey()).isEqualTo(KEY_NOT_SPECIFIED);