mirror of
https://github.com/cmclark00/RetroMusicPlayer.git
synced 2025-05-17 15:45:21 +01:00
Add support for Android 14-15
This commit is contained in:
parent
6752ae2afa
commit
54393ca888
17 changed files with 81 additions and 39 deletions
|
@ -69,11 +69,11 @@ android {
|
||||||
warning 'ImpliedQuantity', 'Instantiatable', 'MissingQuantity', 'MissingTranslation', 'StringFormatInvalid'
|
warning 'ImpliedQuantity', 'Instantiatable', 'MissingQuantity', 'MissingTranslation', 'StringFormatInvalid'
|
||||||
}
|
}
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility JavaVersion.VERSION_17
|
sourceCompatibility JavaVersion.VERSION_21
|
||||||
targetCompatibility JavaVersion.VERSION_17
|
targetCompatibility JavaVersion.VERSION_21
|
||||||
}
|
}
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = "17"
|
jvmTarget = "21"
|
||||||
}
|
}
|
||||||
dependenciesInfo {
|
dependenciesInfo {
|
||||||
includeInApk = false
|
includeInApk = false
|
||||||
|
|
5
app/proguard-rules.pro
vendored
5
app/proguard-rules.pro
vendored
|
@ -20,6 +20,11 @@
|
||||||
# debugging stack traces.
|
# debugging stack traces.
|
||||||
-keepattributes SourceFile,LineNumberTable
|
-keepattributes SourceFile,LineNumberTable
|
||||||
|
|
||||||
|
# required after agp 8 made r8 full mode default
|
||||||
|
-keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken
|
||||||
|
-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken
|
||||||
|
-keep,allowobfuscation,allowshrinking public class * implements java.lang.reflect.Type
|
||||||
|
|
||||||
# If you keep the line number information, uncomment this to
|
# If you keep the line number information, uncomment this to
|
||||||
# hide the original source file name.
|
# hide the original source file name.
|
||||||
#-renamesourcefileattribute SourceFile
|
#-renamesourcefileattribute SourceFile
|
||||||
|
|
|
@ -252,7 +252,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
|
||||||
PreferenceUtil.unregisterOnSharedPreferenceChangedListener(this)
|
PreferenceUtil.unregisterOnSharedPreferenceChangedListener(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
|
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) {
|
||||||
when (key) {
|
when (key) {
|
||||||
SWIPE_DOWN_DISMISS -> {
|
SWIPE_DOWN_DISMISS -> {
|
||||||
bottomSheetBehavior.isHideable = PreferenceUtil.swipeDownToDismiss
|
bottomSheetBehavior.isHideable = PreferenceUtil.swipeDownToDismiss
|
||||||
|
|
|
@ -68,6 +68,7 @@ class AppShortcutLauncherActivity : Activity() {
|
||||||
INTENT_EXTRA_PLAYLIST to playlist,
|
INTENT_EXTRA_PLAYLIST to playlist,
|
||||||
INTENT_EXTRA_SHUFFLE_MODE to shuffleMode
|
INTENT_EXTRA_SHUFFLE_MODE to shuffleMode
|
||||||
)
|
)
|
||||||
|
intent.setPackage(this.packageName)
|
||||||
|
|
||||||
intent.putExtras(bundle)
|
intent.putExtras(bundle)
|
||||||
|
|
||||||
|
|
|
@ -131,6 +131,29 @@ class SleepTimerDialog : DialogFragment() {
|
||||||
SystemClock.elapsedRealtime() + minutes * 60 * 1000
|
SystemClock.elapsedRealtime() + minutes * 60 * 1000
|
||||||
PreferenceUtil.nextSleepTimerElapsedRealTime = nextSleepTimerElapsedTime.toInt()
|
PreferenceUtil.nextSleepTimerElapsedRealTime = nextSleepTimerElapsedTime.toInt()
|
||||||
val am = requireContext().getSystemService<AlarmManager>()
|
val am = requireContext().getSystemService<AlarmManager>()
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
|
if (am?.canScheduleExactAlarms() == false) {
|
||||||
|
Intent().also { intent ->
|
||||||
|
intent.action = Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM
|
||||||
|
context.startActivity(intent)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
am?.setExact(
|
||||||
|
AlarmManager.ELAPSED_REALTIME_WAKEUP,
|
||||||
|
nextSleepTimerElapsedTime,
|
||||||
|
pi
|
||||||
|
)
|
||||||
|
|
||||||
|
Toast.makeText(
|
||||||
|
requireContext(),
|
||||||
|
requireContext().resources.getString(
|
||||||
|
R.string.sleep_timer_set,
|
||||||
|
minutes
|
||||||
|
),
|
||||||
|
Toast.LENGTH_SHORT
|
||||||
|
).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (VersionUtils.hasS() && am?.canScheduleExactAlarms() != true) {
|
if (VersionUtils.hasS() && am?.canScheduleExactAlarms() != true) {
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
|
|
|
@ -374,7 +374,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme
|
||||||
e1: MotionEvent?,
|
e1: MotionEvent?,
|
||||||
e2: MotionEvent,
|
e2: MotionEvent,
|
||||||
distanceX: Float,
|
distanceX: Float,
|
||||||
distanceY: Float
|
distanceY: Float,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return when {
|
return when {
|
||||||
abs(distanceX) > abs(distanceY) -> {
|
abs(distanceX) > abs(distanceY) -> {
|
||||||
|
|
|
@ -69,9 +69,9 @@ class CoverLyricsFragment : AbsMusicServiceFragment(R.layout.fragment_cover_lyri
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
|
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) {
|
||||||
if (key == SHOW_LYRICS) {
|
if (key == SHOW_LYRICS) {
|
||||||
if (sharedPreferences?.getBoolean(key, false) == true) {
|
if (sharedPreferences.getBoolean(key, false) == true) {
|
||||||
progressViewUpdateHelper?.start()
|
progressViewUpdateHelper?.start()
|
||||||
binding.root.isVisible = true
|
binding.root.isVisible = true
|
||||||
updateLyrics()
|
updateLyrics()
|
||||||
|
|
|
@ -152,7 +152,7 @@ class PlayerFragment : AbsPlayerFragment(R.layout.fragment_player),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
|
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) {
|
||||||
if (key == SNOWFALL) {
|
if (key == SNOWFALL) {
|
||||||
startOrStopSnow(PreferenceUtil.isSnowFalling)
|
startOrStopSnow(PreferenceUtil.isSnowFalling)
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
|
|
||||||
class NotificationSettingsFragment : AbsSettingsFragment(),
|
class NotificationSettingsFragment : AbsSettingsFragment(),
|
||||||
SharedPreferences.OnSharedPreferenceChangeListener {
|
SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
|
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) {
|
||||||
if (key == CLASSIC_NOTIFICATION) {
|
if (key == CLASSIC_NOTIFICATION) {
|
||||||
if (VERSION.SDK_INT >= VERSION_CODES.O) {
|
if (VERSION.SDK_INT >= VERSION_CODES.O) {
|
||||||
findPreference<Preference>(COLORED_NOTIFICATION)?.isEnabled =
|
findPreference<Preference>(COLORED_NOTIFICATION)?.isEnabled =
|
||||||
|
|
|
@ -72,7 +72,7 @@ class NowPlayingSettingsFragment : AbsSettingsFragment(),
|
||||||
PreferenceUtil.unregisterOnSharedPreferenceChangedListener(this)
|
PreferenceUtil.unregisterOnSharedPreferenceChangedListener(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
|
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) {
|
||||||
when (key) {
|
when (key) {
|
||||||
NOW_PLAYING_SCREEN_ID -> updateNowPlayingScreenSummary()
|
NOW_PLAYING_SCREEN_ID -> updateNowPlayingScreenSummary()
|
||||||
ALBUM_COVER_STYLE -> updateAlbumCoverStyleSummary()
|
ALBUM_COVER_STYLE -> updateAlbumCoverStyleSummary()
|
||||||
|
|
|
@ -39,11 +39,14 @@ import java.io.File
|
||||||
|
|
||||||
object RetroGlideExtension {
|
object RetroGlideExtension {
|
||||||
|
|
||||||
private const val DEFAULT_ARTIST_IMAGE =
|
private val DEFAULT_ARTIST_IMAGE
|
||||||
R.drawable.default_artist_art
|
get() = R.drawable.default_artist_art
|
||||||
private const val DEFAULT_SONG_IMAGE: Int = R.drawable.default_audio_art
|
private val DEFAULT_SONG_IMAGE: Int
|
||||||
private const val DEFAULT_ALBUM_IMAGE = R.drawable.default_album_art
|
get() = R.drawable.default_audio_art
|
||||||
private const val DEFAULT_ERROR_IMAGE_BANNER = R.drawable.material_design_default
|
private val DEFAULT_ALBUM_IMAGE
|
||||||
|
get() = R.drawable.default_album_art
|
||||||
|
private val DEFAULT_ERROR_IMAGE_BANNER
|
||||||
|
get() = R.drawable.material_design_default
|
||||||
|
|
||||||
private val DEFAULT_DISK_CACHE_STRATEGY_ARTIST = DiskCacheStrategy.RESOURCE
|
private val DEFAULT_DISK_CACHE_STRATEGY_ARTIST = DiskCacheStrategy.RESOURCE
|
||||||
private val DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.NONE
|
private val DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.NONE
|
||||||
|
|
|
@ -20,7 +20,8 @@ import code.name.monkey.retromusic.R
|
||||||
|
|
||||||
object HorizontalAdapterHelper {
|
object HorizontalAdapterHelper {
|
||||||
|
|
||||||
const val LAYOUT_RES = R.layout.item_image
|
val LAYOUT_RES
|
||||||
|
get() = R.layout.item_image
|
||||||
|
|
||||||
private const val TYPE_FIRST = 1
|
private const val TYPE_FIRST = 1
|
||||||
private const val TYPE_MIDDLE = 2
|
private const val TYPE_MIDDLE = 2
|
||||||
|
|
|
@ -48,7 +48,8 @@ import org.koin.core.component.get
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
object SongMenuHelper : KoinComponent {
|
object SongMenuHelper : KoinComponent {
|
||||||
const val MENU_RES = R.menu.menu_item_song
|
val MENU_RES
|
||||||
|
get() = R.menu.menu_item_song
|
||||||
|
|
||||||
fun handleMenuClick(activity: FragmentActivity, song: Song, menuItemId: Int): Boolean {
|
fun handleMenuClick(activity: FragmentActivity, song: Song, menuItemId: Int): Boolean {
|
||||||
val libraryViewModel = activity.getViewModel() as LibraryViewModel
|
val libraryViewModel = activity.getViewModel() as LibraryViewModel
|
||||||
|
|
|
@ -9,6 +9,7 @@ import android.media.AudioManager
|
||||||
import android.media.MediaPlayer
|
import android.media.MediaPlayer
|
||||||
import android.media.PlaybackParams
|
import android.media.PlaybackParams
|
||||||
import androidx.annotation.CallSuper
|
import androidx.annotation.CallSuper
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.media.AudioAttributesCompat
|
import androidx.media.AudioAttributesCompat
|
||||||
|
@ -157,9 +158,11 @@ abstract class LocalPlayback(val context: Context) : Playback, MediaPlayer.OnErr
|
||||||
|
|
||||||
private fun registerBecomingNoisyReceiver() {
|
private fun registerBecomingNoisyReceiver() {
|
||||||
if (!becomingNoisyReceiverRegistered) {
|
if (!becomingNoisyReceiverRegistered) {
|
||||||
context.registerReceiver(
|
ContextCompat.registerReceiver(
|
||||||
|
context,
|
||||||
becomingNoisyReceiver,
|
becomingNoisyReceiver,
|
||||||
becomingNoisyReceiverIntentFilter
|
becomingNoisyReceiverIntentFilter,
|
||||||
|
ContextCompat.RECEIVER_EXPORTED
|
||||||
)
|
)
|
||||||
becomingNoisyReceiverRegistered = true
|
becomingNoisyReceiverRegistered = true
|
||||||
}
|
}
|
||||||
|
|
|
@ -633,7 +633,9 @@ class MusicService : MediaBrowserServiceCompat(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
|
override fun onSharedPreferenceChanged(
|
||||||
|
sharedPreferences: SharedPreferences, key: String?,
|
||||||
|
) {
|
||||||
when (key) {
|
when (key) {
|
||||||
PLAYBACK_SPEED, PLAYBACK_PITCH -> {
|
PLAYBACK_SPEED, PLAYBACK_PITCH -> {
|
||||||
updateMediaSessionPlaybackState()
|
updateMediaSessionPlaybackState()
|
||||||
|
@ -1276,7 +1278,7 @@ class MusicService : MediaBrowserServiceCompat(),
|
||||||
|
|
||||||
private fun registerHeadsetEvents() {
|
private fun registerHeadsetEvents() {
|
||||||
if (!headsetReceiverRegistered && isHeadsetPlugged) {
|
if (!headsetReceiverRegistered && isHeadsetPlugged) {
|
||||||
registerReceiver(headsetReceiver, headsetReceiverIntentFilter)
|
ContextCompat.registerReceiver(this, headsetReceiver, headsetReceiverIntentFilter, ContextCompat.RECEIVER_EXPORTED)
|
||||||
headsetReceiverRegistered = true
|
headsetReceiverRegistered = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
apply plugin: 'com.android.library'
|
apply plugin: 'com.android.library'
|
||||||
apply plugin: 'kotlin-android'
|
apply plugin: 'kotlin-android'
|
||||||
android {
|
android {
|
||||||
compileSdk 35
|
compileSdk 34
|
||||||
namespace "code.name.monkey.appthemehelper"
|
namespace "code.name.monkey.appthemehelper"
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdk 21
|
minSdk 21
|
||||||
targetSdk 35
|
targetSdk 34
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
|
@ -18,8 +18,11 @@ android {
|
||||||
abortOnError false
|
abortOnError false
|
||||||
}
|
}
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility JavaVersion.VERSION_17
|
sourceCompatibility JavaVersion.VERSION_21
|
||||||
targetCompatibility JavaVersion.VERSION_17
|
targetCompatibility JavaVersion.VERSION_21
|
||||||
|
}
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = "21"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ jetradarmobile_androidSnowfall_version = "1.2.1"
|
||||||
tankery_circularSeekBar_version = "1.4.2"
|
tankery_circularSeekBar_version = "1.4.2"
|
||||||
retrofit_version = "2.9.0"
|
retrofit_version = "2.9.0"
|
||||||
afollestad_dialog_version = "3.3.0"
|
afollestad_dialog_version = "3.3.0"
|
||||||
coreSplashscreen = "1.0.0"
|
coreSplashscreen = "1.0.1"
|
||||||
customactivityoncrash = "2.4.0"
|
customactivityoncrash = "2.4.0"
|
||||||
fadingedgelayout = "1.0.0"
|
fadingedgelayout = "1.0.0"
|
||||||
google_featureDelivery_version = "2.1.0"
|
google_featureDelivery_version = "2.1.0"
|
||||||
|
@ -15,30 +15,30 @@ chrisbanes_insetter_version = "0.6.1"
|
||||||
jaudiotagger = "2.3.15"
|
jaudiotagger = "2.3.15"
|
||||||
yslibrary_keyboardvisibilityevent_version = "3.0.0-RC3"
|
yslibrary_keyboardvisibilityevent_version = "3.0.0-RC3"
|
||||||
koinAndroid = "3.4.0"
|
koinAndroid = "3.4.0"
|
||||||
kotlinGradlePlugin = "1.8.10"
|
kotlinGradlePlugin = "1.9.22"
|
||||||
|
|
||||||
kotlinxCoroutinesAndroid = "1.6.4"
|
kotlinxCoroutinesAndroid = "1.7.3"
|
||||||
android_tab_library_version = "2.0.3"
|
android_tab_library_version = "2.2.0"
|
||||||
fast_scroll_libraryVersion = "1.2.0"
|
fast_scroll_libraryVersion = "1.2.0"
|
||||||
lifecycle_version = "2.6.1"
|
lifecycle_version = "2.7.0"
|
||||||
okhttp3_loggingInterceptor_version = "5.0.0-alpha.9"
|
okhttp3_loggingInterceptor_version = "5.0.0-alpha.9"
|
||||||
afollestad_materialCab_version = "2.0.1"
|
afollestad_materialCab_version = "2.0.1"
|
||||||
materialIntro = "2.0.0"
|
materialIntro = "2.0.0"
|
||||||
mediarouter = "1.3.1"
|
mediarouter = "1.6.0"
|
||||||
nanohttpd = "2.3.1"
|
nanohttpd = "2.3.1"
|
||||||
navigation_version = "2.5.3"
|
navigation_version = "2.7.6"
|
||||||
mdc_version = "1.9.0-beta01"
|
mdc_version = "1.9.0"
|
||||||
glide_version = "4.15.1"
|
glide_version = "4.15.1"
|
||||||
orgEclipseEgitGithubCore = "2.1.5"
|
orgEclipseEgitGithubCore = "2.1.5"
|
||||||
playServicesCastFramework = "21.3.0"
|
playServicesCastFramework = "21.3.0"
|
||||||
preference_version = "1.2.0"
|
preference_version = "1.2.1"
|
||||||
appcompat_version = "1.6.1"
|
appcompat_version = "1.6.1"
|
||||||
google_play_review_version = "2.0.1"
|
google_play_review_version = "2.0.1"
|
||||||
room_version = "2.5.1"
|
room_version = "2.6.1"
|
||||||
core_version = "1.10.0-rc01"
|
core_version = "1.12.0"
|
||||||
|
|
||||||
#plugins
|
#plugins
|
||||||
devTools_ksp_version = "1.8.10-1.0.9"
|
devTools_ksp_version = "1.9.22-1.0.17"
|
||||||
ben_manes_versoin = "0.46.0"
|
ben_manes_versoin = "0.46.0"
|
||||||
slidableactivity = "2.1.0"
|
slidableactivity = "2.1.0"
|
||||||
|
|
||||||
|
@ -111,9 +111,9 @@ nanohttpd = { group = "org.nanohttpd", name = "nanohttpd", version.ref = "nanoht
|
||||||
|
|
||||||
#androidx
|
#androidx
|
||||||
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat_version" }
|
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat_version" }
|
||||||
androidx-annotation = { group = "androidx.annotation", name = "annotation", version = "1.6.0" }
|
androidx-annotation = { group = "androidx.annotation", name = "annotation", version = "1.7.1" }
|
||||||
androidx-constraintLayout = { group = "androidx.constraintlayout", name = "constraintlayout", version = "2.1.4" }
|
androidx-constraintLayout = { group = "androidx.constraintlayout", name = "constraintlayout", version = "2.1.4" }
|
||||||
androidx-recyclerview = { group = "androidx.recyclerview", name = "recyclerview", version = "1.3.0" }
|
androidx-recyclerview = { group = "androidx.recyclerview", name = "recyclerview", version = "1.3.2" }
|
||||||
androidx-preference-ktx = { group = "androidx.preference", name = "preference-ktx", version.ref = "preference_version" }
|
androidx-preference-ktx = { group = "androidx.preference", name = "preference-ktx", version.ref = "preference_version" }
|
||||||
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "core_version" }
|
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "core_version" }
|
||||||
androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "coreSplashscreen" }
|
androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "coreSplashscreen" }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue