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
This commit is contained in:
Arc Wang
2021-05-11 18:11:44 +08:00
parent c4c9e2cad4
commit 9a4722e022
2 changed files with 34 additions and 0 deletions

View File

@@ -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);

View File

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