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