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(); + } }