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