package org.fossify.musicplayer.fragments import android.content.Context import android.content.Intent import android.util.AttributeSet import com.google.gson.Gson import org.fossify.commons.activities.BaseSimpleActivity import org.fossify.commons.extensions.* import org.fossify.commons.helpers.ensureBackgroundThread import org.fossify.musicplayer.R import org.fossify.musicplayer.activities.SimpleActivity import org.fossify.musicplayer.activities.TracksActivity import org.fossify.musicplayer.adapters.PlaylistsAdapter import org.fossify.musicplayer.databinding.FragmentPlaylistsBinding import org.fossify.musicplayer.dialogs.ChangeSortingDialog import org.fossify.musicplayer.dialogs.NewPlaylistDialog import org.fossify.musicplayer.extensions.audioHelper import org.fossify.musicplayer.extensions.config import org.fossify.musicplayer.extensions.mediaScanner import org.fossify.musicplayer.extensions.viewBinding import org.fossify.musicplayer.helpers.PLAYLIST import org.fossify.musicplayer.helpers.TAB_PLAYLISTS import org.fossify.musicplayer.models.Events import org.fossify.musicplayer.models.Playlist import org.fossify.musicplayer.models.sortSafely import org.greenrobot.eventbus.EventBus class PlaylistsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) { private var playlists = ArrayList() private val binding by viewBinding(FragmentPlaylistsBinding::bind) override fun setupFragment(activity: BaseSimpleActivity) { binding.playlistsPlaceholder2.underlineText() binding.playlistsPlaceholder2.setOnClickListener { NewPlaylistDialog(activity) { EventBus.getDefault().post(Events.PlaylistsUpdated()) } } ensureBackgroundThread { val playlists = context.audioHelper.getAllPlaylists() playlists.forEach { it.trackCount = context.audioHelper.getPlaylistTrackCount(it.id) } playlists.sortSafely(context.config.playlistSorting) this.playlists = playlists activity.runOnUiThread { val scanning = activity.mediaScanner.isScanning() binding.playlistsPlaceholder.text = if (scanning) { context.getString(R.string.loading_files) } else { context.getString(org.fossify.commons.R.string.no_items_found) } binding.playlistsPlaceholder.beVisibleIf(playlists.isEmpty()) binding.playlistsPlaceholder2.beVisibleIf(playlists.isEmpty() && !scanning) val adapter = binding.playlistsList.adapter if (adapter == null) { PlaylistsAdapter(activity, playlists, binding.playlistsList) { activity.hideKeyboard() Intent(activity, TracksActivity::class.java).apply { putExtra(PLAYLIST, Gson().toJson(it)) activity.startActivity(this) } }.apply { binding.playlistsList.adapter = this } if (context.areSystemAnimationsEnabled) { binding.playlistsList.scheduleLayoutAnimation() } } else { (adapter as PlaylistsAdapter).updateItems(playlists) } } } } override fun finishActMode() { getAdapter()?.finishActMode() } override fun onSearchQueryChanged(text: String) { val normalizedText = text.normalizeString() val filtered = playlists.filter { it.title.normalizeString().contains(normalizedText, true) }.toMutableList() as ArrayList getAdapter()?.updateItems(filtered, text) binding.playlistsPlaceholder.beVisibleIf(filtered.isEmpty()) binding.playlistsPlaceholder2.beVisibleIf(filtered.isEmpty()) } override fun onSearchClosed() { getAdapter()?.updateItems(playlists) binding.playlistsPlaceholder.beGoneIf(playlists.isNotEmpty()) binding.playlistsPlaceholder2.beGoneIf(playlists.isNotEmpty()) } override fun onSortOpen(activity: SimpleActivity) { ChangeSortingDialog(activity, TAB_PLAYLISTS) { val adapter = getAdapter() ?: return@ChangeSortingDialog playlists.sortSafely(activity.config.playlistSorting) adapter.updateItems(playlists, forceUpdate = true) } } override fun setupColors(textColor: Int, adjustedPrimaryColor: Int) { binding.playlistsPlaceholder.setTextColor(textColor) binding.playlistsPlaceholder2.setTextColor(adjustedPrimaryColor) binding.playlistsFastscroller.updateColors(adjustedPrimaryColor) getAdapter()?.updateColors(textColor) } private fun getAdapter() = binding.playlistsList.adapter as? PlaylistsAdapter }