From 66aa964e2a6b89273518dadd0a8a4ecf7094cc88 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Thu, 18 Jun 2015 15:56:21 -0400 Subject: [PATCH] Fix ListView being too eager too scroll ListView is always too eager to scroll, so just stop using it. Bug: 21853796 Change-Id: Id37d89b0312597a9fb65a33f151af34b3f395d91 --- res/layout/ignore_optimizations_content.xml | 33 +++++++ res/layout/radio_with_summary.xml | 1 + .../settings/fuelgauge/HighPowerDetail.java | 92 ++++++++++--------- 3 files changed, 82 insertions(+), 44 deletions(-) create mode 100644 res/layout/ignore_optimizations_content.xml diff --git a/res/layout/ignore_optimizations_content.xml b/res/layout/ignore_optimizations_content.xml new file mode 100644 index 00000000000..4641f0ed633 --- /dev/null +++ b/res/layout/ignore_optimizations_content.xml @@ -0,0 +1,33 @@ + + + + + + + + + + diff --git a/res/layout/radio_with_summary.xml b/res/layout/radio_with_summary.xml index 20102078e40..9c3705037c9 100644 --- a/res/layout/radio_with_summary.xml +++ b/res/layout/radio_with_summary.xml @@ -20,6 +20,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" + android:background="?android:attr/selectableItemBackground" android:minHeight="?android:attr/listPreferredItemHeightSmall"> (getString(R.string.ignore_optimizations_on), - getString(R.string.ignore_optimizations_on_desc))); - mAdapter.add(new Pair(getString(R.string.ignore_optimizations_off), - getString(R.string.ignore_optimizations_off_desc))); - mSelectedIndex = mDefaultOn || mBackend.isWhitelisted(mPackageName) ? 0 : 1; - if (mBackend.isSysWhitelisted(mPackageName)) { - mAdapter.setEnabled(1, false); + mIsEnabled = mDefaultOn || mBackend.isWhitelisted(mPackageName); + } + + public Checkable setup(View view, boolean on) { + ((TextView) view.findViewById(android.R.id.title)).setText(on + ? R.string.ignore_optimizations_on : R.string.ignore_optimizations_off); + ((TextView) view.findViewById(android.R.id.summary)).setText(on + ? R.string.ignore_optimizations_on_desc : R.string.ignore_optimizations_off_desc); + view.setClickable(true); + view.setOnClickListener(this); + if (!on && mBackend.isSysWhitelisted(mPackageName)) { + view.setEnabled(false); } + return (Checkable) view; } @Override @@ -78,17 +85,41 @@ public class HighPowerDetail extends DialogFragment implements OnClickListener { AlertDialog.Builder b = new AlertDialog.Builder(getContext()) .setTitle(getString(R.string.ignore_optimizations_title, mLabel)) .setNegativeButton(R.string.cancel, null) - .setSingleChoiceItems(mAdapter, mSelectedIndex, this); + .setView(R.layout.ignore_optimizations_content); if (!mBackend.isSysWhitelisted(mPackageName)) { b.setPositiveButton(R.string.done, this); } return b.create(); } + @Override + public void onStart() { + super.onStart(); + mOptionOn = setup(getDialog().findViewById(R.id.ignore_on), true); + mOptionOff = setup(getDialog().findViewById(R.id.ignore_off), false); + updateViews(); + } + + private void updateViews() { + mOptionOn.setChecked(mIsEnabled); + mOptionOff.setChecked(!mIsEnabled); + } + + @Override + public void onClick(View v) { + if (v == mOptionOn) { + mIsEnabled = true; + updateViews(); + } else if (v == mOptionOff) { + mIsEnabled = false; + updateViews(); + } + } + @Override public void onClick(DialogInterface dialog, int which) { if (which == DialogInterface.BUTTON_POSITIVE) { - boolean newValue = mSelectedIndex == 0; + boolean newValue = mIsEnabled; boolean oldValue = mBackend.isWhitelisted(mPackageName); if (newValue != oldValue) { if (newValue) { @@ -97,8 +128,6 @@ public class HighPowerDetail extends DialogFragment implements OnClickListener { mBackend.removeApp(mPackageName); } } - } else { - mSelectedIndex = which; } } @@ -130,29 +159,4 @@ public class HighPowerDetail extends DialogFragment implements OnClickListener { fragment.setTargetFragment(caller, requestCode); fragment.show(caller.getFragmentManager(), HighPowerDetail.class.getSimpleName()); } - - private class Adapter extends ArrayAdapter> { - private final SparseBooleanArray mEnabled = new SparseBooleanArray(); - - public Adapter(Context context, int resource) { - super(context, resource, android.R.id.title); - } - - public void setEnabled(int index, boolean enabled) { - mEnabled.put(index, enabled); - } - - public boolean isEnabled(int position) { - return mEnabled.get(position, true); - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - View view = super.getView(position, convertView, parent); - ((TextView) view.findViewById(android.R.id.title)).setText(getItem(position).first); - ((TextView) view.findViewById(android.R.id.summary)).setText(getItem(position).second); - view.setEnabled(isEnabled(position)); - return view; - } - } }