h4h13 2019-07-22 13:23:42 +05:30
commit b64a1c86a8
103 changed files with 1129 additions and 889 deletions

6
FAQ.md
View File

@ -8,8 +8,7 @@ You can opt-in for the beta build by clicking on this link: https://play.google.
- STEP 4: You have to copy or move the file into a location on the SD Card: whatever_sdcard/RetroMusic/lyrics/ and paste inside your ".lrc" file in there.
#### Q: Why isn't the artist's image downloading?
STEP 1: Settings -> Images -> Auto-download artist images -> Always
STEP 2: Open the artists tab and wait some time for the images to download.
Last.fm has disabled the download of artist's images for the time being, whether functionality for this will be restored in future is uncertain.
#### Q: How do I change the theme?
Settings -> Look and feel -> Select your theme.
@ -35,8 +34,5 @@ Clear the app's cache and data.
##### Q: My app is crashing, how do i fix this? (Sorry, settings have changed internally)
Reinstalling the app should fix this issue.
##### Q: Artist images are not loading, why?
The Last.fm service has a limited number of requests of download data it can handle (artist images). If that request limit is exceeded, it will not download for some time.
##### Q: Why has all the text gone white/dissapeared?
Change the theme to Black or Dark and change it back to what you had before.

View File

@ -17,7 +17,6 @@ Retro Music is an open source, local music player for Android.
- Volume controls
- Blacklist
- Album artist support
- Auto-download artist images from Last.fm
#### Download

View File

@ -31,8 +31,8 @@ android {
vectorDrawables.useSupportLibrary = true
applicationId "code.name.monkey.retromusic"
versionCode 336
versionName '3.2.100'
versionCode 340
versionName '3.2.125'
multiDexEnabled true
@ -132,9 +132,9 @@ dependencies {
implementation 'com.google.android.material:material:1.1.0-alpha07'
implementation 'com.google.android.material:material:1.1.0-alpha07'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.0'
implementation 'com.afollestad.material-dialogs:core:3.0.0-alpha1'
implementation 'com.afollestad.material-dialogs:input:3.0.0-alpha1'
@ -161,7 +161,6 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
implementation 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:3.4.0.201406110918-r'
implementation 'com.github.jetradarmobile:android-snowfall:1.2.0'
implementation 'com.github.takahirom.downloadable.calligraphy:downloadable-calligraphy:0.1.3'
implementation 'com.github.ksoichiro:android-observablescrollview:1.6.0'
implementation 'com.github.kabouzeid:RecyclerView-FastScroll:1.0.16-kmod'

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,7 @@
package code.name.monkey.retromusic.activities
import android.content.Intent
import android.content.res.ColorStateList
import android.graphics.Color
import android.os.Bundle
import android.transition.Slide
@ -70,7 +71,7 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac
setupWindowTransition()
super.onCreate(savedInstanceState)
toggleBottomNavigationView(true)
collapsingToolbarLayout?.setBackgroundColor(ThemeStore.primaryColor(this))
contentContainer?.setCardBackgroundColor( ColorStateList.valueOf(ThemeStore.primaryColor(this)))
setLightNavigationBar(true)
setNavigationbarColorAuto()
@ -111,7 +112,7 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac
supportActionBar!!.title = null
val primaryColor = ThemeStore.primaryColor(this)
TintHelper.setTintAuto(contentContainer!!, primaryColor, true)
//TintHelper.setTintAuto(contentContainer!!, primaryColor, true)
if (collapsingToolbarLayout != null) {
collapsingToolbarLayout!!.apply {

View File

@ -2,6 +2,7 @@ package code.name.monkey.retromusic.activities
import android.app.Activity
import android.content.Intent
import android.content.res.ColorStateList
import android.graphics.Color
import android.graphics.drawable.Drawable
import android.os.Build
@ -17,7 +18,10 @@ import androidx.recyclerview.widget.DefaultItemAnimator
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.*
import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialUtil
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity
import code.name.monkey.retromusic.adapter.album.AlbumAdapter
@ -68,7 +72,8 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac
setDrawUnderStatusBar()
setupWindowTransitions()
super.onCreate(savedInstanceState)
collapsingToolbarLayout?.setBackgroundColor(ThemeStore.primaryColor(this))
//collapsingToolbarLayout?.setBackgroundColor(ThemeStore.primaryColor(this))
contentContainer?.setCardBackgroundColor(ColorStateList.valueOf(ThemeStore.primaryColor(this)))
toggleBottomNavigationView(true)
setNavigationbarColorAuto()
setLightNavigationBar(true)
@ -114,7 +119,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac
private fun setupToolbarMarginHeight() {
val primaryColor = ThemeStore.primaryColor(this)
TintHelper.setTintAuto(contentContainer!!, primaryColor, true)
collapsingToolbarLayout?.let {
it.setContentScrimColor(primaryColor)
it.setStatusBarScrimColor(ColorUtil.darkenColor(primaryColor))
@ -198,7 +203,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac
}
private fun getArtist(): Artist {
return this.artist;
return this.artist
}
private fun setArtist(artist: Artist) {
@ -327,7 +332,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac
R.id.action_reset_artist_image -> {
Toast.makeText(this@ArtistDetailActivity, resources.getString(R.string.updating),
Toast.LENGTH_SHORT).show()
CustomArtistImageUtil.getInstance(this@ArtistDetailActivity).resetCustomArtistImage(artist!!)
CustomArtistImageUtil.getInstance(this@ArtistDetailActivity).resetCustomArtistImage(artist)
forceDownload = true
return true
}

View File

@ -1,18 +1,20 @@
package code.name.monkey.retromusic.activities
import android.app.Activity
import android.content.*
import android.content.ContentUris
import android.content.Context
import android.content.ContextWrapper
import android.content.Intent
import android.content.res.ColorStateList
import android.graphics.Bitmap
import android.net.Uri
import android.os.Bundle
import android.provider.DocumentsContract
import android.provider.MediaStore
import android.provider.MediaStore.Images.Media
import android.provider.MediaStore.Images.Media.getBitmap
import android.text.TextUtils
import android.view.MenuItem
import android.widget.Toast
import androidx.core.content.FileProvider
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialUtil
@ -56,10 +58,10 @@ class UserInfoActivity : AbsBaseActivity() {
name.setText(PreferenceUtil.getInstance().userName)
bio.setText(PreferenceUtil.getInstance().userBio)
if (!PreferenceUtil.getInstance().profileImage.isEmpty()) {
if (PreferenceUtil.getInstance().profileImage.isNotEmpty()) {
loadImageFromStorage(PreferenceUtil.getInstance().profileImage)
}
if (!PreferenceUtil.getInstance().bannerImage.isEmpty()) {
if (PreferenceUtil.getInstance().bannerImage.isNotEmpty()) {
loadBannerFromStorage(PreferenceUtil.getInstance().bannerImage)
}
userImage.setOnClickListener {
@ -129,7 +131,7 @@ class UserInfoActivity : AbsBaseActivity() {
private fun selectBannerImage() {
if (TextUtils.isEmpty(PreferenceUtil.getInstance().bannerImage)) {
val pickImageIntent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
val pickImageIntent = Intent(Intent.ACTION_PICK, Media.EXTERNAL_CONTENT_URI)
pickImageIntent.type = "image/*"
//pickImageIntent.putExtra("crop", "true")
pickImageIntent.putExtra("outputX", 1290)
@ -147,7 +149,7 @@ class UserInfoActivity : AbsBaseActivity() {
private fun pickNewPhoto() {
val pickImageIntent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
val pickImageIntent = Intent(Intent.ACTION_PICK, Media.EXTERNAL_CONTENT_URI)
pickImageIntent.type = "image/*"
pickImageIntent.putExtra("crop", "true")
pickImageIntent.putExtra("outputX", 512)
@ -163,42 +165,30 @@ class UserInfoActivity : AbsBaseActivity() {
if (resultCode == Activity.RESULT_OK && data != null) {
when (requestCode) {
PICK_IMAGE_REQUEST -> {
val uri = data.data
try {
val bitmap = getResizedBitmap(getBitmap(contentResolver, uri), PROFILE_ICON_SIZE)
val profileImagePath = saveToInternalStorage(bitmap, USER_PROFILE)
PreferenceUtil.getInstance().saveProfileImage(profileImagePath)
loadImageFromStorage(profileImagePath)
data.data?.let {
val bitmap = getResizedBitmap(getBitmap(contentResolver, it), PROFILE_ICON_SIZE)
val profileImagePath = saveToInternalStorage(bitmap, USER_PROFILE)
PreferenceUtil.getInstance().saveProfileImage(profileImagePath)
loadImageFromStorage(profileImagePath)
}
} catch (e: IOException) {
e.printStackTrace()
}
}
CROP_IMAGE_REQUEST -> {
val extras: Bundle = data.extras!!
val selectedBitmap: Bitmap = extras.getParcelable("data")
val profileImagePath = saveToInternalStorage(selectedBitmap, USER_PROFILE)
PreferenceUtil.getInstance().saveProfileImage(profileImagePath)
loadImageFromStorage(profileImagePath)
}
PICK_BANNER_REQUEST -> {
val uri = data.data
try {
val bitmap = getBitmap(contentResolver, uri)
val profileImagePath = saveToInternalStorage(bitmap, USER_BANNER)
PreferenceUtil.getInstance().setBannerImagePath(profileImagePath)
loadBannerFromStorage(profileImagePath)
data.data?.let {
val bitmap = getBitmap(contentResolver, it)
val profileImagePath = saveToInternalStorage(bitmap, USER_BANNER)
PreferenceUtil.getInstance().setBannerImagePath(profileImagePath)
loadBannerFromStorage(profileImagePath)
}
} catch (e: IOException) {
e.printStackTrace()
}
}
CROP_BANNER_REQUEST -> {
val selectedBitmap: Bitmap? = data.extras?.getParcelable("date")
val profileImagePath = selectedBitmap?.let { saveToInternalStorage(it, USER_BANNER) }
profileImagePath?.let {
PreferenceUtil.getInstance().saveProfileImage(it)
loadImageFromStorage(it)
}
}
}
}
}
@ -213,8 +203,8 @@ class UserInfoActivity : AbsBaseActivity() {
val documentId = DocumentsContract.getDocumentId(aUri)
if ("com.android.providers.media.documents" == aUri.authority) {
val id = documentId.split(":".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()[1]
val selection = MediaStore.Images.Media._ID + "=" + id
imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection)
val selection = Media._ID + "=" + id
imagePath = getImagePath(Media.EXTERNAL_CONTENT_URI, selection)
} else if ("com.android.providers.downloads.documents" == aUri.authority) {
val contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),
java.lang.Long.valueOf(documentId))
@ -233,50 +223,13 @@ class UserInfoActivity : AbsBaseActivity() {
val cursor = App.context.contentResolver.query(aUri, null, aSelection, null, null)
if (cursor != null) {
if (cursor.moveToFirst()) {
path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA))
path = cursor.getString(cursor.getColumnIndex(Media.DATA))
}
cursor.close()
}
return path
}
private fun performBannerCrop(picturePath: Uri?) {
val photoUri = FileProvider.getUriForFile(this, "$packageName.provider", File(getImagePathFromUri(picturePath)))
try {
val cropIntent = Intent("com.android.camera.action.CROP")
cropIntent.setDataAndType(photoUri, "image/*")
cropIntent.putExtra("crop", "true")
cropIntent.putExtra("aspectX", 1)
cropIntent.putExtra("aspectY", 1)
cropIntent.putExtra("return-data", true)
cropIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
startActivityForResult(cropIntent, CROP_BANNER_REQUEST)
} catch (anfe: ActivityNotFoundException) {
val errorMessage = "your device doesn't support the crop action!"
Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT).show()
}
}
private fun performCrop(imageUri: Uri) {
val photoUri = FileProvider.getUriForFile(this, "$packageName.provider", File(getImagePathFromUri(imageUri)))
try {
val cropIntent = Intent("com.android.camera.action.CROP")
cropIntent.setDataAndType(photoUri, "image/*")
cropIntent.putExtra("crop", "true")
cropIntent.putExtra("aspectX", 1)
cropIntent.putExtra("aspectY", 1)
cropIntent.putExtra("outputX", 280)
cropIntent.putExtra("outputY", 280)
cropIntent.putExtra("return-data", true)
cropIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
startActivityForResult(cropIntent, CROP_IMAGE_REQUEST)
} catch (anfe: ActivityNotFoundException) {
val errorMessage = "your device doesn't support the crop action!"
Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT).show()
}
}
private fun loadBannerFromStorage(profileImagePath: String) {
disposable.add(Compressor(this)
.setQuality(100)
@ -323,9 +276,7 @@ class UserInfoActivity : AbsBaseActivity() {
companion object {
private const val PICK_IMAGE_REQUEST = 9002
private const val CROP_IMAGE_REQUEST = 9003
private const val PICK_BANNER_REQUEST = 9004
private const val CROP_BANNER_REQUEST = 9005
private const val PROFILE_ICON_SIZE = 400
}
}

View File

@ -133,6 +133,7 @@ public class WriteTagsAsyncTask extends
(Activity) context, toBeScanned) : null);
}
@NonNull
@Override
protected Dialog createDialog(@NonNull Context context) {
return new MaterialDialog(context, new BottomSheet())

View File

@ -1,15 +1,16 @@
package code.name.monkey.retromusic.adapter
import android.content.res.ColorStateList
import android.util.DisplayMetrics
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.annotation.IntDef
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.adapter.album.AlbumFullWidthAdapter
import code.name.monkey.retromusic.adapter.artist.ArtistAdapter
@ -17,7 +18,7 @@ import code.name.monkey.retromusic.adapter.song.SongAdapter
import code.name.monkey.retromusic.loaders.PlaylistSongsLoader
import code.name.monkey.retromusic.model.*
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.views.IconImageView
import com.google.android.material.chip.Chip
class HomeAdapter(private val activity: AppCompatActivity, private var homes: List<Home>, private val displayMetrics: DisplayMetrics) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
@ -91,8 +92,8 @@ class HomeAdapter(private val activity: AppCompatActivity, private var homes: Li
recyclerView.apply {
adapter = AlbumFullWidthAdapter(activity, home.arrayList as ArrayList<Album>, displayMetrics)
}
title.text = activity.getString(home.title)
icon.setImageResource(home.icon)
chip.text = activity.getString(home.title)
chip.setChipIconResource(home.icon)
}
}
@ -103,8 +104,8 @@ class HomeAdapter(private val activity: AppCompatActivity, private var homes: Li
val artistAdapter = ArtistAdapter(activity, home.arrayList as ArrayList<Artist>, PreferenceUtil.getInstance().getHomeGridStyle(context!!), false, null)
adapter = artistAdapter
}
title.text = activity.getString(home.title)
icon.setImageResource(home.icon)
chip.text = activity.getString(home.title)
chip.setChipIconResource(home.icon)
}
}
@ -116,8 +117,8 @@ class HomeAdapter(private val activity: AppCompatActivity, private var homes: Li
adapter = genreAdapter
}
title.text = activity.getString(home.title)
icon.setImageResource(home.icon)
chip.text = activity.getString(home.title)
chip.setChipIconResource(home.icon)
}
}
@ -130,14 +131,17 @@ class HomeAdapter(private val activity: AppCompatActivity, private var homes: Li
adapter = songAdapter
}
title.text = activity.getString(home.title)
icon.setImageResource(home.icon)
chip.text = activity.getString(home.title)
chip.setChipIconResource(home.icon)
}
}
private open inner class AbsHomeViewItem(itemView: View) : RecyclerView.ViewHolder(itemView) {
val recyclerView: RecyclerView = itemView.findViewById(R.id.recyclerView)
val title: TextView = itemView.findViewById(R.id.sectionTitle)
val icon: IconImageView = itemView.findViewById(R.id.sectionIcon)
val chip: Chip = itemView.findViewById(R.id.chipHead)
init {
chip.apply { chipBackgroundColor = ColorStateList.valueOf(ThemeStore.primaryColor(context)) }
}
}
}

View File

@ -52,12 +52,11 @@ interface DeezerApiService {
.addHeader("Cache-Control",
String.format(
Locale.getDefault(),
"max-age=%d, max-stale=%d",
31536000, 31536000
"max-age=31536000, max-stale=31536000"
)
).build()
chain.proceed(modifiedRequest)
}
}
}
}
}

View File

@ -0,0 +1,21 @@
/*
* Copyright (c) 2019 Hemanth Savarala.
*
* Licensed under the GNU General Public License v3
*
* This is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by
* the Free Software Foundation either version 3 of the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*/
package code.name.monkey.retromusic.extensions
import code.name.monkey.appthemehelper.util.ColorUtil
fun Int.ripAlpha(): Int {
return ColorUtil.stripAlpha(this)
}

View File

@ -12,6 +12,7 @@ import android.widget.SeekBar
import androidx.fragment.app.Fragment
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.util.PreferenceUtil
@ -109,7 +110,6 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum
}
fun setTintable(color: Int) {
ViewUtil.setProgressDrawable(volumeSeekBar, color, true)
}
@ -121,15 +121,12 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum
if (PreferenceUtil.getInstance().pauseOnZeroVolume())
if (MusicPlayerRemote.isPlaying && pauseWhenZeroVolume) {
MusicPlayerRemote.pauseSong()
} else {
MusicPlayerRemote.resumePlaying()
}
}
fun setTintableColor(color: Int) {
volumeDown.setColorFilter(color, PorterDuff.Mode.SRC_IN)
volumeUp.setColorFilter(color, PorterDuff.Mode.SRC_IN)
//TintHelper.setTintAuto(volumeSeekBar, color, false)
ViewUtil.setProgressDrawable(volumeSeekBar, color, true)
}

View File

@ -12,7 +12,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil
open class AlbumsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<AlbumAdapter, GridLayoutManager>(), AlbumContract.AlbumView {
private var presenter: AlbumPresenter? = null
private lateinit var presenter: AlbumPresenter
override val emptyMessage: Int
@ -48,7 +48,7 @@ open class AlbumsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<Al
}
override fun setSortOrder(sortOrder: String) {
presenter!!.loadAlbums()
presenter.loadAlbums()
}
override fun loadSortOrder(): String {
@ -87,7 +87,7 @@ open class AlbumsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<Al
}
override fun onMediaStoreChanged() {
presenter!!.loadAlbums()
presenter.loadAlbums()
}
override fun onCreate(savedInstanceState: Bundle?) {
@ -113,13 +113,13 @@ open class AlbumsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<Al
libraryFragment.setTitle(
if (PreferenceUtil.getInstance().tabTitles()) R.string.library else R.string.albums)
if (adapter!!.dataSet.isEmpty()) {
presenter!!.subscribe()
presenter.subscribe()
}
}
override fun onDestroy() {
super.onDestroy()
presenter!!.unsubscribe()
presenter.unsubscribe()
}
override fun loading() {}
@ -136,7 +136,7 @@ open class AlbumsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<Al
companion object {
val TAG = AlbumsFragment::class.java.simpleName
val TAG: String = AlbumsFragment::class.java.simpleName
fun newInstance(): AlbumsFragment {
val args = Bundle()

View File

@ -12,7 +12,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil
import java.util.*
class ArtistsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<ArtistAdapter, GridLayoutManager>(), ArtistContract.ArtistView {
private var presenter: ArtistPresenter? = null
private lateinit var presenter: ArtistPresenter
override val emptyMessage: Int
get() = R.string.no_artists
@ -37,7 +37,7 @@ class ArtistsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<Artist
}
override fun onMediaStoreChanged() {
presenter!!.loadArtists()
presenter.loadArtists()
}
override fun loadGridSize(): Int {
@ -83,7 +83,7 @@ class ArtistsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<Artist
}
override fun setSortOrder(sortOrder: String) {
presenter!!.loadArtists()
presenter.loadArtists()
}
@ -103,13 +103,13 @@ class ArtistsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<Artist
libraryFragment.setTitle(
if (PreferenceUtil.getInstance().tabTitles()) R.string.library else R.string.artists)
if (adapter!!.dataSet.isEmpty()) {
presenter!!.subscribe()
presenter.subscribe()
}
}
override fun onDestroy() {
super.onDestroy()
presenter!!.unsubscribe()
presenter.unsubscribe()
}
override fun loading() {}

View File

@ -16,7 +16,7 @@ import java.util.*
class PlaylistsFragment : AbsLibraryPagerRecyclerViewFragment<PlaylistAdapter, LinearLayoutManager>(), PlaylistContract.PlaylistView {
private var presenter: PlaylistPresenter? = null
private lateinit var presenter: PlaylistPresenter
override val emptyMessage: Int
get() = R.string.no_playlists
@ -47,18 +47,18 @@ class PlaylistsFragment : AbsLibraryPagerRecyclerViewFragment<PlaylistAdapter, L
super.onResume()
libraryFragment.setTitle(if (PreferenceUtil.getInstance().tabTitles()) R.string.library else R.string.playlists)
if (adapter!!.dataSet.isEmpty()) {
presenter!!.subscribe()
presenter.subscribe()
}
}
override fun onDestroy() {
presenter!!.unsubscribe()
presenter.unsubscribe()
super.onDestroy()
}
override fun onMediaStoreChanged() {
super.onMediaStoreChanged()
presenter!!.loadPlaylists()
presenter.loadPlaylists()
}
override fun loading() {

View File

@ -83,7 +83,7 @@ class SongsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<SongAdap
super.onResume()
libraryFragment.setTitle(if (PreferenceUtil.getInstance().tabTitles()) R.string.library else R.string.songs)
if (adapter!!.dataSet.isEmpty()) {
presenter!!.subscribe()
presenter.subscribe()
}
}
@ -128,7 +128,7 @@ class SongsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<SongAdap
}
override fun setSortOrder(sortOrder: String) {
presenter!!.loadSongs()
presenter.loadSongs()
}
companion object {

View File

@ -17,6 +17,7 @@ import code.name.monkey.retromusic.Constants
import code.name.monkey.retromusic.Constants.USER_BANNER
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.adapter.HomeAdapter
import code.name.monkey.retromusic.extensions.hide
import code.name.monkey.retromusic.extensions.show
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
import code.name.monkey.retromusic.glide.GlideApp
@ -32,7 +33,7 @@ import code.name.monkey.retromusic.mvp.presenter.HomePresenter
import code.name.monkey.retromusic.util.*
import com.bumptech.glide.load.engine.DiskCacheStrategy
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.abs_playlists.*
import kotlinx.android.synthetic.main.fragment_banner_home.*
@ -42,12 +43,8 @@ import java.util.*
import kotlin.collections.ArrayList
class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallbacks, HomeContract.HomeView {
override fun showEmpty() {
emptyContainer.show()
emptyText.setText(R.string.start_play_music)
}
private var disposable: Disposable? = null
private var disposable: CompositeDisposable = CompositeDisposable()
private lateinit var homePresenter: HomePresenter
private lateinit var toolbar: Toolbar
@ -56,10 +53,7 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
}
private fun loadImageFromStorage() {
if (disposable != null) {
disposable?.dispose()
}
disposable = Compressor(context!!)
disposable.add(Compressor(context!!)
.setMaxHeight(300)
.setMaxWidth(300)
.setQuality(75)
@ -75,7 +69,7 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
}
}) {
userImage.setImageDrawable(ContextCompat.getDrawable(context!!, R.drawable.ic_person_flat))
}
})
}
private val displayMetrics: DisplayMetrics
@ -176,7 +170,7 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
override fun onDestroyView() {
super.onDestroyView()
disposable?.dispose()
disposable.dispose()
homePresenter.unsubscribe()
}
@ -185,7 +179,7 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
}
override fun showEmptyView() {
emptyContainer.show()
}
override fun completed() {
@ -211,6 +205,11 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
layoutManager = LinearLayoutManager(mainActivity)
adapter = homeAdapter
}
if (list.isEmpty()) {
showEmptyView()
} else {
emptyContainer.hide()
}
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
@ -262,13 +261,13 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(bannerImage!!)
} else {
disposable = Compressor(context!!)
disposable.add(Compressor(context!!)
.setQuality(100)
.setCompressFormat(Bitmap.CompressFormat.WEBP)
.compressToBitmapAsFlowable(File(PreferenceUtil.getInstance().bannerImage, USER_BANNER))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { bannerImage?.setImageBitmap(it) }
.subscribe { bitmap -> bannerImage.setImageBitmap(bitmap) })
}
}
loadImageFromStorage()

View File

@ -14,6 +14,7 @@ import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.ripAlpha
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
@ -100,7 +101,7 @@ class AdaptivePlaybackControlsFragment : AbsPlayerControlsFragment() {
val colorFinal = if (PreferenceUtil.getInstance().adaptiveColor) {
color
} else {
ThemeStore.accentColor(context!!)
ThemeStore.accentColor(context!!).ripAlpha()
}
TintHelper.setTintAuto(playPauseButton, MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(colorFinal)), false)
TintHelper.setTintAuto(playPauseButton, colorFinal, true)

View File

@ -14,6 +14,7 @@ import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.ripAlpha
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
@ -127,7 +128,7 @@ class CardPlaybackControlsFragment : AbsPlayerControlsFragment() {
val colorFinal = if (PreferenceUtil.getInstance().adaptiveColor) {
color
} else {
ThemeStore.accentColor(context!!)
ThemeStore.accentColor(context!!).ripAlpha()
}
image.setColorFilter(colorFinal, PorterDuff.Mode.SRC_IN)
TintHelper.setTintAuto(playPauseButton, MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(colorFinal)), false)

View File

@ -16,16 +16,16 @@ import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity
import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder
import code.name.monkey.retromusic.adapter.song.PlayingQueueAdapter
import code.name.monkey.retromusic.dialogs.SongShareDialog
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.menu.SongMenuHelper
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.model.lyrics.Lyrics
import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity
import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder
import code.name.monkey.retromusic.adapter.song.PlayingQueueAdapter
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.RetroUtil
import code.name.monkey.retromusic.util.ViewUtil
@ -151,8 +151,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Call
private fun setUpPlayerToolbar() {
playerToolbar.apply {
inflateMenu(code.name.monkey.retromusic.R.menu.menu_player)
setNavigationIcon(code.name.monkey.retromusic.R.drawable.ic_close_white_24dp)
inflateMenu(R.menu.menu_player)
setNavigationOnClickListener { activity!!.onBackPressed() }
setOnMenuItemClickListener(this@ClassicPlayerFragment)
}

View File

@ -15,14 +15,14 @@ import android.widget.SeekBar
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.util.MusicUtil
import kotlinx.android.synthetic.main.fragment_player_playback_controls.*
import kotlinx.android.synthetic.main.fragment_color_player_playback_controls.*
import kotlinx.android.synthetic.main.media_button.*
class ColorPlaybackControlsFragment : AbsPlayerControlsFragment() {
@ -99,7 +99,7 @@ class ColorPlaybackControlsFragment : AbsPlayerControlsFragment() {
title!!.setTextColor(lastPlaybackControlsColor)
text!!.setTextColor(lastDisabledPlaybackControlsColor)
setProgressBarColor(lastPlaybackControlsColor, lastDisabledPlaybackControlsColor)
TintHelper.setTintAuto(progressSlider, lastPlaybackControlsColor, false)
volumeFragment?.setTintableColor(lastPlaybackControlsColor)
@ -111,17 +111,6 @@ class ColorPlaybackControlsFragment : AbsPlayerControlsFragment() {
updatePrevNextColor()
}
private fun setProgressBarColor(c1: Int, c2: Int) {
progressSlider.thumbTintList = ColorStateList.valueOf(c1)
val ld = progressSlider.progressDrawable as LayerDrawable
val clipDrawableProgress = ld.findDrawableByLayerId(android.R.id.progress)
clipDrawableProgress.setColorFilter(c1, PorterDuff.Mode.SRC_IN)
val clipDrawableBackground = ld.findDrawableByLayerId(android.R.id.background)
clipDrawableBackground.setColorFilter(c2, PorterDuff.Mode.SRC_IN)
}
private fun setUpPlayPauseFab() {
TintHelper.setTintAuto(playPauseButton, Color.WHITE, true)
TintHelper.setTintAuto(playPauseButton, Color.BLACK, false)

View File

@ -16,6 +16,7 @@ import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.ripAlpha
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
@ -113,7 +114,7 @@ class FitPlaybackControlsFragment : AbsPlayerControlsFragment() {
val colorFinal = if (PreferenceUtil.getInstance().adaptiveColor) {
color
} else {
ThemeStore.accentColor(context!!)
ThemeStore.accentColor(context!!).ripAlpha()
}
volumeFragment?.setTintable(colorFinal)

View File

@ -15,6 +15,7 @@ import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.ripAlpha
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback
@ -102,7 +103,7 @@ class FlatPlaybackControlsFragment : AbsPlayerControlsFragment(), Callback {
val colorFinal = if (PreferenceUtil.getInstance().adaptiveColor) {
color
} else {
ThemeStore.accentColor(context!!)
ThemeStore.accentColor(context!!).ripAlpha()
}
updateTextColors(colorFinal)

View File

@ -21,6 +21,7 @@ import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.ripAlpha
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
@ -111,7 +112,7 @@ class FullPlaybackControlsFragment : AbsPlayerControlsFragment(), PopupMenu.OnMe
val colorFinal = if (PreferenceUtil.getInstance().adaptiveColor) {
color
} else {
ThemeStore.accentColor(context!!)
ThemeStore.accentColor(context!!).ripAlpha()
}
volumeFragment?.setTintableColor(colorFinal)
text.setTextColor(colorFinal)

View File

@ -12,6 +12,8 @@ import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.hide
import code.name.monkey.retromusic.extensions.show
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
import code.name.monkey.retromusic.glide.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
@ -21,8 +23,6 @@ import code.name.monkey.retromusic.loaders.ArtistLoader
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.model.lyrics.AbsSynchronizedLyrics
import code.name.monkey.retromusic.model.lyrics.Lyrics
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
import code.name.monkey.retromusic.util.NavigationUtil
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
@ -66,11 +66,11 @@ class FullPlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbac
lyricsLine1.alpha = 1f
lyricsLine1.translationY = 0f
lyricsLine1.animate().alpha(0f).translationY(-h).duration = VISIBILITY_ANIM_DURATION
lyricsLine1.animate().alpha(0f).translationY(-h).duration = VISIBILITY_ANIM_DURATION
lyricsLine2.alpha = 0f
lyricsLine2.translationY = h
lyricsLine2.animate().alpha(1f).translationY(0f).duration = VISIBILITY_ANIM_DURATION
lyricsLine2.animate().alpha(1f).translationY(0f).duration = VISIBILITY_ANIM_DURATION
}
}
@ -83,7 +83,7 @@ class FullPlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbac
}
private fun hideLyricsLayout() {
lyricsLayout.animate().alpha(0f).setDuration( VISIBILITY_ANIM_DURATION).withEndAction(Runnable {
lyricsLayout.animate().alpha(0f).setDuration(VISIBILITY_ANIM_DURATION).withEndAction(Runnable {
if (!isLyricsLayoutBound()) return@Runnable
lyricsLayout.visibility = View.GONE
lyricsLine1.text = null
@ -91,7 +91,7 @@ class FullPlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbac
})
}
override fun setLyrics(l: Lyrics?) {
override fun setLyrics(l: Lyrics?) {
lyrics = l
if (!isLyricsLayoutBound()) return
@ -105,7 +105,7 @@ class FullPlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbac
lyricsLine2.text = null
lyricsLayout.visibility = View.VISIBLE
lyricsLayout.animate().alpha(1f).duration = VISIBILITY_ANIM_DURATION
lyricsLayout.animate().alpha(1f).duration = VISIBILITY_ANIM_DURATION
}
override fun playerToolbar(): Toolbar {
@ -119,7 +119,6 @@ class FullPlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbac
private fun setUpPlayerToolbar() {
playerToolbar.apply {
setNavigationIcon(R.drawable.ic_close_white_24dp)
setNavigationOnClickListener { activity!!.onBackPressed() }
}
}

View File

@ -29,6 +29,7 @@ import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.ripAlpha
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
@ -123,7 +124,7 @@ class LockScreenPlayerControlsFragment : AbsPlayerControlsFragment() {
val colorFinal = if (PreferenceUtil.getInstance().adaptiveColor) {
color
} else {
ThemeStore.textColorSecondary(context!!)
ThemeStore.textColorSecondary(context!!).ripAlpha()
}
volumeFragment?.setTintable(colorFinal)
ViewUtil.setProgressDrawable(progressSlider, ColorUtil.stripAlpha(colorFinal), true)

View File

@ -13,6 +13,7 @@ import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.ripAlpha
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
@ -106,7 +107,7 @@ class MaterialControlsFragment : AbsPlayerControlsFragment() {
lastPlaybackControlsColor = color
color
} else {
ThemeStore.textColorSecondary(context!!)
ThemeStore.textColorSecondary(context!!).ripAlpha()
}
text.setTextColor(colorFinal)
ViewUtil.setProgressDrawable(progressSlider, ColorUtil.stripAlpha(colorFinal), true)

View File

@ -101,7 +101,6 @@ class PlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbacks {
super.onViewCreated(view, savedInstanceState)
setUpSubFragments()
setUpPlayerToolbar()
snowfall.visibility = if (PreferenceUtil.getInstance().isSnowFall) View.VISIBLE else View.GONE
//val display = activity?.windowManager?.defaultDisplay

View File

@ -15,6 +15,7 @@ import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.ripAlpha
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
@ -71,10 +72,9 @@ class PlayerPlaybackControlsFragment : AbsPlayerControlsFragment() {
val colorFinal = if (PreferenceUtil.getInstance().adaptiveColor) {
color
} else {
ThemeStore.accentColor(context!!)
ThemeStore.accentColor(context!!).ripAlpha()
}
TintHelper.setTintAuto(playPauseButton, MaterialValueHelper.getPrimaryTextColor(context!!, ColorUtil.isColorLight(colorFinal)), false)
TintHelper.setTintAuto(playPauseButton, colorFinal, true)
ViewUtil.setProgressDrawable(progressSlider, colorFinal)

View File

@ -33,18 +33,12 @@ import code.name.monkey.retromusic.util.NavigationUtil
*/
abstract class AbsSettingsFragment : PreferenceFragmentCompat() {
internal fun showProToastAndNavigate(message: String) {
Toast.makeText(context, "$message is Pro version feature.", Toast.LENGTH_SHORT).show()
NavigationUtil.goToProVersion(activity!!)
}
protected fun setSummary(preference: Preference) {
setSummary(preference, PreferenceManager
.getDefaultSharedPreferences(preference.context)
.getString(preference.key, "")!!)
}
internal fun setSummary(preference: Preference, value: Any) {
val stringValue = value.toString()
if (preference is ListPreference) {
@ -57,6 +51,12 @@ abstract class AbsSettingsFragment : PreferenceFragmentCompat() {
abstract fun invalidateSettings()
protected fun setSummary(preference: Preference) {
setSummary(preference, PreferenceManager
.getDefaultSharedPreferences(preference.context)
.getString(preference.key, "")!!)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setDivider(ColorDrawable(Color.TRANSPARENT))
@ -68,19 +68,18 @@ abstract class AbsSettingsFragment : PreferenceFragmentCompat() {
}
override fun onDisplayPreferenceDialog(preference: Preference) {
var dialogFragment: DialogFragment? = null
if (preference is NowPlayingScreenPreference) {
dialogFragment = NowPlayingScreenPreferenceDialog.newInstance(preference.key);
} else if (preference is AlbumCoverStylePreference) {
dialogFragment = AlbumCoverStylePreferenceDialog.newInstance(preference.key);
}
if (preference is MaterialListPreference) {
preference.entries
dialogFragment = MaterialListPreferenceDialog.newInstance(preference)
}
if (preference is BlacklistPreference) {
dialogFragment = BlacklistPreferenceDialog.newInstance(preference.key)
var dialogFragment: DialogFragment? = null// Dialog creation could not be handled here. Try with the super method.
// The dialog was created (it was one of our custom Preferences), show the dialog for it
when (preference) {
is NowPlayingScreenPreference -> dialogFragment = NowPlayingScreenPreferenceDialog.newInstance(preference.key)
is AlbumCoverStylePreference -> dialogFragment = AlbumCoverStylePreferenceDialog.newInstance(preference.key)
is MaterialListPreference -> {
preference.entries
dialogFragment = MaterialListPreferenceDialog.newInstance(preference)
}
is BlacklistPreference -> dialogFragment = BlacklistPreferenceDialog.newInstance(preference.key)
}
if (dialogFragment != null) {
// The dialog was created (it was one of our custom Preferences), show the dialog for it
dialogFragment.setTargetFragment(this, 0);
@ -89,6 +88,5 @@ abstract class AbsSettingsFragment : PreferenceFragmentCompat() {
// Dialog creation could not be handled here. Try with the super method.
super.onDisplayPreferenceDialog(preference);
}
}
}

View File

@ -14,40 +14,50 @@
package code.name.monkey.retromusic.fragments.settings
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.os.Bundle
import androidx.preference.TwoStatePreference
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.util.PreferenceUtil
/**
* @author Hemanth S (h4h13).
*/
class NotificationSettingsFragment : AbsSettingsFragment() {
override fun invalidateSettings() {
val classicNotification: TwoStatePreference = findPreference("classic_notification")!!
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
classicNotification.isVisible = false
val classicNotification: TwoStatePreference? = findPreference("classic_notification")
if (VERSION.SDK_INT < VERSION_CODES.N) {
classicNotification?.isVisible = false
} else {
classicNotification.isChecked = PreferenceUtil.getInstance().classicNotification()
classicNotification.setOnPreferenceChangeListener { _, newValue ->
// Save preference
PreferenceUtil.getInstance().setClassicNotification(newValue as Boolean)
val service = MusicPlayerRemote.musicService
if (service != null) {
service.initNotification()
service.updateNotification()
classicNotification?.apply {
isChecked = PreferenceUtil.getInstance().classicNotification()
setOnPreferenceChangeListener { _, newValue ->
// Save preference
PreferenceUtil.getInstance().setClassicNotification(newValue as Boolean)
invalidateSettings()
true
}
}
}
true
val coloredNotification: TwoStatePreference? = findPreference("colored_notification")
if (VERSION.SDK_INT >= VERSION_CODES.O) {
coloredNotification?.isEnabled = PreferenceUtil.getInstance().classicNotification()
} else {
coloredNotification?.apply {
isChecked = PreferenceUtil.getInstance().coloredNotification()
setOnPreferenceChangeListener { _, newValue ->
PreferenceUtil.getInstance().setColoredNotification(newValue as Boolean)
true
}
}
}
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.pref_notification)
addPreferencesFromResource(code.name.monkey.retromusic.R.xml.pref_notification)
}
}

View File

@ -23,7 +23,6 @@ import androidx.preference.Preference
import androidx.preference.TwoStatePreference
import code.name.monkey.appthemehelper.*
import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEColorPreference
import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.App
@ -42,68 +41,72 @@ import com.afollestad.materialdialogs.color.colorChooser
class ThemeSettingsFragment : AbsSettingsFragment() {
override fun invalidateSettings() {
val primaryColorPref: ATEColorPreference = findPreference("primary_color")!!
primaryColorPref.isVisible = PreferenceUtil.getInstance().generalTheme == R.style.Theme_RetroMusic_Color
val primaryColor = ThemeStore.primaryColor(activity!!)
primaryColorPref.setColor(primaryColor, ColorUtil.darkenColor(primaryColor))
primaryColorPref.setOnPreferenceClickListener {
MaterialDialog(activity!!, BottomSheet()).show {
title(code.name.monkey.retromusic.R.string.primary_color)
positiveButton(R.string.set)
colorChooser(initialSelection = BLUE, allowCustomArgb = true, colors = PRIMARY_COLORS, subColors = PRIMARY_COLORS_SUB) { _, color ->
val theme = if (ColorUtil.isColorLight(color))
PreferenceUtil.getThemeResFromPrefValue("light")
else
PreferenceUtil.getThemeResFromPrefValue("dark")
val primaryColorPref: ATEColorPreference? = findPreference("primary_color")
primaryColorPref?.let {
it.isVisible = PreferenceUtil.getInstance().generalTheme == R.style.Theme_RetroMusic_Color
val primaryColor = ThemeStore.primaryColor(activity!!)
it.setColor(primaryColor, ColorUtil.darkenColor(primaryColor))
it.setOnPreferenceClickListener {
MaterialDialog(activity!!, BottomSheet()).show {
title(R.string.primary_color)
positiveButton(R.string.set)
colorChooser(initialSelection = BLUE,
allowCustomArgb = true,
colors = PRIMARY_COLORS,
subColors = PRIMARY_COLORS_SUB) { _, color ->
ThemeStore.editTheme(context).activityTheme(theme).primaryColor(color).commit()
val theme = if (ColorUtil.isColorLight(color))
PreferenceUtil.getThemeResFromPrefValue("light")
else
PreferenceUtil.getThemeResFromPrefValue("dark")
if (VersionUtils.hasNougatMR())
DynamicShortcutManager(context).updateDynamicShortcuts()
activity!!.recreate()
ThemeStore.editTheme(context).activityTheme(theme).primaryColor(color).commit()
if (VersionUtils.hasNougatMR())
DynamicShortcutManager(context).updateDynamicShortcuts()
activity!!.recreate()
}
}
true
}
true
}
val generalTheme: Preference = findPreference("general_theme")!!
setSummary(generalTheme)
generalTheme.setOnPreferenceChangeListener { _, newValue ->
val theme = newValue as String
val generalTheme: Preference? = findPreference("general_theme")
if (theme == "color" && !App.isProVersion) {
primaryColorPref.isVisible = false
showProToastAndNavigate("Color theme")
return@setOnPreferenceChangeListener false
} else {
primaryColorPref.isVisible = true
}
setSummary(generalTheme, newValue)
when (theme) {
"light" -> ThemeStore.editTheme(context!!).primaryColor(Color.WHITE).commit()
"black" -> ThemeStore.editTheme(context!!).primaryColor(Color.BLACK).commit()
"dark" -> ThemeStore.editTheme(context!!).primaryColor(ContextCompat.getColor(context!!, R.color.md_grey_900)).commit()
"daynight" -> {
val color = ATHUtil.resolveColor(context!!, android.R.attr.colorPrimary)
ThemeStore.editTheme(context!!).primaryColor(color).commit()
generalTheme?.let {
setSummary(it)
it.setOnPreferenceChangeListener { _, newValue ->
val theme = newValue as String
println(newValue)
if (theme == "color" && !App.isProVersion) {
showProToastAndNavigate("Color theme")
return@setOnPreferenceChangeListener false
}
"color" -> ThemeStore.editTheme(context!!).primaryColor(ContextCompat.getColor(context!!, R.color.md_blue_grey_800)).commit()
}
ThemeStore.editTheme(activity!!)
.activityTheme(PreferenceUtil.getThemeResFromPrefValue(theme))
.commit()
if (theme == "color") {
primaryColorPref?.isVisible = true
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
activity!!.setTheme(PreferenceUtil.getThemeResFromPrefValue(theme))
DynamicShortcutManager(activity!!).updateDynamicShortcuts()
setSummary(generalTheme, newValue)
when (theme) {
"light" -> ThemeStore.editTheme(context!!).primaryColor(Color.WHITE).commit()
"black" -> ThemeStore.editTheme(context!!).primaryColor(Color.BLACK).commit()
"dark" -> ThemeStore.editTheme(context!!).primaryColor(ContextCompat.getColor(context!!, R.color.md_grey_900)).commit()
"color" -> ThemeStore.editTheme(context!!).primaryColor(ContextCompat.getColor(context!!, R.color.md_blue_grey_800)).commit()
}
ThemeStore.editTheme(activity!!)
.activityTheme(PreferenceUtil.getThemeResFromPrefValue(theme))
.commit()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
activity?.setTheme(PreferenceUtil.getThemeResFromPrefValue(theme))
DynamicShortcutManager(activity!!).updateDynamicShortcuts()
}
activity?.recreate()
true
}
activity!!.recreate()
//invalidateSettings();
true
}
val accentColorPref: ATEColorPreference = findPreference("accent_color")!!

View File

@ -17,9 +17,10 @@ package code.name.monkey.retromusic.model;
import android.content.Context;
import android.os.Parcel;
import androidx.annotation.NonNull;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import io.reactivex.Observable;
/**

View File

@ -20,12 +20,9 @@ import code.name.monkey.retromusic.mvp.BaseView
interface HomeContract {
interface HomeView : BaseView<ArrayList<Home>> {
fun showEmpty()
}
interface HomeView : BaseView<ArrayList<Home>>
interface HomePresenter : BasePresenter<HomeView> {
fun homeSections();
fun homeSections()
}
}

View File

@ -59,7 +59,7 @@ class HomePresenter(private val view: HomeContract.HomeView) : Presenter(), Home
if (it.isNotEmpty()) hashSet.add(Home(0, R.string.recent_artists, 0, it, RECENT_ARTISTS, R.drawable.ic_artist_white_24dp))
view.showData(ArrayList(hashSet))
}, {
view.showEmpty()
view.showEmptyView()
})
}
@ -69,7 +69,7 @@ class HomePresenter(private val view: HomeContract.HomeView) : Presenter(), Home
if (it.isNotEmpty()) hashSet.add(Home(1, R.string.recent_albums, 0, it, RECENT_ALBUMS, R.drawable.ic_album_white_24dp))
view.showData(ArrayList(hashSet))
}, {
view.showEmpty()
view.showEmptyView()
})
}
@ -79,7 +79,7 @@ class HomePresenter(private val view: HomeContract.HomeView) : Presenter(), Home
if (it.isNotEmpty()) hashSet.add(Home(3, R.string.top_albums, 0, it, TOP_ALBUMS, R.drawable.ic_album_white_24dp))
view.showData(ArrayList(hashSet))
}, {
view.showEmpty()
view.showEmptyView()
})
}
@ -89,7 +89,7 @@ class HomePresenter(private val view: HomeContract.HomeView) : Presenter(), Home
if (it.isNotEmpty()) hashSet.add(Home(2, R.string.top_artists, 0, it, TOP_ARTISTS, R.drawable.ic_artist_white_24dp))
view.showData(ArrayList(hashSet))
}, {
view.showEmpty()
view.showEmptyView()
})
}
@ -99,7 +99,7 @@ class HomePresenter(private val view: HomeContract.HomeView) : Presenter(), Home
if (it.isNotEmpty()) hashSet.add(Home(4, R.string.favorites, 0, it, PLAYLISTS, R.drawable.ic_favorite_white_24dp))
view.showData(ArrayList(hashSet))
}, {
view.showEmpty()
view.showEmptyView()
})
}
@ -109,7 +109,7 @@ class HomePresenter(private val view: HomeContract.HomeView) : Presenter(), Home
if (it.isNotEmpty()) hashSet.add(Home(6, R.string.genres, 0, it, GENRES, R.drawable.ic_guitar_acoustic_white_24dp))
view.showData(ArrayList(hashSet))
}, {
view.showEmpty()
view.showEmptyView()
})
}
}

View File

@ -16,6 +16,7 @@ package code.name.monkey.retromusic.preferences
import android.app.Dialog
import android.content.Context
import android.graphics.PorterDuff
import android.os.Bundle
import android.util.AttributeSet
import android.view.LayoutInflater
@ -28,6 +29,7 @@ import androidx.preference.DialogPreference
import androidx.preference.PreferenceDialogFragmentCompat
import androidx.viewpager.widget.PagerAdapter
import androidx.viewpager.widget.ViewPager
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.retromusic.App
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.fragments.NowPlayingScreen
@ -35,7 +37,6 @@ import code.name.monkey.retromusic.util.NavigationUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.ViewUtil
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.bottomsheets.BottomSheet
import com.afollestad.materialdialogs.customview.customView
import com.bumptech.glide.Glide
@ -54,6 +55,10 @@ class NowPlayingScreenPreference : DialogPreference {
override fun getDialogLayoutResource(): Int {
return mLayoutRes;
}
init {
icon?.setColorFilter(ThemeStore.textColorSecondary(context), PorterDuff.Mode.SRC_IN)
}
}
class NowPlayingScreenPreferenceDialog : PreferenceDialogFragmentCompat(), ViewPager.OnPageChangeListener {

View File

@ -51,11 +51,11 @@ class MediaButtonIntentReceiver : BroadcastReceiver() {
}
companion object {
val TAG = MediaButtonIntentReceiver::class.java.simpleName
val TAG: String = MediaButtonIntentReceiver::class.java.simpleName
private val DEBUG = BuildConfig.DEBUG
private val MSG_HEADSET_DOUBLE_CLICK_TIMEOUT = 2
private const val MSG_HEADSET_DOUBLE_CLICK_TIMEOUT = 2
private val DOUBLE_CLICK = 400
private const val DOUBLE_CLICK = 400
private var wakeLock: WakeLock? = null
private var mClickCounter = 0

View File

@ -29,7 +29,6 @@ import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.media.AudioManager;
import android.media.audiofx.AudioEffect;
import android.media.session.MediaSession;
import android.os.Binder;
import android.os.Build;
import android.os.Handler;
@ -86,6 +85,7 @@ import code.name.monkey.retromusic.service.playback.Playback;
import code.name.monkey.retromusic.util.MusicUtil;
import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.util.RetroUtil;
import io.reactivex.schedulers.Schedulers;
import static code.name.monkey.retromusic.Constants.ACTION_PAUSE;
import static code.name.monkey.retromusic.Constants.ACTION_PENDING_QUIT;
@ -142,6 +142,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
| PlaybackStateCompat.ACTION_STOP
| PlaybackStateCompat.ACTION_SEEK_TO;
private final IBinder musicBind = new MusicBinder();
public boolean pendingQuit = false;
private AppWidgetBig appWidgetBig = AppWidgetBig.Companion.getInstance();
private AppWidgetClassic appWidgetClassic = AppWidgetClassic.Companion.getInstance();
private AppWidgetSmall appWidgetSmall = AppWidgetSmall.Companion.getInstance();
@ -178,7 +179,6 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
}
};
public boolean pendingQuit = false;
private Playback playback;
private ArrayList<Song> playingQueue = new ArrayList<>();
private ArrayList<Song> originalPlayingQueue = new ArrayList<>();
@ -244,20 +244,18 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action != null) {
switch (action) {
case Intent.ACTION_HEADSET_PLUG:
int state = intent.getIntExtra("state", -1);
switch (state) {
case 0:
Log.d(TAG, "Headset unplugged");
pause();
break;
case 1:
Log.d(TAG, "Headset plugged");
play();
break;
}
break;
if (Intent.ACTION_HEADSET_PLUG.equals(action)) {
int state = intent.getIntExtra("state", -1);
switch (state) {
case 0:
Log.d(TAG, "Headset unplugged");
pause();
break;
case 1:
Log.d(TAG, "Headset plugged");
play();
break;
}
}
}
}
@ -352,7 +350,10 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
PendingIntent mediaButtonReceiverPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, mediaButtonIntent, 0);
mediaSession = new MediaSessionCompat(this, "RetroMusicPlayer", mediaButtonReceiverComponentName, mediaButtonReceiverPendingIntent);
mediaSession = new MediaSessionCompat(this,
"RetroMusicPlayer",
mediaButtonReceiverComponentName,
mediaButtonReceiverPendingIntent);
mediaSession.setCallback(new MediaSessionCompat.Callback() {
@Override
public void onPlay() {
@ -390,8 +391,9 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
}
});
mediaSession.setFlags(MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS
| MediaSession.FLAG_HANDLES_MEDIA_BUTTONS);
mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS
| MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS
);
mediaSession.setMediaButtonReceiver(mediaButtonReceiverPendingIntent);
}
@ -417,31 +419,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
play();
break;
case ACTION_PLAY_PLAYLIST:
Playlist playlist = intent.getParcelableExtra(INTENT_EXTRA_PLAYLIST);
int shuffleMode = intent.getIntExtra(INTENT_EXTRA_SHUFFLE_MODE, getShuffleMode());
if (playlist != null) {
ArrayList<Song> playlistSongs;
if (playlist instanceof AbsCustomPlaylist) {
playlistSongs = ((AbsCustomPlaylist) playlist).getSongs(getApplicationContext()).blockingFirst();
} else {
//noinspection unchecked
playlistSongs = PlaylistSongsLoader.INSTANCE.getPlaylistSongList(getApplicationContext(), playlist.id).blockingFirst();
}
if (!playlistSongs.isEmpty()) {
if (shuffleMode == SHUFFLE_MODE_SHUFFLE) {
int startPosition;
startPosition = new Random().nextInt(playlistSongs.size());
openQueue(playlistSongs, startPosition, true);
setShuffleMode(shuffleMode);
} else {
openQueue(playlistSongs, 0, true);
}
} else {
Toast.makeText(getApplicationContext(), R.string.playlist_is_empty, Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(getApplicationContext(), R.string.playlist_is_empty, Toast.LENGTH_LONG).show();
}
playFromPlaylist(intent);
break;
case ACTION_REWIND:
back(true);
@ -464,6 +442,45 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
return START_STICKY;
}
private void playFromPlaylist(Intent intent) {
Playlist playlist = intent.getParcelableExtra(INTENT_EXTRA_PLAYLIST);
int shuffleMode = intent.getIntExtra(INTENT_EXTRA_SHUFFLE_MODE, getShuffleMode());
if (playlist != null) {
if (playlist instanceof AbsCustomPlaylist) {
((AbsCustomPlaylist) playlist).getSongs(getApplicationContext())
.subscribeOn(Schedulers.io())
.subscribe(songs -> {
playSongs(shuffleMode, songs);
}, throwable -> {
});
} else {
PlaylistSongsLoader.INSTANCE.getPlaylistSongList(getApplicationContext(), playlist.id)
.subscribeOn(Schedulers.io())
.subscribe(songs -> {
playSongs(shuffleMode, songs);
}, throwable -> {
});
}
} else {
Toast.makeText(getApplicationContext(), R.string.playlist_is_empty, Toast.LENGTH_LONG).show();
}
}
private void playSongs(int shuffleMode, ArrayList<Song> playlistSongs) {
if (!playlistSongs.isEmpty()) {
if (shuffleMode == SHUFFLE_MODE_SHUFFLE) {
int startPosition;
startPosition = new Random().nextInt(playlistSongs.size());
openQueue(playlistSongs, startPosition, true);
setShuffleMode(shuffleMode);
} else {
openQueue(playlistSongs, 0, true);
}
} else {
Toast.makeText(getApplicationContext(), R.string.playlist_is_empty, Toast.LENGTH_LONG).show();
}
}
@Override
public void onDestroy() {

View File

@ -33,13 +33,13 @@ import code.name.monkey.retromusic.Constants.ACTION_REWIND
import code.name.monkey.retromusic.Constants.ACTION_SKIP
import code.name.monkey.retromusic.Constants.ACTION_TOGGLE_PAUSE
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.MainActivity
import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget.Companion.createBitmap
import code.name.monkey.retromusic.glide.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.RetroSimpleTarget
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.activities.MainActivity
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroColorUtil
import code.name.monkey.retromusic.util.RetroUtil
@ -89,8 +89,7 @@ class PlayingNotificationImpl : PlayingNotification() {
.getActivity(service, 0, action, PendingIntent.FLAG_UPDATE_CURRENT)
val deleteIntent = buildPendingIntent(service, ACTION_QUIT, null)
val notification = NotificationCompat.Builder(service,
PlayingNotification.NOTIFICATION_CHANNEL_ID)
val notification = NotificationCompat.Builder(service, NOTIFICATION_CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification)
.setContentIntent(clickIntent)
.setDeleteIntent(deleteIntent)

View File

@ -30,13 +30,13 @@ import code.name.monkey.retromusic.Constants.ACTION_REWIND
import code.name.monkey.retromusic.Constants.ACTION_SKIP
import code.name.monkey.retromusic.Constants.ACTION_TOGGLE_PAUSE
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.MainActivity
import code.name.monkey.retromusic.glide.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.RetroSimpleTarget
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.activities.MainActivity
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
import code.name.monkey.retromusic.util.RetroUtil.createBitmap
@ -87,8 +87,7 @@ class PlayingNotificationOreo : PlayingNotification() {
.getActivity(service, 0, action, PendingIntent.FLAG_UPDATE_CURRENT)
val deleteIntent = buildPendingIntent(service, ACTION_QUIT, null)
val builder = NotificationCompat.Builder(service,
PlayingNotification.NOTIFICATION_CHANNEL_ID)
val builder = NotificationCompat.Builder(service, NOTIFICATION_CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification)
.setContentIntent(clickIntent)
.setDeleteIntent(deleteIntent)

View File

@ -220,7 +220,8 @@ public class ImageUtil {
return inSampleSize;
}
public static Bitmap getResizedBitmap(Bitmap image, int maxSize) {
@NonNull
public static Bitmap getResizedBitmap(@NonNull Bitmap image, int maxSize) {
int width = image.getWidth();
int height = image.getHeight();

View File

@ -147,8 +147,6 @@ public final class PreferenceUtil {
return R.style.Theme_RetroMusic_Light;
case "color":
return R.style.Theme_RetroMusic_Color;
case "acolor":
return R.style.Theme_RetroMusic_Black;
case "black":
return R.style.Theme_RetroMusic_Black;
case "daynight":
@ -306,6 +304,10 @@ public final class PreferenceUtil {
return mPreferences.getBoolean(COLORED_NOTIFICATION, true);
}
public final void setColoredNotification(boolean b) {
mPreferences.edit().putBoolean(COLORED_NOTIFICATION, b).apply();
}
public final boolean classicNotification() {
return mPreferences.getBoolean(CLASSIC_NOTIFICATION, false);
}

View File

@ -37,7 +37,7 @@ import code.name.monkey.retromusic.R;
public class RetroColorUtil {
public static int toolbarColor(@NonNull Context context) {
int color = ThemeStore.Companion.primaryColor(context);
if (ATHUtil.INSTANCE.isWindowBackgroundDark(context)) {
if (ATHUtil.INSTANCE.isWindowBackgroundDark(context) && PreferenceUtil.getInstance().getGeneralTheme() != R.style.Theme_RetroMusic_Color) {
return ATHUtil.INSTANCE.resolveColor(context, R.attr.cardBackgroundColor);
} else {
return color;

View File

@ -0,0 +1,36 @@
/*
* Copyright (c) 2019 Hemanth Savarala.
*
* Licensed under the GNU General Public License v3
*
* This is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by
* the Free Software Foundation either version 3 of the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*/
package code.name.monkey.retromusic.views
import android.content.Context
import android.content.res.ColorStateList
import android.util.AttributeSet
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.retromusic.R
import com.google.android.material.chip.Chip
class RetroChip @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) :
Chip(context, attrs, defStyleAttr) {
init {
chipBackgroundColor = ColorStateList.valueOf(ThemeStore.primaryColor(context))
val iconColor = ATHUtil.resolveColor(context, R.attr.iconColor)
val dividerColor = ATHUtil.resolveColor(context, R.attr.dividerColor)
chipIcon?.setTintList(ColorStateList.valueOf(iconColor))
setTextColor(iconColor)
chipStrokeColor = ColorStateList.valueOf(dividerColor)
}
}

View File

@ -30,70 +30,77 @@
</FrameLayout>
<androidx.core.widget.NestedScrollView
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:fillViewport="true"
android:overScrollMode="never">
<LinearLayout
<com.google.android.material.card.MaterialCardView
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<code.name.monkey.retromusic.views.CircularImageView
android:id="@+id/artistImage"
android:layout_width="52dp"
android:layout_height="52dp"
android:layout_marginStart="8dp"
android:layout_weight="0"
app:civ_border="false" />
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="1"
android:orientation="vertical"
android:padding="16dp">
android:gravity="center_vertical"
android:orientation="horizontal">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/albumTitle"
style="@style/TextAppearance.MaterialComponents.Headline6"
<code.name.monkey.retromusic.views.CircularImageView
android:id="@+id/artistImage"
android:layout_width="52dp"
android:layout_height="52dp"
android:layout_marginStart="8dp"
android:layout_weight="0"
app:civ_border="false" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="MissingPrefix" />
android:layout_gravity="bottom"
android:layout_weight="1"
android:orientation="vertical"
android:padding="16dp">
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:id="@+id/albumText"
style="@style/TextAppearance.MaterialComponents.Subtitle2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
tools:ignore="MissingPrefix"
tools:text="Title" />
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/albumTitle"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="MissingPrefix" />
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:id="@+id/albumText"
style="@style/TextAppearance.MaterialComponents.Subtitle2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
tools:ignore="MissingPrefix"
tools:text="Title" />
</LinearLayout>
</LinearLayout>
<include layout="@layout/activity_album_content" />
</LinearLayout>
<include layout="@layout/activity_album_content" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</androidx.core.widget.NestedScrollView>
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root"
android:layout_width="match_parent"
@ -30,64 +31,71 @@
</FrameLayout>
<androidx.core.widget.NestedScrollView
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:overScrollMode="never">
<LinearLayout
<com.google.android.material.card.MaterialCardView
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<LinearLayout
android:id="@+id/background"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/background"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
android:orientation="vertical">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/artistTitle"
style="@style/TextAppearance.MaterialComponents.Headline6"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="MissingPrefix"
tools:text="Title" />
android:orientation="vertical"
android:padding="16dp">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/text"
style="@style/TextAppearance.MaterialComponents.Subtitle2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
tools:ignore="MissingPrefix"
tools:text="Title" />
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/artistTitle"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="MissingPrefix"
tools:text="Title" />
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/text"
style="@style/TextAppearance.MaterialComponents.Subtitle2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
tools:ignore="MissingPrefix"
tools:text="Title" />
</LinearLayout>
<include layout="@layout/activity_artist_content" />
</LinearLayout>
<include layout="@layout/activity_artist_content" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/status_bar_padding" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/status_bar_padding" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</androidx.core.widget.NestedScrollView>
</LinearLayout>

View File

@ -84,8 +84,8 @@
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:layout_height="48dp"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
</LinearLayout>
</LinearLayout>

View File

@ -50,7 +50,7 @@
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
app:navigationIcon="@drawable/ic_keyboard_backspace_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:subtitleTextAppearance="@style/TextAppearance.AppCompat.Caption"
app:titleMargin="0dp"
app:titleMarginStart="0dp"

View File

@ -18,7 +18,9 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:background="@android:color/transparent" />
android:background="@android:color/transparent"
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
<RelativeLayout
android:layout_width="match_parent"
@ -78,11 +80,11 @@
android:id="@+id/playingQueueCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
sothree:cardCornerRadius="12dp"
android:layout_marginBottom="-8dp"
app:cardBackgroundColor="?cardBackgroundColor"
app:cardElevation="@dimen/card_elevation"
app:cardUseCompatPadding="false">
app:cardUseCompatPadding="false"
sothree:cardCornerRadius="12dp">
<RelativeLayout
android:layout_width="match_parent"

View File

@ -43,9 +43,9 @@
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="12dp"
app:cardCornerRadius="8dp"
app:cardElevation="8dp"
android:layout_margin="12dp"
app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="true">
@ -119,8 +119,8 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
</LinearLayout>
</LinearLayout>

View File

@ -63,8 +63,8 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
<fragment

View File

@ -31,9 +31,13 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="8dp"
app:cardElevation="6dp"
app:cardElevation="0dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
app:cardUseCompatPadding="true"
app:layout_scrollFlags="scroll|enterAlways">
app:layout_scrollFlags="scroll|enterAlways"
app:strokeColor="?dividerColor"
app:strokeWidth="1dp">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"

View File

@ -70,8 +70,8 @@
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:layout_gravity="bottom"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
</LinearLayout>
</LinearLayout>

View File

@ -105,8 +105,8 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
</LinearLayout>

View File

@ -12,10 +12,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.jetradarmobile.snowfall.SnowfallView
android:id="@+id/snowfall"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<include layout="@layout/shadow_statusbar_toolbar" />
@ -67,8 +63,8 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
<fragment

View File

@ -73,8 +73,8 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
</LinearLayout>
</LinearLayout>

View File

@ -41,7 +41,6 @@
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="fill_vertical"
@ -52,74 +51,81 @@
android:overScrollMode="never"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
<com.google.android.material.card.MaterialCardView
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<code.name.monkey.retromusic.views.WidthFitSquareLayout
android:layout_width="256dp"
android:layout_height="wrap_content"
android:layout_weight="0">
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"
app:cardCornerRadius="8dp"
app:cardElevation="4dp"
app:cardUseCompatPadding="true">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
</com.google.android.material.card.MaterialCardView>
</code.name.monkey.retromusic.views.WidthFitSquareLayout>
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:padding="16dp">
android:orientation="horizontal">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/albumTitle"
style="@style/TextAppearance.MaterialComponents.Headline3"
<code.name.monkey.retromusic.views.WidthFitSquareLayout
android:layout_width="256dp"
android:layout_height="wrap_content"
android:layout_weight="0">
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"
app:cardCornerRadius="8dp"
app:cardElevation="4dp"
app:cardUseCompatPadding="true">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
</com.google.android.material.card.MaterialCardView>
</code.name.monkey.retromusic.views.WidthFitSquareLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="MissingPrefix" />
android:layout_weight="1"
android:orientation="vertical"
android:padding="16dp">
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:id="@+id/albumText"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
tools:ignore="MissingPrefix"
tools:text="Title" />
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/albumTitle"
style="@style/TextAppearance.MaterialComponents.Headline3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="MissingPrefix" />
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:id="@+id/albumText"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
tools:ignore="MissingPrefix"
tools:text="Title" />
</LinearLayout>
</LinearLayout>
<include layout="@layout/activity_album_content" />
</LinearLayout>
<include layout="@layout/activity_album_content" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</androidx.core.widget.NestedScrollView>
<View

View File

@ -39,59 +39,65 @@
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="fill_vertical"
android:layout_marginStart="128dp"
android:layout_marginEnd="128dp"
android:background="@drawable/bg_bottom_sheet_dialog_fragment"
android:fillViewport="true"
android:overScrollMode="never"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:background="@color/md_red_500">
<LinearLayout
<com.google.android.material.card.MaterialCardView
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_height="wrap_content"
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="24dp">
android:layout_height="match_parent"
android:orientation="vertical">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/artistTitle"
style="@style/TextAppearance.MaterialComponents.Headline4"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="MissingPrefix"
tools:text="Title" />
android:orientation="vertical"
android:padding="24dp">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/text"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
tools:ignore="MissingPrefix"
tools:text="Title" />
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/artistTitle"
style="@style/TextAppearance.MaterialComponents.Headline4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="MissingPrefix"
tools:text="Title" />
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/text"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
tools:ignore="MissingPrefix"
tools:text="Title" />
</LinearLayout>
<include layout="@layout/activity_artist_content" />
</LinearLayout>
<include layout="@layout/activity_artist_content" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -30,7 +30,7 @@
<FrameLayout
android:id="@+id/imageContainer"
android:layout_width="match_parent"
android:layout_height="228dp"
android:layout_height="258dp"
app:layout_collapseMode="parallax">
<ImageView
@ -63,6 +63,8 @@
android:layout_height="wrap_content"
app:cardCornerRadius="8dp"
app:cardElevation="6dp"
android:layout_marginStart="128dp"
android:layout_marginEnd="128dp"
app:cardUseCompatPadding="true"
app:layout_scrollFlags="scroll|enterAlways">

View File

@ -73,10 +73,10 @@
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:layout_height="48dp"
android:navigationIcon="@drawable/ic_close_white_24dp"
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:navigationIcon="@drawable/ic_close_white_24dp" />
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -31,10 +31,14 @@
android:id="@+id/toolbarContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
app:cardCornerRadius="8dp"
app:cardElevation="6dp"
app:cardElevation="0dp"
app:cardUseCompatPadding="true"
app:layout_scrollFlags="scroll|enterAlways">
app:layout_scrollFlags="scroll|enterAlways"
app:strokeColor="?dividerColor"
app:strokeWidth="1dp">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"

View File

@ -12,11 +12,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.jetradarmobile.snowfall.SnowfallView
android:id="@+id/snowfall"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<include layout="@layout/shadow_statusbar_toolbar" />
<code.name.monkey.retromusic.views.FitSystemWindowsLayout
@ -66,7 +61,8 @@
android:id="@+id/playerToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
</LinearLayout>
</code.name.monkey.retromusic.views.FitSystemWindowsLayout>

View File

@ -13,10 +13,7 @@
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="24dp"
android:paddingTop="10dp"
android:paddingEnd="24dp"
android:paddingBottom="10dp">
android:padding="24dp">
<code.name.monkey.retromusic.views.CircularImageView
android:id="@+id/userImage"

View File

@ -42,86 +42,92 @@
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="fill_vertical"
android:layout_marginStart="96dp"
android:layout_marginEnd="96dp"
android:background="@drawable/bg_bottom_sheet_dialog_fragment"
android:fillViewport="true"
android:overScrollMode="never"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
<com.google.android.material.card.MaterialCardView
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_height="wrap_content"
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<code.name.monkey.retromusic.views.WidthFitSquareLayout
android:layout_width="196dp"
android:layout_height="wrap_content"
android:layout_weight="0">
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"
app:cardCornerRadius="8dp"
app:cardElevation="4dp"
app:cardUseCompatPadding="true">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
</com.google.android.material.card.MaterialCardView>
</code.name.monkey.retromusic.views.WidthFitSquareLayout>
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:paddingStart="16dp"
android:paddingEnd="16dp">
android:baselineAligned="false"
android:orientation="horizontal">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/albumTitle"
style="@style/TextAppearance.MaterialComponents.Headline4"
<code.name.monkey.retromusic.views.WidthFitSquareLayout
android:layout_width="196dp"
android:layout_height="wrap_content"
android:layout_weight="0">
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"
app:cardCornerRadius="8dp"
app:cardElevation="4dp"
app:cardUseCompatPadding="true">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
</com.google.android.material.card.MaterialCardView>
</code.name.monkey.retromusic.views.WidthFitSquareLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="MissingPrefix" />
android:layout_weight="1"
android:orientation="vertical"
android:paddingStart="16dp"
android:paddingEnd="16dp">
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:id="@+id/albumText"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
tools:ignore="MissingPrefix"
tools:text="Title" />
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/albumTitle"
style="@style/TextAppearance.MaterialComponents.Headline4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="MissingPrefix" />
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:id="@+id/albumText"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
tools:ignore="MissingPrefix"
tools:text="Title" />
</LinearLayout>
</LinearLayout>
<include layout="@layout/activity_album_content" />
</LinearLayout>
<include layout="@layout/activity_album_content" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</androidx.core.widget.NestedScrollView>
<View

View File

@ -40,61 +40,67 @@
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="fill_vertical"
android:layout_marginStart="96dp"
android:layout_marginEnd="96dp"
android:background="@drawable/bg_bottom_sheet_dialog_fragment"
android:fillViewport="true"
android:overScrollMode="never"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
<com.google.android.material.card.MaterialCardView
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:elevation="@dimen/card_elevation"
android:orientation="vertical"
tools:background="@color/md_red_500">
android:layout_height="wrap_content"
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="match_parent"
android:elevation="@dimen/card_elevation"
android:orientation="vertical"
android:padding="12dp">
tools:background="@color/md_red_500">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/artistTitle"
style="@style/TextAppearance.MaterialComponents.Headline4"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="MissingPrefix"
tools:text="Title" />
android:orientation="vertical"
android:padding="12dp">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/text"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
tools:ignore="MissingPrefix"
tools:text="Title" />
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/artistTitle"
style="@style/TextAppearance.MaterialComponents.Headline4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="MissingPrefix"
tools:text="Title" />
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/text"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
tools:ignore="MissingPrefix"
tools:text="Title" />
</LinearLayout>
<include layout="@layout/activity_artist_content" />
</LinearLayout>
<include layout="@layout/activity_artist_content" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -98,12 +98,12 @@
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/nameContainer"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"
app:hintEnabled="true">
@ -119,12 +119,12 @@
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/bioContainer"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"
app:hintEnabled="true">
@ -135,7 +135,8 @@
android:background="@null"
android:hint="@string/bio"
android:inputType="textPersonName|textCapWords|text"
android:textAppearance="@style/TextAppearance.AppCompat.Subhead" />
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
android:visibility="gone" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
</LinearLayout>
@ -147,8 +148,8 @@
android:layout_gravity="bottom"
android:layout_margin="16dp"
android:gravity="center"
app:iconGravity="textStart"
android:padding="16dp"
android:text="@string/save"
app:icon="@drawable/ic_save_white_24dp" />
app:icon="@drawable/ic_save_white_24dp"
app:iconGravity="textStart" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -30,7 +30,7 @@
<FrameLayout
android:id="@+id/imageContainer"
android:layout_width="match_parent"
android:layout_height="196dp"
android:layout_height="228dp"
app:layout_collapseMode="parallax">
<ImageView
@ -61,6 +61,8 @@
android:id="@+id/toolbarContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="64dp"
android:layout_marginEnd="64dp"
app:cardCornerRadius="8dp"
app:cardElevation="6dp"
app:cardUseCompatPadding="true"
@ -70,8 +72,8 @@
android:id="@+id/toolbar"
style="@style/Toolbar"
app:title="@string/search_hint"
app:titleTextAppearance="@style/TextAppearance.MaterialComponents.Body1"
app:titleMarginStart="0dp"
app:titleTextAppearance="@style/TextAppearance.MaterialComponents.Body1"
tools:ignore="UnusedAttribute" />
</com.google.android.material.card.MaterialCardView>
</LinearLayout>

View File

@ -81,8 +81,8 @@
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:layout_height="48dp"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
</LinearLayout>
</code.name.monkey.retromusic.views.FitSystemWindowsLayout>

View File

@ -32,16 +32,20 @@
android:id="@+id/toolbarContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="64dp"
android:layout_marginEnd="64dp"
app:cardCornerRadius="8dp"
app:cardElevation="6dp"
app:cardElevation="0dp"
app:cardUseCompatPadding="true"
app:layout_scrollFlags="scroll|enterAlways">
app:layout_scrollFlags="scroll|enterAlways"
app:strokeColor="?dividerColor"
app:strokeWidth="1dp">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
style="@style/Toolbar"
app:titleMarginStart="0dp"
app:title="@string/search_hint"
app:titleMarginStart="0dp"
app:titleTextAppearance="@style/TextAppearance.MaterialComponents.Body1"
tools:ignore="UnusedAttribute" />
</com.google.android.material.card.MaterialCardView>

View File

@ -11,10 +11,7 @@
android:id="@+id/colorGradientBackground"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.jetradarmobile.snowfall.SnowfallView
android:id="@+id/snowfall"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<include layout="@layout/shadow_statusbar_toolbar" />
<code.name.monkey.retromusic.views.FitSystemWindowsLayout
@ -29,6 +26,12 @@
android:gravity="center_horizontal"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include layout="@layout/status_bar" />
</FrameLayout>
<code.name.monkey.retromusic.views.WidthFitSquareLayout
android:id="@+id/album_cover_container"
@ -64,8 +67,8 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
</LinearLayout>
</code.name.monkey.retromusic.views.FitSystemWindowsLayout>

View File

@ -46,69 +46,75 @@
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_circular_top_corners"
app:behavior_overlapTop="24dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
<com.google.android.material.card.MaterialCardView
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="12dp">
<code.name.monkey.retromusic.views.CircularImageView
android:id="@+id/artistImage"
android:layout_width="52dp"
android:layout_height="52dp"
android:layout_weight="0"
app:civ_border="false"
app:civ_shadow="false" />
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:paddingStart="16dp"
android:paddingEnd="0dp">
android:orientation="horizontal"
android:padding="12dp">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/albumTitle"
style="@style/TextAppearance.MaterialComponents.Headline6"
<code.name.monkey.retromusic.views.CircularImageView
android:id="@+id/artistImage"
android:layout_width="52dp"
android:layout_height="52dp"
android:layout_weight="0"
app:civ_border="false"
app:civ_shadow="false" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="MissingPrefix" />
android:layout_weight="1"
android:orientation="vertical"
android:paddingStart="16dp"
android:paddingEnd="0dp">
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:id="@+id/albumText"
style="@style/TextAppearance.MaterialComponents.Subtitle2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
tools:ignore="MissingPrefix"
tools:text="Title" />
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/albumTitle"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="MissingPrefix" />
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:id="@+id/albumText"
style="@style/TextAppearance.MaterialComponents.Subtitle2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
tools:ignore="MissingPrefix"
tools:text="Title" />
</LinearLayout>
</LinearLayout>
<include layout="@layout/activity_album_content" />
</LinearLayout>
<include layout="@layout/activity_album_content" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -47,54 +47,60 @@
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_circular_top_corners"
android:overScrollMode="never"
app:behavior_overlapTop="24dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
<com.google.android.material.card.MaterialCardView
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
android:orientation="vertical">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/artistTitle"
style="@style/TextAppearance.MaterialComponents.Headline6"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="MissingPrefix"
tools:text="Title" />
android:orientation="vertical"
android:padding="16dp">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/artistTitle"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="MissingPrefix"
tools:text="Title" />
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/text"
style="@style/TextAppearance.MaterialComponents.Subtitle2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
tools:ignore="MissingPrefix"
tools:text="Title" />
</LinearLayout>
<include layout="@layout/activity_artist_content" />
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/text"
style="@style/TextAppearance.MaterialComponents.Subtitle2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
tools:ignore="MissingPrefix"
tools:text="Title" />
</LinearLayout>
<include layout="@layout/activity_artist_content" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -19,9 +19,14 @@
android:id="@+id/searchContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
app:cardCornerRadius="8dp"
app:cardElevation="6dp"
app:cardUseCompatPadding="true">
app:cardElevation="0dp"
app:cardUseCompatPadding="true"
app:layout_scrollFlags="scroll|enterAlways"
app:strokeColor="?dividerColor"
app:strokeWidth="1dp">
<LinearLayout
android:layout_width="match_parent"
@ -95,6 +100,6 @@
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
android:text="Keyboard"
android:text="@string/keyboard"
app:icon="@drawable/ic_keyboard_white_24dp" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -35,7 +35,9 @@
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="12dp"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:layout_marginBottom="12dp"
app:cardCornerRadius="12dp"
app:cardUseCompatPadding="true">

View File

@ -58,6 +58,8 @@
android:layout_height="wrap_content"
app:cardCornerRadius="8dp"
app:cardElevation="6dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
app:cardUseCompatPadding="true"
app:layout_scrollFlags="scroll|enterAlways">

View File

@ -75,8 +75,8 @@
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:layout_height="48dp"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
</LinearLayout>
</code.name.monkey.retromusic.views.FitSystemWindowsLayout>

View File

@ -54,7 +54,7 @@
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
app:navigationIcon="@drawable/ic_keyboard_backspace_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:subtitleTextAppearance="@style/TextAppearance.AppCompat.Caption"
app:titleMargin="0dp"
app:titleMarginStart="0dp"

View File

@ -76,7 +76,9 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:background="@android:color/transparent" />
android:background="@android:color/transparent"
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</LinearLayout>
</FrameLayout>
@ -100,9 +102,9 @@
sothree:cardCornerRadius="12dp">
<RelativeLayout
android:background="?cardBackgroundColor"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:background="?cardBackgroundColor">
<!--This is necessary for the drag sorting to work at the top-->
<View

View File

@ -115,8 +115,8 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
</LinearLayout>

View File

@ -43,16 +43,13 @@
android:textSize="12sp"
tools:ignore="RtlHardcoded,RtlSymmetry" />
<SeekBar
<androidx.appcompat.widget.AppCompatSeekBar
android:id="@+id/progressSlider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@id/songTotalTime"
android:layout_toRightOf="@id/songCurrentProgress"
android:maxHeight="3dp"
android:progressDrawable="@drawable/color_progress_seek"
android:splitTrack="false"
tools:ignore="RtlHardcoded,UnusedAttribute"
tools:progress="20" />
</RelativeLayout>

View File

@ -48,8 +48,8 @@
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:layout_gravity="bottom"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
</LinearLayout>

View File

@ -40,8 +40,8 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
<code.name.monkey.retromusic.views.WidthFitSquareLayout

View File

@ -58,7 +58,8 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:navigationIcon="@drawable/ic_close_white_24dp">
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"

View File

@ -29,7 +29,11 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="8dp"
app:cardElevation="6dp"
app:cardElevation="0dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
app:strokeColor="?dividerColor"
app:strokeWidth="1dp"
app:cardUseCompatPadding="true"
app:layout_scrollFlags="scroll|enterAlways">

View File

@ -34,7 +34,10 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="8dp"
app:strokeColor="@color/black_color"
app:cardElevation="0dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
app:strokeColor="?dividerColor"
app:cardUseCompatPadding="true"
app:layout_scrollFlags="scroll|enterAlways"
app:strokeWidth="1dp">

View File

@ -26,7 +26,7 @@
<code.name.monkey.retromusic.views.IconImageView
android:layout_width="96dp"
android:layout_height="96dp"
app:srcCompat="@drawable/ic_disc_full_black_24dp" />
app:srcCompat="@drawable/ic_music_note_off_white_24dp" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/emptyText"

View File

@ -60,8 +60,8 @@
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:layout_gravity="bottom"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
</LinearLayout>
</code.name.monkey.retromusic.views.FitSystemWindowsLayout>

View File

@ -92,8 +92,8 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
</LinearLayout>
</code.name.monkey.retromusic.views.FitSystemWindowsLayout>

View File

@ -12,10 +12,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.jetradarmobile.snowfall.SnowfallView
android:id="@+id/snowfall"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<include layout="@layout/shadow_statusbar_toolbar" />
@ -72,8 +68,8 @@
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:layout_gravity="bottom"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
</LinearLayout>
</code.name.monkey.retromusic.views.FitSystemWindowsLayout>

View File

@ -27,7 +27,6 @@
<include layout="@layout/status_bar" />
</FrameLayout>
<code.name.monkey.retromusic.views.WidthFitSquareLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
@ -61,8 +60,8 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:navigationIcon="@drawable/ic_close_white_24dp"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
</LinearLayout>
</code.name.monkey.retromusic.views.FitSystemWindowsLayout>

View File

@ -101,7 +101,8 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/playerToolbar"
style="@style/Toolbar"
app:navigationIcon="@drawable/ic_close_white_24dp" />
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout>
</LinearLayout>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/viewGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -21,8 +22,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:maxHeight="3dp"
android:progressDrawable="@drawable/color_progress_seek" />
tools:progress="20" />
<code.name.monkey.retromusic.views.IconImageView
android:id="@+id/volumeUp"

View File

@ -17,6 +17,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -40,19 +41,20 @@
android:layout_gravity="center"
android:gravity="center_horizontal"
android:orientation="vertical"
tools:visibility="visible"
android:visibility="gone">
<code.name.monkey.retromusic.views.IconImageView
android:layout_width="96dp"
android:layout_height="96dp"
app:srcCompat="@drawable/ic_disc_full_black_24dp" />
app:srcCompat="@drawable/ic_play_arrow_white_64dp" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/emptyText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/empty"
android:text="@string/start_play_music"
android:textColor="?android:textColorSecondary" />
</LinearLayout>
</LinearLayout>

View File

@ -26,7 +26,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="8dp"
android:layout_marginEnd="4dp"
android:layout_weight="1"
android:padding="10dp"
android:text="@string/action_play_all"
@ -41,7 +41,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="8dp"
android:layout_marginEnd="4dp"
android:layout_weight="1"
android:padding="10dp"
android:text="@string/shuffle"

View File

@ -1,37 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="12dp">
<LinearLayout
<code.name.monkey.retromusic.views.RetroChip
android:id="@+id/chipHead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="12dp"
android:background="@drawable/material_design_outline"
android:backgroundTint="?dividerColor"
android:gravity="center_vertical"
android:paddingStart="12dp"
android:paddingTop="6dp"
android:paddingEnd="12dp"
android:paddingBottom="6dp">
<code.name.monkey.retromusic.views.IconImageView
android:id="@+id/sectionIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="12dp"
app:srcCompat="@drawable/ic_person_white_24dp" />
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:id="@+id/sectionTitle"
style="@style/SubTitleTextAppearance"
android:padding="0dp"
android:text="@string/for_you" />
</LinearLayout>
android:fontFamily="@font/circular"
android:textColor="?android:textColorSecondary"
app:chipIconTint="?iconColor"
app:chipStrokeColor="?dividerColor"
app:chipStrokeWidth="1dp"
app:iconStartPadding="8dp"
tools:chipIcon="@drawable/ic_person_white_24dp"
tools:text="@string/for_you" />
<code.name.monkey.retromusic.views.MetalRecyclerViewPager
android:id="@+id/recyclerView"

View File

@ -2,37 +2,24 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/recentArtistContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
<code.name.monkey.retromusic.views.RetroChip
android:id="@+id/chipHead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="12dp"
android:background="@drawable/material_design_outline"
android:backgroundTint="?dividerColor"
android:gravity="center_vertical"
android:paddingStart="12dp"
android:paddingTop="6dp"
android:paddingEnd="12dp"
android:paddingBottom="6dp">
<code.name.monkey.retromusic.views.IconImageView
android:id="@+id/sectionIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="12dp"
app:srcCompat="@drawable/ic_person_white_24dp" />
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:id="@+id/sectionTitle"
style="@style/SubTitleTextAppearance"
android:padding="0dp"
android:text="@string/for_you" />
</LinearLayout>
android:fontFamily="@font/circular"
app:chipIconTint="?iconColor"
app:chipStrokeColor="?dividerColor"
app:chipStrokeWidth="1dp"
app:iconStartPadding="8dp"
tools:chipIcon="@drawable/ic_person_white_24dp"
tools:text="@string/for_you" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"

View File

@ -1,11 +1,55 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<resources>
<string name="synced_lyrics">扫描到的歌词</string>
<string name="songs">歌曲</string>
<string name="action_play_all">全部播放</string>
<string name="search_hint">搜索您的资料库…</string>
<string name="recent_albums">您最近播放过的专辑</string>
<string name="recent_artists">您最近听过 TA 们的歌</string>
<string name="small">小专辑</string>
<string name="welcome">欢迎您,</string>
<string name="top_albums">脱颖专辑</string>
<string name="top_artists">脱颖艺人</string>
<string name="pref_title_blacklist">黑名单</string>
<string name="set_artist_image">设置艺人图片</string>
<string name="reset_artist_image">重置艺人图片</string>
<string name="accent_color">强调色</string>
<string name="accent_color_desc">主题强调色,默认为蓝绿色。</string>
<string name="pref_title_album_cover_style">封面主题</string>
<string name="accent_color_desc">主题强调色,默认为蓝绿。</string>
<string name="profile">个人资料</string>
<string name="action_about">关于</string>
<string name="report_bug">反馈漏洞</string>
<string name="bug_report_use_account">使用 GitHub 账号发送反馈</string>
<string name="save_playlist_title">另存为文件</string>
<string name="save_playlists_title">另存为文件</string>
<string name="login">登陆</string>
<string name="bug_report_manual">手动发送</string>
<string name="you_will_be_forwarded_to_the_issue_tracker_website">您将会被导向至漏洞追踪器页面</string>
<string name="telegram_group_summary">加入我们的 Telegram 群组,与万千用户,以及我们的开发人员一起,解决漏洞,交流讨论,谈天说地</string>
<string name="bug_report_issue">问题</string>
<string name="title">标题</string>
<string name="description">描述</string>
<string name="username">用户名</string>
<string name="password">密码</string>
<string name="device_info">设备信息</string>
<string name="report_an_issue">反馈问题</string>
<string name="bug_report_no_username">请输入正确的 GitHub 用户名</string>
<string name="bug_report_no_password">请输入正确的 GitHub 密码</string>
<string name="bug_report_no_title">请输入问题的标题</string>
<string name="support_development">协助开发</string>
<string name="bug_report_no_description">请输入您对问题的描述</string>
<string name="bug_report_uploading">正在向 GitHub 提交您的问题…</string>
<string name="bug_report_failed">无法发送您的问题</string>
<string name="bug_report_failed_wrong_credentials">用户名或密码错误</string>
<string name="bug_report_failed_invalid_token">无效的访问令牌,请联系应用开发者。</string>
<string name="bug_report_failed_issues_not_available">未对所选存储库启用问题,请联系应用开发者。</string>
<string name="bug_report_failed_unknown">发生了意料之外的问题,请联系应用开发者</string>
<string name="translate">翻译</string>
<string name="translate_community">帮助我们使这款播放器以您的语言呈现内容</string>
<string name="copied_device_info_to_clipboard">已经把您的设备信息复制到剪贴板了</string>
<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_add_to_playlist">添加到播放列表</string>
<string name="action_clear_playing_queue">清空播放队列</string>
<string name="action_clear_playlist">清空播放列表</string>
<string name="action_delete">删除</string>
@ -37,12 +81,13 @@
<string name="action_settings">"设置"</string>
<string name="action_share">分享</string>
<string name="action_shuffle_all">随机播放全部</string>
<string name="action_shuffle_playlist">随机播放播放列表</string>
<string name="action_shuffle_playlist">随机播放列表</string>
<string name="action_sleep_timer">睡眠定时器</string>
<string name="action_sort_order">排序</string>
<string name="action_tag_editor">标签编辑器</string>
<string name="adaptive">自适应</string>
<string name="add_action">添加</string>
<string name="your_account_data_is_only_used_for_authentication">您的帐户数据将仅用于身份验证</string>
<string name="add_photo">添加\n头像</string>
<string name="add_playlist_title">"添加到播放列表"</string>
<string name="added_title_to_playing_queue">"已加入播放队列"</string>
@ -53,48 +98,60 @@
<string name="albums">专辑</string>
<!-- Android Auto -->
<string name="always">始终</string>
<string name="app_share">嘿快来瞧瞧这个酷炫的音乐播放器:https://play.google.com/store/apps/details?id=%s</string>
<string name="app_share">妈耶!这个音乐播放器帅到爆炸!https://play.google.com/store/apps/details?id=%s</string>
<!-- App Shortcuts -->
<string name="app_shortcut_last_added_long">@string/last_added</string>
<string name="app_shortcut_last_added_short">@string/last_added</string>
<string name="app_shortcut_shuffle_all_long">@string/action_shuffle_all</string>
<string name="app_shortcut_top_tracks_long">@string/my_top_tracks</string>
<string name="app_shortcut_shuffle_all_short">随机播放</string>
<string name="app_shortcut_top_tracks_short">顶级轨道</string>
<string name="app_widget_big_name">Retro音乐 - 大</string>
<string name="app_shortcut_top_tracks_short">畅响天籁</string>
<string name="app_widget_big_name">Retro Music - 大</string>
<string name="app_widget_card_name">Retro Music - 卡片模式</string>
<string name="app_widget_classic_name">Retro Music - 经典模式</string>
<string name="app_widget_small_name">Retro音乐 - 小</string>
<string name="app_widget_small_name">Retro Music - 小</string>
<string name="artist">歌手</string>
<string name="artists">歌手</string>
<string name="audio_focus_denied">音频焦点丢失</string>
<string name="audio_settings_summary">更改声音设置和均衡器设置</string>
<string name="bass_boost">低音增强</string>
<string name="biography">简介</string>
<string name="black_theme_name">纯黑</string>
<string name="black_theme_name"></string>
<string name="blacklist">黑名单</string>
<string name="blur">模糊</string>
<string name="blur_card">模糊卡片</string>
<string name="pref_keep_screen_on_title">屏幕常亮</string>
<string name="pref_keep_screen_on_summary">请注意,启用此功能可能会降低电池续航时间</string>
<string name="pref_blur_amount_title">模糊</string>
<string name="pref_blur_amount_summary">应用于模糊主题,数量越低加载越快</string>
<string name="pref_blur_amount_title">模糊</string>
<string name="pref_blur_amount_summary">应用于模糊主题,数量越低加载越快</string>
<string name="cancel_current_timer">取消</string>
<string name="card">卡片</string>
<string name="card_color_style">彩色卡片</string>
<string name="card_color_style">彩色卡片</string>
<string name="card_circular_style">圆形</string>
<string name="select_banner_photo">背景图</string>
<string name="new_banner_photo">选择一张新背景图</string>
<string name="remove_banner_photo">移除当前背景图</string>
<string name="new_profile_photo">选择一张新头像</string>
<string name="image">图片</string>
<string name="card_style">卡片</string>
<string name="set">应用</string>
<string name="card_style">卡片式</string>
<string name="today">当天</string>
<string name="this_month">一个月内</string>
<string name="this_week">一周内</string>
<string name="this_year">一年内</string>
<string name="pref_filter_song_title">筛选歌曲时长</string>
<string name="cast">投射</string>
<string name="changelog">更新日志</string>
<string name="changelog_summary">在Telegram频道上维护更新日志</string>
<string name="clear_action">透明</string>
<string name="changelog_summary">在 Telegram 频道上维护更新日志</string>
<string name="pref_summary_blacklist">被列入黑名单的文件夹中的音频,将不会出现在播放器中</string>
<string name="clear_action">清除</string>
<string name="clear_blacklist">清空黑名单</string>
<string name="clear_playlist_title">清除播放列表</string>
<string name="clear_playlist_x"><![CDATA[\u786e\u8ba4\u6e05\u9664\u64ad\u653e\u5217\u8868 <b>%1$s</b> \u5417\uff1f\u8bf7\u6ce8\u610f\uff0c\u6b64\u64cd\u4f5c\u4e0d\u53ef\u6062\u590d\uff01]]></string>
<string name="close_notification">关闭</string>
<string name="color">颜色</string>
<string name="color_theme_name">颜色</string>
<string name="color">多彩</string>
<string name="color_theme_name">自定义</string>
<string name="primary_color_desc">播放器的主色调,默认蓝灰色。使用深色效果更佳。</string>
<string name="colors">更多颜色</string>
<string name="could_not_create_playlist">\u4e0d\u80fd\u521b\u5efa\u64ad\u653e\u5217\u8868</string>
<string name="could_not_download_album_cover">"\u65e0\u6cd5\u4e0b\u8f7d\u5339\u914d\u7684\u4e13\u8f91\u5c01\u9762"</string>
@ -104,7 +161,7 @@
<string name="created_playlist_x">已创建播放列表 %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="dark_theme_name">深空灰</string>
<string name="default_hint">没有歌词</string>
<string name="delete_playlist_title">删除播放列表</string>
<string name="delete_playlist_x"><![CDATA[确认删除播放列表 <b>%1$s</b> 吗?]]></string>
@ -113,11 +170,13 @@
<string name="delete_x_playlists"><![CDATA[删除播放列表 <b>%1$s</b> 吗?]]></string>
<string name="delete_x_songs"><![CDATA[删除歌曲 <b>%1$s</b> 吗?]]></string>
<string name="deleted_x_songs">已删除 %1$d 首歌曲</string>
<string name="do_you_want_to_clear_the_blacklist">想清除黑名单吗?</string>
<string name="do_you_want_to_clear_the_blacklist">想清除黑名单吗?</string>
<string name="do_you_want_to_remove_from_the_blacklist"><![CDATA[要从黑名单中删除 <b>%1$s</b> 吗?]]></string>
<string name="donate">捐赠</string>
<string name="donate_summary">如果你觉得我的应用好用,你可以在这里捐赠一些资金,你的支持是我开发的动力</string>
<string name="donation_header">用以下方式捐赠:</string>
<string name="donate">赞助</string>
<string name="pinterest_page_summary">关注我们的 Pinterest 主页,随时随地了解我们的设计灵感吧!</string>
<string name="donate_summary">如果您觉得这款播放器还对你的胃口,欢迎您为这款应用赞助!您的支持,就是我最大的动力!</string>
<string name="rate_on_google_play_summary">感觉还不错5 星好评一下怎么样!或者您也可以把您的想法留在评论里,帮助这款播放器锦上添花!</string>
<string name="donation_header">您可以使用以下方式赞助我们:</string>
<string name="download_from_last_fm">从 Last.fm 下载</string>
<string name="edit_cover">编辑专辑封面</string>
<string name="empty">空空如也</string>
@ -126,20 +185,21 @@
<string name="favorites">收藏夹</string>
<string name="flat">扁平</string>
<string name="folders">文件夹</string>
<string name="for_you">给你的</string>
<string name="full"></string>
<string name="for_you">专属于您</string>
<string name="full_card">卡片式全屏幕</string>
<string name="full">全屏幕</string>
<string name="general_settings_summary">更改应用的主题和颜色</string>
<string name="general_settings_title">界面外观</string>
<string name="genre">流派</string>
<string name="genres">流派</string>
<string name="git_hub_summary">在GitHub上Fork项目</string>
<string name="google_plus_community">加入Google+社区获得帮助或者更新信息</string>
<string name="git_hub_summary"> GitHub Fork 项目</string>
<string name="google_plus_community">加入 Google+ 社区获得帮助或者更新信息</string>
<string name="history">历史记录</string>
<string name="home">主页</string>
<string name="image_settings_summary">更改艺术家图片下载设置</string>
<string name="inserted_x_songs_into_playlist_x">将歌曲%1$d加入%2$s列表</string>
<string name="inserted_x_songs_into_playlist_x">将歌曲 %1$d 加入 %2$s 列表</string>
<string name="instagram_page">Instagram</string>
<string name="instagram_page_summary">分享你的设置到Instagram</string>
<string name="instagram_page_summary">分享您的设置到 Instagram</string>
<string name="label_bit_rate">比特率</string>
<string name="label_file_format">格式</string>
<string name="label_file_name">文件名</string>
@ -147,47 +207,89 @@
<string name="label_file_size">大小</string>
<string name="label_sampling_rate">采样率</string>
<string name="label_track_length">长度</string>
<string name="last_added">上次添加</string>
<string name="last_added">最近添加</string>
<string name="lets_play_something">来点音乐吧!</string>
<string name="library"></string>
<string name="library">资料</string>
<string name="licenses">许可</string>
<string name="light_theme_name"></string>
<string name="listing_files">正在罗列所有文件</string>
<string name="loading_products">加载产品...</string>
<string name="light_theme_name">皓月</string>
<string name="listing_files">正在罗列所有文件</string>
<string name="loading_products">劳烦您稍等一下…(若始终无法加载,请尝试使用爬墙工具)</string>
<string name="lyrics">歌词</string>
<string name="material"></string>
<string name="material"></string>
<string name="my_name">我的名字</string>
<string name="my_top_tracks">播放最多</string>
<string name="my_top_tracks">我的最爱</string>
<string name="never">从不</string>
<string name="new_playlist_title">新播放列表</string>
<string name="new_profile_photo">新头像</string>
<string name="new_start_directory">%s是新的开始目录</string>
<string name="no_albums">无专辑</string>
<string name="no_artists">无艺术家</string>
<string name="no_audio_ID">"先放首曲子,然后再试试"</string>
<string name="no_equalizer">找不到均衡器</string>
<string name="new_playlist_title">新建播放列表</string>
<string name="new_start_directory">%s 是新的开始目录</string>
<string name="no_albums">还没有专辑</string>
<string name="no_artists">还没有艺术家</string>
<string name="no_audio_ID">"请先放首曲子,然后再试试"</string>
<string name="no_equalizer">暂时没有均衡器</string>
<string name="no_genres">无流派</string>
<string name="no_lyrics_found">找不到歌词</string>
<string name="no_playlists">播放列表</string>
<string name="no_playlists">还没有创建播放列表</string>
<string name="no_purchase_found">找不到支付记录</string>
<string name="no_results">无结果</string>
<string name="no_songs">无歌曲</string>
<string name="composer">作曲家</string>
<string name="track_hint">"音轨 (使用 2 来代表轨道 2或者使用 3004 来代表 CD3 轨道 4)"</string>
<string name="sort_order_composer">作曲家</string>
<string name="up_next">接下来</string>
<string name="the_audio_file">分享音频文件</string>
<string name="clear_playing_queue">清除播放队列</string>
<string name="normal">正常</string>
<string name="normal_lyrics">正常歌词</string>
<string name="queue">播放队列</string>
<string name="normal_lyrics">一般歌词</string>
<string name="send_crash_log">发送崩溃日志</string>
<string name="normal_style">正常</string>
<string name="not_listed_in_media_store"><![CDATA[<b>%s</b>在多媒体商店没列出]]></string>
<string name="edit">编辑</string>
<string name="add_lyrics">添加歌词</string>
<string name="paste_lyrics_here">将您的歌词粘贴在这里</string>
<string name="not_listed_in_media_store"><![CDATA[<b>%s</b> 未在 MediaStore 中列出]]></string>
<string name="nothing_to_scan">检索不到任何东西</string>
<string name="notification">通知烂</string>
<string name="notification_settings_summary">自定义通知栏风格</string>
<string name="now_playing">正在播放</string>
<string name="now_playing_queue">播放队列</string>
<string name="only_on_wifi">仅限Wi-Fi</string>
<string name="only_on_wifi">仅限 Wi-Fi</string>
<string name="others">其他</string>
<string name="past_three_months">前三个月</string>
<string name="permission_external_storage_denied">无权访问外部存储</string>
<string name="permissions_denied">无权访问</string>
<string name="personalize">个性化</string>
<string name="personalize_settings_summary">自定义正在播放控件和UI控件</string>
<string name="select_all">全选</string>
<string name="buy_retro_music_pro">Retro Music Pro</string>
<string name="buy_pro">购买 Retro Music Pro</string>
<string name="sort_order">排序</string>
<string name="sort_order_a_z">由 A 到 Z</string>
<string name="sort_order_album">以专辑</string>
<string name="sort_order_artist">以艺术家</string>
<string name="sort_order_date">以日期</string>
<string name="sort_order_year">以年代</string>
<string name="sort_order_z_a">由 Z 到 A</string>
<string name="title_dashboard">仪表盘</string>
<string name="title_good_afternoon">下午好</string>
<string name="title_good_day">祝您万事顺心</string>
<string name="title_good_evening">晚上好</string>
<string name="track_list">专辑曲目号</string>
<string name="song_duration">歌曲时长</string>
<string name="title_good_morning">早哇</string>
<string name="remove_cover">移除封面</string>
<string name="title_good_night">晚安</string>
<string name="title_user_info">请问您的名字是…</string>
<string name="thank_you">感谢您!</string>
<string name="classic">经典</string>
<string name="tiny">小图标</string>
<string name="simple">素雅</string>
<string name="save">保存</string>
<string name="speech_prompt">使用语音搜索您的资料库</string>
<string name="speech_not_supported">很抱歉,您的设备暂不支持语言输入!</string>
<string name="song">歌曲</string>
<string name="fit">适应</string>
<string name="plain">简约</string>
<string name="personalize_settings_summary">自定义播放控件和 UI 控件</string>
<string name="pick_from_local_storage">从本地选取</string>
<string name="playing_notification_description">播放通知栏提供播放/暂停等操作</string>
<string name="playing_notification_name">播放通知栏</string>
@ -201,19 +303,21 @@
<string name="pref_header_lockscreen">锁屏</string>
<string name="pref_header_playlists">播放列表</string>
<string name="pref_only_lollipop">"仅在Android 5.x(Lollipop)上可用"</string>
<string name="pref_summary_album_art_on_lockscreen">将正在播放的歌曲专辑封面设置为锁屏壁纸</string>
<string name="pref_summary_album_art_on_lockscreen">将正在播放的歌曲专辑封面设置为锁屏壁纸</string>
<string name="pref_summary_audio_ducking">系统音响起或消息提醒时降低音量</string>
<string name="pref_summary_blurred_album_art">在锁屏显示模糊化的专辑封面(可能会影响第三方应用或者小部件的正常运行)</string>
<string name="pref_summary_carousel_effect">正在播放界面轮播专辑封面,需要注意在卡片模式以及模糊卡片主题下无效</string>
<string name="pref_summary_carousel_effect">播放界面轮播专辑封面。需要注意,在卡片模式以及模糊卡片主题下无效</string>
<string name="pref_summary_classic_notification">使用经典通知栏设计</string>
<string name="pref_summary_colored_app">背景色以及控件色跟随正在播放界面的专辑封面变化</string>
<string name="pref_summary_home_banner">切换主页横幅样式</string>
<string name="grid_style_label"><![CDATA[方格与风格]]></string>
<string name="pref_summary_colored_app">背景色以及控件色跟随播放界面的专辑封面变化</string>
<string name="pref_summary_colored_app_shortcuts">将快捷方式颜色更改为强调色,每次颜色更改后需要切换一下该设置才能生效</string>
<string name="pref_summary_colored_navigation_bar">修改导航栏颜色为主调色</string>
<string name="pref_summary_colored_navigation_bar">将主调色应用于导航栏</string>
<string name="pref_summary_colored_notification">"\u4fee\u6539\u901a\u77e5\u680f\u989c\u8272\u4e3a\u4e13\u8f91\u5c01\u9762\u7684\u4e3b\u8272\u8c03"</string>
<string name="pref_summary_dominant_color">从专辑封面或艺术家图中选取主色调</string>
<string name="pref_summary_gapless_playback">"在一些设备上可能会播放异常"</string>
<string name="pref_summary_ignore_media_store_artwork">可以提高专辑封面的质量,但是加载时候会较慢。建议只在不满意图片分辨率时开启</string>
<string name="pref_summary_lock_screen">使用Retro Music的自定义锁屏</string>
<string name="pref_summary_lock_screen">使用 Retro Music 提供的自定义锁屏</string>
<string name="pref_summary_open_source_licences">开源许可详情</string>
<string name="pref_summary_round_corners">对应用边缘进行圆角化</string>
<string name="pref_summary_tab_titles">切换底部导航栏的标签标题</string>
@ -224,9 +328,9 @@
<string name="pref_summary_extra_controls">给迷你播放器添加额外控件</string>
<string name="pref_summary_genre_toggle">切换流派标签</string>
<string name="pref_title_album_art_on_lockscreen">显示专辑封面</string>
<string name="pref_title_tab_text_mode">标签标题模式</string>
<string name="pref_title_tab_text_mode">底栏文字显示</string>
<string name="pref_title_album_grid_style">专辑方格</string>
<string name="pref_title_app_shortcuts">带颜色的快捷方式</string>
<string name="pref_title_app_shortcuts">彩色快捷方式</string>
<string name="pref_title_artist_grid_style">艺术家方格</string>
<string name="pref_title_audio_ducking">不显示的时候降低音量</string>
<string name="pref_title_auto_download_artist_images">自动下载艺术家图片</string>
@ -234,16 +338,16 @@
<string name="pref_title_choose_equalizer">选择均衡器</string>
<string name="pref_title_classic_notification">经典通知栏设计</string>
<string name="pref_title_colored_app">自适应颜色</string>
<string name="pref_title_colored_notification">带颜色的通知栏</string>
<string name="pref_title_colored_notification">彩色通知栏</string>
<string name="pref_title_gapless_playback">无间隙连续播放</string>
<string name="pref_title_general_theme">应用主题</string>
<string name="pref_title_ignore_media_store_artwork">忽略多媒体商店封面</string>
<string name="pref_title_last_added_interval">上次添加播放列表到现在的间隔</string>
<string name="pref_title_ignore_media_store_artwork">忽略音乐商店提供的封面</string>
<string name="pref_title_last_added_interval">您认为多久之内才算是最近添加的?</string>
<string name="pref_title_lock_screen">全屏控件</string>
<string name="pref_title_navigation_bar">带颜色的导航栏</string>
<string name="pref_title_now_playing_screen_appearance">播放主题</string>
<string name="pref_title_open_source_licences">开源许可</string>
<string name="pref_title_round_corners"></string>
<string name="pref_title_round_corners"></string>
<string name="pref_title_toggle_carousel_effect">轮播效果</string>
<string name="pref_title_toggle_dominant_color">主色调</string>
<string name="pref_title_toggle_full_screen">全屏应用</string>
@ -255,31 +359,76 @@
<string name="pref_title_extra_controls">额外控件</string>
<string name="pref_title_home_banner">主页横幅</string>
<string name="pref_title_genre_toggle">显示流派标签</string>
<string name="pref_title_album_cover_transform">正在播放的专辑封面风格</string>
<string name="pref_title_album_cover_transform">播放界面专辑封面风格</string>
<string name="primary_color">主颜色</string>
<string name="rate_app">评价这个应用</string>
<string name="pref_keep_pause_on_zero_volume_title">静音时自动暂停</string>
<string name="pref_keep_pause_on_zero_volume_summary">当媒体音量降低至 0 时,音乐将自动暂停,而当您把音量提高时,则将会自动开始播放。该选项在此应用外依然可用。</string>
<string name="remove_action">删除</string>
<string name="remove_from_blacklist">从黑名单中移除</string>
<string name="remove_profile_photo">删除简介照片</string>
<string name="remove_profile_photo">移除当前头像</string>
<string name="remove_song_from_playlist_title">从播放列表中删除歌曲</string>
<string name="remove_songs_from_playlist_title">从播放列表中删除歌曲</string>
<string name="rename_playlist_title">重命名播放列表</string>
<string name="labeled">始终显示</string>
<string name="selected">显示当前页的文字</string>
<string name="unlabeled">不显示</string>
<!-- SAF -->
<!-- SAF guide -->
<string name="saving_changes">保存修改</string>
<string name="scan_media">扫描媒体</string>
<!-- Message displayed when tag editing fails -->
<string name="twitter_page">推特</string>
<string name="twitter_page">Twitter</string>
<string name="set_photo">设置头像</string>
<string name="auto">自动</string>
<string name="circular">圆形</string>
<string name="unplayable_file">\u65e0\u6cd5\u64ad\u653e\u8fd9\u9996\u6b4c\u3002</string>
<string name="update_image">更新图片</string>
<string name="updating">更新中...</string>
<string name="version">版本</string>
<string name="web_search">网络搜索</string>
<string name="what_do_you_want_to_share">你想分享什么?</string>
<string name="other_settings_summary">仍处于测试阶段的高级功能</string>
<string name="what_do_you_want_to_share">您希望分享什么?</string>
<string name="pref_title_home_artist_grid_style">主页艺术家展示形式</string>
<string name="about_settings_summary">了解我们的团队,获取我们的社交账号以及联系方式</string>
<string name="year"></string>
<string name="keyboard">显示键盘</string>
<string name="stack">堆叠</string>
<string name="image_gradient">渐变图片</string>
<string name="premium">成为高级会员</string>
<string name="upgrade_to_premium">升级成为高级会员</string>
<string name="purchase_summary">*请在决定购买前再三考虑,如果您购买之后后悔了,恕不提供退款服务。</string>
<string name="restore">恢复购买</string>
<string name="restored_previous_purchase_please_restart">已恢复先前购买的内容。只需重启播放器,您就能正常使用了!</string>
<string name="restored_previous_purchases">已恢复先前购买的内容。</string>
<string name="restoring_purchase">正在尝试恢复先前购买的内容…</string>
<string name="retro_equalizer">Retro Music 均衡器</string>
<string name="virtualizer">虚拟器</string>
<string name="depth">深度</string>
<string name="vertical_flip">垂直翻转</string>
<string name="cascading">传递</string>
<string name="horizontal_flip">水平翻转</string>
<string name="whats_new">来看看这次更新的亮点吧!</string>
<string name="saved_playlist_to">已保存播放列表至 %s.</string>
<string name="scanned_files">已扫描出 %1$d 个文件,总共有 %2$d 个</string>
<string name="sleep_timer_canceled">睡眠定时器已取消</string>
<string name="social">社交媒体</string>
<string name="hinge">合页</string>
<string name="select_preset">选择一个预设</string>
<string name="on">开启</string>
<string name="shuffle">随机播放</string> `
<string name="add_time_framed_lryics">加入带有时间轴的歌词</string>
<string name="dialog_title_set_ringtone">设置铃声</string>
<string name="dialog_message_set_ringtone">请允许 Retro Music 更改音频设置</string>
<string name="suggestion_songs">推荐</string>
<string name="twitter_page_summary">分享出您独一无二的 Retro Music</string>
<string name="start_play_music">来点音乐吧</string>
<string name="share_app">分享应用到…</string>
<string name="pro_summary">更多播放主题,轮播效果,色彩主题,等你解锁!</string>
<string name="clear_app_data">清除应用数据</string>
<string name="error">错误</string>
<string name="now_playing_themes">9+种播放主题</string>
<string name="window">窗口</string>
<string name="now_playing_themes">9 种以上播放主题</string>
<string name="carousal_effect_on_now_playing_screen">在播放界面使用轮播效果</string>
<string name="now_playing_summary">自定义播放界面</string>
</resources>

View File

@ -624,4 +624,5 @@
<string name="pro_summary">Now playing themes, Carousel effect, Color theme and more..</string>
<string name="action_play_all">Play all</string>
<string name="start_play_music">Start playing music.</string>
<string name="keyboard">Keyboard</string>
</resources>

View File

@ -67,7 +67,7 @@
<item name="cardBackgroundColor">@color/card_dark_color</item>
<item name="defaultFooterColor">@color/dark_color</item>
<item name="dividerColor">@color/dark_color</item>
<item name="dividerColor">@color/md_grey_800</item>
<item name="iconColor">@color/ate_secondary_text_dark</item>

View File

@ -2,7 +2,7 @@
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceCategory android:title="@string/pref_header_general">
<code.name.monkey.retromusic.preferences.MaterialListPreference
<code.name.monkey.appthemehelper.common.prefs.supportv7.ATEListPreference
android:defaultValue="dark"
android:entries="@array/pref_general_theme_list_titles"
android:entryValues="@array/pref_general_theme_list_values"

Some files were not shown because too many files have changed in this diff Show More