diff --git a/app/src/main/java/com/futo/platformplayer/api/media/models/video/SerializedPlatformVideo.kt b/app/src/main/java/com/futo/platformplayer/api/media/models/video/SerializedPlatformVideo.kt
index 7388dfa8..6ecbbb1c 100644
--- a/app/src/main/java/com/futo/platformplayer/api/media/models/video/SerializedPlatformVideo.kt
+++ b/app/src/main/java/com/futo/platformplayer/api/media/models/video/SerializedPlatformVideo.kt
@@ -35,6 +35,8 @@ open class SerializedPlatformVideo(
override var playbackTime: Long = -1;
@kotlinx.serialization.Serializable(with = OffsetDateTimeNullableSerializer::class)
override var playbackDate: OffsetDateTime? = null;
+ @kotlinx.serialization.Serializable(with = OffsetDateTimeNullableSerializer::class)
+ var addedToPlaylistDateTime: OffsetDateTime? = OffsetDateTime.now();
override fun toJson() : String {
return Json.encodeToString(this);
diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PlaylistFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PlaylistFragment.kt
index 1e90e36e..7e548fb4 100644
--- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PlaylistFragment.kt
+++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PlaylistFragment.kt
@@ -145,6 +145,79 @@ class PlaylistFragment : MainFragment() {
);
};
+ setOnSort {
+ val playlist = _playlist ?: return@setOnSort;
+
+ UISlideOverlays.showOverlay(overlayContainer, "Sort " + context.getString(R.string.playlist) + " [${playlist.name}] by:", null, {},
+ SlideUpMenuItem(
+ context,
+ R.drawable.ic_sort,
+ "Name (Ascending)",
+ "",
+ tag = 1,
+ call = {
+ playlist.videos.sortBy { it.name }
+ StatePlaylists.instance.createOrUpdatePlaylist(playlist);
+ onShown(playlist)
+ }),
+ SlideUpMenuItem(
+ context,
+ R.drawable.ic_sort,
+ "Name (Descending)",
+ "",
+ tag = 2,
+ call = {
+ playlist.videos.sortByDescending { it.name }
+ StatePlaylists.instance.createOrUpdatePlaylist(playlist);
+ onShown(playlist)
+ }),
+ SlideUpMenuItem(
+ context,
+ R.drawable.ic_sort,
+ "Added Date (Oldest)",
+ "",
+ tag = 3,
+ call = {
+ playlist.videos.sortBy { it.addedToPlaylistDateTime }
+ StatePlaylists.instance.createOrUpdatePlaylist(playlist);
+ onShown(playlist)
+ }),
+ SlideUpMenuItem(
+ context,
+ R.drawable.ic_sort,
+ "Added Date (Newest)",
+ "",
+ tag = 4,
+ call = {
+ playlist.videos.sortByDescending { it.addedToPlaylistDateTime }
+ StatePlaylists.instance.createOrUpdatePlaylist(playlist);
+ onShown(playlist)
+ }),
+ SlideUpMenuItem(
+ context,
+ R.drawable.ic_sort,
+ "Release Date (Oldest)",
+ "",
+ tag = 5,
+ call = {
+ playlist.videos.sortBy { it.datetime }
+ StatePlaylists.instance.createOrUpdatePlaylist(playlist);
+ onShown(playlist)
+ }),
+ SlideUpMenuItem(
+ context,
+ R.drawable.ic_sort,
+ "Release Date (Newest)",
+ "",
+ tag = 6,
+ call = {
+ playlist.videos.sortByDescending { it.datetime }
+ StatePlaylists.instance.createOrUpdatePlaylist(playlist);
+ onShown(playlist)
+ })
+ );
+ };
+
_taskLoadPlaylist = TaskHandler(
StateApp.instance.scopeGetter,
{
diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoListEditorView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoListEditorView.kt
index 10deee40..03874515 100644
--- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoListEditorView.kt
+++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoListEditorView.kt
@@ -41,11 +41,13 @@ abstract class VideoListEditorView : LinearLayout {
protected var _buttonExport: ImageButton;
private var _buttonShare: ImageButton;
private var _buttonEdit: ImageButton;
+ private var _buttonSort: ImageButton;
private var _buttonSearch: ImageButton;
private var _search: SearchView;
private var _onShare: (()->Unit)? = null;
+ private var _onSort: (()->Unit)? = null;
private var _loadedVideos: List? = null;
private var _loadedVideosCanEdit: Boolean = false;
@@ -107,6 +109,14 @@ abstract class VideoListEditorView : LinearLayout {
buttonShuffle.setOnClickListener { hideSearchKeyboard();onShuffleClick(); hideSearchKeyboard(); };
_buttonEdit.setOnClickListener { hideSearchKeyboard(); onEditClick(); };
+ _buttonSort = findViewById(R.id.button_sort);
+ val onSort = _onSort;
+ if(onSort != null) {
+ _buttonSort.setOnClickListener { hideSearchKeyboard(); onSort.invoke() };
+ _buttonSort.visibility = View.VISIBLE;
+ }
+ else
+ _buttonSort.visibility = View.GONE;
setButtonExportVisible(false);
setButtonDownloadVisible(canEdit());
@@ -127,6 +137,15 @@ abstract class VideoListEditorView : LinearLayout {
_buttonShare.visibility = View.VISIBLE;
}
+ fun setOnSort(onSort: (()-> Unit)? = null) {
+ _onSort = onSort;
+ _buttonSort.setOnClickListener {
+ hideSearchKeyboard();
+ onSort?.invoke();
+ };
+ _buttonSort.visibility = View.VISIBLE;
+ }
+
open fun canEdit(): Boolean { return false; }
open fun onPlayAllClick() { }
open fun onShuffleClick() { }
diff --git a/app/src/main/java/com/futo/platformplayer/states/StatePlaylists.kt b/app/src/main/java/com/futo/platformplayer/states/StatePlaylists.kt
index cbe1c518..dd724a9b 100644
--- a/app/src/main/java/com/futo/platformplayer/states/StatePlaylists.kt
+++ b/app/src/main/java/com/futo/platformplayer/states/StatePlaylists.kt
@@ -315,8 +315,10 @@ class StatePlaylists {
if(!Settings.instance.other.playlistAllowDups && playlist.videos.any { it.url == video.url })
return false;
+ val serializedVideo = SerializedPlatformVideo.fromVideo(video);
+ serializedVideo.addedToPlaylistDateTime = OffsetDateTime.now();
- playlist.videos.add(SerializedPlatformVideo.fromVideo(video));
+ playlist.videos.add(serializedVideo);
playlist.dateUpdate = OffsetDateTime.now();
playlistStore.saveAsync(playlist, true);
diff --git a/app/src/main/res/drawable/ic_sort.xml b/app/src/main/res/drawable/ic_sort.xml
new file mode 100644
index 00000000..c67efda7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_sort.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/fragment_video_list_editor.xml b/app/src/main/res/layout/fragment_video_list_editor.xml
index f86b69e4..81c2f921 100644
--- a/app/src/main/res/layout/fragment_video_list_editor.xml
+++ b/app/src/main/res/layout/fragment_video_list_editor.xml
@@ -53,6 +53,23 @@
android:scaleType="fitXY" />
+
+
Settings
Group image
Edit
+ Sort
Download
Close
Pause