Show song durations in queue (by adding a TextView) (#761)

* Show song durations in queue (by adding a TextView)

This partially addresses https://github.com/vanilla-music/vanilla/issues/647

* Make duration TextView gone by default

* Show song durations in playlist
This commit is contained in:
Toby Hsieh 2018-04-16 04:42:44 -07:00 committed by Adrian Ulrich
parent d2990af08f
commit b847279578
5 changed files with 33 additions and 5 deletions

View File

@ -38,6 +38,7 @@ public class DraggableRow extends LinearLayout implements Checkable {
private boolean mLayoutSet; private boolean mLayoutSet;
private TextView mTextView; private TextView mTextView;
private TextView mDurationView;
private CheckedTextView mCheckBox; private CheckedTextView mCheckBox;
private View mPmark; private View mPmark;
private ImageView mDragger; private ImageView mDragger;
@ -61,6 +62,7 @@ public class DraggableRow extends LinearLayout implements Checkable {
public void onFinishInflate() { public void onFinishInflate() {
mCheckBox = (CheckedTextView)this.findViewById(R.id.checkbox); mCheckBox = (CheckedTextView)this.findViewById(R.id.checkbox);
mTextView = (TextView)this.findViewById(R.id.text); mTextView = (TextView)this.findViewById(R.id.text);
mDurationView = findViewById(R.id.duration);
mPmark = (View)this.findViewById(R.id.pmark); mPmark = (View)this.findViewById(R.id.pmark);
mDragger = (ImageView)this.findViewById(R.id.dragger); mDragger = (ImageView)this.findViewById(R.id.dragger);
mCoverView = (LazyCoverView)this.findViewById(R.id.cover); mCoverView = (LazyCoverView)this.findViewById(R.id.cover);
@ -82,6 +84,7 @@ public class DraggableRow extends LinearLayout implements Checkable {
case LAYOUT_DRAGGABLE: case LAYOUT_DRAGGABLE:
highlightRow(false); // make this visible highlightRow(false); // make this visible
mCoverView.setVisibility(View.VISIBLE); mCoverView.setVisibility(View.VISIBLE);
mDurationView.setVisibility(View.VISIBLE);
showDragger(true); showDragger(true);
break; break;
case LAYOUT_LISTVIEW: case LAYOUT_LISTVIEW:
@ -159,6 +162,13 @@ public class DraggableRow extends LinearLayout implements Checkable {
return mTextView; return mTextView;
} }
/**
* @return a TextView intended to display duration
*/
public TextView getDurationView() {
return mDurationView;
}
/** /**
* Returns an instance of our coverview * Returns an instance of our coverview
*/ */

View File

@ -25,13 +25,12 @@ package ch.blinkenlights.android.vanilla;
import ch.blinkenlights.android.medialibrary.MediaLibrary; import ch.blinkenlights.android.medialibrary.MediaLibrary;
import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.os.Message; import android.os.Message;
import android.text.format.DateUtils;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -50,6 +49,7 @@ public class PlaylistAdapter extends CursorAdapter implements Handler.Callback {
MediaLibrary.PlaylistSongColumns.SONG_ID, MediaLibrary.PlaylistSongColumns.SONG_ID,
MediaLibrary.SongColumns.ALBUM_ID, MediaLibrary.SongColumns.ALBUM_ID,
MediaLibrary.PlaylistSongColumns.POSITION, MediaLibrary.PlaylistSongColumns.POSITION,
MediaLibrary.SongColumns.DURATION,
}; };
private final Context mContext; private final Context mContext;
@ -114,6 +114,9 @@ public class PlaylistAdapter extends CursorAdapter implements Handler.Callback {
textView.setText(cursor.getString(1)); textView.setText(cursor.getString(1));
textView.setTag(cursor.getLong(3)); textView.setTag(cursor.getLong(3));
String duration = DateUtils.formatElapsedTime(cursor.getLong(6) / 1000);
dview.getDurationView().setText(duration);
LazyCoverView cover = dview.getCoverView(); LazyCoverView cover = dview.getCoverView();
cover.setCover(MediaUtils.TYPE_ALBUM, cursor.getLong(4), null); cover.setCover(MediaUtils.TYPE_ALBUM, cursor.getLong(4), null);
} }

View File

@ -23,13 +23,11 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.BaseAdapter; import android.widget.BaseAdapter;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.widget.TextView;
import android.graphics.Color; import android.graphics.Color;
import android.text.SpannableStringBuilder; import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan; import android.text.style.ForegroundColorSpan;
import android.text.Spannable; import android.text.Spannable;
import android.text.SpannableStringBuilder;
public class ShowQueueAdapter extends BaseAdapter { public class ShowQueueAdapter extends BaseAdapter {
/** /**
@ -144,6 +142,7 @@ public class ShowQueueAdapter extends BaseAdapter {
sb.setSpan(new ForegroundColorSpan(Color.GRAY), song.title.length() + 1, sb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); sb.setSpan(new ForegroundColorSpan(Color.GRAY), song.title.length() + 1, sb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
row.getTextView().setText(sb); row.getTextView().setText(sb);
row.getCoverView().setCover(MediaUtils.TYPE_ALBUM, song.albumId, null); row.getCoverView().setCover(MediaUtils.TYPE_ALBUM, song.albumId, null);
row.getDurationView().setText(song.getFormattedDuration());
} }
row.highlightRow(position == mHighlightRow); row.highlightRow(position == mHighlightRow);

View File

@ -27,7 +27,8 @@ import ch.blinkenlights.android.medialibrary.MediaLibrary;
import android.content.Context; import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.provider.MediaStore; import android.text.format.DateUtils;
/** /**
* Represents a Song backed by the MediaStore. Includes basic metadata and * Represents a Song backed by the MediaStore. Includes basic metadata and
* utilities to retrieve songs from the MediaStore. * utilities to retrieve songs from the MediaStore.
@ -203,6 +204,13 @@ public class Song implements Comparable<Song> {
return song.id; return song.id;
} }
/**
* @return duration of this song in the form "MM:SS" or "H:MM:SS"
*/
public String getFormattedDuration() {
return DateUtils.formatElapsedTime(duration / 1000);
}
/** /**
* Query the large album art for this song. * Query the large album art for this song.
* *

View File

@ -45,6 +45,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
android:layout_height="@dimen/row_normal_height" android:layout_height="@dimen/row_normal_height"
android:layout_marginLeft="@dimen/text_padding" android:layout_marginLeft="@dimen/text_padding"
android:layout_weight="1" /> android:layout_weight="1" />
<TextView
android:id="@+id/duration"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/text_padding"
android:visibility="gone"
android:textColor="?android:textColorPrimary"
android:gravity="center_vertical" />
<CheckedTextView <CheckedTextView
android:id="@+id/checkbox" android:id="@+id/checkbox"
android:visibility="gone" android:visibility="gone"