From b847279578be51e4938df276b1319a0d42628612 Mon Sep 17 00:00:00 2001 From: Toby Hsieh Date: Mon, 16 Apr 2018 04:42:44 -0700 Subject: [PATCH] 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 --- .../ch/blinkenlights/android/vanilla/DraggableRow.java | 10 ++++++++++ .../blinkenlights/android/vanilla/PlaylistAdapter.java | 7 +++++-- .../android/vanilla/ShowQueueAdapter.java | 3 +-- .../java/ch/blinkenlights/android/vanilla/Song.java | 10 +++++++++- app/src/main/res/layout/draggable_row.xml | 8 ++++++++ 5 files changed, 33 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/DraggableRow.java b/app/src/main/java/ch/blinkenlights/android/vanilla/DraggableRow.java index e5597e3a..3e65ba9f 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/DraggableRow.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/DraggableRow.java @@ -38,6 +38,7 @@ public class DraggableRow extends LinearLayout implements Checkable { private boolean mLayoutSet; private TextView mTextView; + private TextView mDurationView; private CheckedTextView mCheckBox; private View mPmark; private ImageView mDragger; @@ -61,6 +62,7 @@ public class DraggableRow extends LinearLayout implements Checkable { public void onFinishInflate() { mCheckBox = (CheckedTextView)this.findViewById(R.id.checkbox); mTextView = (TextView)this.findViewById(R.id.text); + mDurationView = findViewById(R.id.duration); mPmark = (View)this.findViewById(R.id.pmark); mDragger = (ImageView)this.findViewById(R.id.dragger); mCoverView = (LazyCoverView)this.findViewById(R.id.cover); @@ -82,6 +84,7 @@ public class DraggableRow extends LinearLayout implements Checkable { case LAYOUT_DRAGGABLE: highlightRow(false); // make this visible mCoverView.setVisibility(View.VISIBLE); + mDurationView.setVisibility(View.VISIBLE); showDragger(true); break; case LAYOUT_LISTVIEW: @@ -159,6 +162,13 @@ public class DraggableRow extends LinearLayout implements Checkable { return mTextView; } + /** + * @return a TextView intended to display duration + */ + public TextView getDurationView() { + return mDurationView; + } + /** * Returns an instance of our coverview */ diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/PlaylistAdapter.java b/app/src/main/java/ch/blinkenlights/android/vanilla/PlaylistAdapter.java index 52f519a8..d9e0cbfb 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/PlaylistAdapter.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/PlaylistAdapter.java @@ -25,13 +25,12 @@ package ch.blinkenlights.android.vanilla; import ch.blinkenlights.android.medialibrary.MediaLibrary; -import android.content.ContentValues; import android.content.Context; import android.database.Cursor; -import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.os.Message; +import android.text.format.DateUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -50,6 +49,7 @@ public class PlaylistAdapter extends CursorAdapter implements Handler.Callback { MediaLibrary.PlaylistSongColumns.SONG_ID, MediaLibrary.SongColumns.ALBUM_ID, MediaLibrary.PlaylistSongColumns.POSITION, + MediaLibrary.SongColumns.DURATION, }; private final Context mContext; @@ -114,6 +114,9 @@ public class PlaylistAdapter extends CursorAdapter implements Handler.Callback { textView.setText(cursor.getString(1)); textView.setTag(cursor.getLong(3)); + String duration = DateUtils.formatElapsedTime(cursor.getLong(6) / 1000); + dview.getDurationView().setText(duration); + LazyCoverView cover = dview.getCoverView(); cover.setCover(MediaUtils.TYPE_ALBUM, cursor.getLong(4), null); } diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/ShowQueueAdapter.java b/app/src/main/java/ch/blinkenlights/android/vanilla/ShowQueueAdapter.java index b696f244..099a29d9 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/ShowQueueAdapter.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/ShowQueueAdapter.java @@ -23,13 +23,11 @@ import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.view.LayoutInflater; -import android.widget.TextView; import android.graphics.Color; import android.text.SpannableStringBuilder; import android.text.style.ForegroundColorSpan; import android.text.Spannable; -import android.text.SpannableStringBuilder; 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); row.getTextView().setText(sb); row.getCoverView().setCover(MediaUtils.TYPE_ALBUM, song.albumId, null); + row.getDurationView().setText(song.getFormattedDuration()); } row.highlightRow(position == mHighlightRow); diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/Song.java b/app/src/main/java/ch/blinkenlights/android/vanilla/Song.java index 855db080..e4d48c1a 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/Song.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/Song.java @@ -27,7 +27,8 @@ import ch.blinkenlights.android.medialibrary.MediaLibrary; import android.content.Context; import android.database.Cursor; import android.graphics.Bitmap; -import android.provider.MediaStore; +import android.text.format.DateUtils; + /** * Represents a Song backed by the MediaStore. Includes basic metadata and * utilities to retrieve songs from the MediaStore. @@ -203,6 +204,13 @@ public class Song implements Comparable { 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. * diff --git a/app/src/main/res/layout/draggable_row.xml b/app/src/main/res/layout/draggable_row.xml index 3c775e77..4bcfbf6c 100644 --- a/app/src/main/res/layout/draggable_row.xml +++ b/app/src/main/res/layout/draggable_row.xml @@ -45,6 +45,14 @@ along with this program. If not, see . android:layout_height="@dimen/row_normal_height" android:layout_marginLeft="@dimen/text_padding" android:layout_weight="1" /> +