From 80ca7d955ede53df237e5a77d7e915ad3b6cb586 Mon Sep 17 00:00:00 2001 From: Christopher Eby Date: Thu, 1 Mar 2012 02:30:42 -0600 Subject: [PATCH] Disable match drag position behavior in FastScroller I'm not sure what it's supposed to accomplish, but whatever it is, it doesn't do it very well. This always makes sure the FastScroller remains always visible after changing the sort order. --- res/layout/listview.xml | 2 -- src/org/kreed/vanilla/CompatHoneycomb.java | 7 +++--- src/org/kreed/vanilla/LibraryActivity.java | 15 ++++++++++++ .../kreed/vanilla/LibraryPagerAdapter.java | 23 ++++++++++++++++--- 4 files changed, 39 insertions(+), 8 deletions(-) diff --git a/res/layout/listview.xml b/res/layout/listview.xml index da2200fc..c4be8a75 100644 --- a/res/layout/listview.xml +++ b/res/layout/listview.xml @@ -27,6 +27,4 @@ THE SOFTWARE. android:divider="@color/divider_color" android:dividerHeight="1dip" android:listSelector="@drawable/selectable_item_bg" - android:fastScrollEnabled="true" - android:fastScrollAlwaysVisible="true" android:scrollbarStyle="outsideInset" /> diff --git a/src/org/kreed/vanilla/CompatHoneycomb.java b/src/org/kreed/vanilla/CompatHoneycomb.java index b2332b3d..06bc79b0 100644 --- a/src/org/kreed/vanilla/CompatHoneycomb.java +++ b/src/org/kreed/vanilla/CompatHoneycomb.java @@ -87,11 +87,12 @@ public class CompatHoneycomb { } /** - * Call {@link ListView#setFastScrollAlwaysVisible(boolean)} on the given ListView. + * Call {@link ListView#setFastScrollAlwaysVisible(boolean)} on the given + * ListView with value true. */ - public static void setFastScrollAlwaysVisible(ListView view, boolean visible) + public static void setFastScrollAlwaysVisible(ListView view) { - view.setFastScrollAlwaysVisible(visible); + view.setFastScrollAlwaysVisible(true); } /** diff --git a/src/org/kreed/vanilla/LibraryActivity.java b/src/org/kreed/vanilla/LibraryActivity.java index a598fce4..cc63ef28 100644 --- a/src/org/kreed/vanilla/LibraryActivity.java +++ b/src/org/kreed/vanilla/LibraryActivity.java @@ -27,6 +27,7 @@ import android.content.ContentResolver; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.ApplicationInfo; import android.content.res.Resources; import android.database.Cursor; import android.graphics.Bitmap; @@ -147,6 +148,10 @@ public class LibraryActivity * The adapter for the currently visible list. */ private LibraryAdapter mCurrentAdapter; + /** + * If true, return target GINGERBREAD from getApplicationInfo(). + */ + boolean mFakeTarget; @Override public void onCreate(Bundle state) @@ -1013,4 +1018,14 @@ public class LibraryActivity CompatHoneycomb.selectTab(this, mViewPager.getCurrentItem()); } } + + @Override + public ApplicationInfo getApplicationInfo() + { + ApplicationInfo info = super.getApplicationInfo(); + if (mFakeTarget) { + info.targetSdkVersion = Build.VERSION_CODES.GINGERBREAD; + } + return info; + } } diff --git a/src/org/kreed/vanilla/LibraryPagerAdapter.java b/src/org/kreed/vanilla/LibraryPagerAdapter.java index 903c92ec..e6ed9fe0 100644 --- a/src/org/kreed/vanilla/LibraryPagerAdapter.java +++ b/src/org/kreed/vanilla/LibraryPagerAdapter.java @@ -25,6 +25,7 @@ package org.kreed.vanilla; import android.content.Intent; import android.content.SharedPreferences; import android.database.ContentObserver; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -214,11 +215,10 @@ public class LibraryPagerAdapter header.setTag(position + 1); view.addHeaderView(header); } - view.setAdapter(adapter); if (position != 5) loadSortOrder((MediaAdapter)adapter); - + enableFastScroll(view); adapter.setFilter(mFilter); mAdapters[position] = adapter; @@ -598,7 +598,7 @@ public class LibraryPagerAdapter // are updated. ListView view = mLists[mCurrentPage]; view.setFastScrollEnabled(false); - view.setFastScrollEnabled(true); + enableFastScroll(view); Handler handler = mWorkerHandler; handler.sendMessage(handler.obtainMessage(MSG_SAVE_SORT, adapter)); @@ -671,4 +671,21 @@ public class LibraryPagerAdapter Intent intent = id == -1 ? createHeaderIntent(view) : mCurrentAdapter.createData(view); mActivity.onItemClicked(intent); } + + /** + * Enables FastScroller on the given list, ensuring it is always visible + * and suppresses the match drag position feature in newer versions of + * Android. + * + * @param list The list to enable. + */ + private void enableFastScroll(ListView list) + { + mActivity.mFakeTarget = true; + list.setFastScrollEnabled(true); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + CompatHoneycomb.setFastScrollAlwaysVisible(list); + } + mActivity.mFakeTarget = false; + } }