Merge pull request #1257 from prathameshmm02/dev
Fixed some crashes and bugs
This commit is contained in:
commit
eaa036936a
93 changed files with 317 additions and 309 deletions
|
@ -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.
|
||||
|
|
|
@ -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'
|
||||
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,10 +64,26 @@ class DeleteSongsDialog : DialogFragment() {
|
|||
libraryViewModel = activity?.getViewModel() as LibraryViewModel
|
||||
val songs = extraNotNull<List<Song>>(EXTRA_SONG).value
|
||||
if (VersionUtils.hasR()) {
|
||||
dismiss()
|
||||
MusicUtil.deleteTracksR(requireActivity(), 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()
|
||||
}
|
||||
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,
|
||||
|
@ -87,10 +106,12 @@ class DeleteSongsDialog : DialogFragment() {
|
|||
.title(pair.first)
|
||||
.message(text = pair.second)
|
||||
.noAutoDismiss()
|
||||
.negativeButton(android.R.string.cancel) {
|
||||
.negativeButton(android.R.string.cancel)
|
||||
{
|
||||
dismiss()
|
||||
}
|
||||
.positiveButton(R.string.action_delete) {
|
||||
.positiveButton(R.string.action_delete)
|
||||
{
|
||||
if ((songs.size == 1) && MusicPlayerRemote.isPlaying(songs[0])) {
|
||||
MusicPlayerRemote.playNextSong()
|
||||
}
|
||||
|
@ -112,6 +133,7 @@ class DeleteSongsDialog : DialogFragment() {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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)
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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.*
|
||||
|
||||
|
|
|
@ -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>()
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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!!
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
@ -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(),
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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"
|
||||
)
|
||||
|
|
|
@ -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,6 +149,9 @@ class MusicService : MediaBrowserServiceCompat(),
|
|||
AppWidgetMD3.NAME -> {
|
||||
appWidgetMd3.performUpdate(this@MusicService, ids)
|
||||
}
|
||||
AppWidgetCircle.NAME -> {
|
||||
appWidgetCircle.performUpdate(this@MusicService, ids)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -185,15 +190,15 @@ class MusicService : MediaBrowserServiceCompat(),
|
|||
}
|
||||
}
|
||||
private var playerHandler: PlaybackHandler? = null
|
||||
private val audioFocusListener: OnAudioFocusChangeListener =
|
||||
OnAudioFocusChangeListener { focusChange ->
|
||||
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
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
for (i in originalPlayingQueue.indices) {
|
||||
if (originalPlayingQueue[i].id == song.id) {
|
||||
originalPlayingQueue.removeAt(i)
|
||||
val deletePosition = playingQueue.indexOf(song)
|
||||
if (deletePosition != -1) {
|
||||
playingQueue.removeAt(deletePosition)
|
||||
rePosition(deletePosition)
|
||||
}
|
||||
|
||||
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(
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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) {
|
||||
|
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
|
@ -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>
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue