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