Merge "Shows ripple effect for SettingsSpinnerPreference" into sc-dev
This commit is contained in:
@@ -22,6 +22,7 @@ import android.view.View;
|
|||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
import androidx.preference.Preference.OnPreferenceClickListener;
|
||||||
import androidx.preference.PreferenceViewHolder;
|
import androidx.preference.PreferenceViewHolder;
|
||||||
|
|
||||||
import com.android.settingslib.widget.settingsspinner.SettingsSpinner;
|
import com.android.settingslib.widget.settingsspinner.SettingsSpinner;
|
||||||
@@ -31,12 +32,12 @@ import com.android.settingslib.widget.settingsspinner.SettingsSpinnerAdapter;
|
|||||||
* This preference uses SettingsSpinner & SettingsSpinnerAdapter which provide default layouts for
|
* This preference uses SettingsSpinner & SettingsSpinnerAdapter which provide default layouts for
|
||||||
* both view and drop down view of the Spinner.
|
* both view and drop down view of the Spinner.
|
||||||
*/
|
*/
|
||||||
public class SettingsSpinnerPreference extends Preference {
|
public class SettingsSpinnerPreference extends Preference implements OnPreferenceClickListener {
|
||||||
|
|
||||||
private SettingsSpinnerAdapter mAdapter;
|
private SettingsSpinnerAdapter mAdapter;
|
||||||
private AdapterView.OnItemSelectedListener mListener;
|
private AdapterView.OnItemSelectedListener mListener;
|
||||||
private int mPosition; //Default 0 for internal shard storage.
|
private int mPosition;
|
||||||
private boolean mIsClickable = true;
|
private boolean mShouldPerformClick;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform inflation from XML and apply a class-specific base style.
|
* Perform inflation from XML and apply a class-specific base style.
|
||||||
@@ -51,7 +52,7 @@ public class SettingsSpinnerPreference extends Preference {
|
|||||||
public SettingsSpinnerPreference(Context context, AttributeSet attrs, int defStyle) {
|
public SettingsSpinnerPreference(Context context, AttributeSet attrs, int defStyle) {
|
||||||
super(context, attrs, defStyle);
|
super(context, attrs, defStyle);
|
||||||
setLayoutResource(R.layout.settings_spinner_preference);
|
setLayoutResource(R.layout.settings_spinner_preference);
|
||||||
setSelectable(false);
|
setOnPreferenceClickListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -64,7 +65,7 @@ public class SettingsSpinnerPreference extends Preference {
|
|||||||
public SettingsSpinnerPreference(Context context, AttributeSet attrs) {
|
public SettingsSpinnerPreference(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
setLayoutResource(R.layout.settings_spinner_preference);
|
setLayoutResource(R.layout.settings_spinner_preference);
|
||||||
setSelectable(false);
|
setOnPreferenceClickListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -76,6 +77,13 @@ public class SettingsSpinnerPreference extends Preference {
|
|||||||
this(context, null);
|
this(context, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
|
mShouldPerformClick = true;
|
||||||
|
notifyChanged();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/** Sets adapter of the spinner. */
|
/** Sets adapter of the spinner. */
|
||||||
public <T extends SettingsSpinnerAdapter> void setAdapter(T adapter) {
|
public <T extends SettingsSpinnerAdapter> void setAdapter(T adapter) {
|
||||||
mAdapter = adapter;
|
mAdapter = adapter;
|
||||||
@@ -101,24 +109,19 @@ public class SettingsSpinnerPreference extends Preference {
|
|||||||
notifyChanged();
|
notifyChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Set clickable of the spinner. */
|
|
||||||
public void setClickable(boolean isClickable) {
|
|
||||||
if (mIsClickable == isClickable) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mIsClickable = isClickable;
|
|
||||||
notifyChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(PreferenceViewHolder holder) {
|
public void onBindViewHolder(PreferenceViewHolder holder) {
|
||||||
super.onBindViewHolder(holder);
|
super.onBindViewHolder(holder);
|
||||||
final SettingsSpinner spinner = (SettingsSpinner) holder.findViewById(R.id.spinner);
|
final SettingsSpinner spinner = (SettingsSpinner) holder.findViewById(R.id.spinner);
|
||||||
spinner.setEnabled(mIsClickable);
|
|
||||||
spinner.setClickable(mIsClickable);
|
|
||||||
spinner.setAdapter(mAdapter);
|
spinner.setAdapter(mAdapter);
|
||||||
spinner.setSelection(mPosition);
|
spinner.setSelection(mPosition);
|
||||||
spinner.setOnItemSelectedListener(mOnSelectedListener);
|
spinner.setOnItemSelectedListener(mOnSelectedListener);
|
||||||
|
if (mShouldPerformClick) {
|
||||||
|
mShouldPerformClick = false;
|
||||||
|
// To show dropdown view.
|
||||||
|
spinner.performClick();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final AdapterView.OnItemSelectedListener mOnSelectedListener =
|
private final AdapterView.OnItemSelectedListener mOnSelectedListener =
|
||||||
|
|||||||
@@ -89,24 +89,4 @@ public class SettingsSpinnerPreferenceTest {
|
|||||||
assertThat(mSpinnerPreference.getSelectedItem())
|
assertThat(mSpinnerPreference.getSelectedItem())
|
||||||
.isEqualTo(mSpinner.getAdapter().getItem(1));
|
.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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user