From 9a4722e022ac593999782cf0a68476da35bf2d69 Mon Sep 17 00:00:00 2001 From: Arc Wang Date: Tue, 11 May 2021 18:11:44 +0800 Subject: [PATCH] Add SettingsSpinnerPreference#setClickable This change add the API for Storage Settings to set the spinner not clickablewhen there is only 1 volume. Bug: 187801712 Test: manual Click the spinner when there is only default volume. Click the spinner when there is USB drive connected. Change-Id: I1e6d46c9772b641678085d41d4905022e893acc4 --- .../widget/SettingsSpinnerPreference.java | 14 +++++++++++++ .../widget/SettingsSpinnerPreferenceTest.java | 20 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/SettingsSpinnerPreference.java b/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/SettingsSpinnerPreference.java index 154a0f44788de..304c3439a60db 100644 --- a/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/SettingsSpinnerPreference.java +++ b/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/SettingsSpinnerPreference.java @@ -36,6 +36,7 @@ public class SettingsSpinnerPreference extends Preference { private SettingsSpinnerAdapter mAdapter; private AdapterView.OnItemSelectedListener mListener; private int mPosition; //Default 0 for internal shard storage. + private boolean mIsClickable = true; /** * Perform inflation from XML and apply a class-specific base style. @@ -50,6 +51,7 @@ public class SettingsSpinnerPreference extends Preference { public SettingsSpinnerPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setLayoutResource(R.layout.settings_spinner_preference); + setSelectable(false); } /** @@ -62,6 +64,7 @@ public class SettingsSpinnerPreference extends Preference { public SettingsSpinnerPreference(Context context, AttributeSet attrs) { super(context, attrs); setLayoutResource(R.layout.settings_spinner_preference); + setSelectable(false); } /** @@ -98,10 +101,21 @@ public class SettingsSpinnerPreference extends Preference { notifyChanged(); } + /** Set clickable of the spinner. */ + public void setClickable(boolean isClickable) { + if (mIsClickable == isClickable) { + return; + } + mIsClickable = isClickable; + notifyChanged(); + } + @Override public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); final SettingsSpinner spinner = (SettingsSpinner) holder.findViewById(R.id.spinner); + spinner.setEnabled(mIsClickable); + spinner.setClickable(mIsClickable); spinner.setAdapter(mAdapter); spinner.setSelection(mPosition); spinner.setOnItemSelectedListener(mOnSelectedListener); diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/widget/SettingsSpinnerPreferenceTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/widget/SettingsSpinnerPreferenceTest.java index 53a382a9ebf6a..b0c5314a2ec04 100644 --- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/widget/SettingsSpinnerPreferenceTest.java +++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/widget/SettingsSpinnerPreferenceTest.java @@ -89,4 +89,24 @@ public class SettingsSpinnerPreferenceTest { assertThat(mSpinnerPreference.getSelectedItem()) .isEqualTo(mSpinner.getAdapter().getItem(1)); } + + @Test + public void onBindViewHolder_setClickableTrue_isClickableTrue() { + mSpinnerPreference.setClickable(true); + + mSpinnerPreference.onBindViewHolder(mViewHolder); + + assertThat(mSpinner.isClickable()).isTrue(); + assertThat(mSpinner.isEnabled()).isTrue(); + } + + @Test + public void onBindViewHolder_setClickableFalse_isClickableFalse() { + mSpinnerPreference.setClickable(false); + + mSpinnerPreference.onBindViewHolder(mViewHolder); + + assertThat(mSpinner.isClickable()).isFalse(); + assertThat(mSpinner.isEnabled()).isFalse(); + } }