Merge pull request #1257 from prathameshmm02/dev

Fixed some crashes and bugs
This commit is contained in:
Daksh P. Jain 2022-02-17 21:50:45 +05:30 committed by GitHub
commit eaa036936a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
93 changed files with 317 additions and 309 deletions

View file

@ -35,9 +35,9 @@
|:-----: |:-----: |:-----: |:-----: |:-----: |
| Normal | Fit | Flat | Color | Material |
| <img src="screenshots/classic.jpg" width="200"/> |<img src="screenshots/adaptive.jpg" width="200"/>| <img src="screenshots/blur.jpg" width="200"/> | <img src="screenshots/tiny.jpg" width="200"/> | <img src="screenshots/peak.jpg" width="200"/> |
| <img src="screenshots/classic.jpg" width="200"/> |<img src="screenshots/adaptive.jpg" width="200"/>| <img src="screenshots/blur.jpg" width="200"/> | <img src="screenshots/tiny.jpg" width="200"/> | <img src="screenshots/peek.jpg" width="200"/> |
|:-----: |:-----: |:-----: |:-----: |:-----: |
| Classic | Adaptive | Blur | Tiny | Peak |
| Classic | Adaptive | Blur | Tiny | Peek |
### 🧭 Navigation never made easier
Self-explanatory interface without overloaded menus.

View file

@ -14,8 +14,8 @@ android {
vectorDrawables.useSupportLibrary = true
applicationId "code.name.monkey.retromusic"
versionCode 10564
versionName '5.7.1'
versionCode 10567
versionName '5.7.2'
buildConfigField("String", "GOOGLE_PLAY_LICENSING_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"")
}
@ -113,7 +113,7 @@ dependencies {
implementation "androidx.room:room-ktx:$room_version"
kapt "androidx.room:room-compiler:$room_version"
def lifecycle_version = "2.5.0-alpha01"
def lifecycle_version = "2.4.1"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
@ -126,7 +126,7 @@ dependencies {
def retrofit_version = '2.9.0'
implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
implementation 'com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.3'
implementation 'com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.4'
def material_dialog_version = "3.3.0"
implementation "com.afollestad.material-dialogs:core:$material_dialog_version"
@ -146,9 +146,10 @@ dependencies {
implementation "io.insert-koin:koin-core:$koin_version"
implementation "io.insert-koin:koin-android:$koin_version"
implementation 'com.github.bumptech.glide:glide:4.12.0'
kapt 'com.github.bumptech.glide:compiler:4.12.0'
implementation 'com.github.bumptech.glide:okhttp3-integration:4.12.0'
def glide_version = '4.13.0'
implementation "com.github.bumptech.glide:glide:$glide_version"
kapt "com.github.bumptech.glide:compiler:$glide_version"
implementation "com.github.bumptech.glide:okhttp3-integration:$glide_version"
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'

View file

@ -38,7 +38,8 @@
android:name=".activities.MainActivity"
android:exported="true"
android:label="@string/app_name"
android:theme="@style/SplashTheme">
android:theme="@style/SplashTheme"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.MUSIC_PLAYER" />

View file

@ -58,21 +58,28 @@
}
{style-placeholder}
</style>
</head>
<body>
<div>
<h5>February 13, 2022</h5>
<h2>v5.7.2<span class="tag"><i>Beta</i></span></h2>
<h3>What's New</h3>
<ul>
<li>Animated splash screen on Android 12 devices</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed crash when removing song from Playing queue</li>
<li>Fixed lyrics editing crash</li>
<li>Fixed shuffle button not working</li>
<li>Fixed crash on song deletion</li>
</ul>
</div>
<div>
<h5>February 1, 2022</h5>
<h2>v5.7.1</h2>
<h2>v5.7.1<span class="tag"><i>Beta</i></span></h2>
<h3>What's New</h3>
<ul>
<li>Added option to disable changing song by swiping anywhere on the now playing screen</li>

View file

@ -15,10 +15,10 @@
package code.name.monkey.retromusic.activities
import android.app.KeyguardManager
import android.content.Context
import android.os.Build
import android.os.Bundle
import android.view.WindowManager
import androidx.core.content.getSystemService
import androidx.core.view.ViewCompat
import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R
@ -63,8 +63,8 @@ class LockScreenActivity : AbsMusicServiceActivity() {
override fun onSlideClosed(): Boolean {
if (VersionUtils.hasOreo()) {
val keyguardManager =
getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
keyguardManager.requestDismissKeyguard(this@LockScreenActivity, null)
getSystemService<KeyguardManager>()
keyguardManager?.requestDismissKeyguard(this@LockScreenActivity, null)
}
finish()
return true
@ -86,8 +86,8 @@ class LockScreenActivity : AbsMusicServiceActivity() {
private fun lockScreenInit() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true)
val keyguardManager: KeyguardManager = getSystemService(KeyguardManager::class.java)
keyguardManager.requestDismissKeyguard(this, null)
val keyguardManager = getSystemService<KeyguardManager>()
keyguardManager?.requestDismissKeyguard(this, null)
} else {
this.window.addFlags(
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or

View file

@ -129,15 +129,15 @@ class MainActivity : AbsCastActivity(), OnSharedPreferenceChangeListener {
override fun onSupportNavigateUp(): Boolean =
findNavController(R.id.fragment_container).navigateUp()
override fun onResume() {
super.onResume()
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
PreferenceUtil.registerOnSharedPreferenceChangedListener(this)
val expand = extra<Boolean>(EXPAND_PANEL).value ?: false
val expand = intent?.extra<Boolean>(EXPAND_PANEL)?.value ?: false
if (expand && PreferenceUtil.isExpandPanel) {
fromNotification = true
slidingPanel.bringToFront()
expandPanel()
intent.removeExtra(EXPAND_PANEL)
intent?.removeExtra(EXPAND_PANEL)
}
}

View file

@ -54,7 +54,7 @@ import code.name.monkey.retromusic.fragments.player.full.FullPlayerFragment
import code.name.monkey.retromusic.fragments.player.gradient.GradientPlayerFragment
import code.name.monkey.retromusic.fragments.player.material.MaterialFragment
import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment
import code.name.monkey.retromusic.fragments.player.peak.PeakPlayerFragment
import code.name.monkey.retromusic.fragments.player.peek.PeekPlayerFragment
import code.name.monkey.retromusic.fragments.player.plain.PlainPlayerFragment
import code.name.monkey.retromusic.fragments.player.simple.SimplePlayerFragment
import code.name.monkey.retromusic.fragments.player.tiny.TinyPlayerFragment
@ -241,7 +241,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
binding.slidingPanel.viewTreeObserver.removeOnGlobalLayoutListener(this)
if (nowPlayingScreen != Peak) {
if (nowPlayingScreen != Peek) {
val params = binding.slidingPanel.layoutParams as ViewGroup.LayoutParams
params.height = ViewGroup.LayoutParams.MATCH_PARENT
binding.slidingPanel.layoutParams = params
@ -454,7 +454,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
Color -> ColorFragment()
Gradient -> GradientPlayerFragment()
Tiny -> TinyPlayerFragment()
Peak -> PeakPlayerFragment()
Peek -> PeekPlayerFragment()
Circle -> CirclePlayerFragment()
Classic -> ClassicPlayerFragment()
else -> PlayerFragment()

View file

@ -29,6 +29,7 @@ import android.widget.Toast
import androidx.annotation.StringDef
import androidx.annotation.StringRes
import androidx.appcompat.app.AlertDialog
import androidx.core.content.getSystemService
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.MaterialUtil
import code.name.monkey.appthemehelper.util.TintHelper
@ -161,9 +162,9 @@ open class BugReportActivity : AbsThemeActivity() {
}
private fun copyDeviceInfoToClipBoard() {
val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clipboard = getSystemService<ClipboardManager>()
val clip = ClipData.newPlainText(getString(R.string.device_info), deviceInfo?.toMarkdown())
clipboard.setPrimaryClip(clip)
clipboard?.setPrimaryClip(clip)
Toast.makeText(
this@BugReportActivity,
R.string.copied_device_info_to_clipboard,

View file

@ -138,7 +138,7 @@ class AlbumCoverPagerAdapter(
private fun getLayoutWithPlayerTheme(): Int {
return when (PreferenceUtil.nowPlayingScreen) {
Card, Fit, Tiny, Classic, Gradient, Full -> R.layout.fragment_album_full_cover
Peak -> R.layout.fragment_peak_album_cover
Peek -> R.layout.fragment_peek_album_cover
else -> {
if (PreferenceUtil.isCarouselEffect) {
R.layout.fragment_album_carousel_cover

View file

@ -21,14 +21,15 @@ import android.content.pm.ShortcutInfo
import android.content.pm.ShortcutManager
import android.graphics.drawable.Icon
import android.os.Build
import androidx.core.content.getSystemService
import code.name.monkey.retromusic.appshortcuts.shortcuttype.LastAddedShortcutType
import code.name.monkey.retromusic.appshortcuts.shortcuttype.ShuffleAllShortcutType
import code.name.monkey.retromusic.appshortcuts.shortcuttype.TopTracksShortcutType
@TargetApi(Build.VERSION_CODES.N_MR1)
class DynamicShortcutManager(private val context: Context) {
private val shortcutManager: ShortcutManager =
this.context.getSystemService(ShortcutManager::class.java)
private val shortcutManager: ShortcutManager? =
this.context.getSystemService()
private val defaultShortcuts: List<ShortcutInfo>
get() = listOf(
@ -39,12 +40,12 @@ class DynamicShortcutManager(private val context: Context) {
fun initDynamicShortcuts() {
// if (shortcutManager.dynamicShortcuts.size == 0) {
shortcutManager.dynamicShortcuts = defaultShortcuts
shortcutManager?.dynamicShortcuts = defaultShortcuts
// }
}
fun updateDynamicShortcuts() {
shortcutManager.updateShortcuts(defaultShortcuts)
shortcutManager?.updateShortcuts(defaultShortcuts)
}
companion object {
@ -66,7 +67,7 @@ class DynamicShortcutManager(private val context: Context) {
}
fun reportShortcutUsed(context: Context, shortcutId: String) {
context.getSystemService(ShortcutManager::class.java).reportShortcutUsed(shortcutId)
context.getSystemService<ShortcutManager>()?.reportShortcutUsed(shortcutId)
}
}
}

View file

@ -18,6 +18,9 @@ import android.app.Activity
import android.app.Dialog
import android.content.Intent
import android.os.Bundle
import android.provider.MediaStore
import androidx.activity.result.IntentSenderRequest
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.os.bundleOf
import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment
@ -61,56 +64,75 @@ class DeleteSongsDialog : DialogFragment() {
libraryViewModel = activity?.getViewModel() as LibraryViewModel
val songs = extraNotNull<List<Song>>(EXTRA_SONG).value
if (VersionUtils.hasR()) {
dismiss()
MusicUtil.deleteTracksR(requireActivity(), songs)
reloadTabs()
}
val pair = if (songs.size > 1) {
Pair(
R.string.delete_songs_title,
HtmlCompat.fromHtml(
String.format(getString(R.string.delete_x_songs), songs.size),
HtmlCompat.FROM_HTML_MODE_LEGACY
)
)
} else {
Pair(
R.string.delete_song_title,
HtmlCompat.fromHtml(
String.format(getString(R.string.delete_song_x), songs[0].title),
HtmlCompat.FROM_HTML_MODE_LEGACY
)
)
}
return materialDialog()
.title(pair.first)
.message(text = pair.second)
.noAutoDismiss()
.negativeButton(android.R.string.cancel) {
dismiss()
}
.positiveButton(R.string.action_delete) {
if ((songs.size == 1) && MusicPlayerRemote.isPlaying(songs[0])) {
MusicPlayerRemote.playNextSong()
}
if (!SAFUtil.isSAFRequiredForSongs(songs)) {
CoroutineScope(Dispatchers.IO).launch {
dismiss()
MusicUtil.deleteTracks(requireContext(), songs)
val deleteResultLauncher =
registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
if ((songs.size == 1) && MusicPlayerRemote.isPlaying(songs[0])) {
MusicPlayerRemote.playNextSong()
}
MusicPlayerRemote.removeFromQueue(songs)
reloadTabs()
}
} else {
if (SAFUtil.isSDCardAccessGranted(requireActivity())) {
deleteSongs(songs)
dismiss()
}
val pendingIntent =
MediaStore.createDeleteRequest(requireActivity().contentResolver, songs.map {
MusicUtil.getSongFileUri(it.id)
})
deleteResultLauncher.launch(
IntentSenderRequest.Builder(pendingIntent.intentSender).build()
)
return super.onCreateDialog(savedInstanceState)
} else {
val pair = if (songs.size > 1) {
Pair(
R.string.delete_songs_title,
HtmlCompat.fromHtml(
String.format(getString(R.string.delete_x_songs), songs.size),
HtmlCompat.FROM_HTML_MODE_LEGACY
)
)
} else {
Pair(
R.string.delete_song_title,
HtmlCompat.fromHtml(
String.format(getString(R.string.delete_song_x), songs[0].title),
HtmlCompat.FROM_HTML_MODE_LEGACY
)
)
}
return materialDialog()
.title(pair.first)
.message(text = pair.second)
.noAutoDismiss()
.negativeButton(android.R.string.cancel)
{
dismiss()
}
.positiveButton(R.string.action_delete)
{
if ((songs.size == 1) && MusicPlayerRemote.isPlaying(songs[0])) {
MusicPlayerRemote.playNextSong()
}
if (!SAFUtil.isSAFRequiredForSongs(songs)) {
CoroutineScope(Dispatchers.IO).launch {
dismiss()
MusicUtil.deleteTracks(requireContext(), songs)
reloadTabs()
}
} else {
startActivityForResult(
Intent(requireActivity(), SAFGuideActivity::class.java),
SAFGuideActivity.REQUEST_CODE_SAF_GUIDE
)
if (SAFUtil.isSDCardAccessGranted(requireActivity())) {
deleteSongs(songs)
} else {
startActivityForResult(
Intent(requireActivity(), SAFGuideActivity::class.java),
SAFGuideActivity.REQUEST_CODE_SAF_GUIDE
)
}
}
}
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

View file

@ -17,7 +17,6 @@ package code.name.monkey.retromusic.dialogs
import android.app.AlarmManager
import android.app.Dialog
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.CountDownTimer
@ -26,6 +25,7 @@ import android.widget.CheckBox
import android.widget.SeekBar
import android.widget.TextView
import android.widget.Toast
import androidx.core.content.getSystemService
import androidx.fragment.app.DialogFragment
import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R
@ -93,8 +93,8 @@ class SleepTimerDialog : DialogFragment() {
val pi = makeTimerPendingIntent(PendingIntent.FLAG_CANCEL_CURRENT)
val nextSleepTimerElapsedTime = SystemClock.elapsedRealtime() + minutes * 60 * 1000
PreferenceUtil.nextSleepTimerElapsedRealTime = nextSleepTimerElapsedTime.toInt()
val am = requireContext().getSystemService(Context.ALARM_SERVICE) as AlarmManager
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextSleepTimerElapsedTime, pi)
val am = requireContext().getSystemService<AlarmManager>()
am?.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextSleepTimerElapsedTime, pi)
Toast.makeText(
requireContext(),
@ -105,9 +105,8 @@ class SleepTimerDialog : DialogFragment() {
.setNegativeButton(android.R.string.cancel) { _, _ ->
val previous = makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE)
if (previous != null) {
val am =
requireContext().getSystemService(Context.ALARM_SERVICE) as AlarmManager
am.cancel(previous)
val am = requireContext().getSystemService<AlarmManager>()
am?.cancel(previous)
previous.cancel()
Toast.makeText(
requireContext(),

View file

@ -14,8 +14,8 @@
*/
package code.name.monkey.retromusic.extensions
import android.R
import android.app.Activity
import android.content.Intent
import android.view.View
import android.view.ViewGroup
import androidx.annotation.DimenRes
@ -33,6 +33,11 @@ inline fun <reified T : Any> Activity.extra(key: String, default: T? = null) = l
if (value is T) value else default
}
inline fun <reified T : Any> Intent.extra(key: String, default: T? = null) = lazy {
val value = extras?.get(key)
if (value is T) value else default
}
inline fun <reified T : Any> Activity.extraNotNull(key: String, default: T? = null) = lazy {
val value = intent?.extras?.get(key)
requireNotNull(if (value is T) value else default) { key }
@ -42,4 +47,4 @@ fun Activity.dip(@DimenRes id: Int): Int {
return resources.getDimensionPixelSize(id)
}
inline val Activity.rootView: View get() = findViewById<ViewGroup>(R.id.content).getChildAt(0)
inline val Activity.rootView: View get() = findViewById<ViewGroup>(android.R.id.content).getChildAt(0)

View file

@ -39,5 +39,5 @@ fun AlertDialog.colorButtons(): AlertDialog {
fun Fragment.materialDialog(): MaterialDialog {
return MaterialDialog(requireContext())
.cornerRadius(res = R.dimen.m3_alert_dialog_corner_size)
.cornerRadius(res = R.dimen.m3_dialog_corner_size)
}

View file

@ -22,6 +22,7 @@ import android.widget.Toast
import androidx.annotation.*
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.content.res.AppCompatResources
import androidx.core.content.getSystemService
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.navigation.fragment.NavHostFragment
@ -41,7 +42,7 @@ val Context.generalThemeValue
fun Context.isSystemDarkModeEnabled(): Boolean {
val isBatterySaverEnabled =
(getSystemService(Context.POWER_SERVICE) as PowerManager?)?.isPowerSaveMode ?: false
(getSystemService<PowerManager>())?.isPowerSaveMode ?: false
val isDarkModeEnabled =
(resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES
return isBatterySaverEnabled or isDarkModeEnabled

View file

@ -16,7 +16,6 @@ package code.name.monkey.retromusic.extensions
import android.animation.Animator
import android.animation.ObjectAnimator
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@ -27,6 +26,7 @@ import androidx.annotation.LayoutRes
import androidx.annotation.Px
import androidx.core.animation.doOnEnd
import androidx.core.animation.doOnStart
import androidx.core.content.getSystemService
import androidx.core.view.*
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.TintHelper
@ -95,8 +95,8 @@ fun View.focusAndShowKeyboard() {
// We still post the call, just in case we are being notified of the windows focus
// but InputMethodManager didn't get properly setup yet.
val imm =
context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
context.getSystemService<InputMethodManager>()
imm?.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}
}
}

View file

@ -40,7 +40,7 @@ enum class NowPlayingScreen constructor(
Gradient(R.string.gradient, R.drawable.np_gradient, 17, AlbumCoverStyle.Full),
Material(R.string.material, R.drawable.np_material, 11, AlbumCoverStyle.Normal),
Normal(R.string.normal, R.drawable.np_normal, 0, AlbumCoverStyle.Normal),
Peak(R.string.peak, R.drawable.np_peak, 14, AlbumCoverStyle.Normal),
Peek(R.string.peek, R.drawable.np_peek, 14, AlbumCoverStyle.Normal),
Plain(R.string.plain, R.drawable.np_plain, 3, AlbumCoverStyle.Normal),
Simple(R.string.simple, R.drawable.np_simple, 8, AlbumCoverStyle.Normal),
Tiny(R.string.tiny, R.drawable.np_tiny, 7, null),

View file

@ -82,7 +82,6 @@ import kotlinx.coroutines.withContext
import org.koin.android.ext.android.get
import org.koin.androidx.viewmodel.ext.android.viewModel
import org.koin.core.parameter.parametersOf
import java.util.*
class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_details),
IAlbumClickListener, ICabHolder {

View file

@ -5,7 +5,10 @@ import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.text.Spanned
import android.view.*
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import androidx.activity.addCallback
import androidx.appcompat.widget.PopupMenu
import androidx.core.os.bundleOf
@ -51,7 +54,6 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.koin.android.ext.android.get
import java.util.*
import kotlin.collections.ArrayList
abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_artist_details),
IAlbumClickListener, ICabHolder {

View file

@ -306,7 +306,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme
super.onResume()
val nps = PreferenceUtil.nowPlayingScreen
if (nps == NowPlayingScreen.Circle || nps == NowPlayingScreen.Peak || nps == NowPlayingScreen.Tiny) {
if (nps == NowPlayingScreen.Circle || nps == NowPlayingScreen.Peek || nps == NowPlayingScreen.Tiny) {
playerToolbar()?.menu?.removeItem(R.id.action_toggle_lyrics)
} else {
playerToolbar()?.menu?.findItem(R.id.action_toggle_lyrics)?.apply {

View file

@ -19,7 +19,10 @@ import android.media.MediaScannerConnection
import android.os.Bundle
import android.os.Environment
import android.text.Html
import android.view.*
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.webkit.MimeTypeMap
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
@ -57,8 +60,9 @@ import code.name.monkey.retromusic.misc.UpdateToastMediaScannerCompletionListene
import code.name.monkey.retromusic.misc.WrappedAsyncTaskLoader
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.providers.BlacklistStore
import code.name.monkey.retromusic.util.*
import code.name.monkey.retromusic.util.FileUtil
import code.name.monkey.retromusic.util.PreferenceUtil.startDirectory
import code.name.monkey.retromusic.util.RetroColorUtil
import code.name.monkey.retromusic.util.ThemedFastScroller.create
import code.name.monkey.retromusic.views.BreadCrumbLayout.Crumb
import code.name.monkey.retromusic.views.BreadCrumbLayout.SelectionCallback
@ -70,7 +74,9 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.shape.MaterialShapeDrawable
import com.google.android.material.snackbar.Snackbar
import com.google.android.material.transition.MaterialFadeThrough
import java.io.*
import java.io.File
import java.io.FileFilter
import java.io.IOException
import java.lang.ref.WeakReference
import java.util.*

View file

@ -38,7 +38,6 @@ import com.google.android.material.shape.MaterialShapeDrawable
import com.google.android.material.transition.MaterialSharedAxis
import org.koin.androidx.viewmodel.ext.android.viewModel
import org.koin.core.parameter.parametersOf
import java.util.*
class GenreDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playlist_detail) {
private val arguments by navArgs<GenreDetailsFragmentArgs>()

View file

@ -145,6 +145,7 @@ class LyricsFragment : AbsMusicServiceFragment(R.layout.fragment_lyrics) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setHasOptionsMenu(true)
updateTitleSong()
enterTransition = Fade()
exitTransition = Fade()
lyricsSectionsAdapter = LyricsSectionsAdapter(requireActivity())

View file

@ -14,7 +14,6 @@
*/
package code.name.monkey.retromusic.fragments.other
import android.content.Context
import android.graphics.Color
import android.graphics.PorterDuff
import android.media.AudioManager
@ -23,6 +22,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.SeekBar
import androidx.core.content.getSystemService
import androidx.fragment.app.Fragment
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.retromusic.R
@ -42,7 +42,7 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum
private var audioVolumeObserver: AudioVolumeObserver? = null
private val audioManager: AudioManager
get() = requireContext().getSystemService(Context.AUDIO_SERVICE) as AudioManager
get() = requireContext().getSystemService()!!
override fun onCreateView(
inflater: LayoutInflater,

View file

@ -14,10 +14,8 @@
*/
package code.name.monkey.retromusic.fragments.player.adaptive
import android.animation.ObjectAnimator
import android.os.Bundle
import android.view.View
import android.view.animation.LinearInterpolator
import android.widget.ImageButton
import android.widget.SeekBar
import android.widget.TextView
@ -31,7 +29,6 @@ import code.name.monkey.retromusic.databinding.FragmentAdaptivePlayerPlaybackCon
import code.name.monkey.retromusic.extensions.*
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor

View file

@ -14,11 +14,9 @@
*/
package code.name.monkey.retromusic.fragments.player.card
import android.animation.ObjectAnimator
import android.graphics.PorterDuff
import android.os.Bundle
import android.view.View
import android.view.animation.LinearInterpolator
import android.widget.ImageButton
import android.widget.SeekBar
import code.name.monkey.appthemehelper.ThemeStore
@ -36,7 +34,6 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.fragments.base.goToAlbum
import code.name.monkey.retromusic.fragments.base.goToArtist
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor

View file

@ -14,12 +14,10 @@
*/
package code.name.monkey.retromusic.fragments.player.cardblur
import android.animation.ObjectAnimator
import android.graphics.Color
import android.os.Bundle
import android.view.View
import android.view.animation.DecelerateInterpolator
import android.view.animation.LinearInterpolator
import android.widget.ImageButton
import android.widget.SeekBar
import code.name.monkey.appthemehelper.util.ColorUtil
@ -33,7 +31,6 @@ import code.name.monkey.retromusic.extensions.show
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor

View file

@ -16,7 +16,6 @@ package code.name.monkey.retromusic.fragments.player.circle
import android.animation.ObjectAnimator
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Color
import android.graphics.PorterDuff
import android.graphics.drawable.ColorDrawable
@ -28,8 +27,12 @@ import android.view.animation.Animation
import android.view.animation.LinearInterpolator
import android.widget.SeekBar
import androidx.appcompat.widget.Toolbar
import androidx.core.content.getSystemService
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.*
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.appthemehelper.util.ToolbarContentTintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.databinding.FragmentCirclePlayerBinding
import code.name.monkey.retromusic.extensions.*
@ -38,7 +41,10 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.base.goToAlbum
import code.name.monkey.retromusic.fragments.base.goToArtist
import code.name.monkey.retromusic.glide.*
import code.name.monkey.retromusic.glide.GlideApp
import code.name.monkey.retromusic.glide.GlideRequest
import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.crossfadeListener
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback
@ -64,7 +70,7 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
private var audioVolumeObserver: AudioVolumeObserver? = null
private val audioManager: AudioManager
get() = requireContext().getSystemService(Context.AUDIO_SERVICE) as AudioManager
get() = requireContext().getSystemService()!!
private var _binding: FragmentCirclePlayerBinding? = null
private val binding get() = _binding!!

View file

@ -15,14 +15,12 @@
package code.name.monkey.retromusic.fragments.player.color
import android.animation.Animator
import android.animation.ObjectAnimator
import android.graphics.Color
import android.os.Bundle
import android.view.View
import android.view.ViewAnimationUtils
import android.view.animation.AccelerateInterpolator
import android.view.animation.DecelerateInterpolator
import android.view.animation.LinearInterpolator
import android.widget.ImageButton
import android.widget.SeekBar
import android.widget.TextView
@ -38,7 +36,6 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.fragments.base.goToAlbum
import code.name.monkey.retromusic.fragments.base.goToArtist
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlin.math.sqrt

View file

@ -14,11 +14,9 @@
*/
package code.name.monkey.retromusic.fragments.player.fit
import android.animation.ObjectAnimator
import android.os.Bundle
import android.view.View
import android.view.animation.DecelerateInterpolator
import android.view.animation.LinearInterpolator
import android.widget.ImageButton
import android.widget.SeekBar
import android.widget.TextView
@ -33,7 +31,6 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.fragments.base.goToAlbum
import code.name.monkey.retromusic.fragments.base.goToArtist
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor

View file

@ -14,7 +14,6 @@
*/
package code.name.monkey.retromusic.fragments.player.full
import android.animation.ObjectAnimator
import android.content.Intent
import android.content.res.ColorStateList
import android.graphics.Color
@ -24,7 +23,6 @@ import android.os.Bundle
import android.view.MenuItem
import android.view.View
import android.view.animation.DecelerateInterpolator
import android.view.animation.LinearInterpolator
import android.widget.ImageButton
import android.widget.SeekBar
import android.widget.TextView
@ -49,7 +47,6 @@ import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor

View file

@ -14,11 +14,9 @@
*/
package code.name.monkey.retromusic.fragments.player.lockscreen
import android.animation.ObjectAnimator
import android.os.Bundle
import android.view.View
import android.view.animation.DecelerateInterpolator
import android.view.animation.LinearInterpolator
import android.widget.ImageButton
import android.widget.SeekBar
import android.widget.TextView
@ -34,7 +32,6 @@ import code.name.monkey.retromusic.extensions.textColorSecondary
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor

View file

@ -14,11 +14,9 @@
*/
package code.name.monkey.retromusic.fragments.player.material
import android.animation.ObjectAnimator
import android.graphics.PorterDuff
import android.os.Bundle
import android.view.View
import android.view.animation.LinearInterpolator
import android.widget.ImageButton
import android.widget.SeekBar
import android.widget.TextView
@ -33,7 +31,6 @@ import code.name.monkey.retromusic.fragments.base.goToAlbum
import code.name.monkey.retromusic.fragments.base.goToArtist
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor

View file

@ -12,14 +12,12 @@
* See the GNU General Public License for more details.
*
*/
package code.name.monkey.retromusic.fragments.player.peak
package code.name.monkey.retromusic.fragments.player.peek
import android.animation.ObjectAnimator
import android.graphics.Color
import android.graphics.PorterDuff
import android.os.Bundle
import android.view.View
import android.view.animation.LinearInterpolator
import android.widget.ImageButton
import android.widget.SeekBar
import android.widget.TextView
@ -28,12 +26,11 @@ import code.name.monkey.appthemehelper.util.ATHUtil
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.databinding.FragmentPeakControlPlayerBinding
import code.name.monkey.retromusic.databinding.FragmentPeekControlPlayerBinding
import code.name.monkey.retromusic.extensions.applyColor
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
@ -41,9 +38,9 @@ import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
* Created by hemanths on 2019-10-04.
*/
class PeakPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_peak_control_player) {
class PeekPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_peek_control_player) {
private var _binding: FragmentPeakControlPlayerBinding? = null
private var _binding: FragmentPeekControlPlayerBinding? = null
private val binding get() = _binding!!
override val progressSlider: SeekBar
@ -72,7 +69,7 @@ class PeakPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_pe
savedInstanceState: Bundle?
) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentPeakControlPlayerBinding.bind(view)
_binding = FragmentPeekControlPlayerBinding.bind(view)
setUpPlayPauseFab()
}

View file

@ -12,14 +12,14 @@
* See the GNU General Public License for more details.
*
*/
package code.name.monkey.retromusic.fragments.player.peak
package code.name.monkey.retromusic.fragments.player.peek
import android.os.Bundle
import android.view.View
import androidx.appcompat.widget.Toolbar
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.databinding.FragmentPeakPlayerBinding
import code.name.monkey.retromusic.databinding.FragmentPeekPlayerBinding
import code.name.monkey.retromusic.extensions.*
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.base.goToAlbum
@ -33,17 +33,17 @@ import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
* Created by hemanths on 2019-10-03.
*/
class PeakPlayerFragment : AbsPlayerFragment(R.layout.fragment_peak_player) {
class PeekPlayerFragment : AbsPlayerFragment(R.layout.fragment_peek_player) {
private lateinit var controlsFragment: PeakPlayerControlFragment
private lateinit var controlsFragment: PeekPlayerControlFragment
private var lastColor: Int = 0
private var _binding: FragmentPeakPlayerBinding? = null
private var _binding: FragmentPeekPlayerBinding? = null
private val binding get() = _binding!!
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentPeakPlayerBinding.bind(view)
_binding = FragmentPeekPlayerBinding.bind(view)
setUpPlayerToolbar()
setUpSubFragments()
binding.title.isSelected = true
@ -58,7 +58,7 @@ class PeakPlayerFragment : AbsPlayerFragment(R.layout.fragment_peak_player) {
private fun setUpSubFragments() {
controlsFragment =
childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as PeakPlayerControlFragment
childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as PeekPlayerControlFragment
val coverFragment =
childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment
@ -69,7 +69,7 @@ class PeakPlayerFragment : AbsPlayerFragment(R.layout.fragment_peak_player) {
binding.playerToolbar.apply {
inflateMenu(R.menu.menu_player)
setNavigationOnClickListener { requireActivity().onBackPressed() }
setOnMenuItemClickListener(this@PeakPlayerFragment)
setOnMenuItemClickListener(this@PeekPlayerFragment)
ToolbarContentTintHelper.colorizeToolbar(
this,
colorControlNormal(),

View file

@ -14,11 +14,9 @@
*/
package code.name.monkey.retromusic.fragments.player.plain
import android.animation.ObjectAnimator
import android.os.Bundle
import android.view.View
import android.view.animation.DecelerateInterpolator
import android.view.animation.LinearInterpolator
import android.widget.ImageButton
import android.widget.SeekBar
import android.widget.TextView
@ -35,7 +33,6 @@ import code.name.monkey.retromusic.extensions.hide
import code.name.monkey.retromusic.extensions.show
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor

View file

@ -24,6 +24,7 @@ import android.view.MotionEvent
import android.view.View
import android.view.animation.LinearInterpolator
import androidx.appcompat.widget.Toolbar
import androidx.core.content.getSystemService
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.databinding.FragmentTinyPlayerBinding
@ -281,7 +282,7 @@ class TinyPlayerFragment : AbsPlayerFragment(R.layout.fragment_tiny_player),
@Suppress("Deprecation")
private fun vibrate() {
val v = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator?
val v = requireContext().getSystemService<Vibrator>()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
v?.vibrate(VibrationEffect.createOneShot(10, VibrationEffect.DEFAULT_AMPLITUDE))
} else {

View file

@ -15,7 +15,6 @@
package code.name.monkey.retromusic.fragments.search
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.content.res.ColorStateList
import android.os.Bundle
@ -26,6 +25,7 @@ import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
import androidx.annotation.IdRes
import androidx.core.content.getSystemService
import androidx.core.view.*
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
@ -34,7 +34,10 @@ import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.adapter.SearchAdapter
import code.name.monkey.retromusic.databinding.FragmentSearchBinding
import code.name.monkey.retromusic.extensions.*
import code.name.monkey.retromusic.extensions.accentColor
import code.name.monkey.retromusic.extensions.dipToPix
import code.name.monkey.retromusic.extensions.focusAndShowKeyboard
import code.name.monkey.retromusic.extensions.showToast
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.views.addAlpha
@ -45,7 +48,6 @@ import com.google.android.material.textfield.TextInputEditText
import com.google.android.material.transition.MaterialFadeThrough
import net.yslibrary.android.keyboardvisibilityevent.KeyboardVisibilityEvent
import java.util.*
import kotlin.collections.ArrayList
class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWatcher,
@ -229,9 +231,9 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa
private fun hideKeyboard(view: View?) {
if (view != null) {
val imm: InputMethodManager =
requireContext().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
val imm =
requireContext().getSystemService<InputMethodManager>()
imm?.hideSoftInputFromWindow(view.windowToken, 0)
}
}

View file

@ -34,7 +34,6 @@ import code.name.monkey.retromusic.extensions.materialDialog
import code.name.monkey.retromusic.providers.BlacklistStore
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import java.io.File
import java.util.*
class BlacklistPreference @JvmOverloads constructor(
context: Context,

View file

@ -30,7 +30,6 @@ import code.name.monkey.retromusic.extensions.getStringOrNull
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.providers.BlacklistStore
import code.name.monkey.retromusic.util.PreferenceUtil
import java.util.*
/**
* Created by hemanths on 10/08/17.

View file

@ -26,6 +26,7 @@ import android.os.PowerManager.WakeLock
import android.util.Log
import android.view.KeyEvent
import androidx.core.content.ContextCompat
import androidx.core.content.getSystemService
import code.name.monkey.retromusic.BuildConfig
import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_PAUSE
import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_PLAY
@ -169,8 +170,8 @@ class MediaButtonIntentReceiver : BroadcastReceiver() {
private fun acquireWakeLockAndSendMessage(context: Context, msg: Message, delay: Long) {
if (wakeLock == null) {
val appContext = context.applicationContext
val pm = appContext.getSystemService(Context.POWER_SERVICE) as PowerManager
wakeLock = pm.newWakeLock(
val pm = appContext.getSystemService<PowerManager>()
wakeLock = pm?.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK,
"RetroMusicApp:Wakelock headset button"
)

View file

@ -40,6 +40,7 @@ import android.telephony.PhoneStateListener
import android.telephony.TelephonyManager
import android.util.Log
import android.widget.Toast
import androidx.core.content.edit
import androidx.core.content.getSystemService
import androidx.media.AudioAttributesCompat
import androidx.media.AudioAttributesCompat.CONTENT_TYPE_MUSIC
@ -123,6 +124,7 @@ class MusicService : MediaBrowserServiceCompat(),
private val appWidgetSmall = AppWidgetSmall.instance
private val appWidgetText = AppWidgetText.instance
private val appWidgetMd3 = AppWidgetMD3.instance
private val appWidgetCircle = AppWidgetCircle.instance
private val widgetIntentReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val command = intent.getStringExtra(EXTRA_APP_WIDGET_NAME)
@ -147,17 +149,20 @@ class MusicService : MediaBrowserServiceCompat(),
AppWidgetMD3.NAME -> {
appWidgetMd3.performUpdate(this@MusicService, ids)
}
AppWidgetCircle.NAME -> {
appWidgetCircle.performUpdate(this@MusicService, ids)
}
}
}
}
}
private var audioManager: AudioManager? = null
get() {
if (field == null) {
field = getSystemService()
if (field == null) {
field = getSystemService()
}
return field
}
return field
}
private val becomingNoisyReceiverIntentFilter =
IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY)
@ -185,15 +190,15 @@ class MusicService : MediaBrowserServiceCompat(),
}
}
private var playerHandler: PlaybackHandler? = null
private val audioFocusListener: OnAudioFocusChangeListener =
OnAudioFocusChangeListener { focusChange ->
playerHandler?.obtainMessage(FOCUS_CHANGE, focusChange, 0)?.sendToTarget()
}
private val audioFocusListener = OnAudioFocusChangeListener { focusChange ->
playerHandler?.obtainMessage(FOCUS_CHANGE, focusChange, 0)?.sendToTarget()
}
private var playingNotification: PlayingNotification? = null
private val updateFavoriteReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
playingNotification!!.updateFavorite(currentSong) { startForegroundOrNotify() }
playingNotification?.updateFavorite(currentSong) { startForegroundOrNotify() }
startForegroundOrNotify()
appWidgetCircle.notifyChange(this@MusicService, FAVORITE_STATE_CHANGED)
}
}
private val lockScreenReceiver: BroadcastReceiver = object : BroadcastReceiver() {
@ -209,8 +214,19 @@ class MusicService : MediaBrowserServiceCompat(),
private var queueSaveHandlerThread: HandlerThread? = null
private var queuesRestored = false
@JvmField
var repeatMode = 0
private set(value) {
when (value) {
REPEAT_MODE_NONE, REPEAT_MODE_ALL, REPEAT_MODE_THIS -> {
field = value
PreferenceManager.getDefaultSharedPreferences(this).edit {
putInt(SAVED_REPEAT_MODE, value)
}
prepareNext()
handleAndSendChangeInternal(REPEAT_MODE_CHANGED)
}
}
}
@JvmField
var shuffleMode = 0
@ -222,7 +238,7 @@ class MusicService : MediaBrowserServiceCompat(),
if (action != null) {
if (BluetoothDevice.ACTION_ACL_CONNECTED == action && isBluetoothSpeaker) {
if (audioManager!!.isBluetoothA2dpOn) {
play()
play()
}
}
}
@ -364,12 +380,12 @@ class MusicService : MediaBrowserServiceCompat(),
unregisterReceiver(bluetoothReceiver)
bluetoothConnectedRegistered = false
}
mediaSession!!.isActive = false
mediaSession?.isActive = false
quit()
releaseResources()
contentResolver.unregisterContentObserver(mediaStoreObserver)
unregisterOnSharedPreferenceChangedListener(this)
wakeLock!!.release()
wakeLock?.release()
sendBroadcast(Intent("code.name.monkey.retromusic.RETRO_MUSIC_SERVICE_DESTROYED"))
}
@ -432,10 +448,10 @@ class MusicService : MediaBrowserServiceCompat(),
}
fun cycleRepeatMode() {
when (getRepeatMode()) {
REPEAT_MODE_NONE -> setRepeatMode(REPEAT_MODE_ALL)
REPEAT_MODE_ALL -> setRepeatMode(REPEAT_MODE_THIS)
else -> setRepeatMode(REPEAT_MODE_NONE)
repeatMode = when (repeatMode) {
REPEAT_MODE_NONE -> REPEAT_MODE_ALL
REPEAT_MODE_ALL -> REPEAT_MODE_THIS
else -> REPEAT_MODE_NONE
}
}
@ -454,7 +470,7 @@ class MusicService : MediaBrowserServiceCompat(),
private fun getNextPosition(force: Boolean): Int {
var position = getPosition() + 1
when (getRepeatMode()) {
when (repeatMode) {
REPEAT_MODE_ALL -> if (isLastTrack) {
position = 0
}
@ -493,11 +509,11 @@ class MusicService : MediaBrowserServiceCompat(),
var newPosition = getPosition() - 1
when (repeatMode) {
REPEAT_MODE_ALL -> if (newPosition < 0) {
newPosition = getPlayingQueue().size - 1
newPosition = playingQueue.size - 1
}
REPEAT_MODE_THIS -> if (force) {
if (newPosition < 0) {
newPosition = getPlayingQueue().size - 1
newPosition = playingQueue.size - 1
}
} else {
newPosition = getPosition()
@ -520,24 +536,6 @@ class MusicService : MediaBrowserServiceCompat(),
return duration
}
fun getRepeatMode(): Int {
return repeatMode
}
fun setRepeatMode(repeatMode: Int) {
when (repeatMode) {
REPEAT_MODE_NONE, REPEAT_MODE_ALL, REPEAT_MODE_THIS -> {
this.repeatMode = repeatMode
PreferenceManager.getDefaultSharedPreferences(this)
.edit()
.putInt(SAVED_REPEAT_MODE, repeatMode)
.apply()
prepareNext()
handleAndSendChangeInternal(REPEAT_MODE_CHANGED)
}
}
}
private fun getShuffleMode(): Int {
return shuffleMode
}
@ -550,7 +548,7 @@ class MusicService : MediaBrowserServiceCompat(),
when (shuffleMode) {
SHUFFLE_MODE_SHUFFLE -> {
this.shuffleMode = shuffleMode
makeShuffleList(getPlayingQueue().toMutableList(), getPosition())
makeShuffleList(playingQueue, getPosition())
position = 0
}
SHUFFLE_MODE_NONE -> {
@ -558,9 +556,9 @@ class MusicService : MediaBrowserServiceCompat(),
val currentSongId = Objects.requireNonNull(currentSong).id
playingQueue = ArrayList(originalPlayingQueue)
var newPosition = 0
for (song in getPlayingQueue()) {
for (song in playingQueue) {
if (song.id == currentSongId) {
newPosition = getPlayingQueue().indexOf(song)
newPosition = playingQueue.indexOf(song)
}
}
position = newPosition
@ -571,8 +569,8 @@ class MusicService : MediaBrowserServiceCompat(),
}
private fun getSongAt(position: Int): Song {
return if ((position >= 0) && (position < getPlayingQueue().size)) {
getPlayingQueue()[position]
return if ((position >= 0) && (position < playingQueue.size)) {
playingQueue[position]
} else {
emptySong
}
@ -737,7 +735,7 @@ class MusicService : MediaBrowserServiceCompat(),
COLORED_NOTIFICATION -> updateNotification()
CLASSIC_NOTIFICATION -> {
updateNotification()
playingNotification?.setPlaying(isPlaying){ startForegroundOrNotify()}
playingNotification?.setPlaying(isPlaying) { startForegroundOrNotify() }
playingNotification?.updateMetadata(currentSong) { startForegroundOrNotify() }
}
PLAYBACK_SPEED -> updateMediaSessionPlaybackState()
@ -980,16 +978,16 @@ class MusicService : MediaBrowserServiceCompat(),
}
private fun removeSongImpl(song: Song) {
for (i in playingQueue.indices) {
if (playingQueue[i].id == song.id) {
playingQueue.removeAt(i)
rePosition(i)
}
val deletePosition = playingQueue.indexOf(song)
if (deletePosition != -1) {
playingQueue.removeAt(deletePosition)
rePosition(deletePosition)
}
for (i in originalPlayingQueue.indices) {
if (originalPlayingQueue[i].id == song.id) {
originalPlayingQueue.removeAt(i)
}
val originalDeletePosition = originalPlayingQueue.indexOf(song)
if (originalDeletePosition != -1) {
originalPlayingQueue.removeAt(originalDeletePosition)
rePosition(originalDeletePosition)
}
}
@ -1005,6 +1003,19 @@ class MusicService : MediaBrowserServiceCompat(),
notifyChange(QUEUE_CHANGED)
}
private fun rePosition(deletedPosition: Int) {
val currentPosition = getPosition()
if (deletedPosition < currentPosition) {
position = currentPosition - 1
} else if (deletedPosition == currentPosition) {
if (playingQueue.size > deletedPosition) {
setPosition(position)
} else {
setPosition(position - 1)
}
}
}
@Synchronized
fun restoreQueuesAndPositionIfNecessary() {
if (!queuesRestored && playingQueue.isEmpty()) {
@ -1040,10 +1051,9 @@ class MusicService : MediaBrowserServiceCompat(),
}
fun savePositionInTrack() {
PreferenceManager.getDefaultSharedPreferences(this)
.edit()
.putInt(SAVED_POSITION_IN_TRACK, songProgressMillis)
.apply()
PreferenceManager.getDefaultSharedPreferences(this).edit {
putInt(SAVED_POSITION_IN_TRACK, songProgressMillis)
}
}
fun saveQueuesImpl() {
@ -1131,7 +1141,7 @@ class MusicService : MediaBrowserServiceCompat(),
.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, null)
metaData.putLong(
MediaMetadataCompat.METADATA_KEY_NUM_TRACKS,
getPlayingQueue().size.toLong()
playingQueue.size.toLong()
)
if (isAlbumArtOnLockScreen) {
val screenSize = RetroUtil.getScreenSize(this@MusicService)
@ -1184,7 +1194,7 @@ class MusicService : MediaBrowserServiceCompat(),
savePositionInTrack()
}
songPlayCountHelper.notifyPlayStateChanged(isPlaying)
playingNotification?.setPlaying(isPlaying){ startForegroundOrNotify()}
playingNotification?.setPlaying(isPlaying) { startForegroundOrNotify() }
startForegroundOrNotify()
}
FAVORITE_STATE_CHANGED -> {
@ -1315,19 +1325,6 @@ class MusicService : MediaBrowserServiceCompat(),
playerHandler?.obtainMessage(PREPARE_NEXT)?.sendToTarget()
}
private fun rePosition(deletedPosition: Int) {
val currentPosition = getPosition()
if (deletedPosition < currentPosition) {
position = currentPosition - 1
} else if (deletedPosition == currentPosition) {
if (playingQueue.size > deletedPosition) {
setPosition(position)
} else {
setPosition(position - 1)
}
}
}
private fun registerBluetoothConnected() {
Log.i(TAG, "registerBluetoothConnected: ")
if (!bluetoothConnectedRegistered) {
@ -1380,10 +1377,9 @@ class MusicService : MediaBrowserServiceCompat(),
}
private fun savePosition() {
PreferenceManager.getDefaultSharedPreferences(this)
.edit()
.putInt(SAVED_POSITION, getPosition())
.apply()
PreferenceManager.getDefaultSharedPreferences(this).edit {
putInt(SAVED_POSITION, getPosition())
}
}
private fun saveQueues() {
@ -1399,13 +1395,14 @@ class MusicService : MediaBrowserServiceCompat(),
appWidgetCard.notifyChange(this, what)
appWidgetText.notifyChange(this, what)
appWidgetMd3.notifyChange(this, what)
appWidgetCircle.notifyChange(this, what)
}
private fun setCustomAction(stateBuilder: PlaybackStateCompat.Builder) {
var repeatIcon = R.drawable.ic_repeat // REPEAT_MODE_NONE
if (getRepeatMode() == REPEAT_MODE_THIS) {
if (repeatMode == REPEAT_MODE_THIS) {
repeatIcon = R.drawable.ic_repeat_one
} else if (getRepeatMode() == REPEAT_MODE_ALL) {
} else if (repeatMode == REPEAT_MODE_ALL) {
repeatIcon = R.drawable.ic_repeat_white_circle
}
stateBuilder.addCustomAction(

View file

@ -1,20 +1,17 @@
package code.name.monkey.retromusic.util
import android.app.Activity
import android.content.ContentUris
import android.content.ContentValues
import android.content.Context
import android.content.Intent
import android.database.Cursor
import android.net.Uri
import android.os.Build
import android.os.Environment
import android.provider.BaseColumns
import android.provider.MediaStore
import android.text.TextUtils
import android.util.Log
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.core.content.FileProvider
import androidx.fragment.app.FragmentActivity
import code.name.monkey.appthemehelper.util.VersionUtils
@ -524,15 +521,6 @@ object MusicUtil : KoinComponent {
}
}
@RequiresApi(Build.VERSION_CODES.R)
fun deleteTracksR(activity: Activity, songs: List<Song>) {
removeFromQueue(songs)
val pendingIntent = MediaStore.createDeleteRequest(activity.contentResolver, songs.map {
getSongFileUri(it.id)
})
activity.startIntentSenderForResult(pendingIntent.intentSender, 45, null, 0, 0, 0, null)
}
fun songByGenre(genreId: Long): Song {
return repository.getSongByGenre(genreId)
}

View file

@ -3,8 +3,8 @@ package code.name.monkey.retromusic.util
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import android.net.ConnectivityManager
import android.net.NetworkInfo
import androidx.core.content.ContextCompat
import androidx.core.content.edit
import androidx.core.content.getSystemService
import androidx.preference.PreferenceManager
import androidx.viewpager.widget.ViewPager
import code.name.monkey.appthemehelper.util.VersionUtils
@ -332,10 +332,7 @@ object PreferenceUtil {
return when (autoDownloadImagesPolicy) {
"always" -> true
"only_wifi" -> {
val connectivityManager = ContextCompat.getSystemService(
App.getContext(),
ConnectivityManager::class.java
)
val connectivityManager = App.getContext().getSystemService<ConnectivityManager>()
var netInfo: NetworkInfo? = null
if (connectivityManager != null) {
netInfo = connectivityManager.activeNetworkInfo
@ -691,7 +688,7 @@ object PreferenceUtil {
set(value) = sharedPreferences.edit { putFloat(PLAYBACK_PITCH, value) }
val appBarMode: TopAppBarLayout.AppBarMode
get() = if (sharedPreferences.getString(APPBAR_MODE, "0") == "0") {
get() = if (sharedPreferences.getString(APPBAR_MODE, "1") == "0") {
TopAppBarLayout.AppBarMode.COLLAPSING
} else {
TopAppBarLayout.AppBarMode.SIMPLE
@ -712,6 +709,7 @@ object PreferenceUtil {
val swipeAnywhereToChangeSong
get() = sharedPreferences.getBoolean(SWIPE_ANYWHERE_NOW_PLAYING, true)
}
enum class LyricsType {
REPLACE_COVER, OVER_COVER
}

View file

@ -17,10 +17,11 @@ import android.content.Context
import android.media.AudioManager
import android.os.Handler
import android.provider.Settings
import androidx.core.content.getSystemService
class AudioVolumeObserver(private val context: Context) {
private val mAudioManager: AudioManager =
context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
context.getSystemService()!!
private var contentObserver: AudioVolumeContentObserver? = null
fun register(audioStreamType: Int, listener: OnAudioVolumeChangedListener) {

View file

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Before After
Before After

View file

@ -101,12 +101,12 @@
<androidx.fragment.app.FragmentContainerView
android:id="@+id/playbackControlsFragment"
android:name="code.name.monkey.retromusic.fragments.player.peak.PeakPlayerControlFragment"
android:name="code.name.monkey.retromusic.fragments.player.peek.PeekPlayerControlFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/playerAlbumCoverFragment"
tools:layout="@layout/fragment_peak_control_player" />
tools:layout="@layout/fragment_peek_control_player" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -278,7 +278,7 @@
<string name="past_three_months">أخر 3 أشهر</string>
<string name="paste_lyrics_here">لصق كلمات الاغنية هنا</string>
<string name="paste_timeframe_lyrics_here">لصق كلمات الإطار الزمني هنا</string>
<string name="peak">الذروة</string>
<string name="peek">الذروة</string>
<string name="permission_external_storage_denied">تم رفض إذن الوصول إلى وحدة التخزين الخارجي.</string>
<string name="permission_summary">يحتاج التطبيق إلى إذن للوصول إلى وحدة تخزين جهازك لتشغيل الموسيقى</string>
<string name="permission_title">الوصول إلى التخزين</string>

View file

@ -271,7 +271,7 @@
<string name="past_three_months">Past 3 months</string>
<string name="paste_lyrics_here">Paste Lyrics Here</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">Povolení přístupu k externímu úložišti bylo zamítnuto.</string>
<string name="permission_summary">Aplikace potřebuje přístup k úložišti vašeho zařízení, aby mohla přehráváat hudbu</string>
<string name="permission_title">Přístup k úložišti</string>

View file

@ -254,7 +254,7 @@
<string name="past_three_months">Past 3 months</string>
<string name="paste_lyrics_here">Paste Lyrics Here</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">Permission to access external storage denied.</string>
<string name="permission_summary">The app needs permission to access your device storage for playing music</string>
<string name="permission_title">Storage Access</string>

View file

@ -267,7 +267,7 @@
<string name="past_three_months">Letzte 3 Monate</string>
<string name="paste_lyrics_here">Songtext hier einfügen</string>
<string name="paste_timeframe_lyrics_here">Songtexte mit Zeitfenster hier einfügen</string>
<string name="peak">Spitze</string>
<string name="peek">Spitze</string>
<string name="permission_external_storage_denied">Berechtigung für den Zugriff auf externen Speicher verweigert.</string>
<string name="permission_summary">Die App benötigt die Berechtigung für den Zugriff auf den Gerätespeicher, um Musik abspielen zu können</string>
<string name="permission_title">Speicherzugriff</string>

View file

@ -267,7 +267,7 @@
<string name="past_three_months">Τους περασμένους 3 μήνες</string>
<string name="paste_lyrics_here">Επικολλήστε τους στίχους εδω</string>
<string name="paste_timeframe_lyrics_here">Επικόλληση στίχων χρονικού πλαισίου εδώ</string>
<string name="peak">Κορυφή</string>
<string name="peek">Κορυφή</string>
<string name="permission_external_storage_denied">Η άδεια για προσπέλαση του external storage δεν παραχωρήθηκε.</string>
<string name="permission_summary">Η εφαρμογή χρειάζεται άδεια για πρόσβαση στον αποθηκευτικό χώρο της συσκευής σας για την αναπαραγωγή μουσικής</string>
<string name="permission_title">Πρόσβαση Χώρου Αποθήκευσης</string>

View file

@ -340,7 +340,7 @@
<string name="past_three_months">Past 3 months</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">Permission to access external storage denied.</string>

View file

@ -266,7 +266,7 @@
<string name="past_three_months">Más de 3 meses</string>
<string name="paste_lyrics_here">Pega las Letras Aquí</string>
<string name="paste_timeframe_lyrics_here">Pegar las letras con marcas de tiempo aquí</string>
<string name="peak">Pico</string>
<string name="peek">Pico</string>
<string name="permission_external_storage_denied">Permiso para acceder al almacenamiento externo denegado.</string>
<string name="permission_summary">La aplicación necesita permiso para acceder al almacenamiento de tu dispositivo y reproducir música</string>
<string name="permission_title">Acceso al Almacenamiento</string>

View file

@ -247,7 +247,7 @@
<string name="others">Bestelako</string>
<string name="password">Pasahitza</string>
<string name="past_three_months">Azken 3 hilabeteak</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">Kanpoko biltegiratzera sarbidea ukatua</string>
<string name="permissions_denied">Baimenak ukatuak izan dira</string>
<string name="personalize">Pertsonalizatu</string>

View file

@ -267,7 +267,7 @@
<string name="past_three_months">3 ماه گذشته</string>
<string name="paste_lyrics_here">متن را در اینجا بارگزاری کنید</string>
<string name="paste_timeframe_lyrics_here">متون زمان دار را در اینجا بارگزاری کنید</string>
<string name="peak">حالت peak</string>
<string name="peek">حالت peek</string>
<string name="permission_external_storage_denied">مجوز دسترسی به حافظه رد شد</string>
<string name="permission_summary">برنامه نیاز به دسترسی به حافظه برای پخش آهنگ ها دارد</string>
<string name="permission_title">دسترسی به حافظه</string>

View file

@ -267,7 +267,7 @@
<string name="past_three_months">Nakalipas na 3 buwan</string>
<string name="paste_lyrics_here">Idikit ang Lyrics Dito</string>
<string name="paste_timeframe_lyrics_here">Idikit ang timeframe lyrics dito</string>
<string name="peak">Tuktok</string>
<string name="peek">Tuktok</string>
<string name="permission_external_storage_denied">Tinanggihan ang pahintulot na ma-access ang panlabas na storage.</string>
<string name="permission_summary">Ang app ay nangangailangan ng permiso upang ma-access ang storage ng iyong device para ma-play ang musika</string>
<string name="permission_title">Access sa Storage</string>

View file

@ -266,7 +266,7 @@
<string name="past_three_months">3 derniers mois</string>
<string name="paste_lyrics_here">Copiez les paroles ici</string>
<string name="paste_timeframe_lyrics_here">Collez les paroles de la période ici</string>
<string name="peak">Aperçu</string>
<string name="peek">Aperçu</string>
<string name="permission_external_storage_denied">La permission pour accéder au stockage externe a été refusée.</string>
<string name="permission_summary">L\'application a besoin d\'accéder au stockage de votre appareil pour lire votre musique</string>
<string name="permission_title">Accès au stockage</string>

View file

@ -267,7 +267,7 @@
<string name="past_three_months">Past 3 months</string>
<string name="paste_lyrics_here">Paste Lyrics Here</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">Permission to access external storage denied.</string>
<string name="permission_summary">The app needs permission to access your device storage for playing music</string>
<string name="permission_title">Storage Access</string>

View file

@ -269,7 +269,7 @@
<string name="past_three_months">Past 3 months</string>
<string name="paste_lyrics_here">Paste Lyrics Here</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">Permission to access external storage denied.</string>
<string name="permission_summary">The app needs permission to access your device storage for playing music</string>
<string name="permission_title">Storage Access</string>

View file

@ -267,7 +267,7 @@
<string name="past_three_months">Elmúlt 3 hónap</string>
<string name="paste_lyrics_here">Dalszöveg beillesztése ide</string>
<string name="paste_timeframe_lyrics_here">Időzített dalszöveg beillesztése ide</string>
<string name="peak">Csúcs</string>
<string name="peek">Csúcs</string>
<string name="permission_external_storage_denied">A külső tárolási hozzáférés engedélyezése tiltva.</string>
<string name="permission_summary">Az alkalmazásnak engedélyre van szüksége az eszköz tárhelyéhez a zenék lejátszásához</string>
<string name="permission_title">Tárhely engedély</string>

View file

@ -265,7 +265,7 @@
<string name="past_three_months">3 bulan terakhir</string>
<string name="paste_lyrics_here">Tempel Lirik Disini</string>
<string name="paste_timeframe_lyrics_here">Tempel kerangka waktu lirik di sini</string>
<string name="peak">Puncak</string>
<string name="peek">Puncak</string>
<string name="permission_external_storage_denied">Izin untuk mengakses penyimpanan eksternal ditolak.</string>
<string name="permission_summary">Aplikasi memerlukan izin untuk mengakses penyimpanan perangkat Anda untuk memutar musik</string>
<string name="permission_title">Akses Penyimpanan</string>

View file

@ -282,7 +282,7 @@ https://play.google.com/store/apps/details?id=%s</string>
<string name="past_three_months">Ultimi 3 mesi</string>
<string name="paste_lyrics_here">Incolla i testi qui</string>
<string name="paste_timeframe_lyrics_here">Incolla i testi sincronizzati qui</string>
<string name="peak">Picco</string>
<string name="peek">Picco</string>
<string name="permission_external_storage_denied">Autorizzazione ad accedere all\'archiviazione esterna negata.</string>
<string name="permission_summary">L\'app necessita dell\'autorizzazione ad accedere all\'archiviazione del dispositivo per riprodurre musica</string>
<string name="permission_title">Accesso all\'archiviazione</string>

View file

@ -265,7 +265,7 @@
<string name="past_three_months">過去3ヶ月</string>
<string name="paste_lyrics_here">Paste Lyrics Here</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">ピーク</string>
<string name="peek">ピーク</string>
<string name="permission_external_storage_denied">外部ストレージへのアクセスが拒否されました</string>
<string name="permission_summary">The app needs permission to access your device storage for playing music</string>
<string name="permission_title">Storage Access</string>

View file

@ -268,7 +268,7 @@ https://play.google.com/store/apps/details?id=%s</string>
<string name="past_three_months">3 mehên borî</string>
<string name="paste_lyrics_here">Peyvên stranê Li vir pêve bike</string>
<string name="paste_timeframe_lyrics_here">Peyvê stranên demsazkirî li vir binivisîne</string>
<string name="peak">Serî</string>
<string name="peek">Serî</string>
<string name="permission_external_storage_denied">Mafa gihiştînê bo bîrgeha derveyî hate têkbirin.</string>
<string name="permission_summary">Pêdiviya sepanê bi gihiştîna bîrgeha derveyî ya amûra te heye ji bo lêdana muzîkê</string>
<string name="permission_title">Gihîştina bergehê</string>

View file

@ -265,7 +265,7 @@
<string name="past_three_months">이전 3개월</string>
<string name="paste_lyrics_here">Paste Lyrics Here</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">외부 저장소 접근 권한이 거부되었습니다.</string>
<string name="permission_summary">The app needs permission to access your device storage for playing music</string>
<string name="permission_title">Storage Access</string>

View file

@ -267,7 +267,7 @@
<string name="past_three_months">Past 3 months</string>
<string name="paste_lyrics_here">Paste Lyrics Here</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">Permission to access external storage denied.</string>
<string name="permission_summary">The app needs permission to access your device storage for playing music</string>
<string name="permission_title">Storage Access</string>

View file

@ -265,7 +265,7 @@
<string name="past_three_months">လွန်ခဲ့သော (၃)လ</string>
<string name="paste_lyrics_here">Paste Lyrics Here</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Peak ပုံစံ</string>
<string name="peek">Peek ပုံစံ</string>
<string name="permission_external_storage_denied">External Storage ကြည့်ရှုခွင့်အားငြင်းပယ်ခဲ့သည်။</string>
<string name="permission_summary">သီချင်းဖွင့်ရန်အတွက် ယခု App အား Storage ကြည့်ရှုခွင့်ပေးရန်လိုသည်။</string>
<string name="permission_title">Storage ကြည့်ရှုခွင့်</string>

View file

@ -267,7 +267,7 @@
<string name="past_three_months">Laatste 3 maanden</string>
<string name="paste_lyrics_here">Plak tekst/lyrics hier</string>
<string name="paste_timeframe_lyrics_here">Plak timeframe tekst/lyrics hier</string>
<string name="peak">Piek</string>
<string name="peek">Piek</string>
<string name="permission_external_storage_denied">Permissie voor toegang tot extern opslag is afgewezen</string>
<string name="permission_summary">De app heeft toestemming nodig tot je apparaat\'s opslag om muziek af te kunnen spelen</string>
<string name="permission_title">Toegang tot opslag</string>

View file

@ -267,7 +267,7 @@
<string name="past_three_months">Past 3 months</string>
<string name="paste_lyrics_here">Paste Lyrics Here</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">Permission to access external storage denied.</string>
<string name="permission_summary">The app needs permission to access your device storage for playing music</string>
<string name="permission_title">Storage Access</string>

View file

@ -267,7 +267,7 @@
<string name="past_three_months">Past 3 months</string>
<string name="paste_lyrics_here">Paste Lyrics Here</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">Permission to access external storage denied.</string>
<string name="permission_summary">The app needs permission to access your device storage for playing music</string>
<string name="permission_title">Storage Access</string>

View file

@ -271,7 +271,7 @@
<string name="past_three_months">Ostatnie 3 miesiące</string>
<string name="paste_lyrics_here">Wklej tekst tutaj</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Szczyt</string>
<string name="peek">Szczyt</string>
<string name="permission_external_storage_denied">Odmowa dostępu do pamięci zewnętrznej.</string>
<string name="permission_summary">The app needs permission to access your device storage for playing music</string>
<string name="permission_title">Storage Access</string>

View file

@ -266,7 +266,7 @@
<string name="past_three_months">Últimos 3 meses</string>
<string name="paste_lyrics_here">Colar Letras Aqui</string>
<string name="paste_timeframe_lyrics_here">Colar letras sincronizadas aqui</string>
<string name="peak">Pico</string>
<string name="peek">Pico</string>
<string name="permission_external_storage_denied">Permissão para acessar o armazenamento externo negada.</string>
<string name="permission_summary">O aplicativo precisa de permissão para acessar o armazenamento do seu dispositivo para reproduzir músicas</string>
<string name="permission_title">Acesso ao Armazenamento</string>

View file

@ -267,7 +267,7 @@
<string name="past_three_months">Últimos 3 meses</string>
<string name="paste_lyrics_here">Colar letras aqui</string>
<string name="paste_timeframe_lyrics_here">Colar letras do cronograma aqui</string>
<string name="peak">Espreitar</string>
<string name="peek">Espreitar</string>
<string name="permission_external_storage_denied">Permissão para aceder ao armazenamento externo negada.</string>
<string name="permission_summary">Esta aplicação necessita de permissão para aceder ao armazenamento para tocar músicas</string>
<string name="permission_title">Acesso ao armazenamento</string>

View file

@ -269,7 +269,7 @@
<string name="past_three_months">Ultimele 3 luni</string>
<string name="paste_lyrics_here">Paste Lyrics Here</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">Accesul la stocarea externă este respinsă.</string>
<string name="permission_summary">The app needs permission to access your device storage for playing music</string>
<string name="permission_title">Storage Access</string>

View file

@ -270,7 +270,7 @@
<string name="past_three_months">Последние 3 месяца</string>
<string name="paste_lyrics_here">Вставьте текст песни</string>
<string name="paste_timeframe_lyrics_here">Вставьте синхронизированный текст песни</string>
<string name="peak">Панель снизу</string>
<string name="peek">Панель снизу</string>
<string name="permission_external_storage_denied">Разрешение для доступа у внешнему хранилищу не получено.</string>
<string name="permission_summary">Приложению требуется разрешение на доступ к внутренней памяти вашего устройства для воспроизведения музыки.</string>
<string name="permission_title">Доступ к внутренней памяти</string>

View file

@ -269,7 +269,7 @@
<string name="past_three_months">Prosla 3 meseca</string>
<string name="paste_lyrics_here">Paste Lyrics Here</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">Dozvola za pristup spoljasnjem skladistu je odbijena</string>
<string name="permission_summary">The app needs permission to access your device storage for playing music</string>
<string name="permission_title">Storage Access</string>

View file

@ -267,7 +267,7 @@
<string name="past_three_months">De senaste 3 månaderna</string>
<string name="paste_lyrics_here">Paste Lyrics Here</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">Behörighet att få tillgång till extern lagring nekas.</string>
<string name="permission_summary">The app needs permission to access your device storage for playing music</string>
<string name="permission_title">Storage Access</string>

View file

@ -267,7 +267,7 @@
<string name="past_three_months">Past 3 months</string>
<string name="paste_lyrics_here">Paste Lyrics Here</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">Permission to access external storage denied.</string>
<string name="permission_summary">The app needs permission to access your device storage for playing music</string>
<string name="permission_title">Storage Access</string>

View file

@ -231,7 +231,7 @@
<string name="password">పాస్వర్డ్</string>
<string name="past_three_months">గత 3 నెలలు</string>
<string name="paste_lyrics_here">సాహిత్యాన్ని ఇక్కడ అతికించండి</string>
<string name="peak">శిఖరం</string>
<string name="peek">శిఖరం</string>
<string name="permission_external_storage_denied">బాహ్య నిల్వను యాక్సెస్ చేయడానికి అనుమతి నిరాకరించబడింది.</string>
<string name="permissions_denied">అనుమతులు తిరస్కరించబడ్డాయి.</string>
<string name="personalize">వ్యక్తిగతీకరించండి</string>

View file

@ -265,7 +265,7 @@
<string name="past_three_months">3 เดือนผ่านไป</string>
<string name="paste_lyrics_here">วางเนื้อเพลงที่นี่</string>
<string name="paste_timeframe_lyrics_here">วางเนื้อเพลงในกรอบเวลาที่นี่</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">สิทธิ์ในการเข้าถึงถูกปฏิเสธ</string>
<string name="permission_summary">ต้องการสิทธิ์ในการเข้าถึงข้อมูลในเครื่องเพื่อเล่นเพลง</string>
<string name="permission_title">เข้าถึงการจัดเก็บข้อมูล</string>

View file

@ -267,7 +267,7 @@
<string name="past_three_months">Son 3 ay</string>
<string name="paste_lyrics_here">Sözleri buraya yapıştır</string>
<string name="paste_timeframe_lyrics_here">Zaman dilimli şarkı sözlerini buraya yapıştır</string>
<string name="peak">Zirve</string>
<string name="peek">Zirve</string>
<string name="permission_external_storage_denied">Harici depolama izni reddedildi.</string>
<string name="permission_summary">Uygulamanın müzik çalması için cihazınızın depolama erişimine ihtiyacı var</string>
<string name="permission_title">Depolama Erişimi</string>

View file

@ -271,7 +271,7 @@
<string name="past_three_months">Останні 3 місяці</string>
<string name="paste_lyrics_here">Paste Lyrics Here</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Пік</string>
<string name="peek">Пік</string>
<string name="permission_external_storage_denied">Відмовлено у доступі до зовнішнього сховища.</string>
<string name="permission_summary">The app needs permission to access your device storage for playing music</string>
<string name="permission_title">Storage Access</string>

View file

@ -266,7 +266,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\"</string>
<string name="past_three_months">Mỗi tháng</string>
<string name="paste_lyrics_here">Dán lời ở đây</string>
<string name="paste_timeframe_lyrics_here">Dán lời theo thời gian ở đây</string>
<string name="peak">Thu nhỏ</string>
<string name="peek">Thu nhỏ</string>
<string name="permission_external_storage_denied">Quyền truy cập bộ nhớ ngoài bị từ chối.</string>
<string name="permission_summary">Ứng dụng cần quyền truy cập bộ nhớ thiết bị của bạn để phát nhạc</string>
<string name="permission_title">Truy cập bộ nhớ</string>

View file

@ -279,7 +279,7 @@
<string name="past_three_months">最近三个月</string>
<string name="paste_lyrics_here">在此粘贴歌词</string>
<string name="paste_timeframe_lyrics_here">在此粘贴时段歌词</string>
<string name="peak">顶点</string>
<string name="peek">顶点</string>
<string name="permission_external_storage_denied">访问外部存储权限被拒绝。</string>
<string name="permission_summary">应用需要设备存储访问权限来播放音乐</string>
<string name="permission_title">存储空间权限</string>

View file

@ -229,7 +229,7 @@
<string name="password">密碼</string>
<string name="past_three_months">在3個月內</string>
<string name="paste_lyrics_here">在此貼上歌詞</string>
<string name="peak">波紋</string>
<string name="peek">波紋</string>
<string name="permission_external_storage_denied">存取外置儲存空間權限被拒。</string>
<string name="permissions_denied">存取權限被拒。</string>
<string name="personalize">個人化</string>

View file

@ -265,7 +265,7 @@
<string name="past_three_months">過去 3 個月</string>
<string name="paste_lyrics_here">在這裡貼上歌詞</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">無法取得存取外部儲存空間的權限。</string>
<string name="permission_summary">The app needs permission to access your device storage for playing music</string>
<string name="permission_title">Storage Access</string>

View file

@ -68,6 +68,7 @@
<dimen name="m3_card_corner_radius">16dp</dimen>
<dimen name="m3_card_medium_radius">24dp</dimen>
<dimen name="m3_card_large_radius">40dp</dimen>
<dimen name="m3_dialog_corner_size">28dp</dimen>
<dimen name="padding_album_cover">16dp</dimen>
<dimen name="seekbar_padding">16dp</dimen>

View file

@ -282,7 +282,7 @@
<string name="past_three_months">Past 3 months</string>
<string name="paste_lyrics_here">Paste Lyrics Here</string>
<string name="paste_timeframe_lyrics_here">Paste timeframe lyrics here</string>
<string name="peak">Peak</string>
<string name="peek">Peek</string>
<string name="permission_external_storage_denied">Permission to access external storage denied.</string>
<string name="permission_summary">The app needs permission to access your device storage for playing music</string>
<string name="permission_title">Storage Access</string>

View file

@ -71,7 +71,7 @@
android:title="@string/pref_title_tab_text_mode" />
<code.name.monkey.appthemehelper.common.prefs.supportv7.ATEListPreference
android:defaultValue="0"
android:defaultValue="1"
android:entries="@array/pref_appbar_mode_titles"
android:entryValues="@array/pref_appbar_mode_values"
android:key="appbar_mode"

View file

@ -3,7 +3,7 @@
buildscript {
ext {
kotlin_version = '1.6.10'
navigation_version = '2.5.0-alpha01'
navigation_version = '2.4.1'
mdc_version = '1.5.0'
preference_version = '1.2.0'
appcompat_version = '1.4.1'
@ -14,7 +14,7 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.1.0'
classpath 'com.android.tools.build:gradle:7.1.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version"
}