Merge branch 'dev' of https://github.com/h4h13/RetroMusicPlayer into dev
Conflicts: app/build.gradle app/src/main/java/io/github/muntashirakon/music/activities/MainActivity.kt app/src/main/java/io/github/muntashirakon/music/activities/base/AbsSlidingMusicPanelActivity.kt app/src/main/java/io/github/muntashirakon/music/adapter/album/AlbumAdapter.kt app/src/main/java/io/github/muntashirakon/music/adapter/base/MediaEntryViewHolder.java app/src/main/java/io/github/muntashirakon/music/adapter/song/ShuffleButtonSongAdapter.kt app/src/main/java/io/github/muntashirakon/music/fragments/CoroutineViewModel.kt app/src/main/java/io/github/muntashirakon/music/fragments/DetailListFragment.kt app/src/main/java/io/github/muntashirakon/music/fragments/albums/AlbumDetailsFragment.kt app/src/main/java/io/github/muntashirakon/music/fragments/albums/AlbumsFragment.kt app/src/main/java/io/github/muntashirakon/music/fragments/artists/ArtistDetailsFragment.kt app/src/main/java/io/github/muntashirakon/music/fragments/genres/GenreDetailsFragment.kt app/src/main/java/io/github/muntashirakon/music/fragments/genres/GenresFragment.kt app/src/main/java/io/github/muntashirakon/music/fragments/player/full/FullPlaybackControlsFragment.kt app/src/main/java/io/github/muntashirakon/music/fragments/playlists/PlaylistDetailsFragment.kt app/src/main/java/io/github/muntashirakon/music/fragments/playlists/PlaylistsFragment.kt app/src/main/java/io/github/muntashirakon/music/fragments/search/SearchFragment.kt app/src/main/java/io/github/muntashirakon/music/fragments/songs/SongsFragment.kt app/src/main/res/layout/item_grid_circle.xml app/src/main/res/layout/item_list_quick_actions.xml appthemehelper/build.gradle
This commit is contained in:
commit
86f2f788e9
58 changed files with 1156 additions and 496 deletions
3
.github/ISSUE_TEMPLATE/bug_report.md
vendored
3
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
@ -16,6 +16,9 @@ assignees: ''
|
|||
**Have you read the [FAQ](https://www.github.com/h4h13/RetroMusicPlayer/tree/dev/FAQ.md)?**
|
||||
[Yes/No]
|
||||
|
||||
**Has the bug already been reported? Please search in GitHub issue tab before creating an issue.**
|
||||
[Yes/No]
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ apply plugin: "androidx.navigation.safeargs.kotlin"
|
|||
|
||||
android {
|
||||
compileSdkVersion 29
|
||||
buildToolsVersion = '30.0.2'
|
||||
buildToolsVersion = '30.0.3'
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 21
|
||||
|
@ -69,14 +69,14 @@ dependencies {
|
|||
implementation "androidx.cardview:cardview:1.0.0"
|
||||
implementation 'androidx.appcompat:appcompat:1.2.0'
|
||||
implementation 'androidx.annotation:annotation:1.1.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
|
||||
implementation 'androidx.recyclerview:recyclerview:1.1.0'
|
||||
implementation 'androidx.preference:preference-ktx:1.1.1'
|
||||
implementation 'androidx.core:core-ktx:1.3.1'
|
||||
implementation 'androidx.core:core-ktx:1.3.2'
|
||||
implementation 'androidx.fragment:fragment-ktx:1.2.5'
|
||||
implementation 'androidx.palette:palette-ktx:1.0.0'
|
||||
|
||||
def nav_version = "2.3.0"
|
||||
def nav_version = "2.3.2"
|
||||
implementation "androidx.navigation:navigation-runtime-ktx:$nav_version"
|
||||
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
|
||||
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
|
||||
|
@ -91,7 +91,7 @@ dependencies {
|
|||
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
|
||||
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
|
||||
|
||||
implementation 'com.google.android.material:material:1.3.0-alpha01'
|
||||
implementation 'com.google.android.material:material:1.3.0-alpha04'
|
||||
|
||||
def retrofit_version = '2.9.0'
|
||||
implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
|
||||
|
|
|
@ -50,6 +50,7 @@ import io.github.muntashirakon.music.TOGGLE_SEPARATE_LINE
|
|||
import io.github.muntashirakon.music.TOGGLE_VOLUME
|
||||
import io.github.muntashirakon.music.USER_NAME
|
||||
import io.github.muntashirakon.music.activities.base.AbsSlidingMusicPanelActivity
|
||||
import io.github.muntashirakon.music.extensions.extra
|
||||
import io.github.muntashirakon.music.extensions.findNavController
|
||||
import io.github.muntashirakon.music.helper.MusicPlayerRemote
|
||||
import io.github.muntashirakon.music.helper.SearchQueryHelper.getSongs
|
||||
|
@ -57,6 +58,7 @@ import io.github.muntashirakon.music.model.CategoryInfo
|
|||
import io.github.muntashirakon.music.model.Song
|
||||
import io.github.muntashirakon.music.repository.PlaylistSongsLoader
|
||||
import io.github.muntashirakon.music.service.MusicService
|
||||
import io.github.muntashirakon.music.util.AppRater
|
||||
import io.github.muntashirakon.music.util.PreferenceUtil
|
||||
import kotlinx.coroutines.Dispatchers.IO
|
||||
import kotlinx.coroutines.launch
|
||||
|
@ -66,7 +68,6 @@ class MainActivity : AbsSlidingMusicPanelActivity(), OnSharedPreferenceChangeLis
|
|||
companion object {
|
||||
const val TAG = "MainActivity"
|
||||
const val EXPAND_PANEL = "expand_panel"
|
||||
const val APP_UPDATE_REQUEST_CODE = 9002
|
||||
}
|
||||
|
||||
override fun createContentView(): View {
|
||||
|
@ -83,17 +84,10 @@ class MainActivity : AbsSlidingMusicPanelActivity(), OnSharedPreferenceChangeLis
|
|||
hideStatusBar()
|
||||
updateTabs()
|
||||
|
||||
// NavigationUI.setupWithNavController(getBottomNavigationView(), findNavController(R.id.fragment_container))
|
||||
setupNavigationController()
|
||||
if (!hasPermissions()) {
|
||||
findNavController(R.id.fragment_container).navigate(R.id.permissionFragment)
|
||||
}
|
||||
|
||||
showPromotionalDialog()
|
||||
}
|
||||
|
||||
private fun showPromotionalDialog() {
|
||||
|
||||
}
|
||||
|
||||
private fun setupNavigationController() {
|
||||
|
@ -115,27 +109,27 @@ class MainActivity : AbsSlidingMusicPanelActivity(), OnSharedPreferenceChangeLis
|
|||
override fun onResume() {
|
||||
super.onResume()
|
||||
PreferenceUtil.registerOnSharedPreferenceChangedListener(this)
|
||||
if (intent.hasExtra(EXPAND_PANEL) &&
|
||||
intent.getBooleanExtra(EXPAND_PANEL, false) &&
|
||||
PreferenceUtil.isExpandPanel
|
||||
) {
|
||||
val expand = extra<Boolean>(EXPAND_PANEL).value ?: false
|
||||
if (expand && PreferenceUtil.isExpandPanel) {
|
||||
expandPanel()
|
||||
intent.removeExtra(EXPAND_PANEL)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
PreferenceUtil.unregisterOnSharedPreferenceChangedListener(this)
|
||||
}
|
||||
|
||||
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
|
||||
if (key == GENERAL_THEME || key == BLACK_THEME || key == ADAPTIVE_COLOR_APP || key == USER_NAME || key == TOGGLE_FULL_SCREEN || key == TOGGLE_VOLUME || key == ROUND_CORNERS || key == CAROUSEL_EFFECT || key == NOW_PLAYING_SCREEN_ID || key == TOGGLE_GENRE || key == BANNER_IMAGE_PATH || key == PROFILE_IMAGE_PATH || key == CIRCULAR_ALBUM_ART || key == KEEP_SCREEN_ON || key == TOGGLE_SEPARATE_LINE || key == TOGGLE_HOME_BANNER || key == TOGGLE_ADD_CONTROLS || key == ALBUM_COVER_STYLE || key == HOME_ARTIST_GRID_STYLE || key == ALBUM_COVER_TRANSFORM || key == DESATURATED_COLOR || key == EXTRA_SONG_INFO || key == TAB_TEXT_MODE || key == LANGUAGE_NAME || key == LIBRARY_CATEGORIES
|
||||
) {
|
||||
if (key == GENERAL_THEME || key == BLACK_THEME || key == ADAPTIVE_COLOR_APP || key == USER_NAME || key == TOGGLE_FULL_SCREEN || key == TOGGLE_VOLUME || key == ROUND_CORNERS || key == CAROUSEL_EFFECT || key == NOW_PLAYING_SCREEN_ID || key == TOGGLE_GENRE || key == BANNER_IMAGE_PATH || key == PROFILE_IMAGE_PATH || key == CIRCULAR_ALBUM_ART || key == KEEP_SCREEN_ON || key == TOGGLE_SEPARATE_LINE || key == TOGGLE_HOME_BANNER || key == TOGGLE_ADD_CONTROLS || key == ALBUM_COVER_STYLE || key == HOME_ARTIST_GRID_STYLE || key == ALBUM_COVER_TRANSFORM || key == DESATURATED_COLOR || key == EXTRA_SONG_INFO || key == TAB_TEXT_MODE || key == LANGUAGE_NAME || key == LIBRARY_CATEGORIES) {
|
||||
postRecreate()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onServiceConnected() {
|
||||
super.onServiceConnected()
|
||||
if (intent == null) {
|
||||
return
|
||||
}
|
||||
intent ?: return
|
||||
handlePlaybackIntent(intent)
|
||||
}
|
||||
|
||||
|
|
|
@ -56,7 +56,6 @@ import io.github.muntashirakon.music.helper.MusicPlayerRemote
|
|||
import io.github.muntashirakon.music.model.CategoryInfo
|
||||
import io.github.muntashirakon.music.util.PreferenceUtil
|
||||
import io.github.muntashirakon.music.views.BottomNavigationBarTinted
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior.*
|
||||
import kotlinx.android.synthetic.main.sliding_music_panel_layout.*
|
||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||
|
@ -97,6 +96,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
|||
onPanelCollapsed()
|
||||
dimBackground.hide()
|
||||
}
|
||||
|
||||
else -> {
|
||||
println("Do something")
|
||||
}
|
||||
|
@ -114,11 +114,11 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
|||
setupBottomSheet()
|
||||
updateColor()
|
||||
|
||||
val themeColor = ATHUtil.resolveColor(this, android.R.attr.windowBackground, Color.GRAY)
|
||||
val themeColor = resolveColor(android.R.attr.windowBackground, Color.GRAY)
|
||||
dimBackground.setBackgroundColor(ColorUtil.withAlpha(themeColor, 0.5f))
|
||||
dimBackground.setOnClickListener {
|
||||
println("dimBackground")
|
||||
|
||||
collapsePanel()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -132,7 +132,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
|||
if (nowPlayingScreen != PreferenceUtil.nowPlayingScreen) {
|
||||
postRecreate()
|
||||
}
|
||||
if (bottomSheetBehavior.state == BottomSheetBehavior.STATE_EXPANDED) {
|
||||
if (bottomSheetBehavior.state == STATE_EXPANDED) {
|
||||
setMiniPlayerAlphaProgress(1f)
|
||||
}
|
||||
}
|
||||
|
@ -154,6 +154,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
|||
|
||||
fun collapsePanel() {
|
||||
bottomSheetBehavior.state = STATE_COLLAPSED
|
||||
setMiniPlayerAlphaProgress(0f)
|
||||
}
|
||||
|
||||
fun expandPanel() {
|
||||
|
@ -324,14 +325,14 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
|||
})
|
||||
}
|
||||
|
||||
fun setBottomBarVisibility(visible: Int) {
|
||||
bottomNavigationView.visibility = visible
|
||||
fun setBottomBarVisibility(visible: Boolean) {
|
||||
bottomNavigationView.isVisible = visible
|
||||
hideBottomBar(MusicPlayerRemote.playingQueue.isEmpty())
|
||||
}
|
||||
|
||||
private fun hideBottomBar(hide: Boolean) {
|
||||
val heightOfBar = dip(R.dimen.mini_player_height)
|
||||
val heightOfBarWithTabs = dip(R.dimen.mini_player_height_expanded)
|
||||
val heightOfBarWithTabs = heightOfBar * 2
|
||||
val isVisible = bottomNavigationView.isVisible
|
||||
if (hide) {
|
||||
bottomSheetBehavior.isHideable = true
|
||||
|
@ -345,10 +346,10 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
|||
ViewCompat.setElevation(slidingPanel, 10f)
|
||||
ViewCompat.setElevation(bottomNavigationView, 10f)
|
||||
if (isVisible) {
|
||||
bottomSheetBehavior.peekHeight = heightOfBarWithTabs
|
||||
bottomNavigationView.translateYAnimate(0f)
|
||||
println("List")
|
||||
bottomSheetBehavior.peekHeight = heightOfBarWithTabs - 22
|
||||
} else {
|
||||
bottomNavigationView.translateYAnimate(150f)
|
||||
println("Details")
|
||||
bottomSheetBehavior.peekHeight = heightOfBar
|
||||
}
|
||||
}
|
||||
|
|
|
@ -98,7 +98,8 @@ public class WriteTagsAsyncTask extends DialogAsyncTask<LoadingInfo, Integer, Li
|
|||
Context context = getContext();
|
||||
if (context != null) {
|
||||
if (wroteArtwork) {
|
||||
MusicUtil.INSTANCE.insertAlbumArt(context, info.getArtworkInfo().getAlbumId(), albumArtFile.getPath());
|
||||
MusicUtil.INSTANCE.
|
||||
insertAlbumArt(context, info.getArtworkInfo().getAlbumId(), albumArtFile.getPath());
|
||||
} else if (deletedArtwork) {
|
||||
MusicUtil.INSTANCE.deleteAlbumArt(context, info.getArtworkInfo().getAlbumId());
|
||||
}
|
||||
|
|
|
@ -239,15 +239,17 @@ class HomeAdapter(
|
|||
val clickableArea: ViewGroup = itemView.findViewById(R.id.clickable_area)
|
||||
}
|
||||
|
||||
fun artistsAdapter(artists: List<Artist>) =
|
||||
private fun artistsAdapter(artists: List<Artist>) =
|
||||
ArtistAdapter(activity, artists, PreferenceUtil.homeArtistGridStyle, null, this)
|
||||
|
||||
fun albumAdapter(albums: List<Album>) =
|
||||
private fun albumAdapter(albums: List<Album>) =
|
||||
AlbumAdapter(activity, albums, PreferenceUtil.homeAlbumGridStyle, null, this)
|
||||
|
||||
fun gridLayoutManager() = GridLayoutManager(activity, 1, GridLayoutManager.HORIZONTAL, false)
|
||||
private fun gridLayoutManager() =
|
||||
GridLayoutManager(activity, 1, GridLayoutManager.HORIZONTAL, false)
|
||||
|
||||
fun linearLayoutManager() = LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false)
|
||||
private fun linearLayoutManager() =
|
||||
LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false)
|
||||
|
||||
override fun onArtist(artistId: Long, view: View) {
|
||||
activity.findNavController(R.id.fragment_container).navigate(
|
||||
|
|
|
@ -42,10 +42,10 @@ class SongFileAdapter(
|
|||
private val activity: AppCompatActivity,
|
||||
private var dataSet: List<File>,
|
||||
private val itemLayoutRes: Int,
|
||||
private val ICallbacks: ICallbacks?,
|
||||
ICabHolder: ICabHolder?
|
||||
private val iCallbacks: ICallbacks?,
|
||||
iCabHolder: ICabHolder?
|
||||
) : AbsMultiSelectAdapter<SongFileAdapter.ViewHolder, File>(
|
||||
activity, ICabHolder, R.menu.menu_media_selection
|
||||
activity, iCabHolder, R.menu.menu_media_selection
|
||||
), PopupTextProvider {
|
||||
|
||||
init {
|
||||
|
@ -135,8 +135,8 @@ class SongFileAdapter(
|
|||
}
|
||||
|
||||
override fun onMultipleItemAction(menuItem: MenuItem, selection: List<File>) {
|
||||
if (ICallbacks == null) return
|
||||
ICallbacks.onMultipleItemAction(menuItem, selection as ArrayList<File>)
|
||||
if (iCallbacks == null) return
|
||||
iCallbacks.onMultipleItemAction(menuItem, selection as ArrayList<File>)
|
||||
}
|
||||
|
||||
override fun getPopupText(position: Int): String {
|
||||
|
@ -150,11 +150,11 @@ class SongFileAdapter(
|
|||
inner class ViewHolder(itemView: View) : MediaEntryViewHolder(itemView) {
|
||||
|
||||
init {
|
||||
if (menu != null && ICallbacks != null) {
|
||||
if (menu != null && iCallbacks != null) {
|
||||
menu?.setOnClickListener { v ->
|
||||
val position = layoutPosition
|
||||
if (isPositionInRange(position)) {
|
||||
ICallbacks.onFileMenuClicked(dataSet[position], v)
|
||||
iCallbacks.onFileMenuClicked(dataSet[position], v)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -169,7 +169,7 @@ class SongFileAdapter(
|
|||
if (isInQuickSelectMode) {
|
||||
toggleChecked(position)
|
||||
} else {
|
||||
ICallbacks?.onFileSelected(dataSet[position])
|
||||
iCallbacks?.onFileSelected(dataSet[position])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,20 +15,17 @@
|
|||
package io.github.muntashirakon.music.adapter.album
|
||||
|
||||
import android.content.res.ColorStateList
|
||||
import android.content.res.Resources
|
||||
import android.view.LayoutInflater
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import com.bumptech.glide.Glide
|
||||
import io.github.muntashirakon.music.R
|
||||
import io.github.muntashirakon.music.adapter.base.AbsMultiSelectAdapter
|
||||
import io.github.muntashirakon.music.adapter.base.MediaEntryViewHolder
|
||||
import io.github.muntashirakon.music.glide.AlbumGlideRequest
|
||||
import io.github.muntashirakon.music.glide.RetroMusicColoredTarget
|
||||
import io.github.muntashirakon.music.helper.MusicPlayerRemote
|
||||
import io.github.muntashirakon.music.helper.SortOrder
|
||||
import io.github.muntashirakon.music.helper.menu.SongsMenuHelper
|
||||
import io.github.muntashirakon.music.interfaces.IAlbumClickListener
|
||||
|
@ -38,17 +35,18 @@ import io.github.muntashirakon.music.model.Song
|
|||
import io.github.muntashirakon.music.util.MusicUtil
|
||||
import io.github.muntashirakon.music.util.PreferenceUtil
|
||||
import io.github.muntashirakon.music.util.color.MediaNotificationProcessor
|
||||
import com.bumptech.glide.Glide
|
||||
import me.zhanghai.android.fastscroll.PopupTextProvider
|
||||
|
||||
open class AlbumAdapter(
|
||||
protected val activity: FragmentActivity,
|
||||
val activity: FragmentActivity,
|
||||
var dataSet: List<Album>,
|
||||
protected var itemLayoutRes: Int,
|
||||
ICabHolder: ICabHolder?,
|
||||
private val albumClickListener: IAlbumClickListener?
|
||||
var itemLayoutRes: Int,
|
||||
iCabHolder: ICabHolder?,
|
||||
val listener: IAlbumClickListener?
|
||||
) : AbsMultiSelectAdapter<AlbumAdapter.ViewHolder, Album>(
|
||||
activity,
|
||||
ICabHolder,
|
||||
iCabHolder,
|
||||
R.menu.menu_media_selection
|
||||
), PopupTextProvider {
|
||||
|
||||
|
@ -62,12 +60,7 @@ open class AlbumAdapter(
|
|||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||
val view =
|
||||
try {
|
||||
LayoutInflater.from(activity).inflate(itemLayoutRes, parent, false)
|
||||
} catch (e: Resources.NotFoundException) {
|
||||
LayoutInflater.from(activity).inflate(R.layout.item_grid, parent, false)
|
||||
}
|
||||
val view = LayoutInflater.from(activity).inflate(itemLayoutRes, parent, false)
|
||||
return createViewHolder(view, viewType)
|
||||
}
|
||||
|
||||
|
@ -99,7 +92,7 @@ open class AlbumAdapter(
|
|||
holder.paletteColorContainer?.setBackgroundColor(color.backgroundColor)
|
||||
}
|
||||
holder.mask?.backgroundTintList = ColorStateList.valueOf(color.primaryTextColor)
|
||||
}
|
||||
holder.imageContainerCard?.setCardBackgroundColor(color.backgroundColor) }
|
||||
|
||||
protected open fun loadAlbumCover(album: Album, holder: ViewHolder) {
|
||||
if (holder.image == null) {
|
||||
|
@ -177,8 +170,11 @@ open class AlbumAdapter(
|
|||
if (isInQuickSelectMode) {
|
||||
toggleChecked(layoutPosition)
|
||||
} else {
|
||||
ViewCompat.setTransitionName(itemView, "album")
|
||||
albumClickListener?.onAlbumClick(dataSet[layoutPosition].id, itemView)
|
||||
image?.let {
|
||||
ViewCompat.setTransitionName(it, "album")
|
||||
listener?.onAlbumClick(dataSet[layoutPosition].id, it)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ class ArtistAdapter(
|
|||
loadArtistImage(artist, holder)
|
||||
}
|
||||
|
||||
fun setColors(processor: MediaNotificationProcessor, holder: ViewHolder) {
|
||||
private fun setColors(processor: MediaNotificationProcessor, holder: ViewHolder) {
|
||||
holder.mask?.backgroundTintList = ColorStateList.valueOf(processor.primaryTextColor)
|
||||
if (holder.paletteColorContainer != null) {
|
||||
holder.paletteColorContainer?.setBackgroundColor(processor.backgroundColor)
|
||||
|
@ -155,8 +155,8 @@ class ArtistAdapter(
|
|||
toggleChecked(layoutPosition)
|
||||
} else {
|
||||
image?.let {
|
||||
ViewCompat.setTransitionName(itemView, "album")
|
||||
IArtistClickListener.onArtist(dataSet[layoutPosition].id, itemView)
|
||||
ViewCompat.setTransitionName(it, "artist")
|
||||
IArtistClickListener.onArtist(dataSet[layoutPosition].id, it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,103 +16,122 @@ package io.github.muntashirakon.music.adapter.base;
|
|||
|
||||
import android.graphics.Color;
|
||||
import android.view.View;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.AppCompatImageView;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import io.github.muntashirakon.music.R;
|
||||
|
||||
import com.google.android.material.card.MaterialCardView;
|
||||
import com.h6ah4i.android.widget.advrecyclerview.utils.AbstractDraggableSwipeableItemViewHolder;
|
||||
|
||||
public class MediaEntryViewHolder extends AbstractDraggableSwipeableItemViewHolder
|
||||
implements View.OnLongClickListener, View.OnClickListener {
|
||||
implements View.OnLongClickListener, View.OnClickListener {
|
||||
|
||||
@Nullable public View dragView;
|
||||
@Nullable
|
||||
public View dragView;
|
||||
|
||||
@Nullable public View dummyContainer;
|
||||
@Nullable
|
||||
public View dummyContainer;
|
||||
|
||||
@Nullable public ImageView image;
|
||||
@Nullable
|
||||
public ImageView image;
|
||||
|
||||
@Nullable public ImageView artistImage;
|
||||
@Nullable
|
||||
public ImageView artistImage;
|
||||
|
||||
@Nullable public ImageView playerImage;
|
||||
@Nullable
|
||||
public ImageView playerImage;
|
||||
|
||||
@Nullable public MaterialCardView imageContainerCard;
|
||||
@Nullable
|
||||
public MaterialCardView imageContainerCard;
|
||||
|
||||
@Nullable public TextView imageText;
|
||||
@Nullable
|
||||
public TextView imageText;
|
||||
|
||||
@Nullable public MaterialCardView imageTextContainer;
|
||||
@Nullable
|
||||
public MaterialCardView imageTextContainer;
|
||||
|
||||
@Nullable public View mask;
|
||||
@Nullable
|
||||
public View mask;
|
||||
|
||||
@Nullable public AppCompatImageView menu;
|
||||
@Nullable
|
||||
public AppCompatImageView menu;
|
||||
|
||||
@Nullable public View paletteColorContainer;
|
||||
@Nullable
|
||||
public View paletteColorContainer;
|
||||
|
||||
|
||||
@Nullable public RecyclerView recyclerView;
|
||||
@Nullable
|
||||
public RecyclerView recyclerView;
|
||||
|
||||
@Nullable public TextView text;
|
||||
@Nullable
|
||||
public TextView text;
|
||||
|
||||
@Nullable public TextView text2;
|
||||
@Nullable
|
||||
public TextView text2;
|
||||
|
||||
@Nullable public TextView time;
|
||||
@Nullable
|
||||
public TextView time;
|
||||
|
||||
@Nullable public TextView title;
|
||||
@Nullable
|
||||
public TextView title;
|
||||
|
||||
public MediaEntryViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
title = itemView.findViewById(R.id.title);
|
||||
text = itemView.findViewById(R.id.text);
|
||||
text2 = itemView.findViewById(R.id.text2);
|
||||
public MediaEntryViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
title = itemView.findViewById(R.id.title);
|
||||
text = itemView.findViewById(R.id.text);
|
||||
text2 = itemView.findViewById(R.id.text2);
|
||||
|
||||
image = itemView.findViewById(R.id.image);
|
||||
artistImage = itemView.findViewById(R.id.artistImage);
|
||||
playerImage = itemView.findViewById(R.id.player_image);
|
||||
time = itemView.findViewById(R.id.time);
|
||||
image = itemView.findViewById(R.id.image);
|
||||
artistImage = itemView.findViewById(R.id.artistImage);
|
||||
playerImage = itemView.findViewById(R.id.player_image);
|
||||
time = itemView.findViewById(R.id.time);
|
||||
|
||||
imageText = itemView.findViewById(R.id.imageText);
|
||||
imageTextContainer = itemView.findViewById(R.id.imageTextContainer);
|
||||
imageContainerCard = itemView.findViewById(R.id.imageContainerCard);
|
||||
imageText = itemView.findViewById(R.id.imageText);
|
||||
imageTextContainer = itemView.findViewById(R.id.imageTextContainer);
|
||||
imageContainerCard = itemView.findViewById(R.id.imageContainerCard);
|
||||
|
||||
menu = itemView.findViewById(R.id.menu);
|
||||
dragView = itemView.findViewById(R.id.drag_view);
|
||||
paletteColorContainer = itemView.findViewById(R.id.paletteColorContainer);
|
||||
recyclerView = itemView.findViewById(R.id.recycler_view);
|
||||
mask = itemView.findViewById(R.id.mask);
|
||||
dummyContainer = itemView.findViewById(R.id.dummy_view);
|
||||
menu = itemView.findViewById(R.id.menu);
|
||||
dragView = itemView.findViewById(R.id.drag_view);
|
||||
paletteColorContainer = itemView.findViewById(R.id.paletteColorContainer);
|
||||
recyclerView = itemView.findViewById(R.id.recycler_view);
|
||||
mask = itemView.findViewById(R.id.mask);
|
||||
dummyContainer = itemView.findViewById(R.id.dummy_view);
|
||||
|
||||
if (imageContainerCard != null) {
|
||||
imageContainerCard.setCardBackgroundColor(Color.TRANSPARENT);
|
||||
if (imageContainerCard != null) {
|
||||
imageContainerCard.setCardBackgroundColor(Color.TRANSPARENT);
|
||||
}
|
||||
itemView.setOnClickListener(this);
|
||||
itemView.setOnLongClickListener(this);
|
||||
}
|
||||
itemView.setOnClickListener(this);
|
||||
itemView.setOnLongClickListener(this);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View getSwipeableContainerView() {
|
||||
return null;
|
||||
}
|
||||
@Nullable
|
||||
@Override
|
||||
public View getSwipeableContainerView() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {}
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setImageTransitionName(@NonNull String transitionName) {
|
||||
itemView.setTransitionName(transitionName);
|
||||
public void setImageTransitionName(@NonNull String transitionName) {
|
||||
itemView.setTransitionName(transitionName);
|
||||
/* if (imageContainerCard != null) {
|
||||
imageContainerCard.setTransitionName(transitionName);
|
||||
}
|
||||
if (image != null) {
|
||||
image.setTransitionName(transitionName);
|
||||
}*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,13 +25,13 @@ import io.github.muntashirakon.music.dialogs.RemoveSongFromPlaylistDialog
|
|||
import io.github.muntashirakon.music.interfaces.ICabHolder
|
||||
import io.github.muntashirakon.music.model.Song
|
||||
|
||||
open class PlaylistSongAdapter(
|
||||
class PlaylistSongAdapter(
|
||||
private val playlist: PlaylistEntity,
|
||||
activity: FragmentActivity,
|
||||
dataSet: MutableList<Song>,
|
||||
itemLayoutRes: Int,
|
||||
ICabHolder: ICabHolder?
|
||||
) : SongAdapter(activity, dataSet, itemLayoutRes, ICabHolder) {
|
||||
iCabHolder: ICabHolder?
|
||||
) : SongAdapter(activity, dataSet, itemLayoutRes, iCabHolder) {
|
||||
|
||||
init {
|
||||
this.setMultiSelectMenuRes(R.menu.menu_cannot_delete_single_songs_playlist_songs_selection)
|
||||
|
|
|
@ -15,15 +15,18 @@
|
|||
package io.github.muntashirakon.music.adapter.song
|
||||
|
||||
import android.view.View
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import code.name.monkey.appthemehelper.ThemeStore
|
||||
import io.github.muntashirakon.music.R
|
||||
import io.github.muntashirakon.music.extensions.applyColor
|
||||
import io.github.muntashirakon.music.extensions.applyOutlineColor
|
||||
import io.github.muntashirakon.music.helper.MusicPlayerRemote
|
||||
import io.github.muntashirakon.music.interfaces.ICabHolder
|
||||
import io.github.muntashirakon.music.model.Song
|
||||
import com.google.android.material.button.MaterialButton
|
||||
|
||||
class ShuffleButtonSongAdapter(
|
||||
activity: AppCompatActivity,
|
||||
activity: FragmentActivity,
|
||||
dataSet: MutableList<Song>,
|
||||
itemLayoutRes: Int,
|
||||
ICabHolder: ICabHolder?
|
||||
|
@ -35,16 +38,19 @@ class ShuffleButtonSongAdapter(
|
|||
|
||||
override fun onBindViewHolder(holder: SongAdapter.ViewHolder, position: Int) {
|
||||
if (holder.itemViewType == OFFSET_ITEM) {
|
||||
val color = ThemeStore.accentColor(activity)
|
||||
val viewHolder = holder as ViewHolder
|
||||
viewHolder.playAction?.let {
|
||||
it.setOnClickListener {
|
||||
MusicPlayerRemote.openQueue(dataSet, 0, true)
|
||||
}
|
||||
it.applyOutlineColor(color)
|
||||
}
|
||||
viewHolder.shuffleAction?.let {
|
||||
it.setOnClickListener {
|
||||
MusicPlayerRemote.openAndShuffleQueue(dataSet, true)
|
||||
}
|
||||
it.applyColor(color)
|
||||
}
|
||||
} else {
|
||||
super.onBindViewHolder(holder, position - 1)
|
||||
|
|
|
@ -19,7 +19,7 @@ import androidx.room.RoomDatabase
|
|||
|
||||
@Database(
|
||||
entities = [PlaylistEntity::class, SongEntity::class, HistoryEntity::class, PlayCountEntity::class, BlackListStoreEntity::class, LyricsEntity::class],
|
||||
version = 22,
|
||||
version = 23,
|
||||
exportSchema = false
|
||||
)
|
||||
abstract class RetroDatabase : RoomDatabase() {
|
||||
|
|
|
@ -16,6 +16,7 @@ package io.github.muntashirakon.music.dialogs
|
|||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.core.text.HtmlCompat
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import io.github.muntashirakon.music.EXTRA_SONG
|
||||
|
@ -40,11 +41,11 @@ class DeleteSongsDialog : DialogFragment() {
|
|||
}
|
||||
|
||||
fun create(songs: List<Song>): DeleteSongsDialog {
|
||||
val dialog = DeleteSongsDialog()
|
||||
val args = Bundle()
|
||||
args.putParcelableArrayList(EXTRA_SONG, ArrayList(songs))
|
||||
dialog.arguments = args
|
||||
return dialog
|
||||
return DeleteSongsDialog().apply {
|
||||
arguments = bundleOf(
|
||||
EXTRA_SONG to ArrayList(songs)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -164,7 +164,6 @@ class SleepTimerDialog : DialogFragment() {
|
|||
) {
|
||||
|
||||
override fun onTick(millisUntilFinished: Long) {
|
||||
println("onTick: $millisUntilFinished")
|
||||
seekBar.progress = millisUntilFinished.toInt()
|
||||
}
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ import android.util.Log
|
|||
import android.view.LayoutInflater
|
||||
import android.widget.TextView
|
||||
import androidx.annotation.NonNull
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.core.text.HtmlCompat
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import io.github.muntashirakon.music.EXTRA_SONG
|
||||
|
@ -155,11 +156,11 @@ class SongDetailDialog : DialogFragment() {
|
|||
val TAG: String = SongDetailDialog::class.java.simpleName
|
||||
|
||||
fun create(song: Song): SongDetailDialog {
|
||||
val dialog = SongDetailDialog()
|
||||
val args = Bundle()
|
||||
args.putParcelable(EXTRA_SONG, song)
|
||||
dialog.arguments = args
|
||||
return dialog
|
||||
return SongDetailDialog().apply {
|
||||
arguments = bundleOf(
|
||||
EXTRA_SONG to song
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun makeTextWithTitle(context: Context, titleResId: Int, text: String?): Spanned {
|
||||
|
|
|
@ -17,6 +17,7 @@ package io.github.muntashirakon.music.dialogs
|
|||
import android.app.Dialog
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import io.github.muntashirakon.music.EXTRA_SONG
|
||||
import io.github.muntashirakon.music.R
|
||||
|
@ -93,11 +94,11 @@ class SongShareDialog : DialogFragment() {
|
|||
companion object {
|
||||
|
||||
fun create(song: Song): SongShareDialog {
|
||||
val dialog = SongShareDialog()
|
||||
val args = Bundle()
|
||||
args.putParcelable(EXTRA_SONG, song)
|
||||
dialog.arguments = args
|
||||
return dialog
|
||||
return SongShareDialog().apply {
|
||||
arguments = bundleOf(
|
||||
EXTRA_SONG to song
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper
|
|||
import com.google.android.material.button.MaterialButton
|
||||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
import com.google.android.material.progressindicator.ProgressIndicator
|
||||
import com.google.android.material.progressindicator.CircularProgressIndicator
|
||||
import com.google.android.material.textfield.TextInputEditText
|
||||
import com.google.android.material.textfield.TextInputLayout
|
||||
import io.github.muntashirakon.music.App
|
||||
|
@ -95,13 +95,7 @@ fun SeekBar.addAccentColor() {
|
|||
thumbTintList = colorState
|
||||
}
|
||||
|
||||
fun Button.accentTextColor() {
|
||||
setTextColor(ThemeStore.accentColor(App.getContext()))
|
||||
}
|
||||
|
||||
fun MaterialButton.accentTextColor() {
|
||||
setTextColor(ThemeStore.accentColor(App.getContext()))
|
||||
}
|
||||
fun Button.accentTextColor() = setTextColor(ThemeStore.accentColor(App.getContext()))
|
||||
|
||||
fun MaterialButton.accentBackgroundColor() {
|
||||
backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(App.getContext()))
|
||||
|
@ -154,9 +148,7 @@ fun MaterialButton.applyColor(color: Int) {
|
|||
iconTint = textColorColorStateList
|
||||
}
|
||||
|
||||
fun MaterialButton.accentColor(){
|
||||
this.applyColor(ThemeStore.accentColor(context))
|
||||
}
|
||||
fun MaterialButton.accentColor() = applyColor(ThemeStore.accentColor(context))
|
||||
|
||||
fun MaterialButton.applyOutlineColor(color: Int) {
|
||||
val textColorColorStateList = ColorStateList.valueOf(color)
|
||||
|
@ -172,23 +164,18 @@ fun TextInputLayout.accentColor() {
|
|||
isHintAnimationEnabled = true
|
||||
}
|
||||
|
||||
fun ProgressIndicator.accentColor() {
|
||||
val accentColor = ThemeStore.accentColor(context)
|
||||
indicatorColors = intArrayOf(accentColor)
|
||||
trackColor = ColorUtil.withAlpha(accentColor, 0.2f)
|
||||
}
|
||||
|
||||
fun ProgressIndicator.applyColor(color: Int) {
|
||||
indicatorColors = intArrayOf(color)
|
||||
fun CircularProgressIndicator.accentColor() {
|
||||
val color = ThemeStore.accentColor(context)
|
||||
setIndicatorColor(color)
|
||||
trackColor = ColorUtil.withAlpha(color, 0.2f)
|
||||
}
|
||||
|
||||
fun TextInputEditText.accentColor() {
|
||||
fun CircularProgressIndicator.applyColor(color: Int) {
|
||||
setIndicatorColor(color)
|
||||
trackColor = ColorUtil.withAlpha(color, 0.2f)
|
||||
}
|
||||
|
||||
fun AppCompatImageView.accentColor(): Int {
|
||||
return ThemeStore.accentColor(context)
|
||||
}
|
||||
fun AppCompatImageView.accentColor(): Int = ThemeStore.accentColor(context)
|
||||
|
||||
@CheckResult
|
||||
fun Drawable.tint(@ColorInt color: Int): Drawable {
|
||||
|
@ -198,9 +185,8 @@ fun Drawable.tint(@ColorInt color: Int): Drawable {
|
|||
}
|
||||
|
||||
@CheckResult
|
||||
fun Drawable.tint(context: Context, @ColorRes color: Int): Drawable {
|
||||
return tint(context.getColorCompat(color))
|
||||
}
|
||||
fun Drawable.tint(context: Context, @ColorRes color: Int): Drawable =
|
||||
tint(context.getColorCompat(color))
|
||||
|
||||
@ColorInt
|
||||
fun Context.getColorCompat(@ColorRes colorRes: Int): Int {
|
||||
|
|
|
@ -49,14 +49,3 @@ fun Drawable.getBitmapDrawable(): Bitmap {
|
|||
draw(canvas)
|
||||
return bmp
|
||||
}
|
||||
|
||||
fun getAdaptiveIconDrawable(context: Context): Drawable {
|
||||
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
AdaptiveIconDrawable(
|
||||
ContextCompat.getDrawable(context, R.drawable.ic_launcher_background),
|
||||
ContextCompat.getDrawable(context, R.drawable.ic_launcher_background)
|
||||
)
|
||||
} else {
|
||||
ContextCompat.getDrawable(context, R.drawable.color_circle_gradient)!!
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,8 @@ import androidx.core.animation.doOnStart
|
|||
import code.name.monkey.appthemehelper.ThemeStore
|
||||
import code.name.monkey.appthemehelper.util.TintHelper
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||
import com.google.android.material.imageview.ShapeableImageView
|
||||
import com.google.android.material.shape.ShapeAppearanceModel
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun <T : View> ViewGroup.inflate(@LayoutRes layout: Int): T {
|
||||
|
@ -113,3 +115,10 @@ fun View.focusAndShowKeyboard() {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
fun ShapeableImageView.setCircleShape(boolean: Boolean) {
|
||||
addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ ->
|
||||
val radius = width / 2f
|
||||
shapeAppearanceModel = ShapeAppearanceModel().withCornerSize(radius)
|
||||
}
|
||||
}
|
|
@ -1,37 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2020 Hemanth Savarla.
|
||||
*
|
||||
* 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 io.github.muntashirakon.music.fragments
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
import kotlinx.coroutines.*
|
||||
|
||||
open class CoroutineViewModel(
|
||||
private val mainDispatcher: CoroutineDispatcher
|
||||
) : ViewModel() {
|
||||
private val job = Job()
|
||||
protected val scope = CoroutineScope(job + mainDispatcher)
|
||||
|
||||
protected fun launch(
|
||||
context: CoroutineContext = mainDispatcher,
|
||||
start: CoroutineStart = CoroutineStart.DEFAULT,
|
||||
block: suspend CoroutineScope.() -> Unit
|
||||
) = scope.launch(context, start, block)
|
||||
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
job.cancel()
|
||||
}
|
||||
}
|
|
@ -26,15 +26,16 @@ import androidx.recyclerview.widget.RecyclerView.AdapterDataObserver
|
|||
import io.github.muntashirakon.music.*
|
||||
import io.github.muntashirakon.music.adapter.album.AlbumAdapter
|
||||
import io.github.muntashirakon.music.adapter.artist.ArtistAdapter
|
||||
import io.github.muntashirakon.music.adapter.song.ShuffleButtonSongAdapter
|
||||
import io.github.muntashirakon.music.adapter.song.SongAdapter
|
||||
import io.github.muntashirakon.music.db.toSong
|
||||
import io.github.muntashirakon.music.extensions.dipToPix
|
||||
import io.github.muntashirakon.music.extensions.hide
|
||||
import io.github.muntashirakon.music.fragments.base.AbsMainActivityFragment
|
||||
import io.github.muntashirakon.music.interfaces.IAlbumClickListener
|
||||
import io.github.muntashirakon.music.interfaces.IArtistClickListener
|
||||
import io.github.muntashirakon.music.model.Album
|
||||
import io.github.muntashirakon.music.model.Artist
|
||||
import io.github.muntashirakon.music.state.NowPlayingPanelState
|
||||
import io.github.muntashirakon.music.util.RetroUtil
|
||||
import kotlinx.android.synthetic.main.fragment_playlist_detail.*
|
||||
|
||||
|
@ -44,22 +45,14 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de
|
|||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
mainActivity.setBottomBarVisibility(View.GONE)
|
||||
mainActivity.setBottomBarVisibility(false)
|
||||
mainActivity.setSupportActionBar(toolbar)
|
||||
progressIndicator.hide()
|
||||
when (args.type) {
|
||||
TOP_ARTISTS -> {
|
||||
loadArtists(R.string.top_artists, TOP_ARTISTS)
|
||||
}
|
||||
RECENT_ARTISTS -> {
|
||||
loadArtists(R.string.recent_artists, RECENT_ARTISTS)
|
||||
}
|
||||
TOP_ALBUMS -> {
|
||||
loadAlbums(R.string.top_albums, TOP_ALBUMS)
|
||||
}
|
||||
RECENT_ALBUMS -> {
|
||||
loadAlbums(R.string.recent_albums, RECENT_ALBUMS)
|
||||
}
|
||||
TOP_ARTISTS -> loadArtists(R.string.top_artists, TOP_ARTISTS)
|
||||
RECENT_ARTISTS -> loadArtists(R.string.recent_artists, RECENT_ARTISTS)
|
||||
TOP_ALBUMS -> loadAlbums(R.string.top_albums, TOP_ALBUMS)
|
||||
RECENT_ALBUMS -> loadAlbums(R.string.recent_albums, RECENT_ALBUMS)
|
||||
FAVOURITES -> loadFavorite()
|
||||
HISTORY_PLAYLIST -> loadHistory()
|
||||
LAST_ADDED_PLAYLIST -> lastAddedSongs()
|
||||
|
@ -77,7 +70,7 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de
|
|||
|
||||
private fun lastAddedSongs() {
|
||||
toolbar.setTitle(R.string.last_added)
|
||||
val songAdapter = SongAdapter(
|
||||
val songAdapter = ShuffleButtonSongAdapter(
|
||||
requireActivity(),
|
||||
mutableListOf(),
|
||||
R.layout.item_list, null
|
||||
|
@ -93,7 +86,7 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de
|
|||
|
||||
private fun topPlayed() {
|
||||
toolbar.setTitle(R.string.my_top_tracks)
|
||||
val songAdapter = SongAdapter(
|
||||
val songAdapter = ShuffleButtonSongAdapter(
|
||||
requireActivity(),
|
||||
mutableListOf(),
|
||||
R.layout.item_list, null
|
||||
|
@ -110,7 +103,7 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de
|
|||
private fun loadHistory() {
|
||||
toolbar.setTitle(R.string.history)
|
||||
|
||||
val songAdapter = SongAdapter(
|
||||
val songAdapter = ShuffleButtonSongAdapter(
|
||||
requireActivity(),
|
||||
mutableListOf(),
|
||||
R.layout.item_list, null
|
||||
|
|
|
@ -122,10 +122,6 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum
|
|||
volumeSeekBar.applyColor(color)
|
||||
}
|
||||
|
||||
fun removeThumb() {
|
||||
volumeSeekBar.thumb = null
|
||||
}
|
||||
|
||||
private fun setPauseWhenZeroVolume(pauseWhenZeroVolume: Boolean) {
|
||||
if (PreferenceUtil.isPauseOnZeroVolume)
|
||||
if (MusicPlayerRemote.isPlaying && pauseWhenZeroVolume)
|
||||
|
|
|
@ -16,6 +16,7 @@ package io.github.muntashirakon.music.fragments.albums
|
|||
|
||||
import android.app.ActivityOptions
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.*
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
|
@ -31,7 +32,6 @@ import androidx.recyclerview.widget.DefaultItemAnimator
|
|||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import code.name.monkey.appthemehelper.common.ATHToolbarActivity.getToolbarBackgroundColor
|
||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
|
||||
import io.github.muntashirakon.music.EXTRA_ALBUM_ID
|
||||
import io.github.muntashirakon.music.EXTRA_ARTIST_ID
|
||||
|
@ -42,17 +42,17 @@ import io.github.muntashirakon.music.adapter.album.HorizontalAlbumAdapter
|
|||
import io.github.muntashirakon.music.adapter.song.SimpleSongAdapter
|
||||
import io.github.muntashirakon.music.dialogs.AddToPlaylistDialog
|
||||
import io.github.muntashirakon.music.dialogs.DeleteSongsDialog
|
||||
import io.github.muntashirakon.music.extensions.applyColor
|
||||
import io.github.muntashirakon.music.extensions.applyOutlineColor
|
||||
import io.github.muntashirakon.music.extensions.findActivityNavController
|
||||
import io.github.muntashirakon.music.extensions.show
|
||||
import io.github.muntashirakon.music.extensions.*
|
||||
import io.github.muntashirakon.music.fragments.base.AbsMainActivityFragment
|
||||
import io.github.muntashirakon.music.glide.AlbumGlideRequest
|
||||
import io.github.muntashirakon.music.glide.ArtistGlideRequest
|
||||
import io.github.muntashirakon.music.glide.RetroMusicColoredTarget
|
||||
import io.github.muntashirakon.music.glide.SingleColorTarget
|
||||
import io.github.muntashirakon.music.helper.MusicPlayerRemote
|
||||
import io.github.muntashirakon.music.helper.SortOrder
|
||||
import io.github.muntashirakon.music.helper.SortOrder.AlbumSongSortOrder.Companion.SONG_A_Z
|
||||
import io.github.muntashirakon.music.helper.SortOrder.AlbumSongSortOrder.Companion.SONG_DURATION
|
||||
import io.github.muntashirakon.music.helper.SortOrder.AlbumSongSortOrder.Companion.SONG_TRACK_LIST
|
||||
import io.github.muntashirakon.music.helper.SortOrder.AlbumSongSortOrder.Companion.SONG_Z_A
|
||||
import io.github.muntashirakon.music.interfaces.IAlbumClickListener
|
||||
import io.github.muntashirakon.music.model.Album
|
||||
import io.github.muntashirakon.music.model.Artist
|
||||
|
@ -64,7 +64,9 @@ import io.github.muntashirakon.music.util.PreferenceUtil
|
|||
import io.github.muntashirakon.music.util.RetroUtil
|
||||
import io.github.muntashirakon.music.util.color.MediaNotificationProcessor
|
||||
import com.bumptech.glide.Glide
|
||||
import com.google.android.material.transition.MaterialArcMotion
|
||||
import com.google.android.material.transition.MaterialContainerTransform
|
||||
import com.google.android.material.transition.MaterialElevationScale
|
||||
import kotlinx.android.synthetic.main.fragment_album_content.*
|
||||
import kotlinx.android.synthetic.main.fragment_album_details.*
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -89,25 +91,26 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
|
|||
private val savedSortOrder: String
|
||||
get() = PreferenceUtil.albumDetailSongSortOrder
|
||||
|
||||
private fun setUpTransitions() {
|
||||
val transform = MaterialContainerTransform()
|
||||
transform.setAllContainerColors(ATHUtil.resolveColor(requireContext(), R.attr.colorSurface))
|
||||
sharedElementEnterTransition = transform
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setUpTransitions()
|
||||
sharedElementEnterTransition = MaterialContainerTransform().apply {
|
||||
drawingViewId = R.id.fragment_container
|
||||
duration = 300L
|
||||
scrimColor = Color.TRANSPARENT
|
||||
setAllContainerColors(requireContext().resolveColor(R.attr.colorSurface))
|
||||
setPathMotion(MaterialArcMotion())
|
||||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
mainActivity.setBottomBarVisibility(View.GONE)
|
||||
mainActivity.setBottomBarVisibility(false)
|
||||
mainActivity.addMusicServiceEventListener(detailsViewModel)
|
||||
mainActivity.setSupportActionBar(toolbar)
|
||||
|
||||
toolbar.title = " "
|
||||
ViewCompat.setTransitionName(container, "album")
|
||||
ViewCompat.setTransitionName(albumCoverContainer, "album")
|
||||
postponeEnterTransition()
|
||||
detailsViewModel.getAlbum().observe(viewLifecycleOwner, Observer {
|
||||
startPostponedEnterTransition()
|
||||
|
@ -117,6 +120,12 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
|
|||
setupRecyclerView()
|
||||
artistImage.setOnClickListener { artistView ->
|
||||
ViewCompat.setTransitionName(artistView, "artist")
|
||||
exitTransition = MaterialElevationScale(false).apply {
|
||||
duration = 300L
|
||||
}
|
||||
reenterTransition = MaterialElevationScale(true).apply {
|
||||
duration = 300L
|
||||
}
|
||||
findActivityNavController(R.id.fragment_container)
|
||||
.navigate(
|
||||
R.id.artistDetailsFragment,
|
||||
|
@ -125,8 +134,9 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
|
|||
FragmentNavigatorExtras(artistView to "artist")
|
||||
)
|
||||
}
|
||||
playAction.setOnClickListener { MusicPlayerRemote.openQueue(album.songs, 0, true) }
|
||||
|
||||
playAction.setOnClickListener {
|
||||
MusicPlayerRemote.openQueue(album.songs, 0, true)
|
||||
}
|
||||
shuffleAction.setOnClickListener {
|
||||
MusicPlayerRemote.openAndShuffleQueue(
|
||||
album.songs,
|
||||
|
@ -141,9 +151,6 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
|
|||
aboutAlbumText.maxLines = 4
|
||||
}
|
||||
}
|
||||
image.apply {
|
||||
transitionName = getString(R.string.transition_album_art)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
|
@ -255,7 +262,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
|
|||
}
|
||||
|
||||
private fun loadArtistImage(artist: Artist) {
|
||||
detailsViewModel.getMoreAlbums(artist).observe(viewLifecycleOwner, Observer {
|
||||
detailsViewModel.getMoreAlbums(artist).observe(viewLifecycleOwner, {
|
||||
moreAlbums(it)
|
||||
})
|
||||
ArtistGlideRequest.Builder.from(Glide.with(requireContext()), artist)
|
||||
|
@ -288,6 +295,12 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
|
|||
}
|
||||
|
||||
override fun onAlbumClick(albumId: Long, view: View) {
|
||||
exitTransition = MaterialElevationScale(false).apply {
|
||||
duration = 300L
|
||||
}
|
||||
reenterTransition = MaterialElevationScale(false).apply {
|
||||
duration = 300L
|
||||
}
|
||||
findNavController().navigate(
|
||||
R.id.albumDetailsFragment,
|
||||
bundleOf(EXTRA_ALBUM_ID to albumId),
|
||||
|
@ -356,13 +369,10 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
|
|||
)
|
||||
return true
|
||||
}
|
||||
/*Sort*/
|
||||
R.id.action_sort_order_title -> sortOrder = SortOrder.AlbumSongSortOrder.SONG_A_Z
|
||||
R.id.action_sort_order_title_desc -> sortOrder = SortOrder.AlbumSongSortOrder.SONG_Z_A
|
||||
R.id.action_sort_order_track_list -> sortOrder =
|
||||
SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST
|
||||
R.id.action_sort_order_artist_song_duration ->
|
||||
sortOrder = SortOrder.AlbumSongSortOrder.SONG_DURATION
|
||||
R.id.action_sort_order_title -> sortOrder = SONG_A_Z
|
||||
R.id.action_sort_order_title_desc -> sortOrder = SONG_Z_A
|
||||
R.id.action_sort_order_track_list -> sortOrder = SONG_TRACK_LIST
|
||||
R.id.action_sort_order_artist_song_duration -> sortOrder = SONG_DURATION
|
||||
}
|
||||
if (sortOrder != null) {
|
||||
item.isChecked = true
|
||||
|
@ -373,36 +383,34 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
|
|||
|
||||
private fun setUpSortOrderMenu(sortOrder: SubMenu) {
|
||||
when (savedSortOrder) {
|
||||
SortOrder.AlbumSongSortOrder.SONG_A_Z -> sortOrder.findItem(R.id.action_sort_order_title)
|
||||
.isChecked = true
|
||||
SortOrder.AlbumSongSortOrder.SONG_Z_A -> sortOrder.findItem(R.id.action_sort_order_title_desc)
|
||||
.isChecked = true
|
||||
SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST -> sortOrder.findItem(R.id.action_sort_order_track_list)
|
||||
.isChecked = true
|
||||
SortOrder.AlbumSongSortOrder.SONG_DURATION -> sortOrder.findItem(R.id.action_sort_order_artist_song_duration)
|
||||
.isChecked = true
|
||||
SONG_A_Z -> sortOrder.findItem(R.id.action_sort_order_title).isChecked = true
|
||||
SONG_Z_A -> sortOrder.findItem(R.id.action_sort_order_title_desc).isChecked = true
|
||||
SONG_TRACK_LIST ->
|
||||
sortOrder.findItem(R.id.action_sort_order_track_list).isChecked = true
|
||||
SONG_DURATION ->
|
||||
sortOrder.findItem(R.id.action_sort_order_artist_song_duration).isChecked = true
|
||||
}
|
||||
}
|
||||
|
||||
private fun setSaveSortOrder(sortOrder: String) {
|
||||
PreferenceUtil.albumDetailSongSortOrder = sortOrder
|
||||
val songs = when (sortOrder) {
|
||||
SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST -> album.songs.sortedWith { o1, o2 ->
|
||||
SONG_TRACK_LIST -> album.songs.sortedWith { o1, o2 ->
|
||||
o1.trackNumber.compareTo(
|
||||
o2.trackNumber
|
||||
)
|
||||
}
|
||||
SortOrder.AlbumSongSortOrder.SONG_A_Z -> album.songs.sortedWith { o1, o2 ->
|
||||
SONG_A_Z -> album.songs.sortedWith { o1, o2 ->
|
||||
o1.title.compareTo(
|
||||
o2.title
|
||||
)
|
||||
}
|
||||
SortOrder.AlbumSongSortOrder.SONG_Z_A -> album.songs.sortedWith { o1, o2 ->
|
||||
SONG_Z_A -> album.songs.sortedWith { o1, o2 ->
|
||||
o2.title.compareTo(
|
||||
o1.title
|
||||
)
|
||||
}
|
||||
SortOrder.AlbumSongSortOrder.SONG_DURATION -> album.songs.sortedWith { o1, o2 ->
|
||||
SONG_DURATION -> album.songs.sortedWith { o1, o2 ->
|
||||
o1.duration.compareTo(
|
||||
o2.duration
|
||||
)
|
||||
|
|
|
@ -17,7 +17,6 @@ package io.github.muntashirakon.music.fragments.albums
|
|||
import android.os.Bundle
|
||||
import android.view.*
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.navigation.fragment.FragmentNavigatorExtras
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
|
@ -27,7 +26,6 @@ import io.github.muntashirakon.music.adapter.album.AlbumAdapter
|
|||
import io.github.muntashirakon.music.extensions.surfaceColor
|
||||
import io.github.muntashirakon.music.fragments.ReloadType
|
||||
import io.github.muntashirakon.music.fragments.base.AbsRecyclerViewCustomGridSizeFragment
|
||||
import io.github.muntashirakon.music.helper.SortOrder
|
||||
import io.github.muntashirakon.music.helper.SortOrder.AlbumSortOrder
|
||||
import io.github.muntashirakon.music.interfaces.IAlbumClickListener
|
||||
import io.github.muntashirakon.music.interfaces.ICabHolder
|
||||
|
@ -35,13 +33,14 @@ import io.github.muntashirakon.music.util.PreferenceUtil
|
|||
import io.github.muntashirakon.music.util.RetroColorUtil
|
||||
import io.github.muntashirakon.music.util.RetroUtil
|
||||
import com.afollestad.materialcab.MaterialCab
|
||||
import com.google.android.material.transition.MaterialElevationScale
|
||||
|
||||
class AlbumsFragment : AbsRecyclerViewCustomGridSizeFragment<AlbumAdapter, GridLayoutManager>(),
|
||||
IAlbumClickListener, ICabHolder {
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
libraryViewModel.getAlbums().observe(viewLifecycleOwner, Observer {
|
||||
libraryViewModel.getAlbums().observe(viewLifecycleOwner, {
|
||||
if (it.isNotEmpty())
|
||||
adapter?.swapDataSet(it)
|
||||
else
|
||||
|
@ -115,6 +114,12 @@ class AlbumsFragment : AbsRecyclerViewCustomGridSizeFragment<AlbumAdapter, GridL
|
|||
}
|
||||
|
||||
override fun onAlbumClick(albumId: Long, view: View) {
|
||||
exitTransition = MaterialElevationScale(false).apply {
|
||||
duration = 300L
|
||||
}
|
||||
reenterTransition = MaterialElevationScale(true).apply {
|
||||
duration = 300L
|
||||
}
|
||||
findNavController().navigate(
|
||||
R.id.albumDetailsFragment,
|
||||
bundleOf(EXTRA_ALBUM_ID to albumId),
|
||||
|
@ -148,28 +153,28 @@ class AlbumsFragment : AbsRecyclerViewCustomGridSizeFragment<AlbumAdapter, GridL
|
|||
0,
|
||||
R.string.sort_order_a_z
|
||||
).isChecked =
|
||||
currentSortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_A_Z)
|
||||
currentSortOrder.equals(AlbumSortOrder.ALBUM_A_Z)
|
||||
sortOrderMenu.add(
|
||||
0,
|
||||
R.id.action_album_sort_order_desc,
|
||||
1,
|
||||
R.string.sort_order_z_a
|
||||
).isChecked =
|
||||
currentSortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_Z_A)
|
||||
currentSortOrder.equals(AlbumSortOrder.ALBUM_Z_A)
|
||||
sortOrderMenu.add(
|
||||
0,
|
||||
R.id.action_album_sort_order_artist,
|
||||
2,
|
||||
R.string.sort_order_artist
|
||||
).isChecked =
|
||||
currentSortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_ARTIST)
|
||||
currentSortOrder.equals(AlbumSortOrder.ALBUM_ARTIST)
|
||||
sortOrderMenu.add(
|
||||
0,
|
||||
R.id.action_album_sort_order_year,
|
||||
3,
|
||||
R.string.sort_order_year
|
||||
).isChecked =
|
||||
currentSortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_YEAR)
|
||||
currentSortOrder.equals(AlbumSortOrder.ALBUM_YEAR)
|
||||
|
||||
sortOrderMenu.setGroupCheckable(0, true, true)
|
||||
}
|
||||
|
@ -300,16 +305,6 @@ class AlbumsFragment : AbsRecyclerViewCustomGridSizeFragment<AlbumAdapter, GridL
|
|||
|
||||
private var cab: MaterialCab? = null
|
||||
|
||||
fun handleBackPress(): Boolean {
|
||||
cab?.let {
|
||||
if (it.isActive) {
|
||||
it.finish()
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
override fun openCab(menuRes: Int, callback: MaterialCab.Callback): MaterialCab {
|
||||
cab?.let {
|
||||
println("Cab")
|
||||
|
|
|
@ -16,6 +16,7 @@ package io.github.muntashirakon.music.fragments.artists
|
|||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.text.Spanned
|
||||
import android.view.Menu
|
||||
|
@ -39,10 +40,7 @@ import io.github.muntashirakon.music.R
|
|||
import io.github.muntashirakon.music.adapter.album.HorizontalAlbumAdapter
|
||||
import io.github.muntashirakon.music.adapter.song.SimpleSongAdapter
|
||||
import io.github.muntashirakon.music.dialogs.AddToPlaylistDialog
|
||||
import io.github.muntashirakon.music.extensions.applyColor
|
||||
import io.github.muntashirakon.music.extensions.applyOutlineColor
|
||||
import io.github.muntashirakon.music.extensions.show
|
||||
import io.github.muntashirakon.music.extensions.showToast
|
||||
import io.github.muntashirakon.music.extensions.*
|
||||
import io.github.muntashirakon.music.fragments.base.AbsMainActivityFragment
|
||||
import io.github.muntashirakon.music.glide.ArtistGlideRequest
|
||||
import io.github.muntashirakon.music.glide.SingleColorTarget
|
||||
|
@ -57,6 +55,7 @@ import io.github.muntashirakon.music.util.MusicUtil
|
|||
import io.github.muntashirakon.music.util.RetroUtil
|
||||
import com.bumptech.glide.Glide
|
||||
import com.google.android.material.transition.MaterialContainerTransform
|
||||
import com.google.android.material.transition.MaterialElevationScale
|
||||
import kotlinx.android.synthetic.main.fragment_artist_content.*
|
||||
import kotlinx.android.synthetic.main.fragment_artist_details.*
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -81,27 +80,26 @@ class ArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_artist_d
|
|||
private var lang: String? = null
|
||||
private var biography: Spanned? = null
|
||||
|
||||
private fun setUpTransitions() {
|
||||
val transform = MaterialContainerTransform()
|
||||
transform.setAllContainerColors(ATHUtil.resolveColor(requireContext(), R.attr.colorSurface))
|
||||
sharedElementEnterTransition = transform
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setUpTransitions()
|
||||
sharedElementEnterTransition = MaterialContainerTransform().apply {
|
||||
drawingViewId = R.id.fragment_container
|
||||
duration = 300L
|
||||
scrimColor = Color.TRANSPARENT
|
||||
setAllContainerColors(requireContext().resolveColor(R.attr.colorSurface))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
mainActivity.setBottomBarVisibility(View.GONE)
|
||||
mainActivity.setBottomBarVisibility(false)
|
||||
mainActivity.addMusicServiceEventListener(detailsViewModel)
|
||||
mainActivity.setSupportActionBar(toolbar)
|
||||
toolbar.title = null
|
||||
ViewCompat.setTransitionName(container, "artist")
|
||||
ViewCompat.setTransitionName(artistCoverContainer, "artist")
|
||||
postponeEnterTransition()
|
||||
detailsViewModel.getArtist().observe(viewLifecycleOwner, Observer {
|
||||
detailsViewModel.getArtist().observe(viewLifecycleOwner, {
|
||||
startPostponedEnterTransition()
|
||||
showArtist(it)
|
||||
})
|
||||
|
@ -150,14 +148,12 @@ class ArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_artist_d
|
|||
MusicUtil.getArtistInfoString(requireContext(), artist),
|
||||
MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(artist.songs))
|
||||
)
|
||||
val songText =
|
||||
resources.getQuantityString(
|
||||
val songText = resources.getQuantityString(
|
||||
R.plurals.albumSongs,
|
||||
artist.songCount,
|
||||
artist.songCount
|
||||
)
|
||||
val albumText =
|
||||
resources.getQuantityString(
|
||||
val albumText = resources.getQuantityString(
|
||||
R.plurals.albums,
|
||||
artist.songCount,
|
||||
artist.songCount
|
||||
|
@ -228,6 +224,12 @@ class ArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_artist_d
|
|||
}
|
||||
|
||||
override fun onAlbumClick(albumId: Long, view: View) {
|
||||
exitTransition = MaterialElevationScale(false).apply {
|
||||
duration = 300L
|
||||
}
|
||||
reenterTransition = MaterialElevationScale(false).apply {
|
||||
duration = 300L
|
||||
}
|
||||
findNavController().navigate(
|
||||
R.id.albumDetailsFragment,
|
||||
bundleOf(EXTRA_ALBUM_ID to albumId),
|
||||
|
|
|
@ -34,6 +34,7 @@ import io.github.muntashirakon.music.util.PreferenceUtil
|
|||
import io.github.muntashirakon.music.util.RetroColorUtil
|
||||
import io.github.muntashirakon.music.util.RetroUtil
|
||||
import com.afollestad.materialcab.MaterialCab
|
||||
import com.google.android.material.transition.MaterialElevationScale
|
||||
|
||||
class ArtistsFragment : AbsRecyclerViewCustomGridSizeFragment<ArtistAdapter, GridLayoutManager>(),
|
||||
IArtistClickListener, ICabHolder {
|
||||
|
@ -114,6 +115,12 @@ class ArtistsFragment : AbsRecyclerViewCustomGridSizeFragment<ArtistAdapter, Gri
|
|||
}
|
||||
|
||||
override fun onArtist(artistId: Long, view: View) {
|
||||
exitTransition = MaterialElevationScale(true).apply {
|
||||
duration = 300L
|
||||
}
|
||||
reenterTransition = MaterialElevationScale(false).apply {
|
||||
duration = 300L
|
||||
}
|
||||
findNavController().navigate(
|
||||
R.id.artistDetailsFragment,
|
||||
bundleOf(EXTRA_ARTIST_ID to artistId),
|
||||
|
@ -160,13 +167,13 @@ class ArtistsFragment : AbsRecyclerViewCustomGridSizeFragment<ArtistAdapter, Gri
|
|||
when (itemLayoutRes()) {
|
||||
R.layout.item_card -> subMenu.findItem(R.id.action_layout_card).isChecked = true
|
||||
R.layout.item_grid -> subMenu.findItem(R.id.action_layout_normal).isChecked = true
|
||||
R.layout.item_card_color ->
|
||||
subMenu.findItem(R.id.action_layout_colored_card).isChecked = true
|
||||
R.layout.item_grid_circle ->
|
||||
subMenu.findItem(R.id.action_layout_circular).isChecked = true
|
||||
R.layout.item_card_color -> subMenu.findItem(R.id.action_layout_colored_card).isChecked =
|
||||
true
|
||||
R.layout.item_grid_circle -> subMenu.findItem(R.id.action_layout_circular).isChecked =
|
||||
true
|
||||
R.layout.image -> subMenu.findItem(R.id.action_layout_image).isChecked = true
|
||||
R.layout.item_image_gradient ->
|
||||
subMenu.findItem(R.id.action_layout_gradient_image).isChecked = true
|
||||
R.layout.item_image_gradient -> subMenu.findItem(R.id.action_layout_gradient_image).isChecked =
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -275,21 +282,11 @@ class ArtistsFragment : AbsRecyclerViewCustomGridSizeFragment<ArtistAdapter, Gri
|
|||
}
|
||||
return false
|
||||
}
|
||||
private var cab: MaterialCab? = null
|
||||
|
||||
fun handleBackPress(): Boolean {
|
||||
cab?.let {
|
||||
if (it.isActive) {
|
||||
it.finish()
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
private var cab: MaterialCab? = null
|
||||
|
||||
override fun openCab(menuRes: Int, callback: MaterialCab.Callback): MaterialCab {
|
||||
cab?.let {
|
||||
println("Cab")
|
||||
if (it.isActive) {
|
||||
it.finish()
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ import android.view.View
|
|||
import androidx.annotation.NonNull
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.core.text.HtmlCompat
|
||||
import androidx.core.view.doOnPreDraw
|
||||
import androidx.core.view.updatePadding
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
@ -53,7 +54,11 @@ abstract class AbsRecyclerViewFragment<A : RecyclerView.Adapter<*>, LM : Recycle
|
|||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
mainActivity.setBottomBarVisibility(View.VISIBLE)
|
||||
|
||||
postponeEnterTransition()
|
||||
view.doOnPreDraw { startPostponedEnterTransition() }
|
||||
|
||||
mainActivity.setBottomBarVisibility(true)
|
||||
mainActivity.setSupportActionBar(toolbar)
|
||||
mainActivity.supportActionBar?.title = null
|
||||
initLayoutManager()
|
||||
|
@ -78,7 +83,6 @@ abstract class AbsRecyclerViewFragment<A : RecyclerView.Adapter<*>, LM : Recycle
|
|||
layoutManager = this@AbsRecyclerViewFragment.layoutManager
|
||||
adapter = this@AbsRecyclerViewFragment.adapter
|
||||
val fastScroller = create(this)
|
||||
|
||||
}
|
||||
checkForPadding()
|
||||
}
|
||||
|
|
|
@ -166,7 +166,7 @@ public class FoldersFragment extends AbsMainActivityFragment
|
|||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
getMainActivity().addMusicServiceEventListener(getLibraryViewModel());
|
||||
getMainActivity().setBottomBarVisibility(View.VISIBLE);
|
||||
getMainActivity().setBottomBarVisibility(true);
|
||||
getMainActivity().setSupportActionBar(toolbar);
|
||||
getMainActivity().getSupportActionBar().setTitle(null);
|
||||
setStatusBarColorAuto(view);
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
*/
|
||||
package io.github.muntashirakon.music.fragments.genres
|
||||
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
|
@ -24,14 +25,15 @@ import androidx.navigation.fragment.navArgs
|
|||
import androidx.recyclerview.widget.DefaultItemAnimator
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||
import io.github.muntashirakon.music.R
|
||||
import io.github.muntashirakon.music.adapter.song.SongAdapter
|
||||
import io.github.muntashirakon.music.extensions.dipToPix
|
||||
import io.github.muntashirakon.music.extensions.resolveColor
|
||||
import io.github.muntashirakon.music.fragments.base.AbsMainActivityFragment
|
||||
import io.github.muntashirakon.music.helper.menu.GenreMenuHelper
|
||||
import io.github.muntashirakon.music.model.Genre
|
||||
import io.github.muntashirakon.music.model.Song
|
||||
import com.google.android.material.transition.MaterialArcMotion
|
||||
import com.google.android.material.transition.MaterialContainerTransform
|
||||
import kotlinx.android.synthetic.main.fragment_playlist_detail.*
|
||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||
|
@ -45,21 +47,22 @@ class GenreDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playlist_
|
|||
}
|
||||
private lateinit var genre: Genre
|
||||
private lateinit var songAdapter: SongAdapter
|
||||
private fun setUpTransitions() {
|
||||
val transform = MaterialContainerTransform()
|
||||
transform.setAllContainerColors(ATHUtil.resolveColor(requireContext(), R.attr.colorSurface))
|
||||
sharedElementEnterTransition = transform
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setUpTransitions()
|
||||
sharedElementEnterTransition = MaterialContainerTransform().apply {
|
||||
drawingViewId = R.id.fragment_container
|
||||
duration = 300L
|
||||
scrimColor = Color.TRANSPARENT
|
||||
setAllContainerColors(requireContext().resolveColor(R.attr.colorSurface))
|
||||
setPathMotion(MaterialArcMotion())
|
||||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
mainActivity.setBottomBarVisibility(View.GONE)
|
||||
mainActivity.setBottomBarVisibility(false)
|
||||
mainActivity.addMusicServiceEventListener(detailsViewModel)
|
||||
mainActivity.setSupportActionBar(toolbar)
|
||||
ViewCompat.setTransitionName(container, "genre")
|
||||
|
|
|
@ -27,6 +27,7 @@ import io.github.muntashirakon.music.adapter.GenreAdapter
|
|||
import io.github.muntashirakon.music.fragments.base.AbsRecyclerViewFragment
|
||||
import io.github.muntashirakon.music.interfaces.IGenreClickListener
|
||||
import io.github.muntashirakon.music.model.Genre
|
||||
import com.google.android.material.transition.MaterialElevationScale
|
||||
|
||||
class GenresFragment : AbsRecyclerViewFragment<GenreAdapter, LinearLayoutManager>(),
|
||||
IGenreClickListener {
|
||||
|
@ -63,6 +64,12 @@ class GenresFragment : AbsRecyclerViewFragment<GenreAdapter, LinearLayoutManager
|
|||
}
|
||||
|
||||
override fun onClickGenre(genre: Genre, view: View) {
|
||||
exitTransition = MaterialElevationScale(false).apply {
|
||||
duration = 300L
|
||||
}
|
||||
reenterTransition = MaterialElevationScale(true).apply {
|
||||
duration = 300L
|
||||
}
|
||||
findNavController().navigate(
|
||||
R.id.genreDetailsFragment,
|
||||
bundleOf(EXTRA_GENRE to genre),
|
||||
|
|
|
@ -48,7 +48,7 @@ class HomeFragment :
|
|||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
mainActivity.setBottomBarVisibility(View.VISIBLE)
|
||||
mainActivity.setBottomBarVisibility(true)
|
||||
mainActivity.setSupportActionBar(toolbar)
|
||||
mainActivity.supportActionBar?.title = null
|
||||
setStatusBarColorAuto(view)
|
||||
|
|
|
@ -41,7 +41,7 @@ class LibraryFragment : AbsMainActivityFragment(R.layout.fragment_library) {
|
|||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
mainActivity.setBottomBarVisibility(View.VISIBLE)
|
||||
mainActivity.setBottomBarVisibility(true)
|
||||
mainActivity.setSupportActionBar(toolbar)
|
||||
mainActivity.supportActionBar?.title = null
|
||||
toolbar.setNavigationOnClickListener {
|
||||
|
|
|
@ -16,9 +16,11 @@ package io.github.muntashirakon.music.fragments.player.full
|
|||
|
||||
import android.animation.ObjectAnimator
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.content.res.ColorStateList
|
||||
import android.graphics.Color
|
||||
import android.graphics.PorterDuff
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.os.AsyncTask
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
|
@ -27,12 +29,18 @@ import android.view.animation.DecelerateInterpolator
|
|||
import android.view.animation.LinearInterpolator
|
||||
import android.widget.PopupMenu
|
||||
import android.widget.SeekBar
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import code.name.monkey.appthemehelper.util.ColorUtil
|
||||
import code.name.monkey.appthemehelper.util.TintHelper
|
||||
import io.github.muntashirakon.music.R
|
||||
import io.github.muntashirakon.music.db.PlaylistEntity
|
||||
import io.github.muntashirakon.music.db.SongEntity
|
||||
import io.github.muntashirakon.music.db.toSongEntity
|
||||
import io.github.muntashirakon.music.extensions.applyColor
|
||||
import io.github.muntashirakon.music.extensions.hide
|
||||
import io.github.muntashirakon.music.extensions.show
|
||||
import io.github.muntashirakon.music.fragments.LibraryViewModel
|
||||
import io.github.muntashirakon.music.fragments.ReloadType
|
||||
import io.github.muntashirakon.music.fragments.base.AbsPlayerControlsFragment
|
||||
import io.github.muntashirakon.music.helper.MusicPlayerRemote
|
||||
import io.github.muntashirakon.music.helper.MusicProgressViewUpdateHelper
|
||||
|
@ -42,8 +50,13 @@ import io.github.muntashirakon.music.model.Song
|
|||
import io.github.muntashirakon.music.service.MusicService
|
||||
import io.github.muntashirakon.music.util.MusicUtil
|
||||
import io.github.muntashirakon.music.util.PreferenceUtil
|
||||
import io.github.muntashirakon.music.util.RetroUtil
|
||||
import io.github.muntashirakon.music.util.color.MediaNotificationProcessor
|
||||
import kotlinx.android.synthetic.main.fragment_full_player_controls.*
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.koin.androidx.viewmodel.ext.android.sharedViewModel
|
||||
|
||||
/**
|
||||
* Created by hemanths on 20/09/17.
|
||||
|
@ -56,6 +69,7 @@ class FullPlaybackControlsFragment :
|
|||
private var lastPlaybackControlsColor: Int = 0
|
||||
private var lastDisabledPlaybackControlsColor: Int = 0
|
||||
private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper
|
||||
private val libraryViewModel: LibraryViewModel by sharedViewModel()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
@ -158,7 +172,6 @@ class FullPlaybackControlsFragment :
|
|||
}
|
||||
|
||||
private fun setUpPlayPauseFab() {
|
||||
|
||||
playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler())
|
||||
playPauseButton.post {
|
||||
if (playPauseButton != null) {
|
||||
|
@ -283,44 +296,41 @@ class FullPlaybackControlsFragment :
|
|||
}
|
||||
}
|
||||
|
||||
private fun toggleFavorite(song: Song) {
|
||||
MusicUtil.toggleFavorite(requireContext(), song)
|
||||
if (song.id == MusicPlayerRemote.currentSong.id) {
|
||||
updateIsFavorite()
|
||||
}
|
||||
}
|
||||
|
||||
private var updateIsFavoriteTask: AsyncTask<*, *, *>? = null
|
||||
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
fun updateIsFavorite() {
|
||||
if (updateIsFavoriteTask != null) {
|
||||
updateIsFavoriteTask?.cancel(false)
|
||||
}
|
||||
updateIsFavoriteTask = object : AsyncTask<Song, Void, Boolean>() {
|
||||
override fun doInBackground(vararg params: Song): Boolean? {
|
||||
val activity = activity
|
||||
return if (activity != null) {
|
||||
MusicUtil.isFavorite(requireActivity(), params[0])
|
||||
} else {
|
||||
cancel(false)
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPostExecute(isFavorite: Boolean?) {
|
||||
val activity = activity
|
||||
if (activity != null) {
|
||||
val res = if (isFavorite!!)
|
||||
R.drawable.ic_favorite
|
||||
else
|
||||
R.drawable.ic_favorite_border
|
||||
|
||||
val drawable = TintHelper.createTintedDrawable(activity, res, Color.WHITE)
|
||||
lifecycleScope.launch(Dispatchers.IO) {
|
||||
val playlist: PlaylistEntity? = libraryViewModel.favoritePlaylist()
|
||||
if (playlist != null) {
|
||||
val song: SongEntity =
|
||||
MusicPlayerRemote.currentSong.toSongEntity(playlist.playListId)
|
||||
val isFavorite: Boolean = libraryViewModel.isFavoriteSong(song).isNotEmpty()
|
||||
withContext(Dispatchers.Main) {
|
||||
val icon =
|
||||
if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border
|
||||
val drawable = TintHelper.createTintedDrawable(activity, icon, Color.WHITE)
|
||||
songFavourite?.setImageDrawable(drawable)
|
||||
}
|
||||
}
|
||||
}.execute(MusicPlayerRemote.currentSong)
|
||||
}
|
||||
}
|
||||
|
||||
private fun toggleFavorite(song: Song) {
|
||||
if (song.id == MusicPlayerRemote.currentSong.id) {
|
||||
updateIsFavorite()
|
||||
}
|
||||
lifecycleScope.launch(Dispatchers.IO) {
|
||||
val playlist: PlaylistEntity? = libraryViewModel.favoritePlaylist()
|
||||
if (playlist != null) {
|
||||
val songEntity = song.toSongEntity(playlist.playListId)
|
||||
val isFavorite = libraryViewModel.isFavoriteSong(songEntity).isNotEmpty()
|
||||
if (isFavorite) {
|
||||
libraryViewModel.removeSongFromPlaylist(songEntity)
|
||||
} else {
|
||||
libraryViewModel.insertSongs(listOf(song.toSongEntity(playlist.playListId)))
|
||||
}
|
||||
}
|
||||
libraryViewModel.forceReload(ReloadType.Playlists)
|
||||
requireContext().sendBroadcast(Intent(MusicService.FAVORITE_STATE_CHANGED))
|
||||
}
|
||||
}
|
||||
|
||||
fun onFavoriteToggled() {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package io.github.muntashirakon.music.fragments.playlists
|
||||
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
|
@ -12,14 +13,15 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
|||
import androidx.recyclerview.widget.RecyclerView
|
||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||
import io.github.muntashirakon.music.R
|
||||
import io.github.muntashirakon.music.adapter.song.PlaylistSongAdapter
|
||||
import io.github.muntashirakon.music.adapter.song.ShuffleButtonSongAdapter
|
||||
import io.github.muntashirakon.music.db.PlaylistWithSongs
|
||||
import io.github.muntashirakon.music.db.toSongs
|
||||
import io.github.muntashirakon.music.extensions.dipToPix
|
||||
import io.github.muntashirakon.music.extensions.resolveColor
|
||||
import io.github.muntashirakon.music.fragments.base.AbsMainActivityFragment
|
||||
import io.github.muntashirakon.music.helper.menu.PlaylistMenuHelper
|
||||
import io.github.muntashirakon.music.model.Song
|
||||
import io.github.muntashirakon.music.state.NowPlayingPanelState
|
||||
import com.google.android.material.transition.MaterialArcMotion
|
||||
import com.google.android.material.transition.MaterialContainerTransform
|
||||
import kotlinx.android.synthetic.main.fragment_playlist_detail.*
|
||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||
|
@ -32,23 +34,23 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli
|
|||
}
|
||||
|
||||
private lateinit var playlist: PlaylistWithSongs
|
||||
private lateinit var playlistSongAdapter: PlaylistSongAdapter
|
||||
|
||||
private fun setUpTransitions() {
|
||||
val transform = MaterialContainerTransform()
|
||||
transform.setAllContainerColors(ATHUtil.resolveColor(requireContext(), R.attr.colorSurface))
|
||||
sharedElementEnterTransition = transform
|
||||
}
|
||||
private lateinit var playlistSongAdapter: ShuffleButtonSongAdapter
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setUpTransitions()
|
||||
sharedElementEnterTransition = MaterialContainerTransform().apply {
|
||||
drawingViewId = R.id.fragment_container
|
||||
duration = 300L
|
||||
scrimColor = Color.TRANSPARENT
|
||||
setAllContainerColors(requireContext().resolveColor(R.attr.colorSurface))
|
||||
setPathMotion(MaterialArcMotion())
|
||||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
mainActivity.setBottomBarVisibility(View.GONE)
|
||||
mainActivity.setBottomBarVisibility(false)
|
||||
mainActivity.addMusicServiceEventListener(viewModel)
|
||||
mainActivity.setSupportActionBar(toolbar)
|
||||
ViewCompat.setTransitionName(container, "playlist")
|
||||
|
@ -61,8 +63,7 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli
|
|||
}
|
||||
|
||||
private fun setUpRecyclerView() {
|
||||
playlistSongAdapter = PlaylistSongAdapter(
|
||||
playlist.playlistEntity,
|
||||
playlistSongAdapter = ShuffleButtonSongAdapter(
|
||||
requireActivity(),
|
||||
ArrayList(),
|
||||
R.layout.item_list,
|
||||
|
|
|
@ -35,6 +35,7 @@ import io.github.muntashirakon.music.fragments.base.AbsRecyclerViewCustomGridSiz
|
|||
import io.github.muntashirakon.music.helper.SortOrder.PlaylistSortOrder
|
||||
import io.github.muntashirakon.music.interfaces.IPlaylistClickListener
|
||||
import io.github.muntashirakon.music.util.PreferenceUtil
|
||||
import com.google.android.material.transition.MaterialElevationScale
|
||||
import kotlinx.android.synthetic.main.fragment_library.*
|
||||
|
||||
class PlaylistsFragment :
|
||||
|
@ -183,6 +184,12 @@ class PlaylistsFragment :
|
|||
}
|
||||
|
||||
override fun onPlaylistClick(playlistWithSongs: PlaylistWithSongs, view: View) {
|
||||
exitTransition = MaterialElevationScale(false).apply {
|
||||
duration = 300L
|
||||
}
|
||||
reenterTransition = MaterialElevationScale(true).apply {
|
||||
duration = 300L
|
||||
}
|
||||
findNavController().navigate(
|
||||
R.id.playlistDetailsFragment,
|
||||
bundleOf(EXTRA_PLAYLIST to playlistWithSongs),
|
||||
|
|
|
@ -15,12 +15,15 @@
|
|||
package io.github.muntashirakon.music.fragments.search
|
||||
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.speech.RecognizerIntent
|
||||
import android.text.Editable
|
||||
import android.text.TextWatcher
|
||||
import android.view.View
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import androidx.core.view.isGone
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
|
@ -28,12 +31,11 @@ import androidx.recyclerview.widget.RecyclerView
|
|||
import androidx.transition.TransitionManager
|
||||
import io.github.muntashirakon.music.R
|
||||
import io.github.muntashirakon.music.adapter.SearchAdapter
|
||||
import io.github.muntashirakon.music.extensions.accentColor
|
||||
import io.github.muntashirakon.music.extensions.dipToPix
|
||||
import io.github.muntashirakon.music.extensions.focusAndShowKeyboard
|
||||
import io.github.muntashirakon.music.extensions.showToast
|
||||
import io.github.muntashirakon.music.extensions.*
|
||||
import io.github.muntashirakon.music.fragments.base.AbsMainActivityFragment
|
||||
import com.google.android.material.textfield.TextInputEditText
|
||||
import com.google.android.material.transition.MaterialArcMotion
|
||||
import com.google.android.material.transition.MaterialContainerTransform
|
||||
import kotlinx.android.synthetic.main.fragment_search.*
|
||||
import java.util.*
|
||||
import kotlin.collections.ArrayList
|
||||
|
@ -47,18 +49,30 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa
|
|||
private lateinit var searchAdapter: SearchAdapter
|
||||
private var query: String? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
sharedElementEnterTransition = MaterialContainerTransform().apply {
|
||||
drawingViewId = R.id.fragment_container
|
||||
duration = 300L
|
||||
scrimColor = Color.TRANSPARENT
|
||||
setAllContainerColors(requireContext().resolveColor(R.attr.colorSurface))
|
||||
setPathMotion(MaterialArcMotion())
|
||||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
mainActivity.setBottomBarVisibility(View.GONE)
|
||||
mainActivity.setBottomBarVisibility(false)
|
||||
mainActivity.setSupportActionBar(toolbar)
|
||||
libraryViewModel.clearSearchResult()
|
||||
setupRecyclerView()
|
||||
|
||||
voiceSearch.setOnClickListener { startMicSearch() }
|
||||
clearText.setOnClickListener { searchView.clearText() }
|
||||
searchView.apply {
|
||||
addTextChangedListener(this@SearchFragment)
|
||||
focusAndShowKeyboard()
|
||||
}
|
||||
voiceSearch.setOnClickListener { startMicSearch() }
|
||||
clearText.setOnClickListener { searchView.clearText() }
|
||||
keyboardPopup.apply {
|
||||
accentColor()
|
||||
setOnClickListener {
|
||||
|
@ -143,6 +157,19 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa
|
|||
showToast(getString(R.string.speech_not_supported))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
hideKeyboard(view)
|
||||
super.onDestroyView()
|
||||
}
|
||||
|
||||
private fun hideKeyboard(view: View?) {
|
||||
if (view != null) {
|
||||
val imm: InputMethodManager =
|
||||
requireContext().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
||||
imm.hideSoftInputFromWindow(view.windowToken, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun TextInputEditText.clearText() {
|
||||
|
|
|
@ -20,6 +20,7 @@ import androidx.annotation.LayoutRes
|
|||
import androidx.lifecycle.Observer
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import io.github.muntashirakon.music.R
|
||||
import io.github.muntashirakon.music.adapter.song.ShuffleButtonSongAdapter
|
||||
import io.github.muntashirakon.music.adapter.song.SongAdapter
|
||||
import io.github.muntashirakon.music.extensions.surfaceColor
|
||||
import io.github.muntashirakon.music.fragments.ReloadType
|
||||
|
@ -35,7 +36,7 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment<SongAdapter, GridLay
|
|||
ICabHolder {
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
libraryViewModel.getSongs().observe(viewLifecycleOwner, Observer {
|
||||
libraryViewModel.getSongs().observe(viewLifecycleOwner, {
|
||||
if (it.isNotEmpty())
|
||||
adapter?.swapDataSet(it)
|
||||
else
|
||||
|
@ -52,7 +53,7 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment<SongAdapter, GridLay
|
|||
|
||||
override fun createAdapter(): SongAdapter {
|
||||
val dataSet = if (adapter == null) mutableListOf() else adapter!!.dataSet
|
||||
return SongAdapter(
|
||||
return ShuffleButtonSongAdapter(
|
||||
requireActivity(),
|
||||
dataSet,
|
||||
itemLayoutRes(),
|
||||
|
@ -198,8 +199,7 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment<SongAdapter, GridLay
|
|||
gridSizeMenu: SubMenu
|
||||
) {
|
||||
when (getGridSize()) {
|
||||
1 -> gridSizeMenu.findItem(R.id.action_grid_size_1).isChecked =
|
||||
true
|
||||
1 -> gridSizeMenu.findItem(R.id.action_grid_size_1).isChecked = true
|
||||
2 -> gridSizeMenu.findItem(R.id.action_grid_size_2).isChecked = true
|
||||
3 -> gridSizeMenu.findItem(R.id.action_grid_size_3).isChecked = true
|
||||
4 -> gridSizeMenu.findItem(R.id.action_grid_size_4).isChecked = true
|
||||
|
|
|
@ -71,7 +71,7 @@ class LibraryPreferenceDialog : DialogFragment() {
|
|||
categoryAdapter.categoryInfos = PreferenceUtil.defaultCategories
|
||||
}
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setPositiveButton(android.R.string.ok) { _, _ -> updateCategories(categoryAdapter.categoryInfos) }
|
||||
.setPositiveButton( R.string.done) { _, _ -> updateCategories(categoryAdapter.categoryInfos) }
|
||||
.setView(view)
|
||||
.create()
|
||||
.colorButtons()
|
||||
|
|
|
@ -100,7 +100,6 @@ class RealRoomRepository(
|
|||
playlistDao.insertSongsToPlaylist(songs)
|
||||
}
|
||||
|
||||
|
||||
override fun getSongs(playListId: Long): LiveData<List<SongEntity>> =
|
||||
playlistDao.songsFromPlaylist(playListId)
|
||||
|
||||
|
@ -160,10 +159,9 @@ class RealRoomRepository(
|
|||
)
|
||||
|
||||
override suspend fun favoritePlaylistSongs(favorite: String): List<SongEntity> =
|
||||
if (playlistDao.isPlaylistExists(favorite).isNotEmpty())
|
||||
playlistDao.favoritesSongs(
|
||||
playlistDao.isPlaylistExists(favorite).first().playListId
|
||||
) else emptyList()
|
||||
if (playlistDao.isPlaylistExists(favorite).isNotEmpty()) playlistDao.favoritesSongs(
|
||||
playlistDao.isPlaylistExists(favorite).first().playListId
|
||||
) else emptyList()
|
||||
|
||||
override suspend fun insertSongInPlayCount(playCountEntity: PlayCountEntity) =
|
||||
playCountDao.insertSongInPlayCount(playCountEntity)
|
||||
|
@ -192,10 +190,8 @@ class RealRoomRepository(
|
|||
override suspend fun blackListPaths(): List<BlackListStoreEntity> =
|
||||
blackListStoreDao.blackListPaths()
|
||||
|
||||
override suspend fun deleteSongs(songs: List<Song>) {
|
||||
songs.forEach {
|
||||
playCountDao.deleteSong(it.id)
|
||||
}
|
||||
override suspend fun deleteSongs(songs: List<Song>) = songs.forEach {
|
||||
playCountDao.deleteSong(it.id)
|
||||
}
|
||||
|
||||
override suspend fun deleteBlacklistPath(blackListStoreEntity: BlackListStoreEntity) =
|
||||
|
|
|
@ -94,7 +94,7 @@ object MusicUtil : KoinComponent {
|
|||
fun deleteAlbumArt(context: Context, albumId: Long) {
|
||||
val contentResolver = context.contentResolver
|
||||
val localUri = Uri.parse("content://media/external/audio/albumart")
|
||||
contentResolver.delete(ContentUris.withAppendedId(localUri, albumId.toLong()), null, null)
|
||||
contentResolver.delete(ContentUris.withAppendedId(localUri, albumId), null, null)
|
||||
contentResolver.notifyChange(localUri, null)
|
||||
}
|
||||
|
||||
|
@ -165,7 +165,7 @@ object MusicUtil : KoinComponent {
|
|||
try {
|
||||
val newLyrics =
|
||||
FileUtil.read(f)
|
||||
if (newLyrics != null && !newLyrics.trim { it <= ' ' }.isEmpty()) {
|
||||
if (newLyrics != null && newLyrics.trim { it <= ' ' }.isNotEmpty()) {
|
||||
if (AbsSynchronizedLyrics.isSynchronized(newLyrics)) {
|
||||
return newLyrics
|
||||
}
|
||||
|
@ -283,9 +283,8 @@ object MusicUtil : KoinComponent {
|
|||
path: String?
|
||||
) {
|
||||
val contentResolver = context.contentResolver
|
||||
val artworkUri =
|
||||
Uri.parse("content://media/external/audio/albumart")
|
||||
contentResolver.delete(ContentUris.withAppendedId(artworkUri, albumId.toLong()), null, null)
|
||||
val artworkUri = Uri.parse("content://media/external/audio/albumart")
|
||||
contentResolver.delete(ContentUris.withAppendedId(artworkUri, albumId), null, null)
|
||||
val values = ContentValues()
|
||||
values.put("album_id", albumId)
|
||||
values.put("_data", path)
|
||||
|
@ -444,9 +443,7 @@ object MusicUtil : KoinComponent {
|
|||
}
|
||||
|
||||
fun deleteTracks(context: Context, songs: List<Song>) {
|
||||
val projection = arrayOf(
|
||||
BaseColumns._ID, MediaStore.MediaColumns.DATA
|
||||
)
|
||||
val projection = arrayOf(BaseColumns._ID, MediaStore.MediaColumns.DATA)
|
||||
val selection = StringBuilder()
|
||||
selection.append(BaseColumns._ID + " IN (")
|
||||
for (i in songs.indices) {
|
||||
|
|
|
@ -27,7 +27,7 @@ import androidx.core.view.ViewCompat
|
|||
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||
import code.name.monkey.appthemehelper.util.ColorUtil
|
||||
import code.name.monkey.appthemehelper.util.MaterialValueHelper
|
||||
import com.google.android.material.progressindicator.ProgressIndicator
|
||||
import com.google.android.material.progressindicator.CircularProgressIndicator
|
||||
|
||||
object ViewUtil {
|
||||
|
||||
|
@ -77,9 +77,9 @@ object ViewUtil {
|
|||
)
|
||||
}
|
||||
|
||||
fun setProgressDrawable(progressIndicator: ProgressIndicator, newColor: Int) {
|
||||
progressIndicator.indicatorColors = intArrayOf(newColor)
|
||||
progressIndicator.trackColor = ColorUtil.withAlpha(newColor, 0.2f)
|
||||
fun setProgressDrawable(indicator: CircularProgressIndicator, newColor: Int) {
|
||||
indicator.setIndicatorColor(newColor)
|
||||
indicator.trackColor = ColorUtil.withAlpha(newColor, 0.2f)
|
||||
}
|
||||
|
||||
fun hitTest(v: View, x: Int, y: Int): Boolean {
|
||||
|
|
|
@ -31,9 +31,12 @@ class RetroShapeableImageView @JvmOverloads constructor(
|
|||
init {
|
||||
val typedArray =
|
||||
context.obtainStyledAttributes(attrs, R.styleable.RetroShapeableImageView, defStyle, -1)
|
||||
val cornerSize =
|
||||
typedArray.getDimension(R.styleable.RetroShapeableImageView_retroCornerSize, 0f)
|
||||
updateCornerSize(cornerSize)
|
||||
val cornerSize = typedArray.getDimension(R.styleable.RetroShapeableImageView_retroCornerSize, 0f)
|
||||
val circleShape = typedArray.getBoolean(R.styleable.RetroShapeableImageView_circleShape, false)
|
||||
addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ ->
|
||||
val radius = width / 2f
|
||||
shapeAppearanceModel = ShapeAppearanceModel().withCornerSize(radius)
|
||||
}
|
||||
typedArray.recycle()
|
||||
}
|
||||
|
||||
|
|
|
@ -60,15 +60,11 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical">
|
||||
|
||||
<com.google.android.material.progressindicator.ProgressIndicator
|
||||
<com.google.android.material.progressindicator.CircularProgressIndicator
|
||||
android:id="@+id/progressBar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:circularRadius="16dp"
|
||||
app:indicatorColor="@android:color/black"
|
||||
app:indicatorType="circular"
|
||||
app:indicatorWidth="2dp"
|
||||
app:linearSeamless="true"
|
||||
android:layout_gravity="center"
|
||||
tools:progress="10" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
|
|
|
@ -72,10 +72,10 @@
|
|||
tools:visibility="visible" />
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.progressindicator.ProgressIndicator
|
||||
<com.google.android.material.progressindicator.CircularProgressIndicator
|
||||
android:id="@+id/progressIndicator"
|
||||
android:layout_width="100dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="100dp"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:indeterminate="true" />
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
android:padding="4dp"
|
||||
tools:ignore="MissingPrefix">
|
||||
|
||||
<io.github.muntashirakon.music.views.CircularImageView
|
||||
<io.github.muntashirakon.music.views.RetroShapeableImageView
|
||||
android:id="@+id/image"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
|
|
|
@ -10,12 +10,11 @@
|
|||
<com.google.android.material.card.MaterialCardView
|
||||
android:id="@+id/imageContainer"
|
||||
android:layout_width="156dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_height="156dp"
|
||||
android:layout_margin="8dp"
|
||||
android:orientation="vertical"
|
||||
app:cardCornerRadius="8dp"
|
||||
app:cardPreventCornerOverlap="true"
|
||||
app:layout_constraintDimensionRatio="1:1"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
|
|
@ -12,59 +12,48 @@
|
|||
~ See the GNU General Public License for more details.
|
||||
-->
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical|end"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/playAction"
|
||||
android:layout_width="wrap_content"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:layout_weight="1"
|
||||
android:paddingTop="12dp"
|
||||
android:paddingBottom="12dp"
|
||||
android:text="@string/action_play_all"
|
||||
android:visibility="gone"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
app:backgroundTint="?attr/colorSurface"
|
||||
app:icon="@drawable/ic_play_arrow" />
|
||||
app:cornerRadius="8dp"
|
||||
app:layout_constraintEnd_toStartOf="@+id/shuffleAction"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/shuffleAction"
|
||||
android:layout_width="wrap_content"
|
||||
style="@style/Widget.MaterialComponents.Button.TextButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="4dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_weight="1"
|
||||
android:paddingTop="12dp"
|
||||
android:paddingBottom="12dp"
|
||||
android:text="@string/shuffle"
|
||||
android:visibility="gone"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
app:backgroundTint="?attr/colorSurface"
|
||||
app:icon="@drawable/ic_shuffle" />
|
||||
app:cornerRadius="8dp"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/playAction"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toEndOf="@+id/playAction"
|
||||
app:layout_constraintTop_toTopOf="@+id/playAction" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="true"
|
||||
android:padding="16dp"
|
||||
app:srcCompat="@drawable/ic_sort"
|
||||
app:tint="?attr/colorControlNormal" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="true"
|
||||
android:padding="16dp"
|
||||
app:srcCompat="@drawable/ic_grid_size"
|
||||
app:tint="?attr/colorControlNormal" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="true"
|
||||
android:padding="16dp"
|
||||
app:srcCompat="@drawable/ic_layout"
|
||||
app:tint="?attr/colorControlNormal" />
|
||||
|
||||
</LinearLayout>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -13,16 +13,19 @@
|
|||
-->
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:padding="14dp">
|
||||
android:padding="14dp"
|
||||
app:layout_gravity="center">
|
||||
|
||||
<ProgressBar
|
||||
style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate"
|
||||
android:layout_width="match_parent"
|
||||
style="@style/Widget.MaterialComponents.CircularProgressIndicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:indeterminate="true" />
|
||||
|
||||
</LinearLayout>
|
|
@ -20,6 +20,7 @@
|
|||
android:background="?attr/rectSelector"
|
||||
android:descendantFocusability="blocksDescendants"
|
||||
android:focusable="true"
|
||||
android:minHeight="@dimen/md_listitem_height"
|
||||
android:orientation="horizontal"
|
||||
android:paddingStart="16dp"
|
||||
android:paddingEnd="0dp"
|
||||
|
@ -41,11 +42,7 @@
|
|||
android:layout_weight="1"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center_vertical"
|
||||
android:minHeight="@dimen/md_listitem_height"
|
||||
android:paddingStart="@dimen/md_listitem_control_margin"
|
||||
android:paddingLeft="@dimen/md_listitem_control_margin"
|
||||
android:paddingTop="@dimen/md_listitem_vertical_margin_choice"
|
||||
android:paddingBottom="@dimen/md_listitem_vertical_margin_choice"
|
||||
android:paddingHorizontal="16dp"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextViewNormal"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
|
|
|
@ -20,8 +20,8 @@
|
|||
<string name="action_go_to_genre">Aller au genre</string>
|
||||
<string name="action_go_to_start_directory">Aller au dossier de départ</string>
|
||||
<string name="action_grant">Accorder</string>
|
||||
<string name="action_grid_size">Taille de la grille</string>
|
||||
<string name="action_grid_size_land">Taille de la grille (paysage)</string>
|
||||
<string name="action_grid_size">Taille de l\'affichage</string>
|
||||
<string name="action_grid_size_land">Taille de l\'affichage (paysage)</string>
|
||||
<string name="action_new_playlist">Nouvelle liste de lecture…</string>
|
||||
<string name="action_next">Suivant</string>
|
||||
<string name="action_play">Lecture</string>
|
||||
|
@ -540,7 +540,7 @@
|
|||
<string name="sort_order_artist">Artiste</string>
|
||||
<string name="sort_order_composer">Compositeur</string>
|
||||
<string name="sort_order_date">Date</string>
|
||||
<string name="sort_order_date_modified">Date modified</string>
|
||||
<string name="sort_order_date_modified">Date de modification</string>
|
||||
<string name="sort_order_year">Année</string>
|
||||
<string name="sort_order_z_a">Descendant</string>
|
||||
|
||||
|
|
659
app/src/main/res/values-my/strings.xml
Normal file
659
app/src/main/res/values-my/strings.xml
Normal file
|
@ -0,0 +1,659 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<resources>
|
||||
<string name="about_album_label">About %s</string>
|
||||
<string name="about_settings_summary">အဖွဲ့နှင့် လူမှုကွန်ယက်လင့်ခ်များ</string>
|
||||
|
||||
<string name="accent_color">Accent Color</string>
|
||||
<string name="accent_color_desc">The theme accent color (ခရမ်းရောင်သည်မူလအရောင်)</string>
|
||||
|
||||
<string name="action_about">About</string>
|
||||
<string name="action_add_to_favorites">အကြိုက်ဆုံးသို့ထည့်မည်</string>
|
||||
<string name="action_add_to_playing_queue">နားထောင်နေသည့်စာရင်းထဲသို့ထည့်မည်</string>
|
||||
<string name="action_add_to_playlist">Playlist သို့ထည့်မည်</string>
|
||||
<string name="action_clear_playing_queue">နားထောင်နေသည့်စာရင်းအားရှင်းမည်</string>
|
||||
<string name="action_cycle_repeat">Cycle repeat mode</string>
|
||||
<string name="action_delete">ဖျက်မည်</string>
|
||||
<string name="action_delete_from_device">Device မှဖျက်မည်</string>
|
||||
<string name="action_details">အသေးစိတ်</string>
|
||||
<string name="action_go_to_album">Album သို့သွားမည်</string>
|
||||
<string name="action_go_to_artist">အဆိုတော်သို့သွားမည်</string>
|
||||
<string name="action_go_to_genre">အမျိုးအစားသို့သွားမည်</string>
|
||||
<string name="action_go_to_start_directory">Directory အစသို့သွားမည်</string>
|
||||
<string name="action_grant">ခွင့်ပြုမည်</string>
|
||||
<string name="action_grid_size">အကွက်အရွယ်အစား</string>
|
||||
<string name="action_grid_size_land">အကွက်အရွယ်အစား (land)</string>
|
||||
<string name="action_new_playlist">Playlist အသစ်</string>
|
||||
<string name="action_next">နောက်တစ်ပုဒ်</string>
|
||||
<string name="action_play">Play မည်</string>
|
||||
<string name="action_play_all">အားလုံး play မည်</string>
|
||||
<string name="action_play_next">Play next</string>
|
||||
<string name="action_play_pause">Play/ခေတ္တရပ်</string>
|
||||
<string name="action_previous">ယခင်အပုဒ်</string>
|
||||
<string name="action_remove_from_favorites">အကြိုက်ဆုံးမှထုတ်မည်</string>
|
||||
<string name="action_remove_from_playing_queue">နားထောင်နေသည့်စာရင်းမှထုတ်မည်</string>
|
||||
<string name="action_remove_from_playlist">Playlist မှထုတ်မည်</string>
|
||||
<string name="action_rename">နာမည်ပြင်မည်</string>
|
||||
<string name="action_save_playing_queue">နားထောင်နေသည့်စာရင်းအားသိမ်းမည်</string>
|
||||
<string name="action_scan">စကန်ဖတ်မည်</string>
|
||||
<string name="action_search">ရှာမည်</string>
|
||||
<string name="action_set">စမည်</string>
|
||||
<string name="action_set_as_ringtone">Ringtone အဖြစ်ထားမည်</string>
|
||||
<string name="action_set_as_start_directory">Directory အစအဖြစ်ထားမည်</string>
|
||||
<string name="action_settings">"Settings"</string>
|
||||
<string name="action_share">မျှဝေမည်</string>
|
||||
<string name="action_shuffle_all">အားလုံး Shuffle play မည်</string>
|
||||
<string name="action_shuffle_playlist">Playlist အား Shuffle play မည်</string>
|
||||
<string name="action_sleep_timer">Sleep Timer</string>
|
||||
<string name="action_sort_order">အထားအသိုပြင်မည်</string>
|
||||
<string name="action_tag_editor">Tag တည်းဖြတ်ခြင်း</string>
|
||||
<string name="action_toggle_favorite">Toggle favorite</string>
|
||||
<string name="action_toggle_shuffle">Toggle shuffle mode</string>
|
||||
|
||||
<string name="adaptive">Adaptive</string>
|
||||
|
||||
<string name="add_action">ထည့်မည်</string>
|
||||
<string name="add_playlist_title">"အောက်ပါ Playlist သို့ထည့်မည်"</string>
|
||||
|
||||
<string name="added_title_to_playing_queue">"နားထောင်နေသည့်စာရင်းထဲသို့ ၁ ပုဒ်ပေါင်းထည့်ခဲ့သည်"</string>
|
||||
<string name="added_x_titles_to_playing_queue">နားထောင်နေသည့်စာရင်းထဲသို့ %1$d ပုဒ်ပေါင်းထည့်ခဲ့သည်</string>
|
||||
|
||||
<string name="album">Album</string>
|
||||
|
||||
<plurals name="albumSongs">
|
||||
<item quantity="one">သီချင်း</item>
|
||||
<item quantity="other">သီချင်းများ</item>
|
||||
</plurals>
|
||||
|
||||
<string name="album_artist">Album အားသီဆိုသူ</string>
|
||||
|
||||
<string name="albums">Albums</string>
|
||||
<plurals name="albums">
|
||||
<item quantity="one">Album</item>
|
||||
<item quantity="other">Albums</item>
|
||||
</plurals>
|
||||
|
||||
<string name="always">Always</string>
|
||||
|
||||
<string name="app_share">ဟေ့ အရမ်းမိုက်တဲ့ဒီ Music Player ကိုတစ်ချက်ကြည့်ကြည့်! https://play.google.com/store/apps/details?id=%s</string>
|
||||
<string name="app_shortcut_shuffle_all_short">Shuffle</string>
|
||||
<string name="app_shortcut_top_tracks_short">ထိပ်ဆုံးသီချင်းများ</string>
|
||||
<string name="app_widget_big_name">ပုံအပြည့်</string>
|
||||
<string name="app_widget_card_name">ကတ်</string>
|
||||
<string name="app_widget_classic_name">ရိုးရိုး</string>
|
||||
<string name="app_widget_small_name">အသေး</string>
|
||||
<string name="app_widget_text_name">စာပါဝင်မှုနည်း</string>
|
||||
|
||||
<string name="artist">အဆိုတော်</string>
|
||||
|
||||
<string name="artists">အဆိုတော်များ</string>
|
||||
|
||||
<string name="audio_focus_denied">အသံအာရုံစိုက်ခြင်းအား ပယ်ဖျက်ခဲ့သည်</string>
|
||||
<string name="audio_settings_summary">အသံ Settings များပြောင်းလဲရန်နှင့် Equalizer ချိန်ညှိရန်</string>
|
||||
|
||||
<string name="auto">အလိုအလျောက်</string>
|
||||
|
||||
<string name="biography">အတ္ထုပတ္တိ</string>
|
||||
|
||||
<string name="black_theme_name">အနက်ရောင်သာ</string>
|
||||
|
||||
<string name="blacklist">လစ်လျူရှုမည့်စာရင်း</string>
|
||||
|
||||
<string name="blur">Blur</string>
|
||||
<string name="blur_card">ကတ်အဝါး</string>
|
||||
|
||||
<string name="bug_report_failed">သတင်းပို့၍မရနိုင်ပါ</string>
|
||||
<string name="bug_report_failed_invalid_token">မမှန်ကန်သော Access token ဖြစ်သည်။ ကျေးဇူးပြု၍ App ရေးသားသူအားဆက်သွယ်ပါ။</string>
|
||||
<string name="bug_report_failed_issues_not_available">ရွေးချယ်ထားသော Repository အတွက် Issue ဖွင့်ခွင့်မပေးထားပါ။ ကျေးဇူးပြု၍ App ရေးသားသူအားဆက်သွယ်ပါ။</string>
|
||||
<string name="bug_report_failed_unknown">မသိထားသော Error တက်သွားခဲ့သည်။ ကျေးဇူးပြု၍ App ရေးသားသူအားဆက်သွယ်ပါ။</string>
|
||||
<string name="bug_report_failed_wrong_credentials">Username (သို့မဟုတ်) Password မှားနေသည်</string>
|
||||
<string name="bug_report_issue">အကြောင်းအရာ</string>
|
||||
<string name="bug_report_manual">ကိုယ်တိုင်အသေးစိတ်သတင်းပို့မည်</string>
|
||||
<string name="bug_report_no_description">ကျေးဇူးပြု၍ အကြောင်းအရာအသေးစိတ်ကိုဖြည့်သွင်းပါ</string>
|
||||
<string name="bug_report_no_password">ကျေးဇူးပြု၍ မှန်ကန်သော Github password ကိုဖြည့်သွင်းပါ</string>
|
||||
<string name="bug_report_no_title">ကျေးဇူးပြု၍အကြောင်းအရာခေါင်းစဉ်အားဖြည့်သွင်းပါ</string>
|
||||
<string name="bug_report_no_username">ကျေးဇူးပြု၍ မှန်ကန်သော Github username ကိုဖြည့်သွင်းပါ</string>
|
||||
<string name="bug_report_summary">မသိထားတဲ့ Error တစ်ခုတက်ခဲ့တယ်ဆိုပါစို့။ ဆက်ပြီး Crash ဖြစ်နေတယ်ဆိုရင် \"Clear App Data\" လုပ်ပါ (ဒါမှမဟုတ်) အီးမေးလ်ပို့ပါ။</string>
|
||||
<string name="bug_report_use_account">GitHub အကောင့်ဖြင့်ပို့မည်</string>
|
||||
|
||||
<string name="buy_now">ယခုဝယ်မည်</string>
|
||||
|
||||
<string name="cancel_current_timer">ပယ်ဖျက်မည်</string>
|
||||
|
||||
<string name="card">ကတ်</string>
|
||||
<string name="card_color_style">အရောင်ပါသောကတ်</string>
|
||||
<string name="card_square">လေးထောင့်ကတ်</string>
|
||||
<string name="card_style">ကတ်</string>
|
||||
|
||||
<string name="carousal_effect_on_now_playing_screen">Now Playing Screen ပေါ်တွင် Carousel effect </string>
|
||||
|
||||
<string name="cascading">Cascading</string>
|
||||
|
||||
<string name="changelog">ပြောင်းလဲမှုမှတ်တမ်း</string>
|
||||
<string name="changelog_summary">Telegram channel ရှိ ပြောင်းလဲမှုမှတ်တမ်း</string>
|
||||
|
||||
<string name="circle">အဝိုင်း</string>
|
||||
|
||||
<string name="circular">အဝိုင်း</string>
|
||||
|
||||
<string name="classic">ရိုးရိုး</string>
|
||||
|
||||
<string name="clear_action">ရှင်းမည်</string>
|
||||
<string name="clear_blacklist">Blacklist အားရှင်းမည်</string>
|
||||
<string name="clear_playing_queue">နားထောင်နေသည့်စာရင်းအားရှင်းမည်</string>
|
||||
|
||||
<string name="color">အရောင်</string>
|
||||
|
||||
<string name="colors">အရောင်များ</string>
|
||||
|
||||
<string name="composer">တေးရေးဆရာ</string>
|
||||
|
||||
<string name="copied_device_info_to_clipboard">Device အချက်အလက်အား Clipboard သို့ ကော်ပီကူးခဲ့ပြီး</string>
|
||||
|
||||
<string name="could_not_create_playlist">Playlist ဖန်တီး၍မရပါ</string>
|
||||
<string name="could_not_download_album_cover">"ကိုက်ညီသော Album Cover ကို Download မလုပ်နိုင်ပါ"</string>
|
||||
<string name="could_not_restore_purchase">ဝယ်ယူမှုကိုပြန်မရယူနိုင်ပါ</string>
|
||||
<string name="could_not_scan_files">ဖိုင် %d ခုကိုစကန်မဖတ်နိုင်ပါ</string>
|
||||
|
||||
<string name="create_action">ဖန်တီးမည်</string>
|
||||
|
||||
<string name="created_playlist_x">ဖန်တီးထားသော Playlist %1$s ခု</string>
|
||||
|
||||
<string name="credit_title">အဖွဲ့ဝင်များနှင့် ကူညီသူများ</string>
|
||||
|
||||
<string name="currently_listening_to_x_by_x">%2$s သီဆိုထားသော %1$s ကိုယခုနားထောင်နေသည်</string>
|
||||
|
||||
<string name="dark_theme_name">အနက်ရောင်ဆန်ဆန်</string>
|
||||
|
||||
<string name="delete_playlist_title">Playlist ဖျက်ခြင်း</string>
|
||||
<string name="delete_playlist_x"><![CDATA[<b>%1$s</b> Playlist ကိုဖျက်မှာလား]]></string>
|
||||
<string name="delete_playlists_title">Playlist များဖျက်ခြင်း</string>
|
||||
<string name="delete_song_title">သီချင်းဖျက်ခြင်း</string>
|
||||
<string name="delete_song_x"><![CDATA[<b>%1$s</b>? သီချင်းကိုဖျက်မှာလား]]></string>
|
||||
<string name="delete_songs_title">သီချင်းများဖျက်ခြင်း</string>
|
||||
<string name="delete_x_playlists"><![CDATA[Playlist <b>%1$d</b> ခုကိုဖျက်မှာလား]]></string>
|
||||
<string name="delete_x_songs"><![CDATA[သီချင်း <b>%1$d</b> ပုဒ်ကိုဖျက်မှာလား]]></string>
|
||||
|
||||
<string name="deleted_x_songs">သီချင်း %1$d ပုဒ်ကိုဖျက်ပစ်ခဲ့သည်</string>
|
||||
|
||||
<string name="depth">Depth</string>
|
||||
|
||||
<string name="description">အကြောင်းအရာအသေးစိတ်</string>
|
||||
|
||||
<string name="device_info">Device အချက်အလက်</string>
|
||||
|
||||
<string name="dialog_message_set_ringtone">အသံ Settings ပြုပြင်ရန် Retro Music ကိုခွင့်ပြုချက်ပေးပါ</string>
|
||||
<string name="dialog_title_set_ringtone">Ringtone ထားခြင်း</string>
|
||||
|
||||
<string name="do_you_want_to_clear_the_blacklist">Blacklist ကိုရှင်းလင်းလိုပါသလား</string>
|
||||
<string name="do_you_want_to_remove_from_the_blacklist"><![CDATA[Blacklist မှ <b>%1$s</b> ကိုဖယ်ရှားလိုပါသလား]]></string>
|
||||
|
||||
<string name="donate">လှူဒါန်းမည်</string>
|
||||
<string name="donate_summary">ကျွန်တော့်ရဲ့လက်ရာအတွက် မုန့်ဖိုးရဖို့ထိုက်တန်တယ်လို့ထင်ရင် ဒီမှာပေးသွားလိုက်ပါ။</string>
|
||||
|
||||
<string name="donation_header">ဝယ်ပေးမယ်: </string>
|
||||
|
||||
<string name="done">ပြီးပြီ</string>
|
||||
|
||||
<string name="drive_mode">Drive mode</string>
|
||||
|
||||
<string name="empty">ဘာမှမရှိပါ</string>
|
||||
|
||||
<string name="equalizer">Equalizer</string>
|
||||
|
||||
<string name="faq">မေးလေ့ရှိသောမေးခွန်းများ</string>
|
||||
|
||||
<string name="favorites">အကြိုက်ဆုံး</string>
|
||||
|
||||
<string name="finish_last_song">Finish last song</string>
|
||||
|
||||
<string name="fit">အနေတော်</string>
|
||||
|
||||
<string name="flat">အပြားပုံစံ</string>
|
||||
|
||||
<string name="folders">Folders</string>
|
||||
|
||||
<string name="follow_system">System အတိုင်း</string>
|
||||
|
||||
<string name="for_you">သင့်အတွက်</string>
|
||||
|
||||
<string name="free">အခမဲ့</string>
|
||||
|
||||
<string name="full">အပြည့်</string>
|
||||
<string name="full_card">ကတ်အပြည့်ပုံစံ</string>
|
||||
|
||||
<string name="general_settings_summary">App Theme နှင့် အရောင်များကိုပြောင်းလဲရန်</string>
|
||||
<string name="general_settings_title">Look and Feel</string>
|
||||
|
||||
<string name="genre">အမျိုးအစား</string>
|
||||
|
||||
<string name="genres">အမျိုးအစားများ</string>
|
||||
|
||||
<string name="git_hub_summary">Project ကို GitHub မှာ Fork လုပ်ပါ</string>
|
||||
|
||||
<string name="gradient">Gradient</string>
|
||||
|
||||
<string name="grid_size_1">၁</string>
|
||||
<string name="grid_size_2">၂</string>
|
||||
<string name="grid_size_3">၃</string>
|
||||
<string name="grid_size_4">၄</string>
|
||||
<string name="grid_size_5">၅</string>
|
||||
<string name="grid_size_6">၆</string>
|
||||
<string name="grid_size_7">၇</string>
|
||||
<string name="grid_size_8">၈</string>
|
||||
<string name="grid_style_label">အကွက်စတိုင်</string>
|
||||
|
||||
<string name="help_summary">အကူအညီထပ်လိုပါသေးလား</string>
|
||||
|
||||
<string name="hinge">Hinge</string>
|
||||
|
||||
<string name="history">မှတ်တမ်း</string>
|
||||
|
||||
<string name="home">မူလ</string>
|
||||
|
||||
<string name="horizontal_flip">ရေပြင်ညီအတိုင်းဟိုဘက်ဒီဘက်လှန်ခြင်း</string>
|
||||
|
||||
<string name="image">ဓာတ်ပုံ</string>
|
||||
<string name="image_gradient">Gradient ပုံ</string>
|
||||
<string name="image_settings_summary">အဆိုတော်ပုံအား ဒေါင်းလုဒ်ဆွဲခြင်း Settings များ</string>
|
||||
|
||||
<string name="import_label">Import</string>
|
||||
<string name="import_playlist">Import playlist</string>
|
||||
<string name="import_playlist_message">Android မီဒီယာစတိုးမှ Playlist များကိုသီချင်းများနှင့်အတူ import လုပ်သွားမည်ဖြစ်ပြီး ရှိပြီးသား Playlist ဖြစ်ပါကသီချင်းများကိုထည့်ပေါင်းသွားပါမည်။</string>
|
||||
|
||||
<string name="inserted_x_songs_into_playlist_x">Playlist %2$s သို့သီချင်း %1$d ပုဒ်ထည့်ပြီးပါပြီ</string>
|
||||
|
||||
<string name="instagram_page" translatable="false">Instagram</string>
|
||||
<string name="instagram_page_summary">သင့်ရဲ့ Retro Music setup ကို Instagram တွင်ပြသလိုက်ပါ</string>
|
||||
|
||||
<string name="keyboard">ကီးဘုတ်</string>
|
||||
|
||||
<string name="label_bit_rate">Bitrate</string>
|
||||
<string name="label_file_format">အမျိုးအစား</string>
|
||||
<string name="label_file_name">ဖိုင်နာမည်</string>
|
||||
<string name="label_file_path">ဖိုင်နေရာ</string>
|
||||
<string name="label_file_size">အရွယ်အစား</string>
|
||||
<string name="label_more_from">%s ၏နောက်ထပ် Album များ</string>
|
||||
<string name="label_sampling_rate">Sampling rate</string>
|
||||
<string name="label_track_length">ကြာချိန်</string>
|
||||
|
||||
<string name="labeled">Label ထိုးထားမည်</string>
|
||||
|
||||
<string name="last_added">နောက်ဆုံးသွင်းထားသော</string>
|
||||
<string name="last_song">နောက်ဆုံးအပုဒ်</string>
|
||||
|
||||
<string name="library_categories">Tab အမျိုးအစားများ</string>
|
||||
|
||||
<string name="licenses">လိုင်စင်များ</string>
|
||||
|
||||
<string name="light_theme_name">အဖြူရောင်သက်သက်</string>
|
||||
|
||||
<string name="listeners_label">နားဆင်သူများ</string>
|
||||
|
||||
<string name="listing_files">ဖိုင်ပြန်စီနေသည်...</string>
|
||||
|
||||
<string name="loading_products">ခဏစောင့်ပါ...</string>
|
||||
|
||||
<string name="login">Login</string>
|
||||
|
||||
<string name="lyrics">သီချင်းစာသား</string>
|
||||
|
||||
<string name="made_with_love">အိန္ဒိယနိုင်ငံတွင် ❤️ များဖြင့် ဖန်တီးသည်</string>
|
||||
|
||||
<string name="material">Material</string>
|
||||
|
||||
<string name="md_error_label">Error</string>
|
||||
<string name="md_storage_perm_error">Storage ခွင့်ပြုချက် error</string>
|
||||
|
||||
<string name="my_name">နာမည်</string>
|
||||
<string name="my_top_tracks">အများဆုံးနားထောင်ခဲ့သော</string>
|
||||
|
||||
<string name="never">ဘယ်တော့မှ</string>
|
||||
|
||||
<string name="new_playlist_title">Playlist အသစ်</string>
|
||||
<string name="new_start_directory">%s ဟာ Directory အစဖြစ်သွားပါပြီ</string>
|
||||
|
||||
<string name="next_song">နောက်တစ်ပုဒ်</string>
|
||||
|
||||
<string name="no_albums">Album တစ်ခုမှမရှိပါ</string>
|
||||
<string name="no_artists">အဆိုတော်တစ်ယောက်မှမရှိပါ</string>
|
||||
<string name="no_audio_ID">"သီချင်းတစ်ပုဒ်အရင် play ကြည့်ပြီးမှ ပြန်ကြိုးစားပါ"</string>
|
||||
<string name="no_equalizer">Equalizer တစ်ခုမှရှာမတွေ့ပါ</string>
|
||||
<string name="no_genres">အမျိုးအစားခွဲစရာတစ်ခုမှမရှိပါ</string>
|
||||
<string name="no_lyrics_found">သီချင်းစာသားရှာမတွေ့ပါ</string>
|
||||
<string name="no_playing_queue">သီချင်းတစ်ပုဒ်မှ play မထားပါ</string>
|
||||
<string name="no_playlists">Playlist တစ်ခုမှမရှိပါ</string>
|
||||
<string name="no_purchase_found">ဝယ်ယူထားမှုမရှိပါ</string>
|
||||
<string name="no_results">ရှာမတွေ့ပါ</string>
|
||||
<string name="no_songs">သီချင်းတစ်ပုဒ်မှမရှိပါ</string>
|
||||
|
||||
<string name="normal">ပုံမှန်</string>
|
||||
<string name="normal_lyrics">ပုံမှန်သီချင်းစာသား</string>
|
||||
|
||||
<string name="not_listed_in_media_store"><![CDATA[<b>%s</b> သည် Android မီဒီယာစတိုးတွင် မရှိပါ]]></string>
|
||||
<string name="not_recently_played">မကြာသေးခင်က play မထားပါ</string>
|
||||
|
||||
<string name="nothing_to_scan">စကန်ဖတ်စရာမရှိပါ</string>
|
||||
<string name="nothing_to_see">ကြည့်စရာတစ်ခုမှမရှိပါ</string>
|
||||
|
||||
<string name="notification">Notification</string>
|
||||
<string name="notification_settings_summary">Notification ပုံစံကို စိတ်ကြိုက်ပြင်ဆင်မည်</string>
|
||||
|
||||
<string name="now_playing">Now playing</string>
|
||||
<string name="now_playing_queue">Now playing queue</string>
|
||||
<string name="now_playing_summary">Now playing screen ကိုစိတ်ကြိုက်ပြင်ခြင်း</string>
|
||||
<string name="now_playing_themes">Now playing theme (၉) ခုအထက် ရရှိခြင်း</string>
|
||||
|
||||
<string name="only_on_wifi">Wi-Fi ဖြင့်သာ</string>
|
||||
|
||||
<string name="other_settings_summary">အဆင့်မြင့် Settings များ</string>
|
||||
|
||||
<string name="others">အခြား</string>
|
||||
|
||||
<string name="password">Password</string>
|
||||
|
||||
<string name="past_three_months">လွန်ခဲ့သော (၃)လ</string>
|
||||
|
||||
<string name="peak">Peak ပုံစံ</string>
|
||||
|
||||
<string name="permission_external_storage_denied">External Storage ကြည့်ရှုခွင့်အားငြင်းပယ်ခဲ့သည်။</string>
|
||||
<string name="permission_summary">သီချင်းဖွင့်ရန်အတွက် ယခု App အား Storage ကြည့်ရှုခွင့်ပေးရန်လိုသည်။</string>
|
||||
<string name="permission_title">Storage ကြည့်ရှုခွင့်</string>
|
||||
|
||||
<string name="permissions_denied">ခွင့်ပြုချက်ငြင်းပယ်ခံရသည်</string>
|
||||
|
||||
<string name="personalize">မိမိစိတ်ကြိုက်</string>
|
||||
<string name="personalize_settings_summary">Now Playing နှင့် UI controls များကိုစိတ်ကြိုက်ပြင်ဆင်မည်</string>
|
||||
|
||||
<string name="pick_from_local_storage">Local Storage မှ ရွေးမည်</string>
|
||||
|
||||
<string name="pinterest_page">Pinterest</string>
|
||||
<string name="pinterest_page_summary">Retro Music ဒီဇိုင်းအကြံဉာဏ်ကောင်းများအတွက် Pinterest page ကို follow ပါ</string>
|
||||
|
||||
<string name="plain">ရှင်းရှင်းလင်းလင်းပုံစံ</string>
|
||||
|
||||
<string name="playing_notification_description">Playing notification သည် play/pause ခလုတ် စသည့်တို့ကိုဖော်ပြပေးသည်</string>
|
||||
<string name="playing_notification_name">Playing notification</string>
|
||||
|
||||
<string name="playlist_is_empty">Playlist တွင်ဘာမှမရှိပါ</string>
|
||||
<string name="playlist_name_empty">Playlist နာမည်</string>
|
||||
|
||||
<string name="playlists">Playlists</string>
|
||||
|
||||
<string name="pref_blur_amount_summary">Blur Themes များအတွက်သက်ရောက်သော အဝါးပမာဏဖြစ်ပြီး ပမာဏနည်းလေ ပိုမြန်လေဖြစ်သည်</string>
|
||||
<string name="pref_blur_amount_title">အဝါးပမာဏ</string>
|
||||
<string name="pref_filter_song_summary">ကြာချိန်ဖြင့်သီချင်းစစ်ထုတ်မည်</string>
|
||||
<string name="pref_filter_song_title">သီချင်းကြာချိန်စစ်ထုတ်ခြင်း</string>
|
||||
<string name="pref_header_advanced">ပိုမိုဆန်းသစ်သော</string>
|
||||
<string name="pref_header_album">Album စတိုင်</string>
|
||||
<string name="pref_header_audio">အသံပိုင်းဆိုင်ရာ</string>
|
||||
<string name="pref_header_blacklist">Blacklist</string>
|
||||
<string name="pref_header_controls">ထိန်းချုပ်မှုဆိုင်ရာ</string>
|
||||
<string name="pref_header_general">Theme</string>
|
||||
<string name="pref_header_images">Images</string>
|
||||
<string name="pref_header_library">Library</string>
|
||||
<string name="pref_header_lockscreen">Lockscreen</string>
|
||||
<string name="pref_header_playlists">Playlists</string>
|
||||
<string name="pref_keep_pause_on_zero_volume_summary">Volume သုညရောက်သွားပါက သီချင်းရပ်ပြီး Volume ပြန်ကျယ်လာသည့်အခါ ပြန် play မည်ဖြစ်သည်။ App ထဲဝင်မထားသော်လည်းအလုပ်လုပ်သည်။</string>
|
||||
<string name="pref_keep_pause_on_zero_volume_title">သုည၌ရပ်ခြင်း</string>
|
||||
<string name="pref_keep_screen_on_summary">ဤ feature ဖွင့်ထားပါက ဘက်ထရီသက်တမ်းထိခိုက်နိုင်ပါသည်</string>
|
||||
<string name="pref_keep_screen_on_title">Screen တစ်ချိန်လုံးဖွင့်ထားမည်</string>
|
||||
<string name="pref_language_name">ဘာသာစကားရွေးချယ်မည်</string>
|
||||
<string name="pref_summary_album_art_on_lockscreen">ယခု play နေသောသီချင်း Album cover ပုံအား Lockscreen wallpaper အဖြစ်ထားမည်</string>
|
||||
<string name="pref_summary_album_artists_only">Album သီဆိုသူများကိုလည်း အဆိုတော် Category တွင်ထားမည်</string>
|
||||
<string name="pref_summary_audio_ducking">System Sound (သို့) Notification တစ်ခုရောက်လာသည့်အခါ သီချင်းအသံကိုတိုးမည်</string>
|
||||
<string name="pref_summary_blacklist">Blacklist folder သိို့သွင်းထားသည်များကို Library တွင်မြင်ရမည်မဟုတ်ပါ</string>
|
||||
<string name="pref_summary_bluetooth_playback">Bluetooth device နှင့်ချိတ်ဆက်လိုက်သည်နှင့် သီချင်းစဖွင့်မည်</string>
|
||||
<string name="pref_summary_blurred_album_art">Lockscreen တွင် Album cover ပုံကိုဝါးထားမည်။ Third-party app နှင့် Widget များတွင် ပြဿနာတက်နိုင်သည်။</string>
|
||||
<string name="pref_summary_carousel_effect">Now Playing screen မှ Album cover အတွက် Carousel effect ဖြစ်သည်။ ဤ effect ကြောင့် ကတ်နှင့် ကတ်အဝါး Theme များအလုပ်လုပ်မည်မဟုတ်ပါ။</string>
|
||||
<string name="pref_summary_classic_notification">Android ၏ Notification ဒီဇိုင်းအဟောင်းကိုသုံးမည်</string>
|
||||
<string name="pref_summary_colored_app">နောက်ခံအရောင်နှင့်ထိန်းချုပ်ခလုတ်အရောင်များသည် Now Playing screen မှ Album cover အရောင်အတိုင်း ပြောင်းလဲပါမည်</string>
|
||||
<string name="pref_summary_colored_app_shortcuts">Accent color မှ App shortcuts များကိုအရောင်ပြောင်းလဲသည်။ Accent color ပြောင်းသည့်အခါတိုင်း App ကိုသက်ရောက်မှုရှိစေရန် ဤခလုတ်ကိုအဖွင့်၊အပိတ်လုပ်ပေးပါ။</string>
|
||||
<string name="pref_summary_colored_notification">"Notification အရောင်ကို Album cover မှထင်ရှားသည့်အရောင်အတိုင်း ပြောင်းမည်"</string>
|
||||
<string name="pref_summary_desaturated_color">Material ဒီဇိုင်းညွှန်ကြားချက်များအရ Dark Mode ဖွင့်ထားချိန်တွင်အရောင်များမှိန်နေသင့်သည်</string>
|
||||
<string name="pref_summary_expand_now_playing_panel">Notification ကိုနှိပ်သည့်အခါ Home screen သို့ရောက်မည့်အစား Now Playing screen သို့တိုက်ရိုက်ရောက်သွားမည်</string>
|
||||
<string name="pref_summary_extra_controls">Mini player တွင် ထိန်းချုပ်ခလုတ်အပိုများထပ်ပေါင်းမည်</string>
|
||||
<string name="pref_summary_extra_song_info">သီချင်းဖိုင်၏အသေးစိတ်အချက်အလက်များ ပြသမည်၊ ဥပမာ - ဖိုင်အမျိုးအစား၊ bitrate နှင့် ကြိမ်နှုန်း</string>
|
||||
<string name="pref_summary_gapless_playback">"အချို့ device များတွင် playback ပြဿနာများဖြစ်ပေါ်နိုင်သည်"</string>
|
||||
<string name="pref_summary_home_banner">Home banner အား ပြသခြင်း၊ ဖျောက်ထားခြင်း</string>
|
||||
<string name="pref_summary_ignore_media_store_artwork">Album cover အရည်အသွေးပိုမိုကောင်းမွန်လာနိုင်သော်လည်း Loading time ပိုကြာနိုင်သည်။ အရည်အသွေးနိမ့်သောပုံများနှင့်အဆင်မပြေမှသာလျှင် ဤခလုတ်ကိုဖွင့်ပါ။</string>
|
||||
<string name="pref_summary_library_categories">Library category များ ဖော်ခြင်း၊ ဖျောက်ခြင်းနှင့် အထားအသိုများ ချိန်ညှိမည်</string>
|
||||
<string name="pref_summary_lock_screen">Retro Music ၏ ပြင်ဆင်ထားသော Lockscreen controls များကိုသုံးမည်</string>
|
||||
<string name="pref_summary_open_source_licences">Open Source software အတွက် လိုင်စင်အချက်အလက်များ</string>
|
||||
<string name="pref_summary_toggle_full_screen">Immersive mode</string>
|
||||
<string name="pref_summary_toggle_headset">နားကြပ်နှင့်ချိတ်ဆက်ပြီးသည့်နှင့် စတင် play မည်</string>
|
||||
<string name="pref_summary_toggle_shuffle">သီချင်းဖွင့်မည့်စာရင်း\'အသစ်\'ကို play သည့်အခါ Shuffle Mode ပိတ်သွားပါမည်</string>
|
||||
<string name="pref_summary_toggle_volume">နေရာလုံလုံလောက်လောက်ရှိပါက Now Playing screen တွင် အသံအတိုးအကျယ်ခလုတ်များပြသမည်</string>
|
||||
<string name="pref_title_album_art_on_lockscreen">Album cover ပြသခြင်း</string>
|
||||
<string name="pref_title_album_artists_only">Album သီဆိုသူဖြင့် ရှာဖွေခြင်း</string>
|
||||
<string name="pref_title_album_cover_style">Album cover theme</string>
|
||||
<string name="pref_title_album_cover_transform">Album cover skip</string>
|
||||
<string name="pref_title_app_shortcuts">Colored App shortcuts</string>
|
||||
<string name="pref_title_audio_ducking">Reduce volume on focus loss</string>
|
||||
<string name="pref_title_auto_download_artist_images">အဆိုတော်ဓာတ်ပုံများကို အလိုအလျောက်ဒေါင်းလုဒ်ဆွဲခြင်း</string>
|
||||
<string name="pref_title_blacklist">Blacklist</string>
|
||||
<string name="pref_title_bluetooth_playback">Bluetooth playback</string>
|
||||
<string name="pref_title_blurred_album_art">Album cover အဝါး</string>
|
||||
<string name="pref_title_classic_notification">Notification ဒီဇိုင်းအဟောင်း</string>
|
||||
<string name="pref_title_colored_app">Adaptive color</string>
|
||||
<string name="pref_title_colored_notification">အရောင်ပါသော notification</string>
|
||||
<string name="pref_title_desaturated_color">Desaturated color</string>
|
||||
<string name="pref_title_expand_now_playing_panel">Now Playing screen ပြသခြင်း</string>
|
||||
<string name="pref_title_extra_controls">အပိုထိန်းချုပ်မှုများ</string>
|
||||
<string name="pref_title_extra_song_info">သီချင်းဖိုင်အချက်အလက် </string>
|
||||
<string name="pref_title_gapless_playback">လစ်ဟာမှုမရှိ play ခြင်း</string>
|
||||
<string name="pref_title_general_theme">App theme</string>
|
||||
<string name="pref_title_home_album_grid_style">Album အကွက်ပုံစံ</string>
|
||||
<string name="pref_title_home_artist_grid_style">အဆိုတော်အကွက်ပုံစံ</string>
|
||||
<string name="pref_title_home_banner">Banner</string>
|
||||
<string name="pref_title_ignore_media_store_artwork">Media Store covers များကိုလျစ်လျူရှုခြင်း</string>
|
||||
<string name="pref_title_last_added_interval">နောက်ဆုံးသွင်းထားသော playlist ရှိသီချင်းများ</string>
|
||||
<string name="pref_title_lock_screen">Lockscreen အပြည့် controls</string>
|
||||
<string name="pref_title_now_playing_screen_appearance">Now playing theme</string>
|
||||
<string name="pref_title_open_source_licences">Open source licences</string>
|
||||
<string name="pref_title_tab_text_mode">Tab ခေါင်းစဉ်ပြသခြင်း</string>
|
||||
<string name="pref_title_toggle_carousel_effect">Carousel effect</string>
|
||||
<string name="pref_title_toggle_full_screen">App ကို screen အပြည့်ထားမည်</string>
|
||||
<string name="pref_title_toggle_toggle_headset">အလိုအလျောက် play ခြင်း</string>
|
||||
<string name="pref_title_toggle_toggle_shuffle">Shuffle mode</string>
|
||||
<string name="pref_title_toggle_volume">အသံထိန်းချုပ်မှု</string>
|
||||
|
||||
<string name="pro">Pro</string>
|
||||
<string name="pro_summary">Black theme ၊ Now playing themes နှင့် Carousel effect စသည်များ...</string>
|
||||
|
||||
<string name="profile">Profile</string>
|
||||
|
||||
<string name="purchase">ဝယ်ယူမည်</string>
|
||||
|
||||
<string name="queue">နားထောင်နေသည့်စာရင်း</string>
|
||||
|
||||
<string name="rate_app">ဤ app ကို star ပေးမည်</string>
|
||||
<string name="rate_on_google_play_summary">App ကိုကြိုက်ပါသလား။ ယခုထက်ပိုကောင်းမွန်အောင်ဘယ်လိုလုပ်ရမလဲဆိုတာ ကျွန်တော်တို့ကို Google Play Store မှာပြောပြပေးပါ။</string>
|
||||
|
||||
<string name="recent_albums">မကြာသေးခင်ကနားထောင်ထားသော Album များ</string>
|
||||
<string name="recent_artists">မကြာသေးခင်ကနားထောင်ထားသော အဆိုတော်များ</string>
|
||||
|
||||
<string name="remove_action">ပယ်ဖျက်မည်</string>
|
||||
<string name="remove_cover">Cover ကိုဖျက်မည်</string>
|
||||
<string name="remove_from_blacklist">Blacklist မှဖျက်မည်</string>
|
||||
<string name="remove_song_from_playlist_title">Playlist မှဖျက်မည်</string>
|
||||
<string name="remove_song_x_from_playlist"><![CDATA[<b>%1$s</b> ကို Playlist ကဖျက်မှာလား]]></string>
|
||||
<string name="remove_songs_from_playlist_title">Playlist မှသီချင်းများဖျက်ခြင်း</string>
|
||||
<string name="remove_x_songs_from_playlist"><![CDATA[သီချင်း <b>%1$d</b> ပုဒ်ကို playlist ကဖျက်မှာလား]]></string>
|
||||
|
||||
<string name="rename_playlist_title">Playlist နာမည်ပြင်မည်</string>
|
||||
|
||||
<string name="report_an_issue">ပြဿနာတစ်ခုသတင်းပို့မည်</string>
|
||||
<string name="report_bug">Bug report တင်မည်</string>
|
||||
|
||||
<string name="reset_action">Reset</string>
|
||||
<string name="reset_artist_image">Reset artist image</string>
|
||||
|
||||
<string name="restore">ပြန်လည်ရယူမည်</string>
|
||||
|
||||
<string name="restored_previous_purchase_please_restart">ယခင်ဝယ်ယူမှုကို ပြန်လည်ရယူပြီးပါပြီ။ Feature အားလုံးအလုပ်လုပ်ရန် app မှထွက်ပြီးပြန်ဝင်ပါ။</string>
|
||||
<string name="restored_previous_purchases">ယခင်ဝယ်ယူမှုအား ပြန်လည်ရယူပြီးပါပြီ</string>
|
||||
|
||||
<string name="restoring_purchase">ယခင်ဝယ်ယူမှုအား ပြန်လည်ရယူနေသည်...</string>
|
||||
|
||||
<string name="retro_music_player">Retro Music Player</string>
|
||||
<string name="retro_music_pro">Retro Music Pro</string>
|
||||
|
||||
<string name="ringtone_summary">သီချင်းများကို Ringtone ထားရန် app အား System Settings များကိုပြင်ဆင်ခွင့်ပေးရန်လိုသည်။</string>
|
||||
<string name="ringtone_title">Ringtone</string>
|
||||
|
||||
<string name="saf_delete_failed">ဖိုင်ဖျက်ခြင်းမအောင်မြင်ပါ: %s</string>
|
||||
<!-- SAF -->
|
||||
<string name="saf_error_uri">SAF URI ကိုမရယူနိုင်ပါ</string>
|
||||
<string name="saf_guide_slide1_description">Navigation drawer ကိုဖွင့်ပါ</string>
|
||||
<string name="saf_guide_slide1_description_before_o">Overflow Menu မှ \'Show SD card\' ကိုနှိပ်ပါ</string>
|
||||
<!-- SAF guide -->
|
||||
<string name="saf_guide_slide1_title">%s သည် SD card ကြည့်ရှုခွင့်လိုအပ်သည်</string>
|
||||
<string name="saf_guide_slide2_description">SD card ၏ ထိပ်ဆုံး Directory ကိုရွေးပေးရန်လိုအပ်သည်</string>
|
||||
<string name="saf_guide_slide2_title">Navigation drawer တွင် SD card ကိုရွေးချယ်ပါ</string>
|
||||
<string name="saf_guide_slide3_description">Folder အခွဲများကို မဖွင့်ပါနှင့်</string>
|
||||
<string name="saf_guide_slide3_title">Screen ၏အောက်ဆုံးတွင်ရှိသော \'select\' ခလုတ်ကိုနှိပ်ပါ</string>
|
||||
<string name="saf_write_failed">ဖိုင်ပြုပြင်ခြင်းမအောင်မြင်ပါ: %s</string>
|
||||
|
||||
<string name="save">မှတ်ထားမည်</string>
|
||||
<!-- SAF -->
|
||||
<!-- SAF guide -->
|
||||
<string name="save_playlist_title">ဖိုင်အဖြစ်သိမ်းမည်</string>
|
||||
<string name="save_playlists_title">ဖိုင်များအဖြစ်သိမ်းမည်</string>
|
||||
|
||||
<string name="saved_playlist_to">%s တွင် playlist ကိုသိမ်းခဲ့သည်</string>
|
||||
|
||||
<string name="saving_changes">ပြောင်းလဲမှုများကိုမှတ်သားနေသည်</string>
|
||||
|
||||
<string name="scan_media">မီဒီယာစကန်ဖတ်မည်</string>
|
||||
|
||||
<string name="scanned_files">ဖိုင် %2$d ခုအနက် %1$d ခုကို စကန်ဖတ်ပြီးပါပြီ</string>
|
||||
|
||||
<string name="scrobbles_label">Scrobbles</string>
|
||||
|
||||
<string name="select_all">အားလုံးရွေးမည်</string>
|
||||
|
||||
<string name="selected">ရွေးချယ်ထားသော</string>
|
||||
|
||||
<string name="set">ထားမည်</string>
|
||||
<string name="set_artist_image">အဆိုတော်ပုံအဖြစ်ထားမည်</string>
|
||||
|
||||
<string name="share_app">App ကိုမျှဝေမည်</string>
|
||||
<string name="share_summary">သင့်မိသားစုနှင့် သူငယ်ချင်းများကိုပြန်လည်မျှဝေလိုက်ပါ</string>
|
||||
<string name="share_to_stories">Stories သို့မျှဝေမည်</string>
|
||||
|
||||
<string name="shuffle">Shuffle</string>
|
||||
|
||||
<string name="simple">ရိုးရိုးရှင်းရှင်း</string>
|
||||
|
||||
<string name="sleep_timer_canceled">Sleep timer ကိုဖျက်ပြီးပါပြီ</string>
|
||||
<string name="sleep_timer_set">ယခုမှစတင်၍ Sleep timer ကို %d မိနစ်အချိန်မှတ်ပြီးပါပြီ</string>
|
||||
|
||||
<string name="social">Social</string>
|
||||
<string name="social_stories">Story မျှဝေမည်</string>
|
||||
|
||||
<string name="song">သီချင်း</string>
|
||||
<string name="song_duration">သီချင်းကြာချိန်</string>
|
||||
|
||||
<string name="songs">သီချင်းများ</string>
|
||||
|
||||
<string name="sort_order">အထားအသိုပြင်မည်</string>
|
||||
<string name="sort_order_a_z">ငယ်ရာမှကြီးရာ</string>
|
||||
<string name="sort_order_album">Album</string>
|
||||
<string name="sort_order_artist">အဆိုတော်</string>
|
||||
<string name="sort_order_composer">တေးရေးဆရာ</string>
|
||||
<string name="sort_order_date">ထည့်သွင်းသည့်ရက်</string>
|
||||
<string name="sort_order_date_modified">ပြင်ဆင်သည့်ရက်</string>
|
||||
<string name="sort_order_num_songs">အပုဒ်အရေအတွက်</string>
|
||||
<string name="sort_order_num_songs_desc">အပုဒ်အရေအတွက်ပြောင်းပြန်</string>
|
||||
<string name="sort_order_year">ထွက်ရှိသည့်နှစ်</string>
|
||||
<string name="sort_order_z_a">ကြီးရာမှငယ်ရာ</string>
|
||||
|
||||
<string name="speech_not_supported">ဆောရီး! သင့် device သည် အသံဖြင့်ပြောဆိုခြင်းအား အထောက်အပံ့မပေးထားပါ</string>
|
||||
<string name="speech_prompt">သင့် Library တွင်ရှာဖွေခြင်း</string>
|
||||
|
||||
<string name="stack">Stack</string>
|
||||
|
||||
<string name="start_play_music">သီချင်းစတင် play ပါပြီ</string>
|
||||
|
||||
<string name="suggestion_songs">အကြံပြုထားသောသီချင်းများ</string>
|
||||
|
||||
<string name="support_development">Support development</string>
|
||||
|
||||
<string name="swipe_to_unlock">Swipe to unlock</string>
|
||||
|
||||
<string name="synced_lyrics">ချိန်ကိုက်ထားသောသီချင်းစာသား</string>
|
||||
|
||||
<!-- Message displayed when tag editing fails -->
|
||||
<string name="telegram_group">Telegram</string>
|
||||
<string name="telegram_group_summary">Bugs များကို ဆွေးနွေးရန်၊ အကြံပြုချက်များပေးရန်၊ ကြွားရန်နှင့် စသည်များ...</string>
|
||||
|
||||
<string name="thank_you">ကျေးဇူးတင်ပါတယ်</string>
|
||||
|
||||
<string name="the_audio_file">အသံဖိုင်</string>
|
||||
|
||||
<string name="this_month">ယခုလ</string>
|
||||
<string name="this_week">ယခုအပတ်</string>
|
||||
<string name="this_year">ယခုနှစ်</string>
|
||||
|
||||
<string name="tiny">Tiny</string>
|
||||
<string name="tiny_card_style">Tiny card</string>
|
||||
|
||||
<string name="title">နာမည်</string>
|
||||
|
||||
<string name="today">ယနေ့</string>
|
||||
|
||||
<string name="top_albums">ထိပ်ဆုံး Album များ</string>
|
||||
<string name="top_artists">ထိပ်ဆုံးအဆိုတော်များ</string>
|
||||
|
||||
<string name="track_hint">"Track (2 for track 2 or 3004 for CD3 track 4)"</string>
|
||||
<string name="track_list">အပုဒ်နံပါတ်</string>
|
||||
|
||||
<string name="translate">ဘာသာပြန်ခြင်း</string>
|
||||
<string name="translate_community">App ကိုသင့်ဘာသာစကားသို့ ကူပြန်ပေးပါ</string>
|
||||
|
||||
<string name="try_retro_music_premium">Retro Music Premium ကိုစမ်းကြည့်ပါ</string>
|
||||
|
||||
<string name="twitter_page">Twitter</string>
|
||||
<string name="twitter_page_summary">သင့် Retro Music ဒီဇိုင်းများကိုမျှဝေပါ</string>
|
||||
|
||||
<string name="unlabeled">Label မထိုးပါ</string>
|
||||
|
||||
<string name="unplayable_file">ဤသီချင်းကို မ play နိုင်ပါ</string>
|
||||
|
||||
<string name="up_next">လာမည့်အပုဒ်</string>
|
||||
|
||||
<string name="update_image">Update image</string>
|
||||
|
||||
<string name="updating">အပ်ဒိတ်လုပ်နေသည်…</string>
|
||||
|
||||
<string name="user_name">သုံးစွဲသူ</string>
|
||||
|
||||
<string name="username">သုံးစွဲသူအမည်</string>
|
||||
|
||||
<string name="version">Version</string>
|
||||
|
||||
<string name="vertical_flip">ဒေါင်လိုက်ဟိုဘက်ဒီဘက်လှန်ခြင်း</string>
|
||||
|
||||
<string name="volume">အသံအတိုးအကျယ်</string>
|
||||
|
||||
<string name="web_search">Web search</string>
|
||||
|
||||
<string name="welcome">မင်္ဂလာပါ</string>
|
||||
|
||||
<string name="what_do_you_want_to_share">ဘာများမျှဝေချင်ပါသလဲ</string>
|
||||
|
||||
<string name="whats_new">ဘာအသစ်တွေရှိလဲ</string>
|
||||
|
||||
<string name="window">Window</string>
|
||||
<string name="window_corner_edges">အနားအကွေးပုံစံ</string>
|
||||
|
||||
<string name="x_has_been_set_as_ringtone">%1$s ကို Ringtone အဖြစ်ထားပြီးပါပြီ</string>
|
||||
<string name="x_selected">%1$d ခုကိုရွေးထားသည်</string>
|
||||
|
||||
<string name="year">ထွက်ရှိသည့်နှစ်</string>
|
||||
|
||||
<string name="you_have_to_select_at_least_one_category">အနည်းဆုံး category တစ်ခုရွေးချယ်ရန်လိုအပ်သည်</string>
|
||||
<string name="you_will_be_forwarded_to_the_issue_tracker_website">Issue tracker website သို့ခေါ်ဆောင်သွားပါမည်</string>
|
||||
|
||||
<string name="your_account_data_is_only_used_for_authentication">သင့်အကောင့်အချက်အလက်ကို အတည်ပြုရန်အတွက်သာအသုံးပြုပါသည်။</string>
|
||||
</resources>
|
|
@ -10,7 +10,7 @@
|
|||
<string name="action_add_to_favorites">Добавить в избранное</string>
|
||||
<string name="action_add_to_playing_queue">Добавить в очередь воспроизведения</string>
|
||||
<string name="action_add_to_playlist">Добавить в плейлист</string>
|
||||
<string name="action_clear_playing_queue">Очистить очередь воспроизведения</string>
|
||||
<string name="action_clear_playing_queue">Очистить очередь воспроизведения</string>
|
||||
<string name="action_cycle_repeat">Режим циклического повтора</string>
|
||||
<string name="action_delete">Удалить</string>
|
||||
<string name="action_delete_from_device">Удалить с устройства</string>
|
||||
|
@ -315,7 +315,7 @@
|
|||
<string name="next_song">Следующая песня</string>
|
||||
|
||||
<string name="no_albums">Альбомы отсутствуют</string>
|
||||
<string name="no_artists">Исполнители отсутствую</string>
|
||||
<string name="no_artists">Исполнители отсутствуют</string>
|
||||
<string name="no_audio_ID">"Сначала проиграйте песню, затем попробуйте заново."</string>
|
||||
<string name="no_equalizer">Эквалайзер не найден</string>
|
||||
<string name="no_genres">Жанры отсутствуют</string>
|
||||
|
@ -443,7 +443,6 @@
|
|||
<string name="pref_title_gapless_playback">Непрерывное воспроизведение</string>
|
||||
<string name="pref_title_general_theme">Тема приложения</string>
|
||||
<string name="pref_title_home_album_grid_style">Сетка альбома на Главной странице</string>
|
||||
<string name="pref_title_home_artist_grid_style">Сетка исполнителя на Главной странице</string>
|
||||
<string name="pref_title_home_banner">Кнопка Домой</string>
|
||||
<string name="pref_title_ignore_media_store_artwork">Игнорировать обложки из хранилища</string>
|
||||
<string name="pref_title_last_added_interval">Дата последнего добавления плейлиста</string>
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
<dimen name="list_item_image_icon_padding">8dp</dimen>
|
||||
|
||||
<dimen name="mini_player_height">48dp</dimen>
|
||||
<dimen name="mini_player_height">56dp</dimen>
|
||||
|
||||
<dimen name="app_widget_classic_height">96dp</dimen>
|
||||
<dimen name="app_widget_classic_image_size">96dp</dimen>
|
||||
|
@ -34,7 +34,7 @@
|
|||
<dimen name="now_playing_top_margin">12dp</dimen>
|
||||
|
||||
<dimen name="icon_notification_dimen">32dp</dimen>
|
||||
<dimen name="mini_player_height_expanded">104dp</dimen>
|
||||
<dimen name="mini_player_height_expanded">112dp</dimen>
|
||||
<dimen name="toolbar_margin_horizontal">8dp</dimen>
|
||||
<dimen name="toolbar_height">48dp</dimen>
|
||||
<dimen name="item_song_height">52dp</dimen>
|
||||
|
|
|
@ -15,5 +15,6 @@
|
|||
<resources>
|
||||
<declare-styleable name="RetroShapeableImageView">
|
||||
<attr name="retroCornerSize" format="dimension" />
|
||||
<attr name="circleShape" format="boolean" />
|
||||
</declare-styleable>
|
||||
</resources>
|
|
@ -27,8 +27,8 @@ android {
|
|||
dependencies {
|
||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||
implementation 'androidx.appcompat:appcompat:1.2.0'
|
||||
implementation 'com.google.android.material:material:1.3.0-alpha01'
|
||||
implementation 'androidx.preference:preference:1.1.1'
|
||||
implementation 'com.google.android.material:material:1.3.0-alpha04'
|
||||
implementation 'androidx.preference:preference-ktx:1.1.1'
|
||||
implementation 'androidx.cardview:cardview:1.0.0'
|
||||
// Used for the list preference classes
|
||||
def material_dialog_version = "0.9.6.0"
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.4.10'
|
||||
ext.kotlin_version = '1.4.20'
|
||||
repositories {
|
||||
jcenter()
|
||||
google()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:4.0.2'
|
||||
classpath 'com.android.tools.build:gradle:4.1.1'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
def nav_version = "2.3.0"
|
||||
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
|
||||
|
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,4 +1,4 @@
|
|||
#Sat Jun 06 02:12:18 IST 2020
|
||||
#Thu Dec 03 19:20:35 IST 2020
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue