135 lines
5.3 KiB
Kotlin
135 lines
5.3 KiB
Kotlin
/*
|
|
* Copyright (c) 2019 Hemanth Savarala.
|
|
*
|
|
* Licensed under the GNU General Public License v3
|
|
*
|
|
* This is free software: you can redistribute it and/or modify it under
|
|
* the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation either version 3 of the License, or (at your option) any later version.
|
|
*
|
|
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
* See the GNU General Public License for more details.
|
|
*/
|
|
|
|
package code.name.monkey.retromusic.helper.menu
|
|
|
|
import android.content.Intent
|
|
import android.view.MenuItem
|
|
import android.view.View
|
|
import android.widget.PopupMenu
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.fragment.app.FragmentActivity
|
|
import code.name.monkey.retromusic.R
|
|
import code.name.monkey.retromusic.activities.tageditor.AbsTagEditorActivity
|
|
import code.name.monkey.retromusic.activities.tageditor.SongTagEditorActivity
|
|
import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog
|
|
import code.name.monkey.retromusic.dialogs.DeleteSongsDialog
|
|
import code.name.monkey.retromusic.dialogs.SongDetailDialog
|
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
|
import code.name.monkey.retromusic.interfaces.PaletteColorHolder
|
|
import code.name.monkey.retromusic.model.Song
|
|
import code.name.monkey.retromusic.room.playlist.PlaylistDatabaseModel
|
|
import code.name.monkey.retromusic.util.MusicUtil
|
|
import code.name.monkey.retromusic.util.NavigationUtil
|
|
import code.name.monkey.retromusic.util.RingtoneManager
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.GlobalScope
|
|
import kotlinx.coroutines.async
|
|
import kotlinx.coroutines.launch
|
|
|
|
object SongMenuHelper {
|
|
val MENU_RES = R.menu.menu_item_song
|
|
|
|
fun handleMenuClick(activity: FragmentActivity, song: Song, menuItemId: Int): Boolean {
|
|
when (menuItemId) {
|
|
R.id.action_set_as_ringtone -> {
|
|
if (RingtoneManager.requiresDialog(activity)) {
|
|
RingtoneManager.getDialog(activity)
|
|
} else {
|
|
val ringtoneManager = RingtoneManager(activity)
|
|
ringtoneManager.setRingtone(song)
|
|
}
|
|
return true
|
|
}
|
|
R.id.action_share -> {
|
|
activity.startActivity(
|
|
Intent.createChooser(
|
|
MusicUtil.createShareSongFileIntent(song, activity),
|
|
null
|
|
)
|
|
)
|
|
return true
|
|
}
|
|
R.id.action_delete_from_device -> {
|
|
DeleteSongsDialog.create(song).show(activity.supportFragmentManager, "DELETE_SONGS")
|
|
return true
|
|
}
|
|
R.id.action_add_to_playlist -> {
|
|
/* AddToPlaylistDialog.create(song)
|
|
.show(activity.supportFragmentManager, "ADD_PLAYLIST")*/
|
|
|
|
GlobalScope.launch(Dispatchers.IO) {
|
|
val names = async { PlaylistDatabaseModel().getPlaylistNames() }.await()
|
|
println(names.toString())
|
|
AddToPlaylistDialog.create(arrayListOf(song), names)
|
|
.show(activity.supportFragmentManager, "ADD_PLAYLIST")
|
|
}
|
|
return true
|
|
}
|
|
R.id.action_play_next -> {
|
|
MusicPlayerRemote.playNext(song)
|
|
return true
|
|
}
|
|
R.id.action_add_to_current_playing -> {
|
|
MusicPlayerRemote.enqueue(song)
|
|
return true
|
|
}
|
|
R.id.action_tag_editor -> {
|
|
val tagEditorIntent = Intent(activity, SongTagEditorActivity::class.java)
|
|
tagEditorIntent.putExtra(AbsTagEditorActivity.EXTRA_ID, song.id)
|
|
if (activity is PaletteColorHolder)
|
|
tagEditorIntent.putExtra(
|
|
AbsTagEditorActivity.EXTRA_PALETTE,
|
|
(activity as PaletteColorHolder).paletteColor
|
|
)
|
|
activity.startActivity(tagEditorIntent)
|
|
return true
|
|
}
|
|
R.id.action_details -> {
|
|
SongDetailDialog.create(song).show(activity.supportFragmentManager, "SONG_DETAILS")
|
|
return true
|
|
}
|
|
R.id.action_go_to_album -> {
|
|
NavigationUtil.goToAlbum(activity, song.albumId)
|
|
return true
|
|
}
|
|
R.id.action_go_to_artist -> {
|
|
NavigationUtil.goToArtist(activity, song.artistId)
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
abstract class OnClickSongMenu protected constructor(private val activity: AppCompatActivity) :
|
|
View.OnClickListener, PopupMenu.OnMenuItemClickListener {
|
|
|
|
open val menuRes: Int
|
|
get() = MENU_RES
|
|
|
|
abstract val song: Song
|
|
|
|
override fun onClick(v: View) {
|
|
val popupMenu = PopupMenu(activity, v)
|
|
popupMenu.inflate(menuRes)
|
|
popupMenu.setOnMenuItemClickListener(this)
|
|
popupMenu.show()
|
|
}
|
|
|
|
override fun onMenuItemClick(item: MenuItem): Boolean {
|
|
return handleMenuClick(activity, song, item.itemId)
|
|
}
|
|
}
|
|
}
|