diff --git a/app/build.gradle b/app/build.gradle index f598088b3..e203f7ea1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { vectorDrawables.useSupportLibrary = true applicationId "code.name.monkey.retromusic" - versionCode 10584 - versionName '5.8.4' + versionCode 10590 + versionName '6.0.0-beta' buildConfigField("String", "GOOGLE_PLAY_LICENSING_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"") } @@ -51,8 +51,7 @@ android { } } lint { - abortOnError false - disable 'MissingTranslation', 'InvalidPackage' + disable 'MissingTranslation', 'ImpliedQuantity' } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -87,13 +86,13 @@ static def getDate() { 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.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation "androidx.preference:preference-ktx:$preference_version" - implementation 'androidx.core:core-ktx:1.7.0' + implementation 'androidx.core:core-ktx:1.8.0' implementation 'androidx.palette:palette-ktx:1.0.0' //Cast Dependencies @@ -116,9 +115,11 @@ dependencies { 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-rc01" + + implementation 'com.google.android.play:feature-delivery:2.0.0' + implementation 'com.google.android.play:review:2.0.0' - implementation 'com.google.android.play:core-ktx:1.8.1' implementation "com.google.android.material:material:$mdc_version" def retrofit_version = '2.9.0' @@ -135,7 +136,7 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - def kotlin_coroutines_version = '1.6.1' + def kotlin_coroutines_version = '1.6.2' implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" @@ -164,7 +165,7 @@ dependencies { 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' + implementation 'cat.ereza:customactivityoncrash:2.4.0' + implementation 'me.tankery.lib:circularSeekBar:1.4.0' debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e5f246d68..dabe48036 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,7 +23,10 @@ tools:ignore="ProtectedPermissions" /> - + + android:theme="@style/Theme.RetroMusic.SplashScreen"> @@ -113,7 +116,6 @@ - @@ -123,7 +125,10 @@ - + - - - - - - - @@ -192,16 +183,6 @@ - - - - +
+
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 13, 2022

v5.8.4

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 4d4bf4d00..f92442df4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/App.kt +++ b/app/src/main/java/code/name/monkey/retromusic/App.kt @@ -15,11 +15,13 @@ 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.Constants.PRO_VERSION_PRODUCT_ID 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.extensions.showToast import code.name.monkey.retromusic.helper.WallpaperAccentManager @@ -69,7 +71,12 @@ class App : Application() { }) // 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 start 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 59532ab49..3818186d3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt @@ -88,12 +88,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" @@ -108,7 +103,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" 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 a14c8fdd5..d6bb6f1c4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.kt +++ b/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.kt @@ -3,17 +3,15 @@ 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 com.google.android.gms.common.annotation.KeepName +import code.name.monkey.appthemehelper.util.VersionUtils.hasNougat import java.util.* class LanguageContextWrapper(base: Context?) : ContextWrapper(base) { companion object { - @KeepName 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 c1c58f3de..dbb5bcc78 100644 --- a/app/src/main/java/code/name/monkey/retromusic/MainModule.kt +++ b/app/src/main/java/code/name/monkey/retromusic/MainModule.kt @@ -1,12 +1,9 @@ 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.cast.RetroWebServer -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 @@ -20,10 +17,6 @@ import code.name.monkey.retromusic.network.provideLastFmRest import code.name.monkey.retromusic.network.provideLastFmRetrofit import code.name.monkey.retromusic.network.provideOkHttp 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 @@ -49,32 +42,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() } @@ -84,7 +59,7 @@ private val roomModule = module { } single { - RealRoomRepository(get(), get(), get(), get(), get()) + RealRoomRepository(get(), get(), get()) } bind RoomRepository::class } private val autoModule = module { 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 81f880ace..1fb04f469 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 @@ -20,7 +20,6 @@ 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 @@ -36,11 +35,11 @@ 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.google.android.material.slider.Slider import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -113,17 +112,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() { @@ -249,9 +246,9 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { } override fun onUpdateProgressViews(progress: Int, total: Int) { - binding.progressSlider.max = total + binding.progressSlider.valueTo = total.toFloat() - val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) + val animator = ObjectAnimator.ofFloat(binding.progressSlider, "value", progress.toFloat()) animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() 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 3b3377bb1..99bff34cb 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,19 +3,19 @@ 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) @@ -39,7 +39,7 @@ class ErrorActivity : AppCompatActivity() { findViewById