diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..411c077775 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +* text=auto eol=lf + +*.bat text eol=crlf +*.jar binary diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index ac72f0befe..e450294c1f 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -7,28 +7,28 @@ on: branches: [ dev ] jobs: - build: - + check: runs-on: ubuntu-latest - + timeout-minutes: 10 steps: - - uses: actions/checkout@v2 - - name: set up JDK 11 - uses: actions/setup-java@v2 - with: - java-version: '11' - distribution: 'temurin' - cache: gradle + - uses: actions/checkout@v3 + - uses: gradle/wrapper-validation-action@v1 + - uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 17 + - uses: gradle/gradle-build-action@v2 + - name: Lint Android + run: ./gradlew lint - - name: Generate temporary keystore - run: keytool -genkey -v -storetype pkcs12 -keystore store.p12 -storepass android -alias android -keyalg RSA -keysize 2048 -validity 10000 -dname CN=CI - - name: Write retro.properties - run: | - cat >retro.properties < | | | +| | | | |:---:|:---:|:---:| |Clearly white| Kinda dark | Just black| ### Player screen -| | | | | | +| | | | | | |:---:|:---:|:---:|:---:|:---:| | Home | Songs | Albums | Artists | Settings | @@ -36,7 +37,7 @@ Material Design music player for Android music lovers | Synced Replace Cover light | Synced Replace Cover dark | Synced Replace Cover black | ### 10+ Now playing themes -| || | | | +| || | | | |:-----: |:-----: |:-----: |:-----: |:-----: | | Normal | Fit | Flat | Color | Material | diff --git a/app/build.gradle b/app/build.gradle index 93208b0b8f..5a300a9cbe 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,23 +1,22 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-kapt' apply plugin: "androidx.navigation.safeargs.kotlin" apply plugin: 'kotlin-parcelize' +apply plugin: 'com.google.devtools.ksp' android { - compileSdk 32 - buildToolsVersion = '30.0.3' + compileSdk 33 + namespace "code.name.monkey.retromusic" defaultConfig { - namespace 'code.name.monkey.retromusic' minSdk 21 targetSdk 32 vectorDrawables.useSupportLibrary = true applicationId 'io.github.muntashirakon.Music' - versionCode 10580 - versionName '5.8.5' + versionCode 10600 + versionName '6.0.4' multiDexEnabled true } @@ -32,7 +31,7 @@ android { } } - buildFeatures{ + buildFeatures { viewBinding true } packagingOptions { @@ -41,8 +40,8 @@ android { } } lint { - abortOnError false - disable 'MissingTranslation', 'InvalidPackage' + abortOnError true + warning 'ImpliedQuantity', 'Instantiatable', 'MissingQuantity', 'MissingTranslation' } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -51,8 +50,11 @@ android { kotlinOptions { jvmTarget = "1.8" } - - configurations.all { + dependenciesInfo { + includeInApk = false + includeInBundle = false + } + configurations.configureEach { resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9' } } @@ -61,13 +63,13 @@ android { dependencies { implementation project(':appthemehelper') implementation "androidx.gridlayout:gridlayout:1.0.0" - implementation "androidx.cardview:cardview:1.0.0" + implementation "androidx.appcompat:appcompat:$appcompat_version" - implementation 'androidx.annotation:annotation:1.3.0' - implementation 'androidx.constraintlayout:constraintlayout:2.1.3' - implementation 'androidx.recyclerview:recyclerview:1.2.1' + implementation 'androidx.annotation:annotation:1.6.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'androidx.recyclerview:recyclerview:1.3.0' implementation "androidx.preference:preference-ktx:$preference_version" - implementation 'androidx.core:core-ktx:1.7.0' + implementation "androidx.core:core-ktx:$core_version" implementation 'androidx.palette:palette-ktx:1.0.0' implementation "androidx.media:media:1.6.0" @@ -76,20 +78,22 @@ dependencies { implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version" implementation "androidx.navigation:navigation-ui-ktx:$navigation_version" - def room_version = '2.4.2' + def room_version = '2.5.0' implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-ktx:$room_version" - kapt "androidx.room:room-compiler:$room_version" + ksp "androidx.room:room-compiler:$room_version" - def lifecycle_version = "2.5.0-rc01" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" - implementation "androidx.core:core-splashscreen:1.0.0-beta02" + implementation "androidx.core:core-splashscreen:1.0.0" implementation "com.google.android.material:material:$mdc_version" - implementation 'com.google.code.gson:gson:2.9.0' + + def retrofit_version = '2.9.0' + implementation "com.squareup.retrofit2:retrofit:$retrofit_version" + implementation "com.squareup.retrofit2:converter-gson:$retrofit_version" def material_dialog_version = "3.3.0" implementation "com.afollestad.material-dialogs:core:$material_dialog_version" @@ -98,19 +102,15 @@ dependencies { implementation 'com.afollestad:material-cab:2.0.1' - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - - def kotlin_coroutines_version = '1.6.1' - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4" - def koin_version = '3.2.0' + def koin_version = '3.3.3' implementation "io.insert-koin:koin-core:$koin_version" implementation "io.insert-koin:koin-android:$koin_version" - def glide_version = '4.13.2' + def glide_version = '4.15.0' implementation "com.github.bumptech.glide:glide:$glide_version" - kapt "com.github.bumptech.glide:compiler:$glide_version" + ksp "com.github.bumptech.glide:ksp:$glide_version" implementation 'com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:1.0.0' @@ -125,8 +125,7 @@ dependencies { implementation 'com.r0adkll:slidableactivity:2.1.0' implementation 'com.heinrichreimersoftware:material-intro:2.0.0' implementation 'com.github.dhaval2404:imagepicker:2.1' - implementation 'me.zhanghai.android.fastscroll:library:1.1.8' - implementation 'cat.ereza:customactivityoncrash:2.3.0' - implementation 'me.tankery.lib:circularSeekBar:1.3.2' -// debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1' + implementation 'me.zhanghai.android.fastscroll:library:1.2.0' + implementation 'cat.ereza:customactivityoncrash:2.4.0' + implementation 'me.tankery.lib:circularSeekBar:1.4.1' } \ No newline at end of file diff --git a/app/src/fdroid/java/code/name/monkey/retromusic/billing/BillingManager.kt b/app/src/fdroid/java/code/name/monkey/retromusic/billing/BillingManager.kt new file mode 100644 index 0000000000..51c350adcf --- /dev/null +++ b/app/src/fdroid/java/code/name/monkey/retromusic/billing/BillingManager.kt @@ -0,0 +1,12 @@ +package code.name.monkey.retromusic.billing + +import android.content.Context + +@Suppress("UNUSED_PARAMETER") +class BillingManager(context: Context) { + + fun release() {} + + val isProVersion: Boolean + get() = true +} \ No newline at end of file diff --git a/app/src/fdroid/java/code/name/monkey/retromusic/cast/RetroWebServer.kt b/app/src/fdroid/java/code/name/monkey/retromusic/cast/RetroWebServer.kt new file mode 100644 index 0000000000..03103dfb7c --- /dev/null +++ b/app/src/fdroid/java/code/name/monkey/retromusic/cast/RetroWebServer.kt @@ -0,0 +1,6 @@ +package code.name.monkey.retromusic.cast + +import android.content.Context + +@Suppress("UNUSED_PARAMETER") +class RetroWebServer(context: Context) \ No newline at end of file diff --git a/app/src/fdroid/java/code/name/monkey/retromusic/extensions/extensions.kt b/app/src/fdroid/java/code/name/monkey/retromusic/extensions/extensions.kt new file mode 100644 index 0000000000..1dc3ae58f7 --- /dev/null +++ b/app/src/fdroid/java/code/name/monkey/retromusic/extensions/extensions.kt @@ -0,0 +1,17 @@ +@file:Suppress("UNUSED_PARAMETER", "unused") + +package code.name.monkey.retromusic.extensions + +import android.content.Context +import android.view.Menu +import androidx.fragment.app.FragmentActivity + +fun Context.setUpMediaRouteButton(menu: Menu) {} + +fun FragmentActivity.installLanguageAndRecreate(code: String) { + recreate() +} + +fun Context.goToProVersion() {} + +fun Context.installSplitCompat() {} \ No newline at end of file diff --git a/app/src/fdroid/java/code/name/monkey/retromusic/service/CastPlayer.kt b/app/src/fdroid/java/code/name/monkey/retromusic/service/CastPlayer.kt new file mode 100644 index 0000000000..3a0eaca286 --- /dev/null +++ b/app/src/fdroid/java/code/name/monkey/retromusic/service/CastPlayer.kt @@ -0,0 +1,47 @@ +package code.name.monkey.retromusic.service + +import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.service.playback.Playback + +// Empty CastPlayer implementation +class CastPlayer : Playback { + override val isInitialized: Boolean + get() = true + override val isPlaying: Boolean + get() = true + override val audioSessionId: Int + get() = 0 + + override fun setDataSource( + song: Song, + force: Boolean, + completion: (success: Boolean) -> Unit, + ) { + } + + override fun setNextDataSource(path: String?) {} + + override var callbacks: Playback.PlaybackCallbacks? = null + + override fun start() = true + + override fun stop() {} + + override fun release() {} + + override fun pause(): Boolean = true + + override fun duration() = 0 + + override fun position() = 0 + + override fun seek(whereto: Int) = whereto + + override fun setVolume(vol: Float) = true + + override fun setAudioSessionId(sessionId: Int) = true + + override fun setCrossFadeDuration(duration: Int) {} + + override fun setPlaybackSpeedPitch(speed: Float, pitch: Float) {} +} \ No newline at end of file diff --git a/app/src/fdroid/java/code/name/monkey/retromusic/util/AppRater.kt b/app/src/fdroid/java/code/name/monkey/retromusic/util/AppRater.kt new file mode 100644 index 0000000000..2691d70b28 --- /dev/null +++ b/app/src/fdroid/java/code/name/monkey/retromusic/util/AppRater.kt @@ -0,0 +1,8 @@ +package code.name.monkey.retromusic.util + +import android.content.Context + +@Suppress("UNUSED_PARAMETER") +object AppRater { + fun appLaunched(context: Context) {} +} \ No newline at end of file diff --git a/app/src/fdroid/res/values/donottranslate.xml b/app/src/fdroid/res/values/donottranslate.xml new file mode 100644 index 0000000000..3dd38a7b55 --- /dev/null +++ b/app/src/fdroid/res/values/donottranslate.xml @@ -0,0 +1,4 @@ + + + never + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5fbb6eb9a6..3ffd1b15f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,33 +14,37 @@ + android:maxSdkVersion="29" /> - + + + tools:targetApi="m"> + android:theme="@style/Theme.RetroMusic.SplashScreen"> @@ -51,7 +55,6 @@ - @@ -111,18 +114,20 @@ - - - - - - - - - - + + + + + + + + - - - - @@ -204,7 +199,7 @@ @@ -213,7 +208,7 @@ @@ -226,7 +221,7 @@ @@ -238,7 +233,7 @@ android:resource="@xml/app_widget_classic_info" /> @@ -250,7 +245,7 @@ android:resource="@xml/app_widget_small_info" /> @@ -262,7 +257,7 @@ android:resource="@xml/app_widget_text" /> @@ -274,7 +269,7 @@ android:resource="@xml/app_widget_card_info" /> @@ -286,7 +281,7 @@ android:resource="@xml/app_widget_md3_info" /> @@ -299,7 +294,7 @@ - - - + +
+
March 13, 2023
+

v6.0.4

+

What's New

+
    +
  • Minor redesign in Playlist details screen
  • +
  • Updated translations
  • +
+

Fixed

+
    +
  • Fixed file popup menu actions in Folders tab
  • +
  • Fixed playlist image loading
  • +
  • Fixed blurry album art in Android 13
  • +
  • Minor bug fixes and improvements
  • +
+
+
+
July 10, 2022
+

v6.0.3Beta

+

Fixed

+
    +
  • Migrated icons to Material symbols
  • +
+
+
+
June 21, 2022
+

v6.0.2Beta

+

Fixed

+
    +
  • Minor bug fixes and improvements
  • +
+
+
+
June 13, 2022
+

v6.0.1Beta

+

Fixed

+
    +
  • Fixed ChromeCast crash
  • +
  • Fixed Slider crashes
  • +
  • Fixed storage related crashes on Android 10
  • +
  • Fixed CrossFade not working Fade Audio is not working
  • +
+
+
+
June 7, 2022
+

v6.0.0Beta

+

What's New

+
    +
  • Better Cast
  • +
  • Mini player in settings screen
  • +
  • Changed Seekbar with Sliders
  • +
  • Added NavigationRailView for Landscape
  • +
  • Show remaining time in Sleep timer dialog
  • +
+

Fixed

+
    +
  • Fixed Top/Recent Artists/Albums not updating (Wrong sort order)
  • +
  • Fixed all Blacklist related crashes
  • +
  • Fix restart button not working in crash activity
  • +
+
May 25, 2022

v5.8.5

diff --git a/app/src/main/java/code/name/monkey/retromusic/App.kt b/app/src/main/java/code/name/monkey/retromusic/App.kt index 598580e1ab..93dfe4d96e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/App.kt +++ b/app/src/main/java/code/name/monkey/retromusic/App.kt @@ -10,14 +10,17 @@ * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. + * */ package code.name.monkey.retromusic import android.app.Application +import androidx.preference.PreferenceManager import cat.ereza.customactivityoncrash.config.CaocConfig import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.activities.ErrorActivity +import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager import code.name.monkey.retromusic.helper.WallpaperAccentManager import org.koin.android.ext.koin.androidContext @@ -38,7 +41,7 @@ class App : Application() { // default theme if (!ThemeStore.isConfigured(this, 3)) { ThemeStore.editTheme(this) - .accentColorRes(R.color.md_deep_purple_A200) + .accentColorRes(code.name.monkey.appthemehelper.R.color.md_deep_purple_A200) .coloredNavigationBar(true) .commit() } @@ -48,7 +51,12 @@ class App : Application() { DynamicShortcutManager(this).initDynamicShortcuts() // setting Error activity - CaocConfig.Builder.create().errorActivity(ErrorActivity::class.java).apply() + CaocConfig.Builder.create().errorActivity(ErrorActivity::class.java) + .restartActivity(MainActivity::class.java).apply() + + // Set Default values for now playing preferences + // This will reduce startup time for now playing settings fragment as Preference listener of AbsSlidingMusicPanelActivity won't be called + PreferenceManager.setDefaultValues(this, R.xml.pref_now_playing_screen, false) } override fun onTerminate() { diff --git a/app/src/main/java/code/name/monkey/retromusic/Constants.kt b/app/src/main/java/code/name/monkey/retromusic/Constants.kt index 48118e1770..a954284827 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt @@ -79,12 +79,7 @@ const val CIRCULAR_ALBUM_ART = "circular_album_art" const val USER_NAME = "user_name" const val TOGGLE_FULL_SCREEN = "toggle_full_screen" const val TOGGLE_VOLUME = "toggle_volume" -const val ROUND_CORNERS = "corner_window" -const val TOGGLE_GENRE = "toggle_genre" -const val PROFILE_IMAGE_PATH = "profile_image_path" -const val BANNER_IMAGE_PATH = "banner_image_path" const val ADAPTIVE_COLOR_APP = "adaptive_color_app" -const val TOGGLE_SEPARATE_LINE = "toggle_separate_line" const val HOME_ARTIST_GRID_STYLE = "home_artist_grid_style" const val HOME_ALBUM_GRID_STYLE = "home_album_grid_style" const val TOGGLE_ADD_CONTROLS = "toggle_add_controls" @@ -99,7 +94,6 @@ const val SAF_SDCARD_URI = "saf_sdcard_uri" const val SONG_SORT_ORDER = "song_sort_order" const val SONG_GRID_SIZE = "song_grid_size" const val GENRE_SORT_ORDER = "genre_sort_order" -const val LAST_PAGE = "last_start_page" const val BLUETOOTH_PLAYBACK = "bluetooth_playback" const val INITIALIZED_BLACKLIST = "initialized_blacklist" const val ARTIST_SORT_ORDER = "artist_sort_order" @@ -132,7 +126,6 @@ const val ARTIST_DETAIL_SONG_SORT_ORDER = "artist_detail_song_sort_order" const val LYRICS_OPTIONS = "lyrics_tab_position" const val CHOOSE_EQUALIZER = "choose_equalizer" const val EQUALIZER = "equalizer" -const val TOGGLE_SHUFFLE = "toggle_shuffle" const val SONG_GRID_STYLE = "song_grid_style" const val PAUSE_ON_ZERO_VOLUME = "pause_on_zero_volume" const val FILTER_SONG = "filter_song" diff --git a/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.kt b/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.kt index a3c77161e6..d6bb6f1c42 100644 --- a/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.kt +++ b/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.kt @@ -3,7 +3,7 @@ package code.name.monkey.retromusic import android.content.Context import android.content.ContextWrapper import android.os.LocaleList -import code.name.monkey.appthemehelper.util.VersionUtils.hasNougatMR +import code.name.monkey.appthemehelper.util.VersionUtils.hasNougat import java.util.* class LanguageContextWrapper(base: Context?) : ContextWrapper(base) { @@ -11,7 +11,7 @@ class LanguageContextWrapper(base: Context?) : ContextWrapper(base) { fun wrap(context: Context?, newLocale: Locale?): LanguageContextWrapper { if (context == null) return LanguageContextWrapper(context) val configuration = context.resources.configuration - if (hasNougatMR()) { + if (hasNougat()) { configuration.setLocale(newLocale) val localeList = LocaleList(newLocale) LocaleList.setDefault(localeList) diff --git a/app/src/main/java/code/name/monkey/retromusic/MainModule.kt b/app/src/main/java/code/name/monkey/retromusic/MainModule.kt index 0a30f643d9..b76107087e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/MainModule.kt +++ b/app/src/main/java/code/name/monkey/retromusic/MainModule.kt @@ -1,11 +1,8 @@ package code.name.monkey.retromusic import androidx.room.Room -import androidx.room.RoomDatabase -import androidx.sqlite.db.SupportSQLiteDatabase import code.name.monkey.retromusic.auto.AutoMusicProvider -import code.name.monkey.retromusic.db.BlackListStoreDao -import code.name.monkey.retromusic.db.BlackListStoreEntity +import code.name.monkey.retromusic.db.MIGRATION_23_24 import code.name.monkey.retromusic.db.PlaylistWithSongs import code.name.monkey.retromusic.db.RetroDatabase import code.name.monkey.retromusic.fragments.LibraryViewModel @@ -15,10 +12,6 @@ import code.name.monkey.retromusic.fragments.genres.GenreDetailsViewModel import code.name.monkey.retromusic.fragments.playlists.PlaylistDetailsViewModel import code.name.monkey.retromusic.model.Genre import code.name.monkey.retromusic.repository.* -import code.name.monkey.retromusic.util.FilePathUtil -import kotlinx.coroutines.Dispatchers.IO -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch import org.koin.android.ext.koin.androidContext import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.dsl.bind @@ -28,32 +21,14 @@ private val roomModule = module { single { Room.databaseBuilder(androidContext(), RetroDatabase::class.java, "playlist.db") - .allowMainThreadQueries() - .addCallback(object : RoomDatabase.Callback() { - override fun onOpen(db: SupportSQLiteDatabase) { - super.onOpen(db) - GlobalScope.launch(IO) { - FilePathUtil.blacklistFilePaths().map { - get().insertBlacklistPath(BlackListStoreEntity(it)) - } - } - } - }) - .fallbackToDestructiveMigration() + .addMigrations(MIGRATION_23_24) .build() } - factory { - get().lyricsDao() - } factory { get().playlistDao() } - factory { - get().blackListStore() - } - factory { get().playCountDao() } @@ -63,7 +38,7 @@ private val roomModule = module { } single { - RealRoomRepository(get(), get(), get(), get(), get()) + RealRoomRepository(get(), get(), get()) } bind RoomRepository::class } private val autoModule = module { @@ -164,10 +139,10 @@ private val viewModules = module { ) } - viewModel { (playlist: PlaylistWithSongs) -> + viewModel { (playlistId: Long) -> PlaylistDetailsViewModel( get(), - playlist + playlistId ) } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/DriveModeActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/DriveModeActivity.kt index 81f880aceb..af3890d228 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/DriveModeActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/DriveModeActivity.kt @@ -14,13 +14,10 @@ */ package code.name.monkey.retromusic.activities -import android.animation.ObjectAnimator import android.content.Intent import android.graphics.Color import android.graphics.PorterDuff import android.os.Bundle -import android.view.animation.LinearInterpolator -import android.widget.SeekBar import androidx.lifecycle.lifecycleScope import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity @@ -28,19 +25,19 @@ import code.name.monkey.retromusic.databinding.ActivityDriveModeBinding import code.name.monkey.retromusic.db.toSongEntity import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.drawAboveSystemBars -import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.glide.BlurTransformation -import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension +import code.name.monkey.retromusic.glide.RetroGlideExtension.songCoverOptions import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler -import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.repository.RealRepository import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil +import com.bumptech.glide.Glide +import com.google.android.material.slider.Slider import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -68,7 +65,7 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { progressViewUpdateHelper = MusicProgressViewUpdateHelper(this) lastPlaybackControlsColor = accentColor() binding.close.setOnClickListener { - onBackPressed() + onBackPressedDispatcher.onBackPressed() } binding.repeatButton.drawAboveSystemBars() } @@ -113,17 +110,15 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { } private fun setUpProgressSlider() { - binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { - override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { - if (fromUser) { - MusicPlayerRemote.seekTo(progress) - onUpdateProgressViews( - MusicPlayerRemote.songProgressMillis, - MusicPlayerRemote.songDurationMillis - ) - } + binding.progressSlider.addOnChangeListener { _: Slider, progress: Float, fromUser: Boolean -> + if (fromUser) { + MusicPlayerRemote.seekTo(progress.toInt()) + onUpdateProgressViews( + MusicPlayerRemote.songProgressMillis, + MusicPlayerRemote.songDurationMillis + ) } - }) + } } override fun onPause() { @@ -191,6 +186,7 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) + else -> binding.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN @@ -207,6 +203,7 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { PorterDuff.Mode.SRC_IN ) } + MusicService.REPEAT_MODE_ALL -> { binding.repeatButton.setImageResource(R.drawable.ic_repeat) binding.repeatButton.setColorFilter( @@ -214,6 +211,7 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { PorterDuff.Mode.SRC_IN ) } + MusicService.REPEAT_MODE_THIS -> { binding.repeatButton.setImageResource(R.drawable.ic_repeat_one) binding.repeatButton.setColorFilter( @@ -241,7 +239,7 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { binding.songTitle.text = song.title binding.songText.text = song.artistName - GlideApp.with(this) + Glide.with(this) .load(RetroGlideExtension.getSongModel(song)) .songCoverOptions(song) .transform(BlurTransformation.Builder(this).build()) @@ -249,12 +247,10 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { } override fun onUpdateProgressViews(progress: Int, total: Int) { - binding.progressSlider.max = total - - val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) - animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME - animator.interpolator = LinearInterpolator() - animator.start() + binding.progressSlider.run { + valueTo = total.toFloat() + value = progress.toFloat().coerceIn(valueFrom, valueTo) + } binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/ErrorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/ErrorActivity.kt index 3b3377bb1a..6823b80f8a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/ErrorActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/ErrorActivity.kt @@ -3,32 +3,32 @@ package code.name.monkey.retromusic.activities import android.os.Bundle import android.widget.Button import android.widget.ImageView -import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import cat.ereza.customactivityoncrash.CustomActivityOnCrash import code.name.monkey.retromusic.R import code.name.monkey.retromusic.util.FileUtils.createFile import code.name.monkey.retromusic.util.Share.shareFile +import com.google.android.material.dialog.MaterialAlertDialogBuilder import java.text.DateFormat import java.text.SimpleDateFormat import java.util.* class ErrorActivity : AppCompatActivity() { private val dayFormat: DateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()) - private val ReportPrefix = "bug_report-" + private val reportPrefix = "bug_report-" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.customactivityoncrash_default_error_activity) + setContentView(cat.ereza.customactivityoncrash.R.layout.customactivityoncrash_default_error_activity) val restartButton = - findViewById