diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 93e4ca422..909d433e1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -19,7 +19,7 @@ tools:ignore="ProtectedPermissions" /> - + - diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt index 0ead00101..289fda277 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt @@ -35,7 +35,6 @@ import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.repository.PlaylistSongsLoader import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.AppRater -import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.PreferenceUtil import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.launch @@ -62,9 +61,7 @@ class MainActivity : AbsCastActivity(), OnSharedPreferenceChangeListener { if (!hasPermissions()) { findNavController(R.id.fragment_container).navigate(R.id.permissionFragment) } - if (BuildConfig.VERSION_CODE > PreferenceUtil.lastVersion && !BuildConfig.DEBUG) { - NavigationUtil.gotoWhatNews(this) - } + WhatsNewFragment.showChangeLog(this ) } private fun setupNavigationController() { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewFragment.kt similarity index 64% rename from app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt rename to app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewFragment.kt index 9ae3c043f..334e2e698 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewFragment.kt @@ -4,34 +4,46 @@ import android.content.Context import android.content.pm.PackageManager import android.graphics.Color import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.core.content.pm.PackageInfoCompat import androidx.core.widget.NestedScrollView +import androidx.fragment.app.FragmentActivity import code.name.monkey.appthemehelper.util.ATHUtil.isWindowBackgroundDark import code.name.monkey.appthemehelper.util.ColorUtil.isColorLight import code.name.monkey.appthemehelper.util.ColorUtil.lightenColor import code.name.monkey.appthemehelper.util.MaterialValueHelper.getPrimaryTextColor -import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper +import code.name.monkey.retromusic.BuildConfig import code.name.monkey.retromusic.Constants -import code.name.monkey.retromusic.activities.base.AbsThemeActivity -import code.name.monkey.retromusic.databinding.ActivityWhatsNewBinding -import code.name.monkey.retromusic.extensions.* +import code.name.monkey.retromusic.databinding.FragmentWhatsNewBinding +import code.name.monkey.retromusic.extensions.accentColor +import code.name.monkey.retromusic.extensions.openUrl +import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.util.PreferenceUtil.lastVersion -import java.io.BufferedReader -import java.io.InputStreamReader +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import java.nio.charset.StandardCharsets import java.util.* -class WhatsNewActivity : AbsThemeActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - val binding = ActivityWhatsNewBinding.inflate(layoutInflater) - setContentView(binding.root) - setTaskDescriptionColorAuto() - binding.toolbar.setNavigationOnClickListener { onBackPressed() } - ToolbarContentTintHelper.colorBackButton(binding.toolbar) +class WhatsNewFragment : BottomSheetDialogFragment() { + private var _binding: FragmentWhatsNewBinding? = null + val binding get() = _binding!! + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + _binding = FragmentWhatsNewBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) try { val buf = StringBuilder() - val json = assets.open("retro-changelog.html") - BufferedReader(InputStreamReader(json, StandardCharsets.UTF_8)).use { br -> + val stream= requireContext().assets.open("retro-changelog.html") + stream.reader(StandardCharsets.UTF_8).buffered().use { br -> var str: String? while (br.readLine().also { str = it } != null) { buf.append(str) @@ -39,7 +51,7 @@ class WhatsNewActivity : AbsThemeActivity() { } // Inject color values for WebView body background and links - val isDark = isWindowBackgroundDark(this) + val isDark = isWindowBackgroundDark(requireContext()) val accentColor = accentColor() val backgroundColor = colorToCSS( surfaceColor(Color.parseColor(if (isDark) "#424242" else "#ffffff")) @@ -51,7 +63,7 @@ class WhatsNewActivity : AbsThemeActivity() { colorToCSS(Color.parseColor(if (isDark) "#353535" else "#ffffff")) val accentTextColor = colorToCSS( getPrimaryTextColor( - this, isColorLight(accentColor) + requireContext(), isColorLight(accentColor) ) ) val changeLog = buf.toString() @@ -72,7 +84,7 @@ class WhatsNewActivity : AbsThemeActivity() { "

Unable to load

" + e.localizedMessage + "

", "text/html", "UTF-8" ) } - setChangelogRead(this) + setChangelogRead(requireContext()) binding.tgFab.setOnClickListener { openUrl(Constants.TELEGRAM_CHANGE_LOG) } @@ -86,10 +98,16 @@ class WhatsNewActivity : AbsThemeActivity() { binding.tgFab.extend() } } - binding.webView.drawAboveSystemBars() + } + + override fun onDestroy() { + super.onDestroy() + _binding = null } companion object { + + const val TAG = "WhatsNewFragment" private fun colorToCSS(color: Int): String { return String.format( Locale.getDefault(), @@ -104,11 +122,20 @@ class WhatsNewActivity : AbsThemeActivity() { private fun setChangelogRead(context: Context) { try { val pInfo = context.packageManager.getPackageInfo(context.packageName, 0) - val currentVersion = pInfo.versionCode + val currentVersion = PackageInfoCompat.getLongVersionCode(pInfo) lastVersion = currentVersion } catch (e: PackageManager.NameNotFoundException) { e.printStackTrace() } } + + fun showChangeLog(activity: FragmentActivity) { + val pInfo = activity.packageManager.getPackageInfo(activity.packageName, 0) + val currentVersion = PackageInfoCompat.getLongVersionCode(pInfo) + if (currentVersion > lastVersion && BuildConfig.DEBUG) { + val changelogBottomSheet = WhatsNewFragment() + changelogBottomSheet.show(activity.supportFragmentManager, TAG) + } + } } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/model/DeviceInfo.kt b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/model/DeviceInfo.kt index 98d0a6d55..5d1ea8977 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/model/DeviceInfo.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/model/DeviceInfo.kt @@ -2,9 +2,11 @@ package code.name.monkey.retromusic.activities.bugreport.model import android.annotation.SuppressLint import android.content.Context +import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.os.Build import androidx.annotation.IntRange +import androidx.core.content.pm.PackageInfoCompat import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil.isAdaptiveColor import code.name.monkey.retromusic.util.PreferenceUtil.languageCode @@ -35,7 +37,7 @@ class DeviceInfo(context: Context) { @IntRange(from = 0) private val sdkVersion = Build.VERSION.SDK_INT - private var versionCode = 0 + private var versionCode = 0L private var versionName: String? = null private val selectedLang: String fun toMarkdown(): String { @@ -96,7 +98,7 @@ class DeviceInfo(context: Context) { null } if (packageInfo != null) { - versionCode = packageInfo.versionCode + versionCode = PackageInfoCompat.getLongVersionCode(packageInfo) versionName = packageInfo.versionName } else { versionCode = -1 diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt index 5f62b0711..c3cd1b3db 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt @@ -239,14 +239,12 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme protected open fun toggleFavorite(song: Song) { lifecycleScope.launch(IO) { val playlist: PlaylistEntity = libraryViewModel.favoritePlaylist() - if (playlist != null) { - val songEntity = song.toSongEntity(playlist.playListId) - val isFavorite = libraryViewModel.isSongFavorite(song.id) - if (isFavorite) { - libraryViewModel.removeSongFromPlaylist(songEntity) - } else { - libraryViewModel.insertSongs(listOf(song.toSongEntity(playlist.playListId))) - } + val songEntity = song.toSongEntity(playlist.playListId) + val isFavorite = libraryViewModel.isSongFavorite(song.id) + if (isFavorite) { + libraryViewModel.removeSongFromPlaylist(songEntity) + } else { + libraryViewModel.insertSongs(listOf(song.toSongEntity(playlist.playListId))) } libraryViewModel.forceReload(ReloadType.Playlists) requireContext().sendBroadcast(Intent(MusicService.FAVORITE_STATE_CHANGED)) diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/BlurTransformation.kt b/app/src/main/java/code/name/monkey/retromusic/glide/BlurTransformation.kt index 8b2176af7..fc0434d0b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/BlurTransformation.kt +++ b/app/src/main/java/code/name/monkey/retromusic/glide/BlurTransformation.kt @@ -14,6 +14,7 @@ import com.bumptech.glide.load.resource.bitmap.BitmapTransformation import java.security.MessageDigest +@Suppress("Deprecation") class BlurTransformation : BitmapTransformation { private var context: Context? = null diff --git a/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.kt index 45d8f1e1a..2d960af00 100755 --- a/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.kt @@ -19,6 +19,7 @@ import android.content.Context import android.content.Intent import android.media.audiofx.AudioEffect import android.widget.Toast +import androidx.fragment.app.FragmentActivity import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.* import code.name.monkey.retromusic.activities.bugreport.BugReportActivity @@ -56,10 +57,9 @@ object NavigationUtil { ) } - fun gotoWhatNews(activity: Activity) { - activity.startActivity( - Intent(activity, WhatsNewActivity::class.java), null - ) + fun gotoWhatNews(activity: FragmentActivity) { + val changelogBottomSheet = WhatsNewFragment() + changelogBottomSheet.show(activity.supportFragmentManager, WhatsNewFragment.TAG) } fun openEqualizer(activity: Activity) { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt index 614a2f519..c5295ccb6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt @@ -389,9 +389,15 @@ object PreferenceUtil { val filterLength get() = sharedPreferences.getInt(FILTER_SONG, 20) var lastVersion - get() = sharedPreferences.getInt(LAST_CHANGELOG_VERSION, 0) + // This was stored as an integer before now it's a long, so avoid a ClassCastException + get() = try { + sharedPreferences.getLong(LAST_CHANGELOG_VERSION, 0) + } catch (e: ClassCastException) { + sharedPreferences.edit { remove(LAST_CHANGELOG_VERSION) } + 0 + } set(value) = sharedPreferences.edit { - putInt(LAST_CHANGELOG_VERSION, value) + putLong(LAST_CHANGELOG_VERSION, value) } var lastSleepTimerValue diff --git a/app/src/main/res/layout/activity_whats_new.xml b/app/src/main/res/layout/fragment_whats_new.xml similarity index 64% rename from app/src/main/res/layout/activity_whats_new.xml rename to app/src/main/res/layout/fragment_whats_new.xml index b7f4b8ecb..9888221b5 100644 --- a/app/src/main/res/layout/activity_whats_new.xml +++ b/app/src/main/res/layout/fragment_whats_new.xml @@ -5,24 +5,6 @@ android:layout_height="match_parent" android:fitsSystemWindows="true"> - - - - - -