diff --git a/res/layout/library_row_expandable.xml b/res/layout/library_row_expandable.xml deleted file mode 100644 index 3a7862fe..00000000 --- a/res/layout/library_row_expandable.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - diff --git a/res/layout/listview.xml b/res/layout/listview.xml index 77aa3f59..91d7c6be 100644 --- a/res/layout/listview.xml +++ b/res/layout/listview.xml @@ -24,6 +24,5 @@ THE SOFTWARE. xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:divider="@drawable/inset_divider" - android:dividerHeight="1dip" + android:divider="@null" android:fastScrollEnabled="true"/> diff --git a/src/ch/blinkenlights/android/vanilla/DraggableRow.java b/src/ch/blinkenlights/android/vanilla/DraggableRow.java index bf8f3b52..065a5714 100644 --- a/src/ch/blinkenlights/android/vanilla/DraggableRow.java +++ b/src/ch/blinkenlights/android/vanilla/DraggableRow.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014 Adrian Ulrich + * Copyright (C) 2014-2016 Adrian Ulrich * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,6 +19,7 @@ package ch.blinkenlights.android.vanilla; import android.content.Context; import android.util.AttributeSet; +import android.util.TypedValue; import android.view.View; import android.widget.LinearLayout; import android.widget.ImageView; @@ -45,9 +46,10 @@ public class DraggableRow extends LinearLayout implements Checkable { /** * Layout types for use with setupLayout */ - public static final int LAYOUT_CHECKBOXES = 1; - public static final int LAYOUT_DRAGGABLE = 2; - public static final int LAYOUT_LISTVIEW = 3; + public static final int LAYOUT_TEXTONLY = 0; + public static final int LAYOUT_CHECKBOXES = 1; + public static final int LAYOUT_DRAGGABLE = 2; + public static final int LAYOUT_LISTVIEW = 3; public DraggableRow(Context context, AttributeSet attrs) { @@ -85,6 +87,7 @@ public class DraggableRow extends LinearLayout implements Checkable { mCoverView.setVisibility(View.VISIBLE); mDragger.setImageResource(R.drawable.arrow); break; + case LAYOUT_TEXTONLY: default: break; // do not care } @@ -139,6 +142,14 @@ public class DraggableRow extends LinearLayout implements Checkable { mDragger.setVisibility( state ? View.VISIBLE : View.INVISIBLE ); } + public void setDraggerOnClickListener(View.OnClickListener listener) { + TypedValue v = new TypedValue(); + getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, v, true); + + mDragger.setBackgroundResource(v.resourceId); + mDragger.setOnClickListener(listener); + } + /** * Returns an instance of our textview */ diff --git a/src/ch/blinkenlights/android/vanilla/LibraryPagerAdapter.java b/src/ch/blinkenlights/android/vanilla/LibraryPagerAdapter.java index 2ffbb8ba..f73bfee4 100644 --- a/src/ch/blinkenlights/android/vanilla/LibraryPagerAdapter.java +++ b/src/ch/blinkenlights/android/vanilla/LibraryPagerAdapter.java @@ -165,9 +165,9 @@ public class LibraryPagerAdapter * song limiters. */ private String mHeaderText; - private LinearLayout mArtistHeader; - private LinearLayout mAlbumHeader; - private LinearLayout mSongHeader; + private DraggableRow mArtistHeader; + private DraggableRow mAlbumHeader; + private DraggableRow mSongHeader; /** * The current filter text, or null if none. */ @@ -311,24 +311,24 @@ public class LibraryPagerAdapter LibraryActivity activity = mActivity; LayoutInflater inflater = activity.getLayoutInflater(); LibraryAdapter adapter; - LinearLayout header = null; + DraggableRow header = null; switch (type) { case MediaUtils.TYPE_ARTIST: adapter = mArtistAdapter = new MediaAdapter(activity, MediaUtils.TYPE_ARTIST, mPendingArtistLimiter, activity); mArtistAdapter.setExpandable(mSongsPosition != -1 || mAlbumsPosition != -1); - mArtistHeader = header = (LinearLayout)inflater.inflate(R.layout.library_row_expandable, null); + mArtistHeader = header = (DraggableRow)inflater.inflate(R.layout.draggable_row, null); break; case MediaUtils.TYPE_ALBUM: adapter = mAlbumAdapter = new MediaAdapter(activity, MediaUtils.TYPE_ALBUM, mPendingAlbumLimiter, activity); mAlbumAdapter.setExpandable(mSongsPosition != -1); mPendingAlbumLimiter = null; - mAlbumHeader = header = (LinearLayout)inflater.inflate(R.layout.library_row_expandable, null); + mAlbumHeader = header = (DraggableRow)inflater.inflate(R.layout.draggable_row, null); break; case MediaUtils.TYPE_SONG: adapter = mSongAdapter = new MediaAdapter(activity, MediaUtils.TYPE_SONG, mPendingSongLimiter, activity); mPendingSongLimiter = null; - mSongHeader = header = (LinearLayout)inflater.inflate(R.layout.library_row_expandable, null); + mSongHeader = header = (DraggableRow)inflater.inflate(R.layout.draggable_row, null); break; case MediaUtils.TYPE_PLAYLIST: adapter = mPlaylistAdapter = new MediaAdapter(activity, MediaUtils.TYPE_PLAYLIST, null, activity); @@ -351,8 +351,7 @@ public class LibraryPagerAdapter view.setTag(type); if (header != null) { - TextView headerText = (TextView)header.findViewById(R.id.text); - headerText.setText(mHeaderText); + header.getTextView().setText(mHeaderText); header.setTag(new ViewHolder()); // behave like a normal library row view.addHeaderView(header); } @@ -455,11 +454,11 @@ public class LibraryPagerAdapter public void setHeaderText(String text) { if (mArtistHeader != null) - ((TextView)mArtistHeader.findViewById(R.id.text)).setText(text); + mArtistHeader.getTextView().setText(text); if (mAlbumHeader != null) - ((TextView)mAlbumHeader.findViewById(R.id.text)).setText(text); + mAlbumHeader.getTextView().setText(text); if (mSongHeader != null) - ((TextView)mSongHeader.findViewById(R.id.text)).setText(text); + mSongHeader.getTextView().setText(text); mHeaderText = text; } diff --git a/src/ch/blinkenlights/android/vanilla/MediaAdapter.java b/src/ch/blinkenlights/android/vanilla/MediaAdapter.java index 04cbbd18..ad02d06c 100644 --- a/src/ch/blinkenlights/android/vanilla/MediaAdapter.java +++ b/src/ch/blinkenlights/android/vanilla/MediaAdapter.java @@ -508,29 +508,25 @@ public class MediaAdapter } @Override - public View getView(int position, View view, ViewGroup parent) + public View getView(int position, View convertView, ViewGroup parent) { + DraggableRow row; ViewHolder holder; - if (view == null) { + if (convertView == null) { // We must create a new view if we're not given a recycle view or // if the recycle view has the wrong layout. + row = (DraggableRow)mInflater.inflate(R.layout.draggable_row, null); + row.setupLayout(DraggableRow.LAYOUT_LISTVIEW); - view = mInflater.inflate(R.layout.library_row_expandable, null); holder = new ViewHolder(); - view.setTag(holder); + row.setTag(holder); - holder.text = (TextView)view.findViewById(R.id.text); - holder.divider = (View)view.findViewById(R.id.divider); - holder.arrow = (ImageView)view.findViewById(R.id.arrow); - holder.cover = (LazyCoverView)view.findViewById(R.id.cover); - holder.arrow.setOnClickListener(this); - - holder.divider.setVisibility(mExpandable ? View.VISIBLE : View.GONE); - holder.arrow.setVisibility(mExpandable ? View.VISIBLE : View.GONE); - holder.cover.setVisibility(mCoverCacheType != MediaUtils.TYPE_INVALID ? View.VISIBLE : View.GONE); + row.setDraggerOnClickListener(this); + row.showDragger(mExpandable); } else { - holder = (ViewHolder)view.getTag(); + row = (DraggableRow)convertView; + holder = (ViewHolder)row.getTag(); } Cursor cursor = mCursor; @@ -547,18 +543,18 @@ public class MediaAdapter sb.append('\n'); sb.append(line2); sb.setSpan(new ForegroundColorSpan(Color.GRAY), line1.length() + 1, sb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - holder.text.setText(sb); + row.getTextView().setText(sb); holder.title = line1; } else { String title = cursor.getString(2); if(title == null) { title = DB_NULLSTRING_FALLBACK; } - holder.text.setText(title); + row.getTextView().setText(title); holder.title = title; } - holder.cover.setCover(mCoverCacheType, cacheId, holder.title); + row.getCoverView().setCover(mCoverCacheType, cacheId, holder.title); - return view; + return row; } /** @@ -640,7 +636,7 @@ public class MediaAdapter public void onClick(View view) { int id = view.getId(); - view = (View)view.getParent(); // get view of linear layout, not the click consumer + view = (View)view.getParent().getParent(); // get view of linear layout, not the click consumer Intent intent = createData(view); mActivity.onItemExpanded(intent); } diff --git a/src/ch/blinkenlights/android/vanilla/ViewHolder.java b/src/ch/blinkenlights/android/vanilla/ViewHolder.java index 3dea5ff7..953f7de9 100644 --- a/src/ch/blinkenlights/android/vanilla/ViewHolder.java +++ b/src/ch/blinkenlights/android/vanilla/ViewHolder.java @@ -25,8 +25,4 @@ import android.widget.ImageView; public class ViewHolder { public long id; public String title; - public TextView text; - public View divider; - public ImageView arrow; - public LazyCoverView cover; }