Merge pull request #1268 from prathameshmm02/dev

Fixed Sleep timer
This commit is contained in:
Daksh P. Jain 2022-03-01 11:02:48 +05:30 committed by GitHub
commit 17237a4021
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
28 changed files with 82 additions and 102 deletions

View file

@ -108,7 +108,7 @@ dependencies {
implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version" implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version"
implementation "androidx.navigation:navigation-ui-ktx:$navigation_version" implementation "androidx.navigation:navigation-ui-ktx:$navigation_version"
def room_version = '2.4.1' def room_version = '2.4.2'
implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-runtime:$room_version"
implementation "androidx.room:room-ktx:$room_version" implementation "androidx.room:room-ktx:$room_version"
kapt "androidx.room:room-compiler:$room_version" kapt "androidx.room:room-compiler:$room_version"
@ -126,7 +126,7 @@ dependencies {
def retrofit_version = '2.9.0' def retrofit_version = '2.9.0'
implementation "com.squareup.retrofit2:retrofit:$retrofit_version" implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
implementation "com.squareup.retrofit2:converter-gson:$retrofit_version" implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
implementation 'com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.4' implementation 'com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.5'
def material_dialog_version = "3.3.0" def material_dialog_version = "3.3.0"
implementation "com.afollestad.material-dialogs:core:$material_dialog_version" implementation "com.afollestad.material-dialogs:core:$material_dialog_version"
@ -146,7 +146,7 @@ dependencies {
implementation "io.insert-koin:koin-core:$koin_version" implementation "io.insert-koin:koin-core:$koin_version"
implementation "io.insert-koin:koin-android:$koin_version" implementation "io.insert-koin:koin-android:$koin_version"
def glide_version = '4.13.0' def glide_version = '4.13.1'
implementation "com.github.bumptech.glide:glide:$glide_version" implementation "com.github.bumptech.glide:glide:$glide_version"
kapt "com.github.bumptech.glide:compiler:$glide_version" kapt "com.github.bumptech.glide:compiler:$glide_version"
implementation "com.github.bumptech.glide:okhttp3-integration:$glide_version" implementation "com.github.bumptech.glide:okhttp3-integration:$glide_version"

View file

@ -5,6 +5,7 @@
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
@ -37,7 +38,6 @@
<activity <activity
android:name=".activities.MainActivity" android:name=".activities.MainActivity"
android:exported="true" android:exported="true"
android:label="@string/app_name"
android:theme="@style/SplashTheme" android:theme="@style/SplashTheme"
android:launchMode="singleTop"> android:launchMode="singleTop">
<intent-filter> <intent-filter>
@ -171,7 +171,6 @@
<activity <activity
android:name=".cast.ExpandedControlsActivity" android:name=".cast.ExpandedControlsActivity"
android:exported="true" android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTask" android:launchMode="singleTask"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.NoActionBar"> android:theme="@style/Theme.AppCompat.NoActionBar">

View file

@ -32,7 +32,6 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.glide.BlurTransformation import code.name.monkey.retromusic.glide.BlurTransformation
import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback
@ -42,7 +41,6 @@ import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.repository.RealRepository import code.name.monkey.retromusic.repository.RealRepository
import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
@ -247,14 +245,9 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback {
binding.songText.text = song.artistName binding.songText.text = song.artistName
GlideApp.with(this) GlideApp.with(this)
.asBitmapPalette()
.songCoverOptions(song)
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.transform(BlurTransformation.Builder(this).build()) .songCoverOptions(song).transform(BlurTransformation.Builder(this).build())
.into(object : RetroMusicColoredTarget(binding.image) { .into(binding.image)
override fun onColorReady(colors: MediaNotificationProcessor) {
}
})
} }
override fun onUpdateProgressViews(progress: Int, total: Int) { override fun onUpdateProgressViews(progress: Int, total: Int) {

View file

@ -15,7 +15,6 @@
package code.name.monkey.retromusic.activities package code.name.monkey.retromusic.activities
import android.app.KeyguardManager import android.app.KeyguardManager
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.WindowManager import android.view.WindowManager
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
@ -84,7 +83,7 @@ class LockScreenActivity : AbsMusicServiceActivity() {
@Suppress("Deprecation") @Suppress("Deprecation")
private fun lockScreenInit() { private fun lockScreenInit() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { if (VersionUtils.hasOreoMR1()) {
setShowWhenLocked(true) setShowWhenLocked(true)
val keyguardManager = getSystemService<KeyguardManager>() val keyguardManager = getSystemService<KeyguardManager>()
keyguardManager?.requestDismissKeyguard(this, null) keyguardManager?.requestDismissKeyguard(this, null)

View file

@ -49,14 +49,17 @@ class PermissionActivity : AbsMusicServiceActivity() {
binding.storagePermission.setButtonClick { binding.storagePermission.setButtonClick {
requestPermissions() requestPermissions()
} }
if (VersionUtils.hasMarshmallow()) binding.audioPermission.show() if (VersionUtils.hasMarshmallow()) {
binding.audioPermission.setButtonClick { binding.audioPermission.show()
if (RingtoneManager.requiresDialog(this@PermissionActivity)) { binding.audioPermission.setButtonClick {
val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS) if (RingtoneManager.requiresDialog(this@PermissionActivity)) {
intent.data = Uri.parse("package:" + applicationContext.packageName) val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS)
startActivity(intent) intent.data = Uri.parse("package:" + applicationContext.packageName)
startActivity(intent)
}
} }
} }
binding.finish.accentBackgroundColor() binding.finish.accentBackgroundColor()
binding.finish.setOnClickListener { binding.finish.setOnClickListener {
if (hasPermissions()) { if (hasPermissions()) {

View file

@ -20,7 +20,6 @@ import android.content.pm.PackageManager
import android.graphics.Rect import android.graphics.Rect
import android.media.AudioManager import android.media.AudioManager
import android.net.Uri import android.net.Uri
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.provider.Settings import android.provider.Settings
import android.view.KeyEvent import android.view.KeyEvent
@ -31,6 +30,7 @@ import android.widget.EditText
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
@ -62,19 +62,12 @@ abstract class AbsBaseActivity : AbsThemeActivity() {
permissionDeniedMessage = null permissionDeniedMessage = null
} }
override fun onPostCreate(savedInstanceState: Bundle?) {
super.onPostCreate(savedInstanceState)
if (!hasPermissions()) {
// requestPermissions()
}
}
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
val hasPermissions = hasPermissions() val hasPermissions = hasPermissions()
if (hasPermissions != hadPermissions) { if (hasPermissions != hadPermissions) {
hadPermissions = hasPermissions hadPermissions = hasPermissions
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (VersionUtils.hasMarshmallow()) {
onHasPermissionsChanged(hasPermissions) onHasPermissionsChanged(hasPermissions)
} }
} }
@ -97,13 +90,13 @@ abstract class AbsBaseActivity : AbsThemeActivity() {
} }
protected open fun requestPermissions() { protected open fun requestPermissions() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (VersionUtils.hasMarshmallow()) {
requestPermissions(permissions, PERMISSION_REQUEST) requestPermissions(permissions, PERMISSION_REQUEST)
} }
} }
protected fun hasPermissions(): Boolean { protected fun hasPermissions(): Boolean {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (VersionUtils.hasMarshmallow()) {
for (permission in permissions) { for (permission in permissions) {
if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) { if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
return false return false

View file

@ -21,7 +21,6 @@ import androidx.fragment.app.FragmentActivity
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicPlayerRemote.isPlaying import code.name.monkey.retromusic.helper.MusicPlayerRemote.isPlaying
import code.name.monkey.retromusic.helper.MusicPlayerRemote.playNextSong import code.name.monkey.retromusic.helper.MusicPlayerRemote.playNextSong
@ -29,7 +28,6 @@ import code.name.monkey.retromusic.helper.MusicPlayerRemote.removeFromQueue
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.ViewUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemAdapter import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemAdapter
import com.h6ah4i.android.widget.advrecyclerview.draggable.ItemDraggableRange import com.h6ah4i.android.widget.advrecyclerview.draggable.ItemDraggableRange
import com.h6ah4i.android.widget.advrecyclerview.draggable.annotation.DraggableItemStateFlags import com.h6ah4i.android.widget.advrecyclerview.draggable.annotation.DraggableItemStateFlags
@ -79,13 +77,10 @@ class PlayingQueueAdapter(
if (holder.image == null) { if (holder.image == null) {
return return
} }
GlideApp.with(activity).asBitmapPalette().songCoverOptions(song) GlideApp.with(activity)
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.into(object : RetroMusicColoredTarget(holder.image!!) { .songCoverOptions(song)
override fun onColorReady(colors: MediaNotificationProcessor) { .into(holder.image!!)
//setColors(colors, holder)
}
})
} }
fun swapDataSet(dataSet: List<Song>, position: Int) { fun swapDataSet(dataSet: List<Song>, position: Int) {

View file

@ -24,7 +24,6 @@ import android.content.res.Resources
import android.graphics.* import android.graphics.*
import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.os.Build
import android.text.TextUtils import android.text.TextUtils
import android.widget.RemoteViews import android.widget.RemoteViews
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
@ -101,7 +100,7 @@ abstract class BaseAppWidget : AppWidgetProvider() {
): PendingIntent { ): PendingIntent {
val intent = Intent(action) val intent = Intent(action)
intent.component = serviceName intent.component = serviceName
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { return if (VersionUtils.hasOreo()) {
PendingIntent.getForegroundService(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) PendingIntent.getForegroundService(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
} else { } else {
PendingIntent.getService( PendingIntent.getService(

View file

@ -3,11 +3,11 @@ package code.name.monkey.retromusic.dialogs
import android.Manifest import android.Manifest
import android.app.Dialog import android.app.Dialog
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.Environment import android.os.Environment
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.materialDialog import code.name.monkey.retromusic.extensions.materialDialog
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
@ -49,7 +49,7 @@ class BlacklistFolderChooserDialog : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
var mSavedInstanceState = savedInstanceState var mSavedInstanceState = savedInstanceState
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M if (VersionUtils.hasMarshmallow()
&& ActivityCompat.checkSelfPermission( && ActivityCompat.checkSelfPermission(
requireActivity(), Manifest.permission.READ_EXTERNAL_STORAGE requireActivity(), Manifest.permission.READ_EXTERNAL_STORAGE
) )

View file

@ -94,7 +94,7 @@ class SleepTimerDialog : DialogFragment() {
val nextSleepTimerElapsedTime = SystemClock.elapsedRealtime() + minutes * 60 * 1000 val nextSleepTimerElapsedTime = SystemClock.elapsedRealtime() + minutes * 60 * 1000
PreferenceUtil.nextSleepTimerElapsedRealTime = nextSleepTimerElapsedTime.toInt() PreferenceUtil.nextSleepTimerElapsedRealTime = nextSleepTimerElapsedTime.toInt()
val am = requireContext().getSystemService<AlarmManager>() val am = requireContext().getSystemService<AlarmManager>()
am?.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextSleepTimerElapsedTime, pi) am?.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextSleepTimerElapsedTime, pi)
Toast.makeText( Toast.makeText(
requireContext(), requireContext(),

View file

@ -45,7 +45,7 @@ fun AppCompatActivity.setImmersiveFullscreen() {
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
hide(WindowInsetsCompat.Type.systemBars()) hide(WindowInsetsCompat.Type.systemBars())
} }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { if (VersionUtils.hasP()) {
window.attributes.layoutInDisplayCutoutMode = window.attributes.layoutInDisplayCutoutMode =
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
} }
@ -100,7 +100,7 @@ fun FragmentActivity.setTaskDescriptionColor(color: Int) {
// Task description requires fully opaque color // Task description requires fully opaque color
colorFinal = ColorUtil.stripAlpha(colorFinal) colorFinal = ColorUtil.stripAlpha(colorFinal)
// Sets color of entry in the system recents page // Sets color of entry in the system recents page
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { if (VersionUtils.hasP()) {
setTaskDescription( setTaskDescription(
ActivityManager.TaskDescription( ActivityManager.TaskDescription(
title as String?, title as String?,
@ -196,7 +196,7 @@ fun AppCompatActivity.setStatusBarColorAuto() {
} }
fun AppCompatActivity.setNavigationBarColor(color: Int) { fun AppCompatActivity.setNavigationBarColor(color: Int) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (VersionUtils.hasOreo()) {
window.navigationBarColor = color window.navigationBarColor = color
} else { } else {
window.navigationBarColor = ColorUtil.darkenColor(color) window.navigationBarColor = ColorUtil.darkenColor(color)

View file

@ -49,7 +49,6 @@ import code.name.monkey.retromusic.extensions.*
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.glide.SingleColorTarget import code.name.monkey.retromusic.glide.SingleColorTarget
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.SortOrder.AlbumSongSortOrder.Companion.SONG_A_Z import code.name.monkey.retromusic.helper.SortOrder.AlbumSongSortOrder.Companion.SONG_A_Z
@ -68,7 +67,6 @@ import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroColorUtil import code.name.monkey.retromusic.util.RetroColorUtil
import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.RetroUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.afollestad.materialcab.attached.AttachedCab import com.afollestad.materialcab.attached.AttachedCab
import com.afollestad.materialcab.attached.destroy import com.afollestad.materialcab.attached.destroy
import com.afollestad.materialcab.attached.isActive import com.afollestad.materialcab.attached.isActive
@ -307,7 +305,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
detailsViewModel.getMoreAlbums(artist).observe(viewLifecycleOwner) { detailsViewModel.getMoreAlbums(artist).observe(viewLifecycleOwner) {
moreAlbums(it) moreAlbums(it)
} }
GlideApp.with(requireContext()).asBitmapPalette().artistImageOptions(artist) GlideApp.with(requireContext())
//.forceDownload(PreferenceUtil.isAllowedToDownloadMetadata()) //.forceDownload(PreferenceUtil.isAllowedToDownloadMetadata())
.load( .load(
RetroGlideExtension.getArtistModel( RetroGlideExtension.getArtistModel(
@ -315,12 +313,10 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
PreferenceUtil.isAllowedToDownloadMetadata() PreferenceUtil.isAllowedToDownloadMetadata()
) )
) )
.artistImageOptions(artist)
.dontAnimate() .dontAnimate()
.dontTransform() .dontTransform()
.into(object : RetroMusicColoredTarget(binding.artistImage) { .into(binding.artistImage)
override fun onColorReady(colors: MediaNotificationProcessor) {
}
})
} }
private fun loadAlbumCover(album: Album) { private fun loadAlbumCover(album: Album) {

View file

@ -22,7 +22,6 @@ import android.content.Intent
import android.graphics.drawable.AnimatedVectorDrawable import android.graphics.drawable.AnimatedVectorDrawable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.media.MediaMetadataRetriever import android.media.MediaMetadataRetriever
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.provider.MediaStore import android.provider.MediaStore
import android.view.GestureDetector import android.view.GestureDetector
@ -297,7 +296,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme
playerAlbumCoverFragment = whichFragment(R.id.playerAlbumCoverFragment) playerAlbumCoverFragment = whichFragment(R.id.playerAlbumCoverFragment)
playerAlbumCoverFragment?.setCallbacks(this) playerAlbumCoverFragment?.setCallbacks(this)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) if (VersionUtils.hasMarshmallow())
view.findViewById<RelativeLayout>(R.id.statusBarShadow)?.hide() view.findViewById<RelativeLayout>(R.id.statusBarShadow)?.hide()
} }

View file

@ -181,14 +181,13 @@ class HomeFragment :
private fun loadProfile() { private fun loadProfile() {
binding.bannerImage?.let { binding.bannerImage?.let {
GlideApp.with(requireContext()) GlideApp.with(requireContext())
.asBitmap()
.profileBannerOptions(RetroGlideExtension.getBannerModel())
.load(RetroGlideExtension.getBannerModel()) .load(RetroGlideExtension.getBannerModel())
.profileBannerOptions(RetroGlideExtension.getBannerModel())
.into(it) .into(it)
} }
GlideApp.with(requireActivity()).asBitmap() GlideApp.with(requireActivity())
.userProfileOptions(RetroGlideExtension.getUserModel())
.load(RetroGlideExtension.getUserModel()) .load(RetroGlideExtension.getUserModel())
.userProfileOptions(RetroGlideExtension.getUserModel())
.into(binding.userImage) .into(binding.userImage)
} }
@ -273,9 +272,8 @@ class HomeFragment :
} }
} }
GlideApp.with(this) GlideApp.with(this)
.asBitmap()
.songCoverOptions(songs[index])
.load(RetroGlideExtension.getSongModel(songs[index])) .load(RetroGlideExtension.getSongModel(songs[index]))
.songCoverOptions(songs[index])
.into(imageView) .into(imageView)
} }
} }

View file

@ -114,10 +114,9 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(R.layout.fragment_mini_p
private fun updateSongCover() { private fun updateSongCover() {
val song = MusicPlayerRemote.currentSong val song = MusicPlayerRemote.currentSong
GlideApp.with(requireContext()) GlideApp.with(requireContext())
.asBitmap()
.songCoverOptions(song)
.transition(RetroGlideExtension.getDefaultTransition())
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.transition(RetroGlideExtension.getDefaultTransition())
.songCoverOptions(song)
.into(binding.image) .into(binding.image)
} }

View file

@ -31,7 +31,6 @@ import code.name.monkey.retromusic.fragments.base.goToArtist
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
@ -134,12 +133,10 @@ class FullPlayerFragment : AbsPlayerFragment(R.layout.fragment_full) {
libraryViewModel.artist(MusicPlayerRemote.currentSong.artistId) libraryViewModel.artist(MusicPlayerRemote.currentSong.artistId)
.observe(viewLifecycleOwner) { artist -> .observe(viewLifecycleOwner) { artist ->
if (artist.id != -1L) { if (artist.id != -1L) {
GlideApp.with(requireActivity()).asBitmapPalette().artistImageOptions(artist) GlideApp.with(requireActivity())
.load(RetroGlideExtension.getArtistModel(artist)) .load(RetroGlideExtension.getArtistModel(artist))
.into(object : RetroMusicColoredTarget(binding.artistImage) { .artistImageOptions(artist)
override fun onColorReady(colors: MediaNotificationProcessor) { .into(binding.artistImage)
}
})
} }
} }
@ -151,17 +148,15 @@ class FullPlayerFragment : AbsPlayerFragment(R.layout.fragment_full) {
} }
private fun updateLabel() { private fun updateLabel() {
(MusicPlayerRemote.playingQueue.size - 1).apply { if ((MusicPlayerRemote.playingQueue.size - 1) == (MusicPlayerRemote.position)) {
if (this == (MusicPlayerRemote.position)) { binding.nextSongLabel.setText(R.string.last_song)
binding.nextSongLabel.setText(R.string.last_song) binding.nextSong.hide()
binding.nextSong.hide() } else {
} else { val title = MusicPlayerRemote.playingQueue[MusicPlayerRemote.position + 1].title
val title = MusicPlayerRemote.playingQueue[MusicPlayerRemote.position + 1].title binding.nextSongLabel.setText(R.string.next_song)
binding.nextSongLabel.setText(R.string.next_song) binding.nextSong.apply {
binding.nextSong.apply { text = title
text = title show()
show()
}
} }
} }
} }

View file

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

View file

@ -15,7 +15,6 @@
package code.name.monkey.retromusic.fragments.settings package code.name.monkey.retromusic.fragments.settings
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.os.Build
import android.os.Bundle import android.os.Bundle
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.TwoStatePreference import androidx.preference.TwoStatePreference
@ -48,7 +47,7 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
setSummary(it, newValue) setSummary(it, newValue)
ThemeStore.markChanged(requireContext()) ThemeStore.markChanged(requireContext())
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { if (VersionUtils.hasNougatMR()) {
requireActivity().setTheme(PreferenceUtil.themeResFromPrefValue(theme)) requireActivity().setTheme(PreferenceUtil.themeResFromPrefValue(theme))
DynamicShortcutManager(requireContext()).updateDynamicShortcuts() DynamicShortcutManager(requireContext()).updateDynamicShortcuts()
} }
@ -83,7 +82,7 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
return@setOnPreferenceChangeListener false return@setOnPreferenceChangeListener false
} }
ThemeStore.markChanged(requireContext()) ThemeStore.markChanged(requireContext())
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { if (VersionUtils.hasNougatMR()) {
requireActivity().setTheme(PreferenceUtil.themeResFromPrefValue("black")) requireActivity().setTheme(PreferenceUtil.themeResFromPrefValue("black"))
DynamicShortcutManager(requireContext()).updateDynamicShortcuts() DynamicShortcutManager(requireContext()).updateDynamicShortcuts()
} }

View file

@ -21,6 +21,7 @@ import android.os.Environment
import android.provider.MediaStore import android.provider.MediaStore
import android.provider.MediaStore.Audio.AudioColumns import android.provider.MediaStore.Audio.AudioColumns
import android.provider.MediaStore.Audio.Media import android.provider.MediaStore.Audio.Media
import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.Constants.IS_MUSIC import code.name.monkey.retromusic.Constants.IS_MUSIC
import code.name.monkey.retromusic.Constants.baseProjection import code.name.monkey.retromusic.Constants.baseProjection
import code.name.monkey.retromusic.extensions.getInt import code.name.monkey.retromusic.extensions.getInt
@ -188,7 +189,7 @@ class RealSongRepository(private val context: Context) : SongRepository {
selectionFinal = selectionFinal =
selectionFinal + " AND " + Media.DURATION + ">= " + (PreferenceUtil.filterLength * 1000) selectionFinal + " AND " + Media.DURATION + ">= " + (PreferenceUtil.filterLength * 1000)
} }
val uri = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) { val uri = if (VersionUtils.hasQ()) {
Media.getContentUri(MediaStore.VOLUME_EXTERNAL) Media.getContentUri(MediaStore.VOLUME_EXTERNAL)
} else { } else {
Media.EXTERNAL_CONTENT_URI Media.EXTERNAL_CONTENT_URI

View file

@ -1146,9 +1146,10 @@ class MusicService : MediaBrowserServiceCompat(),
if (isAlbumArtOnLockScreen) { if (isAlbumArtOnLockScreen) {
val screenSize = RetroUtil.getScreenSize(this@MusicService) val screenSize = RetroUtil.getScreenSize(this@MusicService)
val request: RequestBuilder<Bitmap> = val request: RequestBuilder<Bitmap> =
GlideApp.with(this@MusicService).asBitmap().songCoverOptions(song).load( GlideApp.with(this@MusicService)
getSongModel(song) .asBitmap()
) .songCoverOptions(song)
.load(getSongModel(song))
if (isBlurredAlbumArt) { if (isBlurredAlbumArt) {
request.transform(BlurTransformation.Builder(this@MusicService).build()) request.transform(BlurTransformation.Builder(this@MusicService).build())
} }

View file

@ -23,7 +23,6 @@ import android.content.Intent
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.os.Build
import android.widget.RemoteViews import android.widget.RemoteViews
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import code.name.monkey.appthemehelper.util.ATHUtil.resolveColor import code.name.monkey.appthemehelper.util.ATHUtil.resolveColor
@ -324,7 +323,7 @@ class PlayingNotificationClassic(
context: Context, context: Context,
notificationManager: NotificationManager notificationManager: NotificationManager
): PlayingNotification { ): PlayingNotification {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (VersionUtils.hasOreo()) {
createNotificationChannel(context, notificationManager) createNotificationChannel(context, notificationManager)
} }
return PlayingNotificationClassic(context) return PlayingNotificationClassic(context)

View file

@ -232,7 +232,7 @@ class PlayingNotificationImpl24(
notificationManager: NotificationManager, notificationManager: NotificationManager,
mediaSession: MediaSessionCompat mediaSession: MediaSessionCompat
): PlayingNotification { ): PlayingNotification {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (VersionUtils.hasOreo()) {
createNotificationChannel(context, notificationManager) createNotificationChannel(context, notificationManager)
} }
return PlayingNotificationImpl24(context, mediaSession.sessionToken) return PlayingNotificationImpl24(context, mediaSession.sessionToken)

View file

@ -49,6 +49,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import code.name.monkey.appthemehelper.util.TintHelper; import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.appthemehelper.util.VersionUtils;
import code.name.monkey.retromusic.App; import code.name.monkey.retromusic.App;
public class RetroUtil { public class RetroUtil {

View file

@ -22,6 +22,8 @@ import android.provider.BaseColumns
import android.provider.MediaStore import android.provider.MediaStore
import android.provider.Settings import android.provider.Settings
import android.widget.Toast import android.widget.Toast
import androidx.annotation.RequiresApi
import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil.getSongFileUri import code.name.monkey.retromusic.util.MusicUtil.getSongFileUri
@ -55,7 +57,7 @@ class RingtoneManager(val context: Context) {
companion object { companion object {
fun requiresDialog(context: Context): Boolean { fun requiresDialog(context: Context): Boolean {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (VersionUtils.hasMarshmallow()) {
if (!Settings.System.canWrite(context)) { if (!Settings.System.canWrite(context)) {
return true return true
} }

View file

@ -8,10 +8,11 @@
<code.name.monkey.retromusic.views.TopAppBarLayout <code.name.monkey.retromusic.views.TopAppBarLayout
android:id="@+id/appBarLayout" android:id="@+id/appBarLayout"
style="?appBarLayoutStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="?appBarLayoutStyle" android:fitsSystemWindows="true"
android:fitsSystemWindows="true" /> android:theme="@style/CenteredCheckBoxTheme" />
<code.name.monkey.retromusic.views.insets.InsetsRecyclerView <code.name.monkey.retromusic.views.insets.InsetsRecyclerView
android:id="@+id/recycler_view" android:id="@+id/recycler_view"

View file

@ -28,8 +28,9 @@
<com.google.android.material.checkbox.MaterialCheckBox <com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/checkbox" android:id="@+id/checkbox"
style="@style/Widget.Material3.CompoundButton.CheckBox"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:background="@null" android:background="@null"
android:clickable="false" android:clickable="false"
android:focusable="false" android:focusable="false"

View file

@ -125,7 +125,6 @@
<item name="cornerSize">0dp</item> <item name="cornerSize">0dp</item>
</style> </style>
<style name="SplashTheme" parent="Theme.AppCompat.DayNight.NoActionBar"> <style name="SplashTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="android:windowBackground">@drawable/splash</item> <item name="android:windowBackground">@drawable/splash</item>
<item name="android:statusBarColor">@android:color/transparent</item> <item name="android:statusBarColor">@android:color/transparent</item>
@ -134,6 +133,14 @@
<style name="MaterialPopupMenuStyle" parent="Widget.Material3.PopupMenu"> <style name="MaterialPopupMenuStyle" parent="Widget.Material3.PopupMenu">
<item name="android:popupBackground">@drawable/popup_background</item> <item name="android:popupBackground">@drawable/popup_background</item>
</style> </style>
<style name="CenteredCheckBoxTheme">
<item name="checkboxStyle">@style/CheckBoxStyle</item>
</style>
<style name="CheckBoxStyle" parent="@style/Widget.AppCompat.CompoundButton.CheckBox">
<item name="android:gravity">center_vertical|end</item>
</style>
<style name="MaterialAlertDialogTheme" parent="ThemeOverlay.Material3.MaterialAlertDialog"> <style name="MaterialAlertDialogTheme" parent="ThemeOverlay.Material3.MaterialAlertDialog">
<item name="materialAlertDialogBodyTextStyle"> <item name="materialAlertDialogBodyTextStyle">
@ -180,7 +187,6 @@
<item name="android:paddingBottom">@dimen/button_padding_vertical</item> <item name="android:paddingBottom">@dimen/button_padding_vertical</item>
</style> </style>
<style name="BottomSheetStyle" parent="Widget.Material3.BottomSheet"> <style name="BottomSheetStyle" parent="Widget.Material3.BottomSheet">
<item name="android:maxWidth">@empty</item> <item name="android:maxWidth">@empty</item>
</style> </style>

View file

@ -14,7 +14,7 @@ buildscript {
google() google()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:7.1.1' classpath 'com.android.tools.build:gradle:7.1.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version"
} }