From eb21c07f5ba0b97ce9fc39e5645dea2e33b6037e Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 12 Apr 2022 19:14:48 +0530 Subject: [PATCH 01/65] [Cleanup] ViewModel cleanup, fixed coroutine dispatchers for some functions --- .../retromusic/fragments/LibraryViewModel.kt | 102 +++++++----------- .../fragments/albums/AlbumDetailsViewModel.kt | 2 +- .../fragments/backup/BackupFragment.kt | 8 +- .../fragments/backup/BackupViewModel.kt | 2 +- .../fragments/genres/GenreDetailsViewModel.kt | 3 +- .../retromusic/fragments/home/HomeFragment.kt | 19 ++-- .../player/PlayerAlbumCoverFragment.kt | 4 +- .../playlists/PlaylistDetailsViewModel.kt | 4 - .../monkey/retromusic/util/PreferenceUtil.kt | 2 +- app/src/main/res/values/arrays.xml | 2 +- 10 files changed, 55 insertions(+), 93 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt index 2ca92ef72..dfcbbf4d9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt @@ -69,41 +69,23 @@ class LibraryViewModel( fun getSearchResult(): LiveData> = searchResults - fun getSongs(): LiveData> { - return songs - } + fun getSongs(): LiveData> = songs - fun getAlbums(): LiveData> { - return albums - } + fun getAlbums(): LiveData> = albums - fun getArtists(): LiveData> { - return artists - } + fun getArtists(): LiveData> = artists - fun getPlaylists(): LiveData> { - return playlists - } + fun getPlaylists(): LiveData> = playlists - fun getLegacyPlaylist(): LiveData> { - return legacyPlaylists - } + fun getLegacyPlaylist(): LiveData> = legacyPlaylists - fun getGenre(): LiveData> { - return genres - } + fun getGenre(): LiveData> = genres - fun getHome(): LiveData> { - return home - } + fun getHome(): LiveData> = home - fun getSuggestions(): LiveData> { - return suggestions - } + fun getSuggestions(): LiveData> = suggestions - fun getFabMargin(): LiveData { - return fabMargin - } + fun getFabMargin(): LiveData = fabMargin private suspend fun fetchSongs() { songs.postValue(repository.allSongs()) @@ -111,7 +93,6 @@ class LibraryViewModel( private suspend fun fetchAlbums() { albums.postValue(repository.fetchAlbums()) - } private suspend fun fetchArtists() { @@ -146,7 +127,7 @@ class LibraryViewModel( fun search(query: String?, filter: Filter) = viewModelScope.launch(IO) { - val result =repository.search(query, filter) + val result = repository.search(query, filter) searchResults.postValue(result) } @@ -273,29 +254,22 @@ class LibraryViewModel( loadLibraryContent() } - fun recentSongs(): LiveData> = liveData { + fun recentSongs(): LiveData> = liveData(IO) { emit(repository.recentSongs()) } - fun playCountSongs(): LiveData> = liveData { - val songs = repository.playCountSongs().map { - it.toSong() - } - emit(songs) - // Cleaning up deleted or moved songs - withContext(IO) { - songs.forEach { song -> - if (!File(song.data).exists() || song.id == -1L) { - repository.deleteSongInPlayCount(song.toPlayCount()) - } + fun playCountSongs(): LiveData> = liveData(IO) { + repository.playCountSongs().forEach { song -> + if (!File(song.data).exists() || song.id == -1L) { + repository.deleteSongInPlayCount(song) } - emit(repository.playCountSongs().map { - it.toSong() - }) } + emit(repository.playCountSongs().map { + it.toSong() + }) } - fun artists(type: Int): LiveData> = liveData { + fun artists(type: Int): LiveData> = liveData(IO) { when (type) { TOP_ARTISTS -> emit(repository.topArtists()) RECENT_ARTISTS -> { @@ -304,7 +278,7 @@ class LibraryViewModel( } } - fun albums(type: Int): LiveData> = liveData { + fun albums(type: Int): LiveData> = liveData(IO) { when (type) { TOP_ALBUMS -> emit(repository.topAlbums()) RECENT_ALBUMS -> { @@ -313,29 +287,25 @@ class LibraryViewModel( } } - fun artist(artistId: Long): LiveData = liveData { + fun artist(artistId: Long): LiveData = liveData(IO) { emit(repository.artistById(artistId)) } - fun fetchContributors(): LiveData> = liveData { + fun fetchContributors(): LiveData> = liveData(IO) { emit(repository.contributor()) } fun observableHistorySongs(): LiveData> { - val songs = repository.historySong().map { - it.toSong() - } - songHistory.value = songs - // Cleaning up deleted or moved songs - viewModelScope.launch { - songs.forEach { song -> + viewModelScope.launch(IO) { + repository.historySong().forEach { song -> if (!File(song.data).exists() || song.id == -1L) { repository.deleteSongInHistory(song.id) } } - } - songHistory.value = repository.historySong().map { - it.toSong() + + songHistory.postValue(repository.historySong().map { + it.toSong() + }) } return songHistory } @@ -366,9 +336,7 @@ class LibraryViewModel( fun favorites() = repository.favorites() fun clearSearchResult() { - viewModelScope.launch { - searchResults.postValue(emptyList()) - } + searchResults.value = emptyList() } fun addToPlaylist(playlistName: String, songs: List) { @@ -396,11 +364,13 @@ class LibraryViewModel( } forceReload(Playlists) withContext(Main) { - Toast.makeText(App.getContext(), App.getContext().getString( - R.string.added_song_count_to_playlist, - songs.size, - playlistName - ), Toast.LENGTH_SHORT).show() + Toast.makeText( + App.getContext(), App.getContext().getString( + R.string.added_song_count_to_playlist, + songs.size, + playlistName + ), Toast.LENGTH_SHORT + ).show() } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsViewModel.kt index 4ac3fb663..22d084c4a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsViewModel.kt @@ -52,7 +52,7 @@ class AlbumDetailsViewModel( emit(artist) } - fun getAlbumInfo(album: Album): LiveData> = liveData { + fun getAlbumInfo(album: Album): LiveData> = liveData(IO) { emit(Result.Loading) emit(repository.albumInfo(album.artistName, album.title)) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt index 6f137bcfb..d4b5d2c54 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt @@ -47,7 +47,7 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC else backupAdapter?.swapDataset(listOf()) } - backupViewModel.loadBackups(requireContext()) + backupViewModel.loadBackups() val openFilePicker = registerForActivityResult(ActivityResultContracts.OpenDocument()) { lifecycleScope.launch(Dispatchers.IO) { it?.let { @@ -98,7 +98,7 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC // Text submitted with the action button lifecycleScope.launch { BackupHelper.createBackup(requireContext(), text.sanitize()) - backupViewModel.loadBackups(requireContext()) + backupViewModel.loadBackups() } } positiveButton(android.R.string.ok) @@ -128,7 +128,7 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC Toast.LENGTH_SHORT ).show() } - backupViewModel.loadBackups(requireContext()) + backupViewModel.loadBackups() return true } R.id.action_share -> { @@ -149,7 +149,7 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC File(file.parent, "$text${BackupHelper.APPEND_EXTENSION}") if (!renamedFile.exists()) { file.renameTo(renamedFile) - backupViewModel.loadBackups(requireContext()) + backupViewModel.loadBackups() } else { Toast.makeText( requireContext(), diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt index e506a3b4d..fa6b299a9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt @@ -20,7 +20,7 @@ class BackupViewModel : ViewModel() { private val backupsMutableLiveData = MutableLiveData>() val backupsLiveData: LiveData> = backupsMutableLiveData - fun loadBackups(context: Context) { + fun loadBackups() { BackupHelper.getBackupRoot().listFiles { _, name -> return@listFiles name.endsWith(BackupHelper.BACKUP_EXTENSION) }?.toList()?.let { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsViewModel.kt index 113ec34cf..cc6918b2c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsViewModel.kt @@ -22,6 +22,7 @@ import code.name.monkey.retromusic.interfaces.IMusicServiceEventListener import code.name.monkey.retromusic.model.Genre import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.repository.RealRepository +import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -44,7 +45,7 @@ class GenreDetailsViewModel( loadGenreSongs(genre) } - private fun loadGenreSongs(genre: Genre) = viewModelScope.launch { + private fun loadGenreSongs(genre: Genre) = viewModelScope.launch(IO) { val songs = realRepository.getGenre(genre.id) withContext(Main) { _playListSongs.postValue(songs) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt index 292784dff..c8794f149 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt @@ -21,6 +21,7 @@ import android.view.MenuItem import android.view.MenuItem.SHOW_AS_ACTION_IF_ROOM import android.view.View import androidx.activity.addCallback +import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.os.bundleOf import androidx.core.text.parseAsHtml import androidx.core.view.doOnLayout @@ -29,7 +30,6 @@ import androidx.core.view.isVisible import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager -import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.common.ATHToolbarActivity import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper @@ -77,12 +77,12 @@ class HomeFragment : layoutManager = LinearLayoutManager(mainActivity) adapter = homeAdapter } - libraryViewModel.getHome().observe(viewLifecycleOwner) { - homeAdapter.swapData(it) - } libraryViewModel.getSuggestions().observe(viewLifecycleOwner) { loadSuggestions(it) } + libraryViewModel.getHome().observe(viewLifecycleOwner) { + homeAdapter.swapData(it) + } loadProfile() setupTitle() @@ -110,7 +110,6 @@ class HomeFragment : button.setLines(maxLineCount) } } - } private fun setupListeners() { @@ -218,16 +217,12 @@ class HomeFragment : } fun setSharedAxisXTransitions() { - exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, true).apply { - addTarget(binding.root) - } + exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, true).addTarget(CoordinatorLayout::class.java) reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) } private fun setSharedAxisYTransitions() { - exitTransition = MaterialSharedAxis(MaterialSharedAxis.Y, true).apply { - addTarget(binding.root) - } + exitTransition = MaterialSharedAxis(MaterialSharedAxis.Y, true).addTarget(CoordinatorLayout::class.java) reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Y, false) } @@ -246,7 +241,7 @@ class HomeFragment : binding.suggestions.image7, binding.suggestions.image8 ) - val color = ThemeStore.accentColor(requireContext()) + val color = accentColor() binding.suggestions.message.apply { setTextColor(color) setOnClickListener { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt index d14b0cc03..0eb420560 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt @@ -80,7 +80,7 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe lifecycleScope.launchWhenStarted { viewPager.setPageTransformer(false, transformer) } -} + } private fun updateLyrics() { binding.lyricsView.setLabel(context?.getString(R.string.no_lyrics_found)) @@ -286,7 +286,7 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe } else { surfaceColor() } - Color ,Classic -> color.backgroundColor + Color, Classic -> color.backgroundColor Blur -> Color.BLACK else -> surfaceColor() } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsViewModel.kt index fad139742..0d15a279d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsViewModel.kt @@ -15,14 +15,10 @@ package code.name.monkey.retromusic.fragments.playlists import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import code.name.monkey.retromusic.db.PlaylistWithSongs import code.name.monkey.retromusic.db.SongEntity -import code.name.monkey.retromusic.interfaces.IMusicServiceEventListener -import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.repository.RealRepository -import code.name.monkey.retromusic.repository.RealRoomRepository class PlaylistDetailsViewModel( private val realRepository: RealRepository, 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 cb46ec2da..e71d3f683 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 @@ -585,7 +585,7 @@ object PreferenceUtil { 4 -> VerticalFlipTransformation() 5 -> HingeTransformation() 6 -> VerticalStackTransformer() - else -> NormalPageTransformer() + else -> ViewPager.PageTransformer { _, _ -> } } } diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index a1122eb94..3ce1437ca 100755 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -8,7 +8,7 @@ @string/horizontal_flip @string/hinge @string/stack - @string/classic + @string/simple From 818703c5738a6ce221ce9388f3cac89060ac2733 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 12 Apr 2022 23:41:59 +0530 Subject: [PATCH 02/65] Updated dependencies --- app/build.gradle | 2 +- build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d5bca44df..adafb2d9e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -138,7 +138,7 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - def kotlin_coroutines_version = '1.6.0' + 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" diff --git a/build.gradle b/build.gradle index 5b1dfca69..e5e913cb2 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.1.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version" } From ad906948798baf3e9911cc7586b8bf28f5f82dfe Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 13 Apr 2022 00:03:27 +0530 Subject: [PATCH 03/65] Code Cleanup --- .../activities/DriveModeActivity.kt | 22 ++--- .../retromusic/activities/LicenseActivity.kt | 6 +- .../activities/PermissionActivity.kt | 18 ++-- .../retromusic/activities/PurchaseActivity.kt | 3 +- .../activities/ShareInstagramStory.kt | 5 +- .../activities/SupportDevelopmentActivity.kt | 4 +- .../retromusic/activities/WhatsNewActivity.kt | 20 ++-- .../activities/base/AbsBaseActivity.kt | 33 ++++--- .../activities/base/AbsCastActivity.kt | 18 ++-- .../activities/bugreport/BugReportActivity.kt | 7 +- .../tageditor/AbsTagEditorActivity.kt | 3 +- .../retromusic/adapter/ContributorAdapter.kt | 5 +- .../retromusic/adapter/album/AlbumAdapter.kt | 4 +- .../adapter/album/AlbumCoverPagerAdapter.kt | 7 +- .../adapter/artist/ArtistAdapter.kt | 4 +- .../adapter/playlist/PlaylistAdapter.kt | 2 +- .../retromusic/cast/CastOptionsProvider.kt | 2 + ...ager.kt => RetroSessionManagerListener.kt} | 2 +- .../monkey/retromusic/cast/RetroWebServer.kt | 18 ++-- .../dialogs/RenamePlaylistDialog.kt | 3 +- .../retromusic/dialogs/SongDetailDialog.kt | 94 ++++++------------- .../extensions/ActivityThemeExtensions.kt | 11 +++ .../retromusic/extensions/ColorExtensions.kt | 4 +- .../retromusic/extensions/IntentExtensions.kt | 14 +++ .../fragments/about/AboutFragment.kt | 10 +- .../fragments/albums/AlbumDetailsFragment.kt | 10 +- .../artists/AbsArtistDetailsFragment.kt | 4 +- .../fragments/backup/BackupViewModel.kt | 1 - .../base/AbsPlayerControlsFragment.kt | 4 +- .../fragments/base/AbsPlayerFragment.kt | 9 -- .../fragments/genres/GenreDetailsFragment.kt | 2 +- .../fragments/other/LyricsFragment.kt | 11 +-- .../player/adaptive/AdaptiveFragment.kt | 4 +- .../player/blur/BlurPlayerFragment.kt | 8 +- .../fragments/player/card/CardFragment.kt | 18 +--- .../player/cardblur/CardBlurFragment.kt | 5 +- .../player/classic/ClassicPlayerFragment.kt | 14 +-- .../fragments/player/color/ColorFragment.kt | 8 +- .../fragments/player/fit/FitFragment.kt | 8 +- .../player/flat/FlatPlayerFragment.kt | 8 +- .../player/gradient/GradientPlayerFragment.kt | 4 +- .../player/material/MaterialFragment.kt | 8 +- .../fragments/player/normal/PlayerFragment.kt | 12 +-- .../player/peek/PeekPlayerFragment.kt | 4 +- .../player/plain/PlainPlayerFragment.kt | 8 +- .../player/simple/SimplePlayerFragment.kt | 8 +- .../player/tiny/TinyPlayerFragment.kt | 12 +-- .../playlists/PlaylistDetailsFragment.kt | 2 +- .../glide/artistimage/ArtistImageFetcher.kt | 2 +- .../retromusic/helper/SearchQueryHelper.kt | 4 +- .../monkey/retromusic/lyrics/LrcView.java | 2 + .../monkey/retromusic/misc/LagTracker.java | 86 ----------------- .../conversion/LyricsConverterFactory.kt | 14 +-- .../monkey/retromusic/service/MusicService.kt | 2 +- .../monkey/retromusic/util/ColorAnimUtil.kt | 19 ---- .../monkey/retromusic/util/Compressor.java | 80 ---------------- .../monkey/retromusic/util/ImageUtil.java | 2 +- .../name/monkey/retromusic/util/MusicUtil.kt | 9 +- .../retromusic/util/PackageValidator.kt | 2 +- .../monkey/retromusic/util/PreferenceUtil.kt | 11 +-- .../monkey/retromusic/util/RetroUtil.java | 7 -- 61 files changed, 236 insertions(+), 495 deletions(-) rename app/src/main/java/code/name/monkey/retromusic/cast/{RetroSessionManager.kt => RetroSessionManagerListener.kt} (85%) delete mode 100755 app/src/main/java/code/name/monkey/retromusic/misc/LagTracker.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/util/ColorAnimUtil.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/util/Compressor.java 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 39c46e712..81f880ace 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 @@ -22,11 +22,11 @@ import android.os.Bundle import android.view.animation.LinearInterpolator import android.widget.SeekBar import androidx.lifecycle.lifecycleScope -import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity 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 @@ -66,7 +66,7 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { setUpMusicControllers() progressViewUpdateHelper = MusicProgressViewUpdateHelper(this) - lastPlaybackControlsColor = ThemeStore.accentColor(this) + lastPlaybackControlsColor = accentColor() binding.close.setOnClickListener { onBackPressed() } @@ -91,14 +91,12 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { private fun toggleFavorite(song: Song) { lifecycleScope.launch(Dispatchers.IO) { val playlist = repository.favoritePlaylist() - if (playlist != null) { - val songEntity = song.toSongEntity(playlist.playListId) - val isFavorite = repository.isSongFavorite(song.id) - if (isFavorite) { - repository.removeSongFromPlaylist(songEntity) - } else { - repository.insertSongs(listOf(song.toSongEntity(playlist.playListId))) - } + val songEntity = song.toSongEntity(playlist.playListId) + val isFavorite = repository.isSongFavorite(song.id) + if (isFavorite) { + repository.removeSongFromPlaylist(songEntity) + } else { + repository.insertSongs(listOf(song.toSongEntity(playlist.playListId))) } sendBroadcast(Intent(MusicService.FAVORITE_STATE_CHANGED)) } @@ -139,7 +137,6 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { } private fun setUpPrevNext() { - binding.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } binding.previousButton.setOnClickListener { MusicPlayerRemote.back() } } @@ -246,7 +243,8 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { GlideApp.with(this) .load(RetroGlideExtension.getSongModel(song)) - .songCoverOptions(song).transform(BlurTransformation.Builder(this).build()) + .songCoverOptions(song) + .transform(BlurTransformation.Builder(this).build()) .into(binding.image) } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.kt index e4d6a8f40..755793938 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.kt @@ -16,12 +16,12 @@ package code.name.monkey.retromusic.activities import android.graphics.Color import android.os.Bundle import android.view.MenuItem -import code.name.monkey.appthemehelper.ThemeStore.Companion.accentColor import code.name.monkey.appthemehelper.util.ATHUtil.isWindowBackgroundDark import code.name.monkey.appthemehelper.util.ColorUtil.lightenColor import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.activities.base.AbsThemeActivity import code.name.monkey.retromusic.databinding.ActivityLicenseBinding +import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.drawAboveSystemBars import code.name.monkey.retromusic.extensions.surfaceColor import java.io.BufferedReader @@ -59,11 +59,11 @@ class LicenseActivity : AbsThemeActivity() { "body { background-color: %s; color: %s; }", backgroundColor, contentColor ) ) - .replace("{link-color}", colorToCSS(accentColor(this))) + .replace("{link-color}", colorToCSS(accentColor())) .replace( "{link-color-active}", colorToCSS( - lightenColor(accentColor(this)) + lightenColor(accentColor()) ) ) binding.license.loadData(changeLog, "text/html", "UTF-8") diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/PermissionActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PermissionActivity.kt index 57a0d2657..248dd567b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PermissionActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/PermissionActivity.kt @@ -25,14 +25,10 @@ import androidx.annotation.RequiresApi import androidx.core.net.toUri import androidx.core.text.parseAsHtml import androidx.core.view.isVisible -import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity import code.name.monkey.retromusic.databinding.ActivityPermissionBinding -import code.name.monkey.retromusic.extensions.accentBackgroundColor -import code.name.monkey.retromusic.extensions.setStatusBarColorAuto -import code.name.monkey.retromusic.extensions.setTaskDescriptionColorAuto -import code.name.monkey.retromusic.extensions.show +import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.util.RingtoneManager class PermissionActivity : AbsMusicServiceActivity() { @@ -75,10 +71,11 @@ class PermissionActivity : AbsMusicServiceActivity() { } private fun setupTitle() { - val color = ThemeStore.accentColor(this) + val color = accentColor() val hexColor = String.format("#%06X", 0xFFFFFF and color) - val appName = "Hello there!
Welcome to Retro Music" - .parseAsHtml() + val appName = + "Hello there!
Welcome to Retro Music" + .parseAsHtml() binding.appNameText.text = appName } @@ -87,14 +84,13 @@ class PermissionActivity : AbsMusicServiceActivity() { if (hasStoragePermission()) { binding.storagePermission.checkImage.isVisible = true binding.storagePermission.checkImage.imageTintList = - ColorStateList.valueOf(ThemeStore.accentColor(this)) + ColorStateList.valueOf(accentColor()) } if (hasAudioPermission()) { binding.audioPermission.checkImage.isVisible = true binding.audioPermission.checkImage.imageTintList = - ColorStateList.valueOf(ThemeStore.accentColor(this)) + ColorStateList.valueOf(accentColor()) } - super.onResume() } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt index 656423df5..e4da0f4fb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt @@ -28,6 +28,7 @@ import code.name.monkey.retromusic.Constants.PRO_VERSION_PRODUCT_ID import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsBaseActivity import code.name.monkey.retromusic.databinding.ActivityProVersionBinding +import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.setLightStatusBar import code.name.monkey.retromusic.extensions.setStatusBarColor import com.anjlab.android.iab.v3.BillingProcessor @@ -61,7 +62,7 @@ class PurchaseActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler { billingProcessor.purchase(this@PurchaseActivity, PRO_VERSION_PRODUCT_ID) } binding.bannerContainer.backgroundTintList = - ColorStateList.valueOf(ThemeStore.accentColor(this)) + ColorStateList.valueOf(accentColor()) } private fun restorePurchase() { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/ShareInstagramStory.kt b/app/src/main/java/code/name/monkey/retromusic/activities/ShareInstagramStory.kt index 23b9bfb77..03d0ec405 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/ShareInstagramStory.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/ShareInstagramStory.kt @@ -28,6 +28,7 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.activities.base.AbsBaseActivity import code.name.monkey.retromusic.databinding.ActivityShareInstagramBinding +import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.setLightStatusBar import code.name.monkey.retromusic.extensions.setStatusBarColor import code.name.monkey.retromusic.glide.GlideApp @@ -96,11 +97,11 @@ class ShareInstagramStory : AbsBaseActivity() { binding.shareButton.setTextColor( MaterialValueHelper.getPrimaryTextColor( this, - ColorUtil.isColorLight(ThemeStore.accentColor(this)) + ColorUtil.isColorLight(accentColor()) ) ) binding.shareButton.backgroundTintList = - ColorStateList.valueOf(ThemeStore.accentColor(this)) + ColorStateList.valueOf(accentColor()) } private fun setColors(colorLight: Boolean, color: Int) { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt index fda12d6bf..c014c1381 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt @@ -75,8 +75,8 @@ class SupportDevelopmentActivity : AbsBaseActivity(), BillingProcessor.IBillingH setupToolbar() billingProcessor = BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSING_KEY, this) - TintHelper.setTint(binding.progress, ThemeStore.accentColor(this)) - binding.donation.setTextColor(ThemeStore.accentColor(this)) + TintHelper.setTint(binding.progress, accentColor()) + binding.donation.setTextColor(accentColor()) } private fun setupToolbar() { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt index e3d6644f1..9ae3c043f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt @@ -5,7 +5,6 @@ import android.content.pm.PackageManager import android.graphics.Color import android.os.Bundle import androidx.core.widget.NestedScrollView -import code.name.monkey.appthemehelper.ThemeStore.Companion.accentColor import code.name.monkey.appthemehelper.util.ATHUtil.isWindowBackgroundDark import code.name.monkey.appthemehelper.util.ColorUtil.isColorLight import code.name.monkey.appthemehelper.util.ColorUtil.lightenColor @@ -14,12 +13,8 @@ import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper 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.accentColor -import code.name.monkey.retromusic.extensions.drawAboveSystemBars -import code.name.monkey.retromusic.extensions.setTaskDescriptionColorAuto -import code.name.monkey.retromusic.extensions.surfaceColor +import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.util.PreferenceUtil.lastVersion -import code.name.monkey.retromusic.util.RetroUtil import java.io.BufferedReader import java.io.InputStreamReader import java.nio.charset.StandardCharsets @@ -45,13 +40,13 @@ class WhatsNewActivity : AbsThemeActivity() { // Inject color values for WebView body background and links val isDark = isWindowBackgroundDark(this) - val accentColor = accentColor(this) + val accentColor = accentColor() val backgroundColor = colorToCSS( surfaceColor(Color.parseColor(if (isDark) "#424242" else "#ffffff")) ) val contentColor = colorToCSS(Color.parseColor(if (isDark) "#ffffff" else "#000000")) val textColor = colorToCSS(Color.parseColor(if (isDark) "#60FFFFFF" else "#80000000")) - val accentColorString = colorToCSS(accentColor(this)) + val accentColorString = colorToCSS(accentColor()) val cardBackgroundColor = colorToCSS(Color.parseColor(if (isDark) "#353535" else "#ffffff")) val accentTextColor = colorToCSS( @@ -64,11 +59,11 @@ class WhatsNewActivity : AbsThemeActivity() { "{style-placeholder}", "body { background-color: $backgroundColor; color: $contentColor; } li {color: $textColor;} h3 {color: $accentColorString;} .tag {background-color: $accentColorString; color: $accentTextColor; } div{background-color: $cardBackgroundColor;}" ) - .replace("{link-color}", colorToCSS(accentColor(this))) + .replace("{link-color}", colorToCSS(accentColor())) .replace( "{link-color-active}", colorToCSS( - lightenColor(accentColor(this)) + lightenColor(accentColor()) ) ) binding.webView.loadData(changeLog, "text/html", "UTF-8") @@ -79,10 +74,7 @@ class WhatsNewActivity : AbsThemeActivity() { } setChangelogRead(this) binding.tgFab.setOnClickListener { - RetroUtil.openUrl( - this, - Constants.TELEGRAM_CHANGE_LOG - ) + openUrl(Constants.TELEGRAM_CHANGE_LOG) } binding.tgFab.accentColor() binding.tgFab.shrink() diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsBaseActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsBaseActivity.kt index fa29c98fb..30f8cb241 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsBaseActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsBaseActivity.kt @@ -29,9 +29,9 @@ import android.view.inputmethod.InputMethodManager import android.widget.EditText import androidx.core.app.ActivityCompat import androidx.core.content.getSystemService -import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.extensions.accentColor import com.google.android.material.snackbar.Snackbar abstract class AbsBaseActivity : AbsThemeActivity() { @@ -126,24 +126,25 @@ abstract class AbsBaseActivity : AbsThemeActivity() { Snackbar.LENGTH_INDEFINITE ) .setAction(R.string.action_grant) { requestPermissions() } - .setActionTextColor(ThemeStore.accentColor(this)).show() + .setActionTextColor(accentColor()).show() } else { // User has deny permission and checked never show permission dialog so you can redirect to Application settings page Snackbar.make( snackBarContainer, permissionDeniedMessage!!, Snackbar.LENGTH_INDEFINITE - ).setAction(R.string.action_settings) { - val intent = Intent() - intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS - val uri = Uri.fromParts( - "package", - this@AbsBaseActivity.packageName, - null - ) - intent.data = uri - startActivity(intent) - }.setActionTextColor(ThemeStore.accentColor(this)).show() + ) + .setAction(R.string.action_settings) { + val intent = Intent() + intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS + val uri = Uri.fromParts( + "package", + this@AbsBaseActivity.packageName, + null + ) + intent.data = uri + startActivity(intent) + }.setActionTextColor(accentColor()).show() } return } @@ -156,6 +157,7 @@ abstract class AbsBaseActivity : AbsThemeActivity() { companion object { const val PERMISSION_REQUEST = 100 } + // this lets keyboard close when clicked in backgroud override fun dispatchTouchEvent(event: MotionEvent): Boolean { if (event.action == MotionEvent.ACTION_DOWN) { @@ -165,7 +167,10 @@ abstract class AbsBaseActivity : AbsThemeActivity() { v.getGlobalVisibleRect(outRect) if (!outRect.contains(event.rawX.toInt(), event.rawY.toInt())) { v.clearFocus() - getSystemService()?.hideSoftInputFromWindow(v.windowToken, 0) + getSystemService()?.hideSoftInputFromWindow( + v.windowToken, + 0 + ) } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsCastActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsCastActivity.kt index d5157bc2b..360bb3853 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsCastActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsCastActivity.kt @@ -4,7 +4,7 @@ import android.os.Bundle import android.view.ViewStub import code.name.monkey.retromusic.R import code.name.monkey.retromusic.cast.CastHelper -import code.name.monkey.retromusic.cast.RetroSessionManager +import code.name.monkey.retromusic.cast.RetroSessionManagerListener import code.name.monkey.retromusic.cast.RetroWebServer import code.name.monkey.retromusic.helper.MusicPlayerRemote import com.google.android.gms.cast.framework.CastContext @@ -22,7 +22,7 @@ abstract class AbsCastActivity : AbsSlidingMusicPanelActivity() { private var playServicesAvailable: Boolean = false private val sessionManagerListener by lazy { - object : RetroSessionManager { + object : RetroSessionManagerListener { override fun onSessionStarting(castSession: CastSession) { invalidateOptionsMenu() webServer = RetroWebServer.getInstance(this@AbsCastActivity) @@ -88,7 +88,7 @@ abstract class AbsCastActivity : AbsSlidingMusicPanelActivity() { } private fun setupCast() { - sessionManager = CastContext.getSharedInstance(applicationContext).sessionManager + sessionManager = CastContext.getSharedInstance(this).sessionManager } override fun onResume() { @@ -104,9 +104,15 @@ abstract class AbsCastActivity : AbsSlidingMusicPanelActivity() { super.onResume() } - override fun onStop() { - super.onStop() - mCastSession = null + override fun onPause() { + super.onPause() + if (playServicesAvailable) { + sessionManager.removeSessionManagerListener( + sessionManagerListener, + CastSession::class.java + ) + mCastSession = null + } } private fun songChanged(position: Int) { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt index 4bf23f402..98ccc4356 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt @@ -26,7 +26,6 @@ import androidx.annotation.StringRes import androidx.core.content.getSystemService import androidx.core.net.toUri import androidx.lifecycle.lifecycleScope -import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.MaterialUtil import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper @@ -38,6 +37,7 @@ import code.name.monkey.retromusic.activities.bugreport.model.github.ExtraInfo import code.name.monkey.retromusic.activities.bugreport.model.github.GithubLogin import code.name.monkey.retromusic.activities.bugreport.model.github.GithubTarget import code.name.monkey.retromusic.databinding.ActivityBugReportBinding +import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.setTaskDescriptionColorAuto import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.floatingactionbutton.FloatingActionButton @@ -87,7 +87,7 @@ open class BugReportActivity : AbsThemeActivity() { } private fun initViews() { - val accentColor = ThemeStore.accentColor(this) + val accentColor = accentColor() setSupportActionBar(binding.toolbar) ToolbarContentTintHelper.colorBackButton(binding.toolbar) supportActionBar?.setDisplayHomeAsUpEnabled(true) @@ -314,6 +314,7 @@ open class BugReportActivity : AbsThemeActivity() { private const val STATUS_BAD_CREDENTIALS = 401 private const val STATUS_ISSUES_NOT_ENABLED = 410 - private const val ISSUE_TRACKER_LINK = "https://github.com/RetroMusicPlayer/RetroMusicPlayer" + private const val ISSUE_TRACKER_LINK = + "https://github.com/RetroMusicPlayer/RetroMusicPlayer" } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt index 8cf8cbd40..6588e80bc 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt @@ -41,6 +41,7 @@ import code.name.monkey.retromusic.R.drawable import code.name.monkey.retromusic.activities.base.AbsBaseActivity import code.name.monkey.retromusic.activities.saf.SAFGuideActivity import code.name.monkey.retromusic.extensions.accentColor +import code.name.monkey.retromusic.extensions.hideSoftKeyboard import code.name.monkey.retromusic.extensions.setTaskDescriptionColorAuto import code.name.monkey.retromusic.model.ArtworkInfo import code.name.monkey.retromusic.model.AudioTagInfo @@ -346,7 +347,7 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { fieldKeyValueMap: Map, artworkInfo: ArtworkInfo? ) { - RetroUtil.hideSoftKeyboard(this) + hideSoftKeyboard() hideFab() println(fieldKeyValueMap) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/ContributorAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/ContributorAdapter.kt index 28719c962..de7226b5c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/ContributorAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/ContributorAdapter.kt @@ -14,15 +14,14 @@ */ package code.name.monkey.retromusic.adapter -import android.app.Activity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.extensions.openUrl import code.name.monkey.retromusic.model.Contributor -import code.name.monkey.retromusic.util.RetroUtil.openUrl import code.name.monkey.retromusic.views.RetroShapeableImageView import com.bumptech.glide.Glide @@ -65,7 +64,7 @@ class ContributorAdapter( val contributor = contributors[position] holder.bindData(contributor) holder.itemView.setOnClickListener { - openUrl(it?.context as Activity, contributors[position].link) + it?.context?.openUrl(contributors[position].link) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt index ade999edc..edba4cb32 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt @@ -91,9 +91,9 @@ open class AlbumAdapter( // Check if imageContainer exists so we can have a smooth transition without // CardView clipping, if it doesn't exist in current layout set transition name to image instead. if (holder.imageContainer != null) { - holder.imageContainer!!.setTransitionName(album.id.toString()) + holder.imageContainer?.transitionName = album.id.toString() } else { - holder.image!!.setTransitionName(album.id.toString()) + holder.image?.transitionName = album.id.toString() } loadAlbumCover(album, holder) } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumCoverPagerAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumCoverPagerAdapter.kt index a568ad12d..7d0f1bd4d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumCoverPagerAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumCoverPagerAdapter.kt @@ -85,7 +85,6 @@ class AlbumCoverPagerAdapter( class AlbumCoverFragment : Fragment() { - private lateinit var albumCover: ImageView private var isColorReady: Boolean = false private lateinit var color: MediaNotificationProcessor private lateinit var song: Song @@ -106,8 +105,6 @@ class AlbumCoverPagerAdapter( savedInstanceState: Bundle? ): View? { val view = inflater.inflate(getLayoutWithPlayerTheme(), container, false) - view.setTransitionName("lyrics") - albumCover = view.findViewById(R.id.player_image) view.setOnClickListener { if (mainActivity.getBottomSheetBehavior().state == STATE_EXPANDED) { showLyricsDialog() @@ -158,7 +155,7 @@ class AlbumCoverPagerAdapter( override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - loadAlbumCover() + loadAlbumCover(albumCover = view.findViewById(R.id.player_image)) } override fun onDestroyView() { @@ -166,7 +163,7 @@ class AlbumCoverPagerAdapter( colorReceiver = null } - private fun loadAlbumCover() { + private fun loadAlbumCover(albumCover: ImageView) { GlideApp.with(this).asBitmapPalette().songCoverOptions(song) //.checkIgnoreMediaStore() .load(RetroGlideExtension.getSongModel(song)) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt index d896b1c73..6cb68af92 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt @@ -92,9 +92,9 @@ class ArtistAdapter( val transitionName = if (albumArtistsOnly) artist.name else artist.id.toString() if (holder.imageContainer != null) { - holder.imageContainer!!.setTransitionName(transitionName) + holder.imageContainer?.transitionName = transitionName } else { - holder.image!!.setTransitionName(transitionName) + holder.image?.transitionName = transitionName } loadArtistImage(artist, holder) } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt index d039691ee..89122d125 100755 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt @@ -163,7 +163,7 @@ class PlaylistAdapter( if (isInQuickSelectMode) { toggleChecked(layoutPosition) } else { - itemView.setTransitionName("playlist") + itemView.transitionName = "playlist" listener.onPlaylistClick(dataSet[layoutPosition], itemView) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/CastOptionsProvider.kt b/app/src/main/java/code/name/monkey/retromusic/cast/CastOptionsProvider.kt index cf365c84a..7bbc955be 100644 --- a/app/src/main/java/code/name/monkey/retromusic/cast/CastOptionsProvider.kt +++ b/app/src/main/java/code/name/monkey/retromusic/cast/CastOptionsProvider.kt @@ -1,3 +1,5 @@ +@file:Suppress("unused") + package code.name.monkey.retromusic.cast import android.content.Context diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/RetroSessionManager.kt b/app/src/main/java/code/name/monkey/retromusic/cast/RetroSessionManagerListener.kt similarity index 85% rename from app/src/main/java/code/name/monkey/retromusic/cast/RetroSessionManager.kt rename to app/src/main/java/code/name/monkey/retromusic/cast/RetroSessionManagerListener.kt index 69bc45348..32817ab40 100644 --- a/app/src/main/java/code/name/monkey/retromusic/cast/RetroSessionManager.kt +++ b/app/src/main/java/code/name/monkey/retromusic/cast/RetroSessionManagerListener.kt @@ -3,7 +3,7 @@ package code.name.monkey.retromusic.cast import com.google.android.gms.cast.framework.CastSession import com.google.android.gms.cast.framework.SessionManagerListener -interface RetroSessionManager : SessionManagerListener { +interface RetroSessionManagerListener : SessionManagerListener { override fun onSessionResuming(p0: CastSession, p1: String) { } diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt b/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt index faee38b2e..d6a938009 100644 --- a/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt +++ b/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt @@ -26,15 +26,9 @@ class RetroWebServer(val context: Context) : NanoHTTPD(SERVER_PORT) { } } - override fun serve( - uri: String?, - method: Method?, - headers: MutableMap?, - parms: MutableMap?, - files: MutableMap? - ): Response { - if (uri?.contains(PART_COVER_ART) == true) { - val albumId = parms?.get(PARAM_ID) ?: return errorResponse() + override fun serve(session: IHTTPSession?): Response { + if (session?.uri?.contains(PART_COVER_ART) == true) { + val albumId = session.parameters?.get(PARAM_ID)?.get(0) ?: return errorResponse() val albumArtUri = MusicUtil.getMediaStoreAlbumCoverUri(albumId.toLong()) val fis: InputStream? try { @@ -43,12 +37,12 @@ class RetroWebServer(val context: Context) : NanoHTTPD(SERVER_PORT) { return errorResponse() } return newChunkedResponse(Status.OK, MIME_TYPE_IMAGE, fis) - } else if (uri?.contains(PART_SONG) == true) { - val songId = parms?.get(PARAM_ID) ?: return errorResponse() + } else if (session?.uri?.contains(PART_SONG) == true) { + val songId = session.parameters?.get(PARAM_ID)?.get(0) ?: return errorResponse() val songUri = MusicUtil.getSongFileUri(songId.toLong()) val songPath = MusicUtil.getSongFilePath(context, songUri) val song = File(songPath) - return serveFile(headers!!, song, MIME_TYPE_AUDIO) + return serveFile(session.headers!!, song, MIME_TYPE_AUDIO) } return newFixedLengthResponse(Status.NOT_FOUND, MIME_PLAINTEXT, "Not Found") } diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/RenamePlaylistDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/RenamePlaylistDialog.kt index 79b7d2501..18a3ab714 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/RenamePlaylistDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/RenamePlaylistDialog.kt @@ -16,7 +16,6 @@ package code.name.monkey.retromusic.dialogs import android.app.Dialog import android.os.Bundle -import android.view.LayoutInflater import androidx.core.os.bundleOf import androidx.fragment.app.DialogFragment import code.name.monkey.retromusic.EXTRA_PLAYLIST_ID @@ -48,7 +47,7 @@ class RenamePlaylistDialog : DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val playlistEntity = extraNotNull(EXTRA_PLAYLIST_ID).value - val layout = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_playlist, null) + val layout = layoutInflater.inflate(R.layout.dialog_playlist, null) val inputEditText: TextInputEditText = layout.findViewById(R.id.actionNewPlaylist) val nameContainer: TextInputLayout = layout.findViewById(R.id.actionNewPlaylistContainer) nameContainer.accentColor() diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/SongDetailDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/SongDetailDialog.kt index 339996d5b..20e2b2566 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/SongDetailDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/SongDetailDialog.kt @@ -19,60 +19,51 @@ import android.content.Context import android.os.Bundle import android.text.Spanned import android.util.Log -import android.view.LayoutInflater -import android.widget.TextView -import androidx.annotation.NonNull import androidx.core.os.bundleOf import androidx.core.text.parseAsHtml import androidx.fragment.app.DialogFragment import code.name.monkey.retromusic.EXTRA_SONG import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.DialogFileDetailsBinding import code.name.monkey.retromusic.extensions.colorButtons import code.name.monkey.retromusic.extensions.materialDialog import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.MusicUtil import org.jaudiotagger.audio.AudioFileIO import org.jaudiotagger.audio.exceptions.CannotReadException -import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException -import org.jaudiotagger.audio.exceptions.ReadOnlyFileException -import org.jaudiotagger.tag.TagException import java.io.File -import java.io.IOException class SongDetailDialog : DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val context: Context = requireContext() - val dialogView = LayoutInflater.from(context).inflate(R.layout.dialog_file_details, null) + val binding = DialogFileDetailsBinding.inflate(layoutInflater) val song = requireArguments().getParcelable(EXTRA_SONG) - val fileName: TextView = dialogView.findViewById(R.id.fileName) - val filePath: TextView = dialogView.findViewById(R.id.filePath) - val fileSize: TextView = dialogView.findViewById(R.id.fileSize) - val dateModified: TextView = dialogView.findViewById(R.id.dateModified) - val fileFormat: TextView = dialogView.findViewById(R.id.fileFormat) - val trackLength: TextView = dialogView.findViewById(R.id.trackLength) - val bitRate: TextView = dialogView.findViewById(R.id.bitrate) - val samplingRate: TextView = dialogView.findViewById(R.id.samplingRate) + with(binding) { + fileName.text = makeTextWithTitle(context, R.string.label_file_name, "-") + filePath.text = makeTextWithTitle(context, R.string.label_file_path, "-") + fileSize.text = makeTextWithTitle(context, R.string.label_file_size, "-") + fileFormat.text = makeTextWithTitle(context, R.string.label_file_format, "-") + trackLength.text = makeTextWithTitle(context, R.string.label_track_length, "-") + bitrate.text = makeTextWithTitle(context, R.string.label_bit_rate, "-") + samplingRate.text = makeTextWithTitle(context, R.string.label_sampling_rate, "-") + } - fileName.text = makeTextWithTitle(context, R.string.label_file_name, "-") - filePath.text = makeTextWithTitle(context, R.string.label_file_path, "-") - fileSize.text = makeTextWithTitle(context, R.string.label_file_size, "-") - fileFormat.text = makeTextWithTitle(context, R.string.label_file_format, "-") - trackLength.text = makeTextWithTitle(context, R.string.label_track_length, "-") - bitRate.text = makeTextWithTitle(context, R.string.label_bit_rate, "-") - samplingRate.text = makeTextWithTitle(context, R.string.label_sampling_rate, "-") if (song != null) { val songFile = File(song.data) if (songFile.exists()) { - fileName.text = makeTextWithTitle(context, R.string.label_file_name, songFile.name) - filePath.text = + binding.fileName.text = + makeTextWithTitle(context, R.string.label_file_name, songFile.name) + binding.filePath.text = makeTextWithTitle(context, R.string.label_file_path, songFile.absolutePath) - dateModified.text = makeTextWithTitle(context, R.string.label_last_modified, - MusicUtil.getDateModifiedString(songFile.lastModified())) + binding.dateModified.text = makeTextWithTitle( + context, R.string.label_last_modified, + MusicUtil.getDateModifiedString(songFile.lastModified()) + ) - fileSize.text = + binding.fileSize.text = makeTextWithTitle( context, R.string.label_file_size, @@ -82,56 +73,28 @@ class SongDetailDialog : DialogFragment() { val audioFile = AudioFileIO.read(songFile) val audioHeader = audioFile.audioHeader - fileFormat.text = + binding.fileFormat.text = makeTextWithTitle(context, R.string.label_file_format, audioHeader.format) - trackLength.text = makeTextWithTitle( + binding.trackLength.text = makeTextWithTitle( context, R.string.label_track_length, MusicUtil.getReadableDurationString((audioHeader.trackLength * 1000).toLong()) ) - bitRate.text = makeTextWithTitle( + binding.bitrate.text = makeTextWithTitle( context, R.string.label_bit_rate, audioHeader.bitRate + " kb/s" ) - samplingRate.text = + binding.samplingRate.text = makeTextWithTitle( context, R.string.label_sampling_rate, audioHeader.sampleRate + " Hz" ) - } catch (@NonNull e: CannotReadException) { + } catch (e: Exception) { Log.e(TAG, "error while reading the song file", e) // fallback - trackLength.text = makeTextWithTitle( - context, - R.string.label_track_length, - MusicUtil.getReadableDurationString(song.duration) - ) - } catch (@NonNull e: IOException) { - Log.e(TAG, "error while reading the song file", e) - trackLength.text = makeTextWithTitle( - context, - R.string.label_track_length, - MusicUtil.getReadableDurationString(song.duration) - ) - } catch (@NonNull e: TagException) { - Log.e(TAG, "error while reading the song file", e) - trackLength.text = makeTextWithTitle( - context, - R.string.label_track_length, - MusicUtil.getReadableDurationString(song.duration) - ) - } catch (@NonNull e: ReadOnlyFileException) { - Log.e(TAG, "error while reading the song file", e) - trackLength.text = makeTextWithTitle( - context, - R.string.label_track_length, - MusicUtil.getReadableDurationString(song.duration) - ) - } catch (@NonNull e: InvalidAudioFrameException) { - Log.e(TAG, "error while reading the song file", e) - trackLength.text = makeTextWithTitle( + binding.trackLength.text = makeTextWithTitle( context, R.string.label_track_length, MusicUtil.getReadableDurationString(song.duration) @@ -139,8 +102,9 @@ class SongDetailDialog : DialogFragment() { } } else { // fallback - fileName.text = makeTextWithTitle(context, R.string.label_file_name, song.title) - trackLength.text = makeTextWithTitle( + binding.fileName.text = + makeTextWithTitle(context, R.string.label_file_name, song.title) + binding.trackLength.text = makeTextWithTitle( context, R.string.label_track_length, MusicUtil.getReadableDurationString(song.duration) @@ -149,7 +113,7 @@ class SongDetailDialog : DialogFragment() { } return materialDialog(R.string.action_details) .setPositiveButton(android.R.string.ok, null) - .setView(dialogView) + .setView(binding.root) .create() .colorButtons() } diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityThemeExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityThemeExtensions.kt index 60b90f6a4..c4a5c7ee8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityThemeExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityThemeExtensions.kt @@ -6,7 +6,9 @@ import android.os.Build import android.view.View import android.view.View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR import android.view.WindowManager +import android.view.inputmethod.InputMethodManager import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.getSystemService import androidx.core.view.* import androidx.fragment.app.FragmentActivity import code.name.monkey.appthemehelper.util.ColorUtil @@ -221,4 +223,13 @@ fun AppCompatActivity.setStatusBarColorPreMarshmallow(color: Int) { } else { window.statusBarColor = ColorUtil.darkenColor(color) } +} + +fun AppCompatActivity.hideSoftKeyboard() { + val currentFocus: View? = currentFocus + if (currentFocus != null) { + val inputMethodManager = + getSystemService() + inputMethodManager?.hideSoftInputFromWindow(currentFocus.windowToken, 0) + } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExtensions.kt index c31a3e675..11f407290 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExtensions.kt @@ -131,12 +131,12 @@ fun Slider.accent() { fun Button.accentTextColor() { if (materialYou) return - setTextColor(ThemeStore.accentColor(App.getContext())) + setTextColor(context.accentColor()) } fun MaterialButton.accentBackgroundColor() { if (materialYou) return - backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(App.getContext())) + backgroundTintList = ColorStateList.valueOf(context.accentColor()) } fun MaterialButton.accentOutlineColor() { diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/IntentExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/IntentExtensions.kt index 1d7f25cab..e91e81347 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/IntentExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/IntentExtensions.kt @@ -1,10 +1,12 @@ package code.name.monkey.retromusic.extensions import android.app.Activity +import android.content.Context import android.content.Intent import android.net.Uri import androidx.activity.result.ActivityResult import androidx.activity.result.contract.ActivityResultContracts +import androidx.core.net.toUri import androidx.fragment.app.Fragment import java.io.OutputStream @@ -29,4 +31,16 @@ fun Fragment.createNewFile( } startForResult.launch(intent) +} + +fun Context.openUrl(url: String) { + val i = Intent(Intent.ACTION_VIEW) + i.data = url.toUri() + i.flags = Intent.FLAG_ACTIVITY_NEW_TASK + startActivity(i) +} + + +fun Fragment.openUrl(url: String) { + requireContext().openUrl(url) } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/about/AboutFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/about/AboutFragment.kt index 116dba855..d6c439905 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/about/AboutFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/about/AboutFragment.kt @@ -14,12 +14,10 @@ */ package code.name.monkey.retromusic.fragments.about -import android.content.Intent import android.content.pm.PackageManager import android.os.Bundle import android.view.View import androidx.core.app.ShareCompat -import androidx.core.net.toUri import androidx.core.view.updatePadding import androidx.fragment.app.Fragment import androidx.recyclerview.widget.DefaultItemAnimator @@ -29,6 +27,7 @@ import code.name.monkey.retromusic.Constants import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.ContributorAdapter import code.name.monkey.retromusic.databinding.FragmentAboutBinding +import code.name.monkey.retromusic.extensions.openUrl import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.RetroUtil @@ -53,13 +52,6 @@ class AboutFragment : Fragment(R.layout.fragment_about), View.OnClickListener { } } - private fun openUrl(url: String) { - val i = Intent(Intent.ACTION_VIEW) - i.data = url.toUri() - i.flags = Intent.FLAG_ACTIVITY_NEW_TASK - startActivity(i) - } - private fun setUpView() { binding.aboutContent.cardRetroInfo.appGithub.setOnClickListener(this) binding.aboutContent.cardRetroInfo.faqLink.setOnClickListener(this) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt index 72b54775c..2014bf33f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt @@ -117,7 +117,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det mainActivity.setSupportActionBar(binding.toolbar) binding.toolbar.title = " " - binding.albumCoverContainer.setTransitionName(arguments.extraAlbumId.toString()) + binding.albumCoverContainer.transitionName = arguments.extraAlbumId.toString() postponeEnterTransition() detailsViewModel.getAlbum().observe(viewLifecycleOwner) { requireView().doOnPreDraw { @@ -125,10 +125,10 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det } albumArtistExists = !it.albumArtist.isNullOrEmpty() showAlbum(it) - if (albumArtistExists) { - binding.artistImage.setTransitionName(album.albumArtist) + binding.artistImage.transitionName = if (albumArtistExists) { + album.albumArtist } else { - binding.artistImage.setTransitionName(album.artistId.toString()) + album.artistId.toString() } } @@ -308,7 +308,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det .load( RetroGlideExtension.getArtistModel( artist, - PreferenceUtil.isAllowedToDownloadMetadata() + PreferenceUtil.isAllowedToDownloadMetadata(requireContext()) ) ) .artistImageOptions(artist) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AbsArtistDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AbsArtistDetailsFragment.kt index f0d0c7f75..16537d90b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AbsArtistDetailsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AbsArtistDetailsFragment.kt @@ -88,7 +88,7 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm mainActivity.addMusicServiceEventListener(detailsViewModel) mainActivity.setSupportActionBar(binding.toolbar) binding.toolbar.title = null - binding.artistCoverContainer.setTransitionName((artistId ?: artistName).toString()) + binding.artistCoverContainer.transitionName = (artistId ?: artistName).toString() postponeEnterTransition() detailsViewModel.getArtist().observe(viewLifecycleOwner) { requireView().doOnPreDraw { @@ -146,7 +146,7 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm } this.artist = artist loadArtistImage(artist) - if (RetroUtil.isAllowedToDownloadMetadata(requireContext())) { + if (PreferenceUtil.isAllowedToDownloadMetadata(requireContext())) { loadBiography(artist.name) } binding.artistTitle.text = artist.name diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt index fa6b299a9..f3b67abec 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt @@ -1,7 +1,6 @@ package code.name.monkey.retromusic.fragments.backup import android.app.Activity -import android.content.Context import android.content.Intent import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerControlsFragment.kt index 5bb7bdbbe..4d3a63875 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerControlsFragment.kt @@ -30,6 +30,7 @@ import androidx.core.view.isVisible import androidx.fragment.app.commit import androidx.fragment.app.replace import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener import code.name.monkey.retromusic.fragments.other.VolumeFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -224,8 +225,7 @@ abstract class AbsPlayerControlsFragment(@LayoutRes layout: Int) : AbsMusicServi } childFragmentManager.executePendingTransactions() } - volumeFragment = - childFragmentManager.findFragmentById(R.id.volumeFragmentContainer) as? VolumeFragment + volumeFragment = whichFragment(R.id.volumeFragmentContainer) } override fun onResume() { 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 3dd8fd76a..845b32583 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 @@ -359,15 +359,6 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme val TAG: String = AbsPlayerFragment::class.java.simpleName const val VISIBILITY_ANIM_DURATION: Long = 300 } - - protected fun getUpNextAndQueueTime(): String { - val duration = MusicPlayerRemote.getQueueDurationMillis(MusicPlayerRemote.position) - - return MusicUtil.buildInfoString( - resources.getString(R.string.up_next), - MusicUtil.getReadableDurationString(duration) - ) - } } fun goToArtist(activity: Activity) { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsFragment.kt index dd108ee6a..06f94065b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsFragment.kt @@ -56,7 +56,7 @@ class GenreDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playlist_ setHasOptionsMenu(true) mainActivity.addMusicServiceEventListener(detailsViewModel) mainActivity.setSupportActionBar(binding.toolbar) - binding.container.setTransitionName("genre") + binding.container.transitionName = "genre" genre = arguments.extraGenre binding.toolbar.title = arguments.extraGenre.name setupRecyclerView() diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/other/LyricsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/LyricsFragment.kt index e64fbfab6..099c0b9b4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/other/LyricsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/LyricsFragment.kt @@ -40,10 +40,7 @@ import code.name.monkey.retromusic.activities.tageditor.TagWriter import code.name.monkey.retromusic.databinding.FragmentLyricsBinding import code.name.monkey.retromusic.databinding.FragmentNormalLyricsBinding import code.name.monkey.retromusic.databinding.FragmentSyncedLyricsBinding -import code.name.monkey.retromusic.extensions.accentColor -import code.name.monkey.retromusic.extensions.materialDialog -import code.name.monkey.retromusic.extensions.textColorSecondary -import code.name.monkey.retromusic.extensions.uri +import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper @@ -52,7 +49,6 @@ import code.name.monkey.retromusic.model.AudioTagInfo import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.FileUtils import code.name.monkey.retromusic.util.LyricUtil -import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.UriUtil import com.afollestad.materialdialogs.input.input import com.google.android.material.color.MaterialColors @@ -149,7 +145,7 @@ class LyricsFragment : AbsMusicServiceFragment(R.layout.fragment_lyrics) { exitTransition = Fade() lyricsSectionsAdapter = LyricsSectionsAdapter(requireActivity()) _binding = FragmentLyricsBinding.bind(view) - binding.container.setTransitionName("lyrics") + binding.container.transitionName = "lyrics" setupWakelock() setupViews() @@ -225,8 +221,7 @@ class LyricsFragment : AbsMusicServiceFragment(R.layout.fragment_lyrics) { return true } if (item.itemId == R.id.action_search) { - RetroUtil.openUrl( - requireActivity(), when (binding.lyricsPager.currentItem) { + openUrl(when (binding.lyricsPager.currentItem) { 0 -> syairSearchLrcUrl 1 -> googleSearchLrcUrl else -> googleSearchLrcUrl diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt index c12ec2183..a67eadd9c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt @@ -48,9 +48,9 @@ class AdaptiveFragment : AbsPlayerFragment(R.layout.fragment_adaptive_player) { private fun setUpSubFragments() { playbackControlsFragment = - childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as AdaptivePlaybackControlsFragment + whichFragment(R.id.playbackControlsFragment) as AdaptivePlaybackControlsFragment val playerAlbumCoverFragment = - childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment + whichFragment(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment playerAlbumCoverFragment.apply { removeSlideEffect() setCallbacks(this@AdaptiveFragment) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt index 675e85e4d..e784eff4b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt @@ -27,6 +27,7 @@ import code.name.monkey.retromusic.NEW_BLUR_AMOUNT import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentBlurBinding import code.name.monkey.retromusic.extensions.drawAboveSystemBars +import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.glide.* @@ -62,10 +63,9 @@ class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur), } private fun setUpSubFragments() { - playbackControlsFragment = - childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as BlurPlaybackControlsFragment - val playerAlbumCoverFragment = - childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment + playbackControlsFragment = whichFragment(R.id.playbackControlsFragment) + val playerAlbumCoverFragment: PlayerAlbumCoverFragment = + whichFragment(R.id.playerAlbumCoverFragment) playerAlbumCoverFragment.setCallbacks(this) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardFragment.kt index 1a6c7acb7..cea1bf027 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardFragment.kt @@ -22,6 +22,7 @@ import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentCardPlayerBinding import code.name.monkey.retromusic.extensions.drawAboveSystemBars +import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment @@ -87,10 +88,9 @@ class CardFragment : AbsPlayerFragment(R.layout.fragment_card_player) { } private fun setUpSubFragments() { - playbackControlsFragment = - childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as CardPlaybackControlsFragment - val playerAlbumCoverFragment = - childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment + playbackControlsFragment = whichFragment(R.id.playbackControlsFragment) + val playerAlbumCoverFragment: PlayerAlbumCoverFragment = + whichFragment(R.id.playerAlbumCoverFragment) playerAlbumCoverFragment.setCallbacks(this) playerAlbumCoverFragment.removeSlideEffect() } @@ -117,14 +117,4 @@ class CardFragment : AbsPlayerFragment(R.layout.fragment_card_player) { super.onDestroyView() _binding = null } - - companion object { - - fun newInstance(): PlayerFragment { - val args = Bundle() - val fragment = PlayerFragment() - fragment.arguments = args - return fragment - } - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt index ef45e01ca..3a5265098 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt @@ -26,6 +26,7 @@ import code.name.monkey.retromusic.NEW_BLUR_AMOUNT import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentCardBlurPlayerBinding import code.name.monkey.retromusic.extensions.drawAboveSystemBars +import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment @@ -98,8 +99,8 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player), private fun setUpSubFragments() { playbackControlsFragment = - childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as CardBlurPlaybackControlsFragment - (childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment?)?.setCallbacks( + whichFragment(R.id.playbackControlsFragment) as CardBlurPlaybackControlsFragment + (whichFragment(R.id.playerAlbumCoverFragment) as? PlayerAlbumCoverFragment)?.setCallbacks( this ) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt index 6db36c55c..50520dc60 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt @@ -35,10 +35,7 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.RetroBottomSheetBehavior import code.name.monkey.retromusic.adapter.song.PlayingQueueAdapter import code.name.monkey.retromusic.databinding.FragmentClassicPlayerBinding -import code.name.monkey.retromusic.extensions.getSongInfo -import code.name.monkey.retromusic.extensions.hide -import code.name.monkey.retromusic.extensions.show -import code.name.monkey.retromusic.extensions.surfaceColor +import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment @@ -131,8 +128,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player hideVolumeIfAvailable() setupRecyclerView() - val coverFragment = - childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment + val coverFragment: PlayerAlbumCoverFragment = whichFragment(R.id.playerAlbumCoverFragment) coverFragment.setCallbacks(this) getQueuePanel().addBottomSheetCallback(bottomSheetCallbackList) @@ -174,7 +170,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player } childFragmentManager.executePendingTransactions() volumeFragment = - childFragmentManager.findFragmentById(R.id.volumeFragmentContainer) as VolumeFragment? + whichFragment(R.id.volumeFragmentContainer) as VolumeFragment? } } @@ -368,7 +364,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player } private fun setupPanel() { - if (!binding.playerContainer.isLaidOut() || binding.playerContainer.isLayoutRequested) { + if (!binding.playerContainer.isLaidOut || binding.playerContainer.isLayoutRequested) { binding.playerContainer.addOnLayoutChangeListener(this) return } @@ -419,7 +415,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) } - fun setUpProgressSlider() { + private fun setUpProgressSlider() { binding.playerControlsContainer.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt index 4197affde..761daa039 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt @@ -24,6 +24,7 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentColorPlayerBinding import code.name.monkey.retromusic.extensions.colorControlNormal import code.name.monkey.retromusic.extensions.drawAboveSystemBars +import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -110,15 +111,14 @@ class ColorFragment : AbsPlayerFragment(R.layout.fragment_color_player) { _binding = FragmentColorPlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() - val playerAlbumCoverFragment = - childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment + val playerAlbumCoverFragment: PlayerAlbumCoverFragment = + whichFragment(R.id.playbackControlsFragment) playerAlbumCoverFragment.setCallbacks(this) playerToolbar().drawAboveSystemBars() } private fun setUpSubFragments() { - playbackControlsFragment = - childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as ColorPlaybackControlsFragment + playbackControlsFragment = whichFragment(R.id.playbackControlsFragment) } private fun setUpPlayerToolbar() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt index 1bddc630a..468ce3c1b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt @@ -22,6 +22,7 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentFitBinding import code.name.monkey.retromusic.extensions.colorControlNormal import code.name.monkey.retromusic.extensions.drawAboveSystemBars +import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -90,10 +91,9 @@ class FitFragment : AbsPlayerFragment(R.layout.fragment_fit) { } private fun setUpSubFragments() { - playbackControlsFragment = - childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as FitPlaybackControlsFragment - val playerAlbumCoverFragment = - childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment + playbackControlsFragment = whichFragment(R.id.playbackControlsFragment) + val playerAlbumCoverFragment: PlayerAlbumCoverFragment = + whichFragment(R.id.playerAlbumCoverFragment) playerAlbumCoverFragment.setCallbacks(this) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt index 971ff2459..bd84e4eca 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt @@ -27,6 +27,7 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentFlatPlayerBinding import code.name.monkey.retromusic.extensions.colorControlNormal import code.name.monkey.retromusic.extensions.drawAboveSystemBars +import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -52,10 +53,9 @@ class FlatPlayerFragment : AbsPlayerFragment(R.layout.fragment_flat_player) { private fun setUpSubFragments() { - controlsFragment = - childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as FlatPlaybackControlsFragment - val playerAlbumCoverFragment = - childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment + controlsFragment = whichFragment(R.id.playbackControlsFragment) + val playerAlbumCoverFragment: PlayerAlbumCoverFragment = + whichFragment(R.id.playerAlbumCoverFragment) playerAlbumCoverFragment.setCallbacks(this) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt index 8be7e32de..dbd3afb97 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt @@ -132,7 +132,7 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play } private fun setupPanel() { - if (!binding.colorBackground.isLaidOut() || binding.colorBackground.isLayoutRequested) { + if (!binding.colorBackground.isLaidOut || binding.colorBackground.isLayoutRequested) { binding.colorBackground.addOnLayoutChangeListener(this) return } @@ -309,7 +309,7 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play } childFragmentManager.executePendingTransactions() volumeFragment = - childFragmentManager.findFragmentById(R.id.volumeFragmentContainer) as VolumeFragment? + whichFragment(R.id.volumeFragmentContainer) as VolumeFragment? } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt index b57654fad..a11e8060c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt @@ -26,6 +26,7 @@ import code.name.monkey.retromusic.databinding.FragmentMaterialBinding import code.name.monkey.retromusic.extensions.colorControlNormal import code.name.monkey.retromusic.extensions.drawAboveSystemBars import code.name.monkey.retromusic.extensions.surfaceColor +import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment @@ -134,10 +135,9 @@ class MaterialFragment : AbsPlayerFragment(R.layout.fragment_material) { } private fun setUpSubFragments() { - playbackControlsFragment = - childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as MaterialControlsFragment - val playerAlbumCoverFragment = - childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment + playbackControlsFragment = whichFragment(R.id.playbackControlsFragment) + val playerAlbumCoverFragment: PlayerAlbumCoverFragment = + whichFragment(R.id.playbackControlsFragment) playerAlbumCoverFragment.setCallbacks(this) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt index fd3327ca9..0144ae835 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt @@ -27,10 +27,7 @@ import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.SNOWFALL import code.name.monkey.retromusic.databinding.FragmentPlayerBinding -import code.name.monkey.retromusic.extensions.colorControlNormal -import code.name.monkey.retromusic.extensions.drawAboveSystemBars -import code.name.monkey.retromusic.extensions.isColorLight -import code.name.monkey.retromusic.extensions.surfaceColor +import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -141,10 +138,9 @@ class PlayerFragment : AbsPlayerFragment(R.layout.fragment_player), } private fun setUpSubFragments() { - controlsFragment = - childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as PlayerPlaybackControlsFragment - val playerAlbumCoverFragment = - childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment + controlsFragment = whichFragment(R.id.playbackControlsFragment) + val playerAlbumCoverFragment: PlayerAlbumCoverFragment = + whichFragment(R.id.playerAlbumCoverFragment) playerAlbumCoverFragment.setCallbacks(this) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/peek/PeekPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/peek/PeekPlayerFragment.kt index dc5116399..2d17d5a99 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/peek/PeekPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/peek/PeekPlayerFragment.kt @@ -58,10 +58,10 @@ class PeekPlayerFragment : AbsPlayerFragment(R.layout.fragment_peek_player) { private fun setUpSubFragments() { controlsFragment = - childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as PeekPlayerControlFragment + whichFragment(R.id.playbackControlsFragment) as PeekPlayerControlFragment val coverFragment = - childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment + whichFragment(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment coverFragment.setCallbacks(this) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt index 894fc03c0..fbbb7cd26 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt @@ -22,6 +22,7 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentPlainPlayerBinding import code.name.monkey.retromusic.extensions.colorControlNormal import code.name.monkey.retromusic.extensions.drawAboveSystemBars +import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.base.goToAlbum import code.name.monkey.retromusic.fragments.base.goToArtist @@ -89,10 +90,9 @@ class PlainPlayerFragment : AbsPlayerFragment(R.layout.fragment_plain_player) { } private fun setUpSubFragments() { - plainPlaybackControlsFragment = - childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as PlainPlaybackControlsFragment - val playerAlbumCoverFragment = - childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment + plainPlaybackControlsFragment = whichFragment(R.id.playbackControlsFragment) + val playerAlbumCoverFragment: PlayerAlbumCoverFragment = + whichFragment(R.id.playerAlbumCoverFragment) playerAlbumCoverFragment.setCallbacks(this) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt index b2bdd469a..722ab28ba 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt @@ -22,6 +22,7 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentSimplePlayerBinding import code.name.monkey.retromusic.extensions.colorControlNormal import code.name.monkey.retromusic.extensions.drawAboveSystemBars +import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -56,11 +57,10 @@ class SimplePlayerFragment : AbsPlayerFragment(R.layout.fragment_simple_player) } private fun setUpSubFragments() { - val playerAlbumCoverFragment = - childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment + val playerAlbumCoverFragment: PlayerAlbumCoverFragment = + whichFragment(R.id.playerAlbumCoverFragment) playerAlbumCoverFragment.setCallbacks(this) - controlsFragment = - childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as SimplePlaybackControlsFragment + controlsFragment = whichFragment(R.id.playbackControlsFragment) } override fun onShow() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt index 9ac50de1b..021f5ef82 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt @@ -29,10 +29,7 @@ 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.databinding.FragmentTinyPlayerBinding -import code.name.monkey.retromusic.extensions.drawAboveSystemBars -import code.name.monkey.retromusic.extensions.getSongInfo -import code.name.monkey.retromusic.extensions.hide -import code.name.monkey.retromusic.extensions.show +import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.base.goToAlbum import code.name.monkey.retromusic.fragments.base.goToArtist @@ -153,10 +150,9 @@ class TinyPlayerFragment : AbsPlayerFragment(R.layout.fragment_tiny_player), } private fun setUpSubFragments() { - controlsFragment = - childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as TinyPlaybackControlsFragment - val playerAlbumCoverFragment = - childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment + controlsFragment = whichFragment(R.id.playbackControlsFragment) + val playerAlbumCoverFragment: PlayerAlbumCoverFragment = + whichFragment(R.id.playerAlbumCoverFragment) playerAlbumCoverFragment.setCallbacks(this) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt index d48a5025f..4e21eea24 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt @@ -59,7 +59,7 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) setHasOptionsMenu(true) mainActivity.setSupportActionBar(binding.toolbar) - binding.container.setTransitionName("playlist") + binding.container.transitionName = "playlist" playlist = arguments.extraPlaylist binding.toolbar.title = playlist.playlistEntity.playlistName setUpRecyclerView() diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageFetcher.kt b/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageFetcher.kt index 356a829f6..1260892a6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageFetcher.kt +++ b/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageFetcher.kt @@ -42,7 +42,7 @@ class ArtistImageFetcher( override fun loadData(priority: Priority, callback: DataFetcher.DataCallback) { try { if (!MusicUtil.isArtistNameUnknown(model.artist.name) && - PreferenceUtil.isAllowedToDownloadMetadata() + PreferenceUtil.isAllowedToDownloadMetadata(context) ) { val artists = model.artist.name.split(",", "&") response = deezerService.getArtistImage(artists[0]) diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/SearchQueryHelper.kt b/app/src/main/java/code/name/monkey/retromusic/helper/SearchQueryHelper.kt index 9bd72fa58..06c76294d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/SearchQueryHelper.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/SearchQueryHelper.kt @@ -139,8 +139,6 @@ object SearchQueryHelper : KoinComponent { arrayOf(query.lowercase()) ) ) - return if (songs.isNotEmpty()) { - songs - } else ArrayList() + return songs.ifEmpty { ArrayList() } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcView.java b/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcView.java index 60f904bdb..77fd1f1e2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcView.java +++ b/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcView.java @@ -35,6 +35,8 @@ import android.view.View; import android.view.animation.LinearInterpolator; import android.widget.Scroller; +import androidx.core.content.res.ResourcesCompat; + import java.io.File; import java.util.ArrayList; import java.util.Collections; diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/LagTracker.java b/app/src/main/java/code/name/monkey/retromusic/misc/LagTracker.java deleted file mode 100755 index 983081184..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/misc/LagTracker.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * 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.misc; - -import android.util.Log; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.TimeUnit; - -public class LagTracker { - private static Map mMap; - private static LagTracker mSingleton; - private boolean mEnabled = true; - - private LagTracker() { - mMap = new HashMap<>(); - } - - public static LagTracker get() { - if (mSingleton == null) { - mSingleton = new LagTracker(); - } - return mSingleton; - } - - private void print(String str, long j) { - long toMillis = TimeUnit.NANOSECONDS.toMillis(j); - Log.d( - "LagTracker", - "[" - + str - + " completed in]: " - + j - + " ns (" - + toMillis - + "ms, " - + TimeUnit.NANOSECONDS.toSeconds(j) - + "s)"); - } - - public LagTracker disable() { - this.mEnabled = false; - return this; - } - - public LagTracker enable() { - this.mEnabled = true; - return this; - } - - public void end(String str) { - long nanoTime = System.nanoTime(); - if (this.mEnabled) { - if (mMap.containsKey(str)) { - print(str, nanoTime - mMap.get(str)); - mMap.remove(str); - return; - } - throw new IllegalStateException("No start time found for " + str); - } else if (!mMap.isEmpty()) { - mMap.clear(); - } - } - - public void start(String str) { - long nanoTime = System.nanoTime(); - if (this.mEnabled) { - mMap.put(str, nanoTime); - } else if (!mMap.isEmpty()) { - mMap.clear(); - } - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/network/conversion/LyricsConverterFactory.kt b/app/src/main/java/code/name/monkey/retromusic/network/conversion/LyricsConverterFactory.kt index 1103653c4..03a8f4c77 100644 --- a/app/src/main/java/code/name/monkey/retromusic/network/conversion/LyricsConverterFactory.kt +++ b/app/src/main/java/code/name/monkey/retromusic/network/conversion/LyricsConverterFactory.kt @@ -25,9 +25,9 @@ import java.lang.reflect.Type class LyricsConverterFactory : Converter.Factory() { override fun responseBodyConverter( - type: Type?, - annotations: Array?, - retrofit: Retrofit? + type: Type, + annotations: Array, + retrofit: Retrofit ): Converter? { return if (String::class.java == type) { Converter { value -> value.string() } @@ -35,10 +35,10 @@ class LyricsConverterFactory : Converter.Factory() { } override fun requestBodyConverter( - type: Type?, - parameterAnnotations: Array?, - methodAnnotations: Array?, - retrofit: Retrofit? + type: Type, + parameterAnnotations: Array, + methodAnnotations: Array, + retrofit: Retrofit ): Converter<*, RequestBody>? { return if (String::class.java == type) { diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt index e39ddf6bf..d656df16e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt @@ -392,7 +392,7 @@ class MusicService : MediaBrowserServiceCompat(), wakeLock?.acquire(milli) } - var pausedByZeroVolume = false + private var pausedByZeroVolume = false override fun onAudioVolumeChanged(currentVolume: Int, maxVolume: Int) { if (isPauseOnZeroVolume) { if (isPlaying && currentVolume < 1) { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ColorAnimUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/ColorAnimUtil.kt deleted file mode 100644 index 81cb66de6..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/util/ColorAnimUtil.kt +++ /dev/null @@ -1,19 +0,0 @@ -package code.name.monkey.retromusic.util - -import android.animation.ArgbEvaluator -import android.animation.ValueAnimator - -class ColorAnimUtil { - companion object { - fun createColorAnimator( - fromColor: Int, - toColor: Int, - mDuration: Long = 300 - ): ValueAnimator { - return ValueAnimator.ofInt(fromColor, toColor).apply { - setEvaluator(ArgbEvaluator()) - duration = mDuration - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/util/Compressor.java b/app/src/main/java/code/name/monkey/retromusic/util/Compressor.java deleted file mode 100644 index 6259a52bf..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/util/Compressor.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * 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.util; - -import android.content.Context; -import android.graphics.Bitmap; - -import java.io.File; -import java.io.IOException; - -/** - * Created on : June 18, 2016 Author : zetbaitsu Name : Zetra GitHub : https://github.com/zetbaitsu - */ -public class Compressor { - // max width and height values of the compressed image is taken as 612x816 - private int maxWidth = 612; - private int maxHeight = 816; - private Bitmap.CompressFormat compressFormat = Bitmap.CompressFormat.JPEG; - private int quality = 80; - private String destinationDirectoryPath; - - public Compressor(Context context) { - destinationDirectoryPath = context.getCacheDir().getPath() + File.separator + "images"; - } - - public Compressor setMaxWidth(int maxWidth) { - this.maxWidth = maxWidth; - return this; - } - - public Compressor setMaxHeight(int maxHeight) { - this.maxHeight = maxHeight; - return this; - } - - public Compressor setCompressFormat(Bitmap.CompressFormat compressFormat) { - this.compressFormat = compressFormat; - return this; - } - - public Compressor setQuality(int quality) { - this.quality = quality; - return this; - } - - public Compressor setDestinationDirectoryPath(String destinationDirectoryPath) { - this.destinationDirectoryPath = destinationDirectoryPath; - return this; - } - - public File compressToFile(File imageFile) throws IOException { - return compressToFile(imageFile, imageFile.getName()); - } - - public File compressToFile(File imageFile, String compressedFileName) throws IOException { - return ImageUtil.compressImage( - imageFile, - maxWidth, - maxHeight, - compressFormat, - quality, - destinationDirectoryPath + File.separator + compressedFileName); - } - - public Bitmap compressToBitmap(File imageFile) throws IOException { - return ImageUtil.decodeSampledBitmapFromFile(imageFile, maxWidth, maxHeight); - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java index d10a4232f..d67f0721c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java @@ -24,13 +24,13 @@ import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.Drawable; -import android.media.ExifInterface; import androidx.annotation.ColorInt; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.res.ResourcesCompat; +import androidx.exifinterface.media.ExifInterface; import java.io.File; import java.io.FileOutputStream; diff --git a/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt index 62b364e8d..b37b01710 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt @@ -268,15 +268,14 @@ object MusicUtil : KoinComponent { ) } - fun getSongFilePath(context: Context, uri: Uri): String? { + fun getSongFilePath(context: Context, uri: Uri): String { val projection = arrayOf(MediaStore.MediaColumns.DATA) - return context.contentResolver.query(uri, projection, null, null, null)?.use { + context.contentResolver.query(uri, projection, null, null, null)?.use { if (it.moveToFirst()) { - it.getString(0) - } else { - "" + return it.getString(0) } } + return "" } fun getTotalDuration(songs: List): Long { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt b/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt index 15b9722ee..cc4124a90 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt @@ -71,7 +71,7 @@ class PackageValidator( /** * Checks whether the caller attempting to connect to a [MediaBrowserServiceCompat] is known. - * See [MusicService.onGetRoot] for where this is utilized. + * See [MediaBrowserServiceCompat.onGetRoot] for where this is utilized. * * @param callingPackage The package name of the caller. * @param callingUid The user id of the caller. 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 e71d3f683..589795243 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 @@ -1,8 +1,8 @@ package code.name.monkey.retromusic.util +import android.content.Context import android.content.SharedPreferences.OnSharedPreferenceChangeListener import android.net.ConnectivityManager -import android.net.NetworkInfo import androidx.core.content.edit import androidx.core.content.getSystemService import androidx.preference.PreferenceManager @@ -328,15 +328,12 @@ object PreferenceUtil { val isLockScreen get() = sharedPreferences.getBoolean(LOCK_SCREEN, false) - fun isAllowedToDownloadMetadata(): Boolean { + fun isAllowedToDownloadMetadata(context: Context): Boolean { return when (autoDownloadImagesPolicy) { "always" -> true "only_wifi" -> { - val connectivityManager = App.getContext().getSystemService() - var netInfo: NetworkInfo? = null - if (connectivityManager != null) { - netInfo = connectivityManager.activeNetworkInfo - } + val connectivityManager = context.getSystemService() + val netInfo = connectivityManager?.activeNetworkInfo netInfo != null && netInfo.type == ConnectivityManager.TYPE_WIFI && netInfo.isConnectedOrConnecting } "never" -> false diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java index 8005ab2b4..99ccdfacd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java @@ -195,13 +195,6 @@ public class RetroUtil { >= 600; } - public static void openUrl(@NonNull Activity context, @NonNull String str) { - Intent intent = new Intent("android.intent.action.VIEW"); - intent.setData(Uri.parse(str)); - intent.setFlags(268435456); - context.startActivity(intent); - } - public static void setAllowDrawUnderNavigationBar(Window window) { window.setNavigationBarColor(Color.TRANSPARENT); window From a4d44406d6d31aaaede5119f89261d1ede14ee36 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 13 Apr 2022 00:04:36 +0530 Subject: [PATCH 04/65] Converted Java View classes to Kotlin --- .../retromusic/LanguageContextWrapper.java | 38 -- .../retromusic/LanguageContextWrapper.kt | 27 + .../code/name/monkey/retromusic/MainModule.kt | 15 +- .../retromusic/views/ContributorsView.java | 79 --- .../views/HeightFitSquareLayout.java | 53 -- .../retromusic/views/HeightFitSquareLayout.kt | 39 ++ .../monkey/retromusic/views/ListItemView.kt | 29 +- .../views/LollipopFixedWebView.java | 51 -- .../retromusic/views/LollipopFixedWebView.kt | 32 ++ .../retromusic/views/NetworkImageView.java | 66 --- .../retromusic/views/NetworkImageView.kt | 57 ++ .../monkey/retromusic/views/PermissionItem.kt | 2 +- .../name/monkey/retromusic/views/SeekArc.java | 509 ------------------ .../views/StatusBarMarginFrameLayout.java | 48 -- .../retromusic/views/StatusBarView.java | 56 -- .../monkey/retromusic/views/StatusBarView.kt | 45 ++ .../retromusic/views/VerticalTextView.java | 65 --- .../retromusic/views/VerticalTextView.kt | 57 ++ 18 files changed, 274 insertions(+), 994 deletions(-) delete mode 100644 app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/views/ContributorsView.java delete mode 100755 app/src/main/java/code/name/monkey/retromusic/views/HeightFitSquareLayout.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/views/HeightFitSquareLayout.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/views/LollipopFixedWebView.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/views/LollipopFixedWebView.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/views/VerticalTextView.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/views/VerticalTextView.kt diff --git a/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.java b/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.java deleted file mode 100644 index 2e8852664..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.java +++ /dev/null @@ -1,38 +0,0 @@ -package code.name.monkey.retromusic; - -import android.content.Context; -import android.content.ContextWrapper; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.os.LocaleList; - -import com.google.android.gms.common.annotation.KeepName; - -import java.util.Locale; - -import code.name.monkey.appthemehelper.util.VersionUtils; - -public class LanguageContextWrapper extends ContextWrapper { - - public LanguageContextWrapper(Context base) { - super(base); - } - - @KeepName - public static LanguageContextWrapper wrap(Context context, Locale newLocale) { - Resources res = context.getResources(); - Configuration configuration = res.getConfiguration(); - - if (VersionUtils.INSTANCE.hasNougatMR()) { - configuration.setLocale(newLocale); - - LocaleList localeList = new LocaleList(newLocale); - LocaleList.setDefault(localeList); - configuration.setLocales(localeList); - } else { - configuration.setLocale(newLocale); - } - context = context.createConfigurationContext(configuration); - return new LanguageContextWrapper(context); - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.kt b/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.kt new file mode 100644 index 000000000..a14c8fdd5 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.kt @@ -0,0 +1,27 @@ +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 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()) { + configuration.setLocale(newLocale) + val localeList = LocaleList(newLocale) + LocaleList.setDefault(localeList) + configuration.setLocales(localeList) + } else { + configuration.setLocale(newLocale) + } + return LanguageContextWrapper(context.createConfigurationContext(configuration)) + } + } +} \ No newline at end of file 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 bce82a70d..3e7021f3a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/MainModule.kt +++ b/app/src/main/java/code/name/monkey/retromusic/MainModule.kt @@ -88,13 +88,14 @@ private val roomModule = module { } private val autoModule = module { single { - AutoMusicProvider(androidContext(), - get(), - get(), - get(), - get(), - get(), - get() + AutoMusicProvider( + androidContext(), + get(), + get(), + get(), + get(), + get(), + get() ) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/views/ContributorsView.java b/app/src/main/java/code/name/monkey/retromusic/views/ContributorsView.java deleted file mode 100644 index 4e4c1a743..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/views/ContributorsView.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * 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.views; - -import static code.name.monkey.retromusic.util.RetroUtil.openUrl; - -import android.app.Activity; -import android.content.Context; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import code.name.monkey.retromusic.R; - -public class ContributorsView extends FrameLayout { - public ContributorsView(@NonNull Context context) { - super(context); - init(context, null); - } - - public ContributorsView(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - init(context, attrs); - } - - public ContributorsView( - @NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(context, attrs); - } - - private void init(Context context, AttributeSet attributeSet) { - final TypedArray attributes = - context.obtainStyledAttributes(attributeSet, R.styleable.ContributorsView, 0, 0); - if (attributes != null) { - final View layout = LayoutInflater.from(context).inflate(R.layout.item_contributor, this); - - NetworkImageView networkImageView = layout.findViewById(R.id.image); - String url = attributes.getString(R.styleable.ContributorsView_profile_url); - networkImageView.setImageUrl(url); - - String name = attributes.getString(R.styleable.ContributorsView_profile_name); - TextView title = layout.findViewById(R.id.title); - title.setText(name); - - String summary = attributes.getString(R.styleable.ContributorsView_profile_summary); - TextView text = layout.findViewById(R.id.text); - text.setText(summary); - - String link = attributes.getString(R.styleable.ContributorsView_profile_link); - layout.setOnClickListener( - v -> { - if (link == null) { - return; - } - openUrl((Activity) getContext(), link); - }); - attributes.recycle(); - } - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/views/HeightFitSquareLayout.java b/app/src/main/java/code/name/monkey/retromusic/views/HeightFitSquareLayout.java deleted file mode 100755 index 8ed2a9e66..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/views/HeightFitSquareLayout.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * 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.views; - -import android.annotation.TargetApi; -import android.content.Context; -import android.util.AttributeSet; -import android.widget.FrameLayout; - -public class HeightFitSquareLayout extends FrameLayout { - private boolean forceSquare = true; - - public HeightFitSquareLayout(Context context) { - super(context); - } - - public HeightFitSquareLayout(Context context, AttributeSet attributeSet) { - super(context, attributeSet); - } - - public HeightFitSquareLayout(Context context, AttributeSet attributeSet, int i) { - super(context, attributeSet, i); - } - - @TargetApi(21) - public HeightFitSquareLayout(Context context, AttributeSet attributeSet, int i, int i2) { - super(context, attributeSet, i, i2); - } - - public void forceSquare(boolean z) { - this.forceSquare = z; - requestLayout(); - } - - protected void onMeasure(int i, int i2) { - if (this.forceSquare) { - i = i2; - } - super.onMeasure(i, i2); - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/views/HeightFitSquareLayout.kt b/app/src/main/java/code/name/monkey/retromusic/views/HeightFitSquareLayout.kt new file mode 100644 index 000000000..3653fddd6 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/views/HeightFitSquareLayout.kt @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * 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.views + +import android.content.Context +import android.util.AttributeSet +import android.widget.FrameLayout + +class HeightFitSquareLayout @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = -1 +) : FrameLayout(context, attrs, defStyleAttr){ + private var forceSquare = true + + fun setForceSquare(forceSquare: Boolean) { + this.forceSquare = forceSquare + requestLayout() + } + + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + var i = widthMeasureSpec + if (forceSquare) { + i = heightMeasureSpec + } + super.onMeasure(i, heightMeasureSpec) + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/views/ListItemView.kt b/app/src/main/java/code/name/monkey/retromusic/views/ListItemView.kt index a1b199682..37924d275 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/ListItemView.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/ListItemView.kt @@ -27,29 +27,16 @@ import code.name.monkey.retromusic.extensions.show /** * Created by hemanths on 2019-10-02. */ -class ListItemView : FrameLayout { +class ListItemView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = -1 +) : FrameLayout(context, attrs, defStyleAttr) { - private lateinit var binding: ListItemViewNoCardBinding - - constructor(context: Context) : super(context) { - init(context, null) - } - - constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { - init(context, attrs) - } - - constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super( - context, - attrs, - defStyleAttr - ) { - init(context, attrs) - } - - private fun init(context: Context, attrs: AttributeSet?) { - binding = ListItemViewNoCardBinding.inflate(LayoutInflater.from(context), this, true) + private var binding = + ListItemViewNoCardBinding.inflate(LayoutInflater.from(context), this, true) + init { context.withStyledAttributes(attrs, R.styleable.ListItemView) { if (hasValue(R.styleable.ListItemView_listItemIcon)) { binding.icon.setImageDrawable(getDrawable(R.styleable.ListItemView_listItemIcon)) diff --git a/app/src/main/java/code/name/monkey/retromusic/views/LollipopFixedWebView.java b/app/src/main/java/code/name/monkey/retromusic/views/LollipopFixedWebView.java deleted file mode 100644 index 662843408..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/views/LollipopFixedWebView.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * 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.views; - -import android.annotation.TargetApi; -import android.content.Context; -import android.content.res.Configuration; -import android.os.Build; -import android.util.AttributeSet; -import android.webkit.WebView; - -public class LollipopFixedWebView extends WebView { - public LollipopFixedWebView(Context context) { - super(getFixedContext(context)); - } - - public LollipopFixedWebView(Context context, AttributeSet attrs) { - super(getFixedContext(context), attrs); - } - - public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr) { - super(getFixedContext(context), attrs, defStyleAttr); - } - - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - public LollipopFixedWebView( - Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(getFixedContext(context), attrs, defStyleAttr, defStyleRes); - } - - public LollipopFixedWebView( - Context context, AttributeSet attrs, int defStyleAttr, boolean privateBrowsing) { - super(getFixedContext(context), attrs, defStyleAttr, privateBrowsing); - } - - public static Context getFixedContext(Context context) { - return context.createConfigurationContext(new Configuration()); - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/views/LollipopFixedWebView.kt b/app/src/main/java/code/name/monkey/retromusic/views/LollipopFixedWebView.kt new file mode 100644 index 000000000..d49092ee0 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/views/LollipopFixedWebView.kt @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * 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.views + +import android.content.Context +import android.content.res.Configuration +import android.util.AttributeSet +import android.webkit.WebView + +class LollipopFixedWebView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = -1 +) : WebView(getFixedContext(context), attrs, defStyleAttr){ + + companion object { + fun getFixedContext(context: Context): Context { + return context.createConfigurationContext(Configuration()) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.java b/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.java deleted file mode 100644 index 8f0916ecd..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * 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.views; - -import android.content.Context; -import android.content.res.TypedArray; -import android.util.AttributeSet; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.bumptech.glide.Glide; - -import code.name.monkey.retromusic.R; - -/** @author Hemanth S (h4h13). */ -public class NetworkImageView extends CircularImageView { - - public NetworkImageView(@NonNull Context context) { - super(context); - init(context, null); - } - - public NetworkImageView(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - init(context, attrs); - } - - public NetworkImageView( - @NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(context, attrs); - } - - public void setImageUrl(@NonNull String imageUrl) { - setImageUrl(getContext(), imageUrl); - } - - public void setImageUrl(@NonNull Context context, @NonNull String imageUrl) { - Glide.with(context) - .load(imageUrl) - .error(R.drawable.ic_account) - .placeholder(R.drawable.ic_account) - .into(this); - } - - private void init(Context context, AttributeSet attributeSet) { - TypedArray attributes = - context.obtainStyledAttributes(attributeSet, R.styleable.NetworkImageView, 0, 0); - String url = attributes.getString(R.styleable.NetworkImageView_url_link); - setImageUrl(context, url); - attributes.recycle(); - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.kt b/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.kt new file mode 100644 index 000000000..0c2a84b68 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.kt @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * 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.views + +import android.content.Context +import android.util.AttributeSet +import code.name.monkey.retromusic.R +import com.bumptech.glide.Glide + +/** @author Hemanth S (h4h13). + */ +class NetworkImageView : CircularImageView { + constructor(context: Context) : super(context) { + init(context, null) + } + + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { + init(context, attrs) + } + + constructor( + context: Context, attrs: AttributeSet?, defStyleAttr: Int + ) : super(context, attrs, defStyleAttr) { + init(context, attrs) + } + + fun setImageUrl(imageUrl: String) { + setImageUrl(context, imageUrl) + } + + private fun setImageUrl(context: Context, imageUrl: String) { + Glide.with(context) + .load(imageUrl) + .error(R.drawable.ic_account) + .placeholder(R.drawable.ic_account) + .into(this) + } + + private fun init(context: Context, attributeSet: AttributeSet?) { + val attributes = + context.obtainStyledAttributes(attributeSet, R.styleable.NetworkImageView, 0, 0) + val url = attributes.getString(R.styleable.NetworkImageView_url_link) + setImageUrl(context, url!!) + attributes.recycle() + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/views/PermissionItem.kt b/app/src/main/java/code/name/monkey/retromusic/views/PermissionItem.kt index e80bf48aa..21df2fa0f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/PermissionItem.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/PermissionItem.kt @@ -44,6 +44,6 @@ class PermissionItem @JvmOverloads constructor( } fun setButtonClick(callBack: () -> Unit) { - binding.button.setOnClickListener { callBack.invoke() } + binding.button.setOnClickListener { callBack() } } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java b/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java deleted file mode 100644 index 64abadf92..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java +++ /dev/null @@ -1,509 +0,0 @@ -/* - * Copyright (c) 2020 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * 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.views; - -import android.content.Context; -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.RectF; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; -import android.util.Log; -import android.view.MotionEvent; -import android.view.View; - -import code.name.monkey.retromusic.R; - -/** - * SeekArc.java - * - *

This is a class that functions much like a SeekBar but follows a circle path instead of a - * straight line. - * - * @author Neil Davies - */ -public class SeekArc extends View { - - private static final String TAG = SeekArc.class.getSimpleName(); - private static final int INVALID_PROGRESS_VALUE = -1; - private Paint mArcPaint; - // Internal variables - private int mArcRadius = 0; - private final RectF mArcRect = new RectF(); - /** - * The Width of the background arc for the SeekArc - */ - private int mArcWidth = 2; - /** Will the progress increase clockwise or anti-clockwise */ - private boolean mClockwise = true; - /** is the control enabled/touchable */ - private boolean mEnabled = true; - /** The Maximum value that this SeekArc can be set to */ - private int mMax = 100; - - private OnSeekArcChangeListener mOnSeekArcChangeListener; - /** The Current value that the SeekArc is set to */ - private int mProgress = 0; - - private Paint mProgressPaint; - private float mProgressSweep = 0; - /** The width of the progress line for this SeekArc */ - private int mProgressWidth = 4; - /** The rotation of the SeekArc- 0 is twelve o'clock */ - private int mRotation = 0; - /** Give the SeekArc rounded edges */ - private boolean mRoundedEdges = false; - /** The Angle to start drawing this Arc from */ - private int mStartAngle = 0; - /** The Angle through which to draw the arc (Max is 360) */ - private int mSweepAngle = 360; - /** The Drawable for the seek arc thumbnail */ - private Drawable mThumb; - - private int mThumbXPos; - private int mThumbYPos; - private float mTouchIgnoreRadius; - /** Enable touch inside the SeekArc */ - private boolean mTouchInside = true; - - private int mTranslateX; - private int mTranslateY; - - public SeekArc(Context context) { - super(context); - init(context, null, 0); - } - - public SeekArc(Context context, AttributeSet attrs) { - super(context, attrs); - init(context, attrs, R.attr.seekArcStyle); - } - - public SeekArc(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - init(context, attrs, defStyle); - } - - public int getArcColor() { - return mArcPaint.getColor(); - } - - public void setArcColor(int color) { - mArcPaint.setColor(color); - invalidate(); - } - - public int getArcRotation() { - return mRotation; - } - - public void setArcRotation(int mRotation) { - this.mRotation = mRotation; - updateThumbPosition(); - } - - public int getArcWidth() { - return mArcWidth; - } - - public void setArcWidth(int mArcWidth) { - this.mArcWidth = mArcWidth; - mArcPaint.setStrokeWidth(mArcWidth); - } - - public int getMax() { - return mMax; - } - - public void setMax(int mMax) { - this.mMax = mMax; - } - - public int getProgress() { - return mProgress; - } - - public void setProgress(int progress) { - updateProgress(progress, false); - } - - public int getProgressColor() { - return mProgressPaint.getColor(); - } - - public void setProgressColor(int color) { - mProgressPaint.setColor(color); - invalidate(); - } - - public int getProgressWidth() { - return mProgressWidth; - } - - public void setProgressWidth(int mProgressWidth) { - this.mProgressWidth = mProgressWidth; - mProgressPaint.setStrokeWidth(mProgressWidth); - } - - public int getStartAngle() { - return mStartAngle; - } - - public void setStartAngle(int mStartAngle) { - this.mStartAngle = mStartAngle; - updateThumbPosition(); - } - - public int getSweepAngle() { - return mSweepAngle; - } - - public void setSweepAngle(int mSweepAngle) { - this.mSweepAngle = mSweepAngle; - updateThumbPosition(); - } - - public boolean isClockwise() { - return mClockwise; - } - - public void setClockwise(boolean isClockwise) { - mClockwise = isClockwise; - } - - public boolean isEnabled() { - return mEnabled; - } - - public void setEnabled(boolean enabled) { - this.mEnabled = enabled; - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - if (mEnabled) { - this.getParent().requestDisallowInterceptTouchEvent(true); - - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - onStartTrackingTouch(); - updateOnTouch(event); - break; - case MotionEvent.ACTION_MOVE: - updateOnTouch(event); - break; - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_CANCEL: - onStopTrackingTouch(); - setPressed(false); - this.getParent().requestDisallowInterceptTouchEvent(false); - break; - } - return true; - } - return false; - } - - /** - * Sets a listener to receive notifications of changes to the SeekArc's progress level. Also - * provides notifications of when the user starts and stops a touch gesture within the SeekArc. - * - * @param l The seek bar notification listener - * @see SeekArc.OnSeekArcChangeListener - */ - public void setOnSeekArcChangeListener(OnSeekArcChangeListener l) { - mOnSeekArcChangeListener = l; - } - - public void setRoundedEdges(boolean isEnabled) { - mRoundedEdges = isEnabled; - if (mRoundedEdges) { - mArcPaint.setStrokeCap(Paint.Cap.ROUND); - mProgressPaint.setStrokeCap(Paint.Cap.ROUND); - } else { - mArcPaint.setStrokeCap(Paint.Cap.SQUARE); - mProgressPaint.setStrokeCap(Paint.Cap.SQUARE); - } - } - - public void setTouchInSide(boolean isEnabled) { - int thumbHalfheight = mThumb.getIntrinsicHeight() / 2; - int thumbHalfWidth = mThumb.getIntrinsicWidth() / 2; - mTouchInside = isEnabled; - if (mTouchInside) { - mTouchIgnoreRadius = (float) mArcRadius / 4; - } else { - // Don't use the exact radius makes interaction too tricky - mTouchIgnoreRadius = mArcRadius - Math.min(thumbHalfWidth, thumbHalfheight); - } - } - - @Override - protected void drawableStateChanged() { - super.drawableStateChanged(); - if (mThumb != null && mThumb.isStateful()) { - int[] state = getDrawableState(); - mThumb.setState(state); - } - invalidate(); - } - - @Override - protected void onDraw(Canvas canvas) { - if (!mClockwise) { - canvas.scale(-1, 1, mArcRect.centerX(), mArcRect.centerY()); - } - - // Draw the arcs - // The initial rotational offset -90 means we start at 12 o'clock - int mAngleOffset = -90; - final int arcStart = mStartAngle + mAngleOffset + mRotation; - final int arcSweep = mSweepAngle; - canvas.drawArc(mArcRect, arcStart, arcSweep, false, mArcPaint); - canvas.drawArc(mArcRect, arcStart, mProgressSweep, false, mProgressPaint); - - if (mEnabled) { - // Draw the thumb nail - canvas.translate(mTranslateX - mThumbXPos, mTranslateY - mThumbYPos); - mThumb.draw(canvas); - } - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - - final int height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec); - final int width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec); - final int min = Math.min(width, height); - float top = 0; - float left = 0; - int arcDiameter = 0; - - mTranslateX = (int) (width * 0.5f); - mTranslateY = (int) (height * 0.5f); - - arcDiameter = min - getPaddingLeft(); - mArcRadius = arcDiameter / 2; - top = height / 2 - (arcDiameter / 2); - left = width / 2 - (arcDiameter / 2); - mArcRect.set(left, top, left + arcDiameter, top + arcDiameter); - - int arcStart = (int) mProgressSweep + mStartAngle + mRotation + 90; - mThumbXPos = (int) (mArcRadius * Math.cos(Math.toRadians(arcStart))); - mThumbYPos = (int) (mArcRadius * Math.sin(Math.toRadians(arcStart))); - - setTouchInSide(mTouchInside); - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } - - private int getProgressForAngle(double angle) { - int touchProgress = (int) Math.round(valuePerDegree() * angle); - - touchProgress = (touchProgress < 0) ? INVALID_PROGRESS_VALUE : touchProgress; - touchProgress = (touchProgress > mMax) ? INVALID_PROGRESS_VALUE : touchProgress; - return touchProgress; - } - - private double getTouchDegrees(float xPos, float yPos) { - float x = xPos - mTranslateX; - float y = yPos - mTranslateY; - // invert the x-coord if we are rotating anti-clockwise - x = (mClockwise) ? x : -x; - // convert to arc Angle - double angle = Math.toDegrees(Math.atan2(y, x) + (Math.PI / 2) - Math.toRadians(mRotation)); - if (angle < 0) { - angle = 360 + angle; - } - angle -= mStartAngle; - return angle; - } - - private boolean ignoreTouch(float xPos, float yPos) { - boolean ignore = false; - float x = xPos - mTranslateX; - float y = yPos - mTranslateY; - - float touchRadius = (float) Math.sqrt(((x * x) + (y * y))); - if (touchRadius < mTouchIgnoreRadius) { - ignore = true; - } - return ignore; - } - - private void init(Context context, AttributeSet attrs, int defStyle) { - - Log.d(TAG, "Initialising SeekArc"); - final Resources res = getResources(); - float density = context.getResources().getDisplayMetrics().density; - - // Defaults, may need to link this into theme settings - int arcColor = res.getColor(R.color.progress_gray); - int progressColor = res.getColor(R.color.default_blue_light); - int thumbHalfheight = 0; - int thumbHalfWidth = 0; - mThumb = res.getDrawable(R.drawable.switch_thumb_material); - // Convert progress width to pixels for current density - mProgressWidth = (int) (mProgressWidth * density); - - if (attrs != null) { - // Attribute initialization - final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SeekArc, defStyle, 0); - - Drawable thumb = a.getDrawable(R.styleable.SeekArc_thumb); - if (thumb != null) { - mThumb = thumb; - } - - thumbHalfheight = mThumb.getIntrinsicHeight() / 2; - thumbHalfWidth = mThumb.getIntrinsicWidth() / 2; - mThumb.setBounds(-thumbHalfWidth, -thumbHalfheight, thumbHalfWidth, thumbHalfheight); - - mMax = a.getInteger(R.styleable.SeekArc_max, mMax); - mProgress = a.getInteger(R.styleable.SeekArc_seekProgress, mProgress); - mProgressWidth = (int) a.getDimension(R.styleable.SeekArc_progressWidth, mProgressWidth); - mArcWidth = (int) a.getDimension(R.styleable.SeekArc_arcWidth, mArcWidth); - mStartAngle = a.getInt(R.styleable.SeekArc_startAngle, mStartAngle); - mSweepAngle = a.getInt(R.styleable.SeekArc_sweepAngle, mSweepAngle); - mRotation = a.getInt(R.styleable.SeekArc_rotation, mRotation); - mRoundedEdges = a.getBoolean(R.styleable.SeekArc_roundEdges, mRoundedEdges); - mTouchInside = a.getBoolean(R.styleable.SeekArc_touchInside, mTouchInside); - mClockwise = a.getBoolean(R.styleable.SeekArc_clockwise, mClockwise); - mEnabled = a.getBoolean(R.styleable.SeekArc_enabled, mEnabled); - - arcColor = a.getColor(R.styleable.SeekArc_arcColor, arcColor); - progressColor = a.getColor(R.styleable.SeekArc_progressColor, progressColor); - - a.recycle(); - } - - mProgress = Math.min(mProgress, mMax); - mProgress = Math.max(mProgress, 0); - - mSweepAngle = Math.min(mSweepAngle, 360); - mSweepAngle = Math.max(mSweepAngle, 0); - - mProgressSweep = (float) mProgress / mMax * mSweepAngle; - - mStartAngle = (mStartAngle > 360) ? 0 : mStartAngle; - mStartAngle = Math.max(mStartAngle, 0); - - mArcPaint = new Paint(); - mArcPaint.setColor(arcColor); - mArcPaint.setAntiAlias(true); - mArcPaint.setStyle(Paint.Style.STROKE); - mArcPaint.setStrokeWidth(mArcWidth); - // mArcPaint.setAlpha(45); - - mProgressPaint = new Paint(); - mProgressPaint.setColor(progressColor); - mProgressPaint.setAntiAlias(true); - mProgressPaint.setStyle(Paint.Style.STROKE); - mProgressPaint.setStrokeWidth(mProgressWidth); - - if (mRoundedEdges) { - mArcPaint.setStrokeCap(Paint.Cap.ROUND); - mProgressPaint.setStrokeCap(Paint.Cap.ROUND); - } - } - - private void onProgressRefresh(int progress, boolean fromUser) { - updateProgress(progress, fromUser); - } - - private void onStartTrackingTouch() { - if (mOnSeekArcChangeListener != null) { - mOnSeekArcChangeListener.onStartTrackingTouch(this); - } - } - - private void onStopTrackingTouch() { - if (mOnSeekArcChangeListener != null) { - mOnSeekArcChangeListener.onStopTrackingTouch(this); - } - } - - private void updateOnTouch(MotionEvent event) { - boolean ignoreTouch = ignoreTouch(event.getX(), event.getY()); - if (ignoreTouch) { - return; - } - setPressed(true); - double mTouchAngle = getTouchDegrees(event.getX(), event.getY()); - int progress = getProgressForAngle(mTouchAngle); - onProgressRefresh(progress, true); - } - - private void updateProgress(int progress, boolean fromUser) { - - if (progress == INVALID_PROGRESS_VALUE) { - return; - } - - progress = Math.min(progress, mMax); - progress = Math.max(progress, 0); - mProgress = progress; - - if (mOnSeekArcChangeListener != null) { - mOnSeekArcChangeListener.onProgressChanged(this, progress, fromUser); - } - - mProgressSweep = (float) progress / mMax * mSweepAngle; - - updateThumbPosition(); - - invalidate(); - } - - private void updateThumbPosition() { - int thumbAngle = (int) (mStartAngle + mProgressSweep + mRotation + 90); - mThumbXPos = (int) (mArcRadius * Math.cos(Math.toRadians(thumbAngle))); - mThumbYPos = (int) (mArcRadius * Math.sin(Math.toRadians(thumbAngle))); - } - - private float valuePerDegree() { - return (float) mMax / mSweepAngle; - } - - public interface OnSeekArcChangeListener { - - /** - * Notification that the progress level has changed. Clients can use the fromUser parameter to - * distinguish user-initiated changes from those that occurred programmatically. - * - * @param seekArc The SeekArc whose progress has changed - * @param progress The current progress level. This will be in the range 0..max where max was - * set by {@link ProgressArc#setMax(int)}. (The default value for max is 100.) - * @param fromUser True if the progress change was initiated by the user. - */ - void onProgressChanged(SeekArc seekArc, int progress, boolean fromUser); - - /** - * Notification that the user has started a touch gesture. Clients may want to use this to - * disable advancing the seekbar. - * - * @param seekArc The SeekArc in which the touch gesture began - */ - void onStartTrackingTouch(SeekArc seekArc); - - /** - * Notification that the user has finished a touch gesture. Clients may want to use this to - * re-enable advancing the seekarc. - * - * @param seekArc The SeekArc in which the touch gesture began - */ - void onStopTrackingTouch(SeekArc seekArc); - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java deleted file mode 100644 index 452807b8d..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * 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.views; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.WindowInsets; -import android.widget.FrameLayout; - -import androidx.annotation.NonNull; - -public class StatusBarMarginFrameLayout extends FrameLayout { - - public StatusBarMarginFrameLayout(@NonNull Context context) { - super(context); - } - - public StatusBarMarginFrameLayout(@NonNull Context context, @NonNull AttributeSet attrs) { - super(context, attrs); - } - - public StatusBarMarginFrameLayout( - @NonNull Context context, @NonNull AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @NonNull - @Override - public WindowInsets onApplyWindowInsets(@NonNull WindowInsets insets) { - MarginLayoutParams lp = (MarginLayoutParams) getLayoutParams(); - lp.topMargin = insets.getSystemWindowInsetTop(); - lp.bottomMargin = insets.getSystemWindowInsetBottom(); - setLayoutParams(lp); - return super.onApplyWindowInsets(insets); - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.java b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.java deleted file mode 100644 index 21c0dc91b..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * 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.views; - -import android.content.Context; -import android.content.res.Resources; -import android.util.AttributeSet; -import android.view.View; - -import androidx.annotation.NonNull; - -public class StatusBarView extends View { - - public StatusBarView(@NonNull Context context) { - super(context); - init(context); - } - - public StatusBarView(@NonNull Context context, @NonNull AttributeSet attrs) { - super(context, attrs); - init(context); - } - - public StatusBarView(@NonNull Context context, @NonNull AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(context); - } - - public static int getStatusBarHeight(@NonNull Resources r) { - int result = 0; - int resourceId = r.getIdentifier("status_bar_height", "dimen", "android"); - if (resourceId > 0) { - result = r.getDimensionPixelSize(resourceId); - } - return result; - } - - private void init(Context context) {} - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), getStatusBarHeight(getResources())); - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.kt b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.kt new file mode 100644 index 000000000..d1979f12f --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.kt @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * 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.views + +import android.content.Context +import android.content.res.Resources +import android.util.AttributeSet +import android.view.View + +class StatusBarView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = -1 +) : View(context, attrs, defStyleAttr) { + + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + setMeasuredDimension( + MeasureSpec.getSize(widthMeasureSpec), getStatusBarHeight( + resources + ) + ) + } + + companion object { + fun getStatusBarHeight(r: Resources): Int { + var result = 0 + val resourceId = r.getIdentifier("status_bar_height", "dimen", "android") + if (resourceId > 0) { + result = r.getDimensionPixelSize(resourceId) + } + return result + } + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/views/VerticalTextView.java b/app/src/main/java/code/name/monkey/retromusic/views/VerticalTextView.java deleted file mode 100644 index 5c086aada..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/views/VerticalTextView.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * 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.views; - -import android.content.Context; -import android.graphics.Canvas; -import android.text.TextPaint; -import android.util.AttributeSet; -import android.view.Gravity; - -import androidx.appcompat.widget.AppCompatTextView; - -public class VerticalTextView extends AppCompatTextView { - final boolean topDown; - - public VerticalTextView(Context context, AttributeSet attrs) { - super(context, attrs); - final int gravity = getGravity(); - if (Gravity.isVertical(gravity) - && (gravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) { - setGravity((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) | Gravity.TOP); - topDown = false; - } else topDown = true; - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(heightMeasureSpec, widthMeasureSpec); - setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth()); - } - - @Override - protected void onDraw(Canvas canvas) { - TextPaint textPaint = getPaint(); - textPaint.setColor(getCurrentTextColor()); - textPaint.drawableState = getDrawableState(); - - canvas.save(); - - if (topDown) { - canvas.translate(getWidth(), 0); - canvas.rotate(90); - } else { - canvas.translate(0, getHeight()); - canvas.rotate(-90); - } - - canvas.translate(getCompoundPaddingLeft(), getExtendedPaddingTop()); - - getLayout().draw(canvas); - canvas.restore(); - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/views/VerticalTextView.kt b/app/src/main/java/code/name/monkey/retromusic/views/VerticalTextView.kt new file mode 100644 index 000000000..f3538e918 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/views/VerticalTextView.kt @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * 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.views + +import android.content.Context +import android.graphics.Canvas +import android.util.AttributeSet +import android.view.Gravity +import androidx.appcompat.widget.AppCompatTextView + +class VerticalTextView(context: Context, attrs: AttributeSet?) : AppCompatTextView( + context, attrs +) { + private var topDown = false + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + super.onMeasure(heightMeasureSpec, widthMeasureSpec) + setMeasuredDimension(measuredHeight, measuredWidth) + } + + override fun onDraw(canvas: Canvas) { + val textPaint = paint + textPaint.color = currentTextColor + textPaint.drawableState = drawableState + canvas.save() + if (topDown) { + canvas.translate(width.toFloat(), 0f) + canvas.rotate(90f) + } else { + canvas.translate(0f, height.toFloat()) + canvas.rotate(-90f) + } + canvas.translate(compoundPaddingLeft.toFloat(), extendedPaddingTop.toFloat()) + layout.draw(canvas) + canvas.restore() + } + + init { + val gravity = gravity + topDown = if (Gravity.isVertical(gravity) + && gravity and Gravity.VERTICAL_GRAVITY_MASK == Gravity.BOTTOM + ) { + setGravity(gravity and Gravity.HORIZONTAL_GRAVITY_MASK or Gravity.TOP) + false + } else true + } +} \ No newline at end of file From fc5f3adcd9f1306c872a0f91e7d41dcea0c29e96 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 13 Apr 2022 00:05:07 +0530 Subject: [PATCH 05/65] Removed unused strings --- app/src/main/res/navigation/library_graph.xml | 2 +- app/src/main/res/navigation/main_graph.xml | 2 +- app/src/main/res/values-es-rES/strings.xml | 1 - app/src/main/res/values-fa-rIR/strings.xml | 1 - app/src/main/res/values-tr-rTR/strings.xml | 1 - 5 files changed, 2 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/navigation/library_graph.xml b/app/src/main/res/navigation/library_graph.xml index 52fa309ab..b592676a5 100644 --- a/app/src/main/res/navigation/library_graph.xml +++ b/app/src/main/res/navigation/library_graph.xml @@ -38,7 +38,7 @@ android:id="@+id/action_home" android:name="code.name.monkey.retromusic.fragments.home.HomeFragment" android:label="" - tools:layout="@layout/fragment_banner_home" /> + tools:layout="@layout/fragment_home" /> \ No newline at end of file diff --git a/app/src/main/res/navigation/main_graph.xml b/app/src/main/res/navigation/main_graph.xml index fd3d34b22..63ecf9dc7 100644 --- a/app/src/main/res/navigation/main_graph.xml +++ b/app/src/main/res/navigation/main_graph.xml @@ -120,7 +120,7 @@ android:id="@+id/action_home" android:name="code.name.monkey.retromusic.fragments.home.HomeFragment" android:label="" - tools:layout="@layout/fragment_banner_home" /> + tools:layout="@layout/fragment_home" /> Canciones más reproducidas Imagen completa Tarjeta - Cadena/Círculo Clásico MD3 Pequeño diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index e938daba4..5af69363a 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -74,7 +74,6 @@ اهنگ های برتر تصویر کامل کارت - دایره ای کلاسیک MD3 كوچك diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 8982218ad..422364d23 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -469,7 +469,6 @@ Sıralama Ölçütü Yükselen Albüm - \@sıra/albüm_sanatçısı Sanatçı Besteci Tarih eklendi From ee8deedd76ab9725f1fb57093981981f02b43b9c Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 13 Apr 2022 11:49:20 +0530 Subject: [PATCH 06/65] Fixed incorrect app context usage --- .../activities/base/AbsSlidingMusicPanelActivity.kt | 6 +++--- .../retromusic/dialogs/AddToPlaylistDialog.kt | 2 +- .../retromusic/dialogs/CreatePlaylistDialog.kt | 2 +- .../monkey/retromusic/fragments/LibraryViewModel.kt | 13 +++++++------ 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index fe169e332..2a6a6e82e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -399,7 +399,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { if (hide) { bottomSheetBehavior.peekHeight = -windowInsets.safeGetBottomInsets() bottomSheetBehavior.state = STATE_COLLAPSED - libraryViewModel.setFabMargin(if (isBottomNavVisible) dip(R.dimen.bottom_nav_height) else 0) + libraryViewModel.setFabMargin(this, if (isBottomNavVisible) dip(R.dimen.bottom_nav_height) else 0) } else { if (MusicPlayerRemote.playingQueue.isNotEmpty()) { binding.slidingPanel.elevation = 0F @@ -411,7 +411,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { } else { bottomSheetBehavior.peekHeight = heightOfBarWithTabs } - libraryViewModel.setFabMargin(dip(R.dimen.mini_player_height_expanded)) + libraryViewModel.setFabMargin(this, dip(R.dimen.mini_player_height_expanded)) } else { println("Details") if (animate) { @@ -422,7 +422,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { bottomSheetBehavior.peekHeight = heightOfBar binding.slidingPanel.bringToFront() } - libraryViewModel.setFabMargin(dip(R.dimen.mini_player_height)) + libraryViewModel.setFabMargin(this, dip(R.dimen.mini_player_height)) } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.kt index 1440270c0..03c991935 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.kt @@ -71,7 +71,7 @@ class AddToPlaylistDialog : DialogFragment() { if (which == 0) { showCreateDialog(songs) } else { - libraryViewModel.addToPlaylist(playlistNames[which], songs) + libraryViewModel.addToPlaylist(requireContext(), playlistNames[which], songs) } dialog.dismiss() } diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.kt index 8a3324c8d..8f1dbd5a0 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.kt @@ -64,7 +64,7 @@ class CreatePlaylistDialog : DialogFragment() { ) { _, _ -> val playlistName = playlistView.text.toString() if (!TextUtils.isEmpty(playlistName)) { - libraryViewModel.addToPlaylist(playlistName, songs) + libraryViewModel.addToPlaylist(requireContext(), playlistName, songs) } else { playlistContainer.error = "Playlist name can't be empty" } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt index dfcbbf4d9..b484d55d9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt @@ -15,6 +15,7 @@ package code.name.monkey.retromusic.fragments import android.animation.ValueAnimator +import android.content.Context import android.widget.Toast import androidx.core.animation.doOnEnd import androidx.lifecycle.* @@ -339,7 +340,7 @@ class LibraryViewModel( searchResults.value = emptyList() } - fun addToPlaylist(playlistName: String, songs: List) { + fun addToPlaylist(context: Context, playlistName: String, songs: List) { viewModelScope.launch(IO) { val playlists = checkPlaylistExists(playlistName) if (playlists.isEmpty()) { @@ -348,8 +349,8 @@ class LibraryViewModel( insertSongs(songs.map { it.toSongEntity(playlistId) }) withContext(Main) { Toast.makeText( - App.getContext(), - App.getContext() + context , + context .getString(R.string.playlist_created_sucessfully, playlistName), Toast.LENGTH_SHORT ).show() @@ -365,7 +366,7 @@ class LibraryViewModel( forceReload(Playlists) withContext(Main) { Toast.makeText( - App.getContext(), App.getContext().getString( + context, context.getString( R.string.added_song_count_to_playlist, songs.size, playlistName @@ -375,8 +376,8 @@ class LibraryViewModel( } } - fun setFabMargin(bottomMargin: Int) { - val currentValue = DensityUtil.dip2px(App.getContext(), 16F) + + fun setFabMargin(context: Context, bottomMargin: Int) { + val currentValue = DensityUtil.dip2px(context, 16F) + bottomMargin ValueAnimator.ofInt(fabMargin.value!!, currentValue).apply { addUpdateListener { From fc4f0396a4cf8a99d8445944304dbd31607faa88 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 13 Apr 2022 11:50:16 +0530 Subject: [PATCH 07/65] Closed some leaked closeable objects --- .../code/name/monkey/retromusic/glide/BlurTransformation.kt | 4 +++- .../code/name/monkey/retromusic/repository/GenreRepository.kt | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) 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 a6fb89570..8b2176af7 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 @@ -111,7 +111,9 @@ class BlurTransformation : BitmapTransformation { script.forEach(output) output.copyTo(out) - + output.destroy() + script.destroy() + input.destroy() rs.destroy() return out diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/GenreRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/GenreRepository.kt index d773beef9..668bdc64f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/GenreRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/GenreRepository.kt @@ -102,7 +102,7 @@ class RealGenreRepository( private fun getGenresFromCursor(cursor: Cursor?): ArrayList { val genres = arrayListOf() - if (cursor != null) { + cursor?.use { if (cursor.moveToFirst()) { do { val genre = getGenreFromCursor(cursor) From e0f345b61648023b5ea8aca578830e4b187fbfc1 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 13 Apr 2022 14:33:36 +0530 Subject: [PATCH 08/65] Cleanup with Kotlin extension functions --- .../java/code/name/monkey/retromusic/App.kt | 8 +-- .../retromusic/activities/PurchaseActivity.kt | 22 ++----- .../activities/SupportDevelopmentActivity.kt | 6 +- .../activities/bugreport/BugReportActivity.kt | 8 +-- .../tageditor/AlbumTagEditorActivity.kt | 14 +---- .../tageditor/SongTagEditorActivity.kt | 8 +-- .../activities/tageditor/TagWriter.kt | 9 ++- .../retromusic/adapter/CategoryInfoAdapter.kt | 9 +-- .../monkey/retromusic/cast/RetroWebServer.kt | 2 +- .../retromusic/dialogs/SavePlaylistDialog.kt | 25 +++----- .../extensions/ContextExtensions.kt | 13 ++++ .../retromusic/extensions/FileExtensions.kt | 6 ++ .../extensions/FragmentExtensions.kt | 8 +-- .../retromusic/fragments/LibraryViewModel.kt | 17 +----- .../fragments/backup/BackupFragment.kt | 16 ++--- .../fragments/base/AbsPlayerFragment.kt | 13 ++-- .../fragments/folder/FoldersFragment.kt | 10 +--- .../fragments/other/UserInfoFragment.kt | 18 ++---- .../fragments/settings/AbsSettingsFragment.kt | 5 +- .../monkey/retromusic/helper/BackupHelper.kt | 60 ++++++++----------- .../retromusic/helper/MusicPlayerRemote.kt | 17 ++---- .../AlbumCoverStylePreferenceDialog.kt | 3 +- .../preferences/LibraryPreference.kt | 4 +- .../NowPlayingScreenPreferenceDialog.kt | 3 +- .../retromusic/service/CrossFadePlayer.kt | 9 +-- .../monkey/retromusic/service/MusicService.kt | 17 ++---- .../name/monkey/retromusic/util/BackupUtil.kt | 10 ++-- .../retromusic/util/CustomArtistImageUtil.kt | 16 +++-- .../name/monkey/retromusic/util/MusicUtil.kt | 21 ++----- .../monkey/retromusic/util/NavigationUtil.kt | 13 +--- .../monkey/retromusic/util/PreferenceUtil.kt | 19 +++--- .../monkey/retromusic/util/RingtoneManager.kt | 4 +- .../retromusic/views/NetworkImageView.kt | 32 ++++------ .../views/RetroShapeableImageView.kt | 12 ++-- app/src/main/res/layout/item_list.xml | 8 +++ app/src/main/res/values/arrays.xml | 5 +- app/src/main/res/values/strings.xml | 4 +- 37 files changed, 183 insertions(+), 291 deletions(-) create mode 100644 app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/extensions/FileExtensions.kt 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 7269a5a69..4d4bf4d00 100644 --- a/app/src/main/java/code/name/monkey/retromusic/App.kt +++ b/app/src/main/java/code/name/monkey/retromusic/App.kt @@ -15,13 +15,13 @@ package code.name.monkey.retromusic import android.app.Application -import android.widget.Toast 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.appshortcuts.DynamicShortcutManager +import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.helper.WallpaperAccentManager import com.anjlab.android.iab.v3.BillingProcessor import com.anjlab.android.iab.v3.PurchaseInfo @@ -60,11 +60,7 @@ class App : Application() { override fun onProductPurchased(productId: String, details: PurchaseInfo?) {} override fun onPurchaseHistoryRestored() { - Toast.makeText( - this@App, - R.string.restored_previous_purchase_please_restart, - Toast.LENGTH_LONG - ).show() + showToast(R.string.restored_previous_purchase_please_restart) } override fun onBillingError(errorCode: Int, error: Throwable?) {} diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt index e4da0f4fb..85072735e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt @@ -19,8 +19,6 @@ import android.graphics.Color import android.os.Bundle import android.util.Log import android.view.MenuItem -import android.widget.Toast -import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.MaterialUtil import code.name.monkey.retromusic.App import code.name.monkey.retromusic.BuildConfig @@ -31,6 +29,7 @@ import code.name.monkey.retromusic.databinding.ActivityProVersionBinding import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.setLightStatusBar import code.name.monkey.retromusic.extensions.setStatusBarColor +import code.name.monkey.retromusic.extensions.showToast import com.anjlab.android.iab.v3.BillingProcessor import com.anjlab.android.iab.v3.PurchaseInfo @@ -66,8 +65,7 @@ class PurchaseActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler { } private fun restorePurchase() { - Toast.makeText(this, R.string.restoring_purchase, Toast.LENGTH_SHORT) - .show() + showToast(R.string.restoring_purchase) billingProcessor.loadOwnedPurchasesFromGoogleAsync(object : BillingProcessor.IPurchasesResponseListener { override fun onPurchasesSuccess() { @@ -75,30 +73,22 @@ class PurchaseActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler { } override fun onPurchasesError() { - Toast.makeText( - this@PurchaseActivity, - R.string.could_not_restore_purchase, - Toast.LENGTH_SHORT - ).show() + showToast(R.string.could_not_restore_purchase) } }) } override fun onProductPurchased(productId: String, details: PurchaseInfo?) { - Toast.makeText(this, R.string.thank_you, Toast.LENGTH_SHORT).show() + showToast(R.string.thank_you) setResult(RESULT_OK) } override fun onPurchaseHistoryRestored() { if (App.isProVersion()) { - Toast.makeText( - this, - R.string.restored_previous_purchase_please_restart, - Toast.LENGTH_LONG - ).show() + showToast(R.string.restored_previous_purchase_please_restart) setResult(RESULT_OK) } else { - Toast.makeText(this, R.string.no_purchase_found, Toast.LENGTH_SHORT).show() + showToast(R.string.no_purchase_found) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt index c014c1381..511433043 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt @@ -21,12 +21,10 @@ import android.view.LayoutInflater import android.view.MenuItem import android.view.ViewGroup import android.widget.TextView -import android.widget.Toast import androidx.core.view.isVisible import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView -import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper @@ -121,7 +119,7 @@ class SupportDevelopmentActivity : AbsBaseActivity(), BillingProcessor.IBillingH override fun onProductPurchased(productId: String, details: PurchaseInfo?) { // loadSkuDetails(); - Toast.makeText(this, R.string.thank_you, Toast.LENGTH_SHORT).show() + showToast(R.string.thank_you) } override fun onBillingError(errorCode: Int, error: Throwable?) { @@ -130,7 +128,7 @@ class SupportDevelopmentActivity : AbsBaseActivity(), BillingProcessor.IBillingH override fun onPurchaseHistoryRestored() { // loadSkuDetails(); - Toast.makeText(this, R.string.restored_previous_purchases, Toast.LENGTH_SHORT).show() + showToast(R.string.restored_previous_purchases) } override fun onDestroy() { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt index 98ccc4356..68494eeea 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt @@ -20,7 +20,6 @@ import android.content.Intent import android.os.Bundle import android.view.MenuItem import android.view.inputmethod.EditorInfo -import android.widget.Toast import androidx.annotation.StringDef import androidx.annotation.StringRes import androidx.core.content.getSystemService @@ -39,6 +38,7 @@ import code.name.monkey.retromusic.activities.bugreport.model.github.GithubTarge import code.name.monkey.retromusic.databinding.ActivityBugReportBinding import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.setTaskDescriptionColorAuto +import code.name.monkey.retromusic.extensions.showToast import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.textfield.TextInputLayout @@ -163,11 +163,7 @@ open class BugReportActivity : AbsThemeActivity() { val clipboard = getSystemService() val clip = ClipData.newPlainText(getString(R.string.device_info), deviceInfo?.toMarkdown()) clipboard?.setPrimaryClip(clip) - Toast.makeText( - this@BugReportActivity, - R.string.copied_device_info_to_clipboard, - Toast.LENGTH_LONG - ).show() + showToast(R.string.copied_device_info_to_clipboard) } private fun validateInput(): Boolean { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt index 40e03b8a3..8f30f8de3 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt @@ -30,10 +30,7 @@ import androidx.core.widget.doAfterTextChanged import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.ActivityAlbumTagEditorBinding -import code.name.monkey.retromusic.extensions.appHandleColor -import code.name.monkey.retromusic.extensions.defaultFooterColor -import code.name.monkey.retromusic.extensions.isColorLight -import code.name.monkey.retromusic.extensions.setTint +import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.model.ArtworkInfo @@ -117,11 +114,7 @@ class AlbumTagEditorActivity : AbsTagEditorActivity override fun onLoadFailed(errorDrawable: Drawable?) { super.onLoadFailed(errorDrawable) - Toast.makeText(this@SongTagEditorActivity, "Load Failed", Toast.LENGTH_LONG) - .show() + showToast("Load Failed", Toast.LENGTH_LONG) } override fun setResource(resource: BitmapPaletteWrapper?) {} diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/TagWriter.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/TagWriter.kt index a78624583..e4cf7fe89 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/TagWriter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/TagWriter.kt @@ -6,8 +6,8 @@ import android.graphics.Bitmap import android.media.MediaScannerConnection import android.os.Build import android.util.Log -import android.widget.Toast import androidx.annotation.RequiresApi +import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.misc.UpdateToastMediaScannerCompletionListener import code.name.monkey.retromusic.model.AudioTagInfo import code.name.monkey.retromusic.util.MusicUtil.createAlbumArtFile @@ -24,7 +24,6 @@ import org.jaudiotagger.tag.TagException import org.jaudiotagger.tag.images.AndroidArtwork import org.jaudiotagger.tag.images.Artwork import java.io.File -import java.io.FileOutputStream import java.io.IOException class TagWriter { @@ -34,7 +33,7 @@ class TagWriter { suspend fun scan(context: Context, toBeScanned: List?) { if (toBeScanned == null || toBeScanned.isEmpty()) { Log.i("scan", "scan: Empty") - Toast.makeText(context, "Scan file from folder", Toast.LENGTH_SHORT).show() + context.showToast( "Scan file from folder") return } MediaScannerConnection.scanFile( @@ -60,7 +59,7 @@ class TagWriter { info.artworkInfo.artwork.compress( Bitmap.CompressFormat.JPEG, 100, - FileOutputStream(albumArtFile) + albumArtFile.outputStream() ) artwork = AndroidArtwork.createArtworkFromFile(albumArtFile) } catch (e: IOException) { @@ -133,7 +132,7 @@ class TagWriter { info.artworkInfo.artwork.compress( Bitmap.CompressFormat.JPEG, 100, - FileOutputStream(albumArtFile) + albumArtFile.outputStream() ) artwork = AndroidArtwork.createArtworkFromFile(albumArtFile) } catch (e: IOException) { diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/CategoryInfoAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/CategoryInfoAdapter.kt index 0347d42b7..496f60a13 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/CategoryInfoAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/CategoryInfoAdapter.kt @@ -19,12 +19,12 @@ import android.view.LayoutInflater import android.view.MotionEvent import android.view.View import android.view.ViewGroup -import android.widget.Toast import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.RecyclerView import code.name.monkey.appthemehelper.ThemeStore.Companion.accentColor import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.PreferenceDialogLibraryCategoriesListitemBinding +import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.model.CategoryInfo import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.SwipeAndDragHelper @@ -59,12 +59,7 @@ class CategoryInfoAdapter : RecyclerView.Adapter categoryInfo.visible = !categoryInfo.visible holder.binding.checkbox.isChecked = categoryInfo.visible } else { - Toast.makeText( - holder.itemView.context, - R.string.you_have_to_select_at_least_one_category, - Toast.LENGTH_SHORT - ) - .show() + holder.itemView.context.showToast(R.string.you_have_to_select_at_least_one_category) } } holder.binding.dragView.setOnTouchListener { _: View?, event: MotionEvent -> diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt b/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt index d6a938009..cd76776e5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt +++ b/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt @@ -114,7 +114,7 @@ class RetroWebServer(val context: Context) : NanoHTTPD(SERVER_PORT) { } else { res = newFixedLengthResponse( Status.OK, mime, - FileInputStream(file), file.length() + file.inputStream(), file.length() ) res.addHeader("Accept-Ranges", "bytes") res.addHeader("Content-Length", "" + fileLen) diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/SavePlaylistDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/SavePlaylistDialog.kt index ef4dd7cce..2b9c136b2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/SavePlaylistDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/SavePlaylistDialog.kt @@ -22,14 +22,10 @@ import androidx.core.os.bundleOf import androidx.fragment.app.DialogFragment import androidx.lifecycle.lifecycleScope import code.name.monkey.appthemehelper.util.VersionUtils -import code.name.monkey.retromusic.App import code.name.monkey.retromusic.EXTRA_PLAYLIST import code.name.monkey.retromusic.R import code.name.monkey.retromusic.db.PlaylistWithSongs -import code.name.monkey.retromusic.extensions.colorButtons -import code.name.monkey.retromusic.extensions.createNewFile -import code.name.monkey.retromusic.extensions.extraNotNull -import code.name.monkey.retromusic.extensions.materialDialog +import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.helper.M3UWriter import code.name.monkey.retromusic.util.PlaylistsUtil import kotlinx.coroutines.Dispatchers @@ -64,25 +60,21 @@ class SavePlaylistDialog : DialogFragment() { playlistWithSongs ) withContext(Dispatchers.Main) { - Toast.makeText( - requireContext(), + showToast( String.format( requireContext().getString(R.string.saved_playlist_to), data?.lastPathSegment ), Toast.LENGTH_LONG - ).show() + ) dismiss() } } } } catch (e: Exception) { - Toast.makeText( - context, - "Something went wrong : " + e.message, - Toast.LENGTH_SHORT + showToast( + "Something went wrong : " + e.message ) - .show() } } } else { @@ -95,11 +87,10 @@ class SavePlaylistDialog : DialogFragment() { ) { _, _ -> } withContext(Dispatchers.Main) { - Toast.makeText( - requireContext(), - String.format(App.getContext().getString(R.string.saved_playlist_to), file), + showToast( + String.format(getString(R.string.saved_playlist_to), file), Toast.LENGTH_LONG - ).show() + ) dismiss() } } diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt new file mode 100644 index 000000000..040696eb9 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt @@ -0,0 +1,13 @@ +package code.name.monkey.retromusic.extensions + +import android.content.Context +import android.widget.Toast +import androidx.annotation.StringRes + +fun Context.showToast(@StringRes stringRes: Int, duration: Int = Toast.LENGTH_SHORT) { + showToast(getString(stringRes), duration) +} + +fun Context.showToast(message: String, duration: Int = Toast.LENGTH_SHORT) { + Toast.makeText(this, message, duration).show() +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/FileExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/FileExtensions.kt new file mode 100644 index 000000000..5c4df1a37 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/FileExtensions.kt @@ -0,0 +1,6 @@ +package code.name.monkey.retromusic.extensions + +import java.io.BufferedOutputStream +import java.util.zip.ZipOutputStream + +fun BufferedOutputStream.zipOutputStream(): ZipOutputStream = ZipOutputStream(this) \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExtensions.kt index a4082a824..90f479e13 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExtensions.kt @@ -80,12 +80,12 @@ fun Fragment.whichFragment(@IdRes id: Int): T { return childFragmentManager.findFragmentById(id) as T } -fun Fragment.showToast(@StringRes stringRes: Int) { - showToast(getString(stringRes)) +fun Fragment.showToast(@StringRes stringRes: Int, duration: Int = Toast.LENGTH_SHORT) { + showToast(getString(stringRes), duration) } -fun Fragment.showToast(message: String) { - Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show() +fun Fragment.showToast(message: String, duration: Int = Toast.LENGTH_SHORT) { + Toast.makeText(requireContext(), message, duration).show() } fun Context.getDrawableCompat(@DrawableRes drawableRes: Int): Drawable { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt index b484d55d9..8f700ea9d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt @@ -16,11 +16,11 @@ package code.name.monkey.retromusic.fragments import android.animation.ValueAnimator import android.content.Context -import android.widget.Toast import androidx.core.animation.doOnEnd import androidx.lifecycle.* import code.name.monkey.retromusic.* import code.name.monkey.retromusic.db.* +import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.fragments.ReloadType.* import code.name.monkey.retromusic.fragments.search.Filter import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -348,12 +348,7 @@ class LibraryViewModel( createPlaylist(PlaylistEntity(playlistName = playlistName)) insertSongs(songs.map { it.toSongEntity(playlistId) }) withContext(Main) { - Toast.makeText( - context , - context - .getString(R.string.playlist_created_sucessfully, playlistName), - Toast.LENGTH_SHORT - ).show() + context.showToast(R.string.playlist_created_sucessfully) } } else { val playlist = playlists.firstOrNull() @@ -365,13 +360,7 @@ class LibraryViewModel( } forceReload(Playlists) withContext(Main) { - Toast.makeText( - context, context.getString( - R.string.added_song_count_to_playlist, - songs.size, - playlistName - ), Toast.LENGTH_SHORT - ).show() + context.showToast(R.string.added_song_count_to_playlist) } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt index d4b5d2c54..f56644cae 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt @@ -5,7 +5,6 @@ import android.content.Intent import android.os.Bundle import android.view.MenuItem import android.view.View -import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import androidx.core.net.toUri import androidx.core.view.isVisible @@ -20,6 +19,7 @@ import code.name.monkey.retromusic.databinding.FragmentBackupBinding import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.accentOutlineColor import code.name.monkey.retromusic.extensions.materialDialog +import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.helper.BackupHelper import code.name.monkey.retromusic.helper.sanitize import code.name.monkey.retromusic.util.BackupUtil @@ -122,11 +122,7 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC try { file.delete() } catch (exception: SecurityException) { - Toast.makeText( - activity, - "Could not delete backup", - Toast.LENGTH_SHORT - ).show() + showToast("Could not delete backup") } backupViewModel.loadBackups() return true @@ -151,11 +147,9 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC file.renameTo(renamedFile) backupViewModel.loadBackups() } else { - Toast.makeText( - requireContext(), - "File already exists", - Toast.LENGTH_SHORT - ).show() + showToast( + "File already exists" + ) } } positiveButton(android.R.string.ok) 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 845b32583..5f62b0711 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 @@ -29,7 +29,6 @@ import android.view.MenuItem import android.view.MotionEvent import android.view.View import android.widget.RelativeLayout -import android.widget.Toast import androidx.annotation.LayoutRes import androidx.appcompat.widget.Toolbar import androidx.core.os.bundleOf @@ -48,10 +47,7 @@ import code.name.monkey.retromusic.activities.tageditor.SongTagEditorActivity import code.name.monkey.retromusic.db.PlaylistEntity import code.name.monkey.retromusic.db.toSongEntity import code.name.monkey.retromusic.dialogs.* -import code.name.monkey.retromusic.extensions.currentFragment -import code.name.monkey.retromusic.extensions.hide -import code.name.monkey.retromusic.extensions.keepScreenOn -import code.name.monkey.retromusic.extensions.whichFragment +import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.fragments.NowPlayingScreen import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment @@ -60,7 +56,10 @@ import code.name.monkey.retromusic.interfaces.IPaletteColorHolder 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.* +import code.name.monkey.retromusic.util.NavigationUtil +import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.RetroUtil +import code.name.monkey.retromusic.util.RingtoneManager import com.google.android.material.bottomsheet.BottomSheetBehavior import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.Main @@ -196,7 +195,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme if (genre == null) { genre = "Not Specified" } - Toast.makeText(context, genre, Toast.LENGTH_SHORT).show() + showToast(genre) return true } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt index ceb39d34e..63d3848ae 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt @@ -24,7 +24,6 @@ import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.webkit.MimeTypeMap -import android.widget.Toast import androidx.activity.OnBackPressedCallback import androidx.appcompat.widget.PopupMenu import androidx.core.view.isVisible @@ -211,12 +210,9 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), } R.id.action_set_as_start_directory -> { startDirectory = file - Toast.makeText( - activity, - String.format(getString(R.string.new_start_directory), file.path), - Toast.LENGTH_SHORT + showToast( + String.format(getString(R.string.new_start_directory), file.path) ) - .show() return@setOnMenuItemClickListener true } R.id.action_scan -> { @@ -491,7 +487,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), return } if (toBeScanned.isEmpty()) { - Toast.makeText(activity, R.string.nothing_to_scan, Toast.LENGTH_SHORT).show() + showToast(R.string.nothing_to_scan) } else { MediaScannerConnection.scanFile( requireContext(), diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt index d517e1dd1..7844a9ab4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt @@ -24,7 +24,6 @@ import android.view.LayoutInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup -import android.widget.Toast import androidx.core.view.doOnPreDraw import androidx.core.view.updateLayoutParams import androidx.fragment.app.Fragment @@ -36,6 +35,7 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentUserInfoBinding import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.applyToolbar +import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension @@ -55,9 +55,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.koin.androidx.viewmodel.ext.android.sharedViewModel -import java.io.BufferedOutputStream import java.io.File -import java.io.FileOutputStream class UserInfoFragment : Fragment() { @@ -98,11 +96,7 @@ class UserInfoFragment : Fragment() { binding.next.setOnClickListener { val nameString = binding.name.text.toString().trim { it <= ' ' } if (nameString.isEmpty()) { - Toast.makeText( - requireContext(), - "Your name can't be empty!", - Toast.LENGTH_SHORT - ).show() + showToast("Your name can't be empty!") return@setOnClickListener } PreferenceUtil.userName = nameString @@ -204,9 +198,9 @@ class UserInfoFragment : Fragment() { val fileUri = data?.data fileUri?.let { setAndSaveBannerImage(it) } } else if (resultCode == ImagePicker.RESULT_ERROR) { - Toast.makeText(requireContext(), ImagePicker.getError(data), Toast.LENGTH_SHORT).show() + showToast(ImagePicker.getError(data)) } else { - Toast.makeText(requireContext(), "Task Cancelled", Toast.LENGTH_SHORT).show() + showToast("Task Cancelled") } } @@ -245,7 +239,7 @@ class UserInfoFragment : Fragment() { val file = File(appDir, fileName) var successful = false runCatching { - BufferedOutputStream(FileOutputStream(file)).use { + file.outputStream().buffered().use { successful = ImageUtil.resizeBitmap(bitmap, 2048) .compress(Bitmap.CompressFormat.WEBP, 100, it) } @@ -254,7 +248,7 @@ class UserInfoFragment : Fragment() { } if (successful) { withContext(Dispatchers.Main) { - Toast.makeText(requireContext(), "Updated", Toast.LENGTH_SHORT).show() + showToast("Updated") } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt index 8a1502ab0..f45881d8d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt @@ -19,12 +19,12 @@ import android.graphics.drawable.ColorDrawable import android.os.Build import android.os.Bundle import android.view.View -import android.widget.Toast import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.PreferenceManager import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceFragmentCompat import code.name.monkey.retromusic.activities.OnThemeChangedListener +import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.preferences.* import code.name.monkey.retromusic.util.NavigationUtil import dev.chrisbanes.insetter.applyInsetter @@ -36,8 +36,7 @@ import dev.chrisbanes.insetter.applyInsetter abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() { internal fun showProToastAndNavigate(message: String) { - Toast.makeText(requireContext(), "$message is Pro version feature.", Toast.LENGTH_SHORT) - .show() + showToast("$message is Pro version feature.") NavigationUtil.goToProVersion(requireActivity()) } diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt b/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt index fef31b6d4..32e149239 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt @@ -2,11 +2,11 @@ package code.name.monkey.retromusic.helper import android.content.Context import android.os.Environment -import android.widget.Toast -import code.name.monkey.retromusic.App import code.name.monkey.retromusic.BuildConfig import code.name.monkey.retromusic.db.PlaylistEntity import code.name.monkey.retromusic.db.toSongEntity +import code.name.monkey.retromusic.extensions.showToast +import code.name.monkey.retromusic.extensions.zipOutputStream import code.name.monkey.retromusic.helper.BackupContent.* import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.repository.Repository @@ -15,12 +15,12 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.koin.core.component.KoinComponent import org.koin.core.component.inject -import java.io.* +import java.io.File +import java.io.InputStream import java.text.SimpleDateFormat import java.util.* import java.util.zip.ZipEntry import java.util.zip.ZipInputStream -import java.util.zip.ZipOutputStream object BackupHelper : KoinComponent { private val repository by inject() @@ -37,38 +37,30 @@ object BackupHelper : KoinComponent { zipItems.addAll(getSettingsZipItems(context)) getUserImageZipItems(context)?.let { zipItems.addAll(it) } zipItems.addAll(getCustomArtistZipItems(context)) - zipAll(zipItems, backupFile) + zipAll(context, zipItems, backupFile) // Clean Cache Playlist Directory File(context.filesDir, PLAYLISTS_PATH).deleteRecursively() } - private suspend fun zipAll(zipItems: List, backupFile: File) = + private suspend fun zipAll(context: Context, zipItems: List, backupFile: File) = withContext(Dispatchers.IO) { runCatching { - ZipOutputStream(BufferedOutputStream(FileOutputStream(backupFile))).use { out -> + backupFile.outputStream().buffered().zipOutputStream().use { out -> for (zipItem in zipItems) { - FileInputStream(zipItem.filePath).use { fi -> - BufferedInputStream(fi).use { origin -> - val entry = ZipEntry(zipItem.zipPath) - out.putNextEntry(entry) - origin.copyTo(out) - } + File(zipItem.filePath).inputStream().buffered().use { origin -> + val entry = ZipEntry(zipItem.zipPath) + out.putNextEntry(entry) + origin.copyTo(out) } } } }.onFailure { withContext(Dispatchers.Main) { - Toast.makeText(App.getContext(), "Couldn't create backup", Toast.LENGTH_SHORT) - .show() + context.showToast("Couldn't create backup") } }.onSuccess { withContext(Dispatchers.Main) { - Toast.makeText( - App.getContext(), - "Backup created successfully", - Toast.LENGTH_SHORT - ) - .show() + context.showToast("Backup created successfully") } } } @@ -167,7 +159,7 @@ object BackupHelper : KoinComponent { } } withContext(Dispatchers.Main) { - Toast.makeText(context, "Restore Completed Successfully", Toast.LENGTH_SHORT).show() + context.showToast("Restore Completed Successfully") } } } @@ -176,7 +168,7 @@ object BackupHelper : KoinComponent { val file = File( context.filesDir.path, zipEntry.getFileName() ) - BufferedOutputStream(FileOutputStream(file)).use { bos -> + file.outputStream().buffered().use { bos -> zipIn.copyTo(bos) } } @@ -188,7 +180,7 @@ object BackupHelper : KoinComponent { if (file.exists()) { file.delete() } - BufferedOutputStream(FileOutputStream(file)).use { bos -> + file.outputStream().buffered().use { bos -> zipIn.copyTo(bos) } } @@ -233,16 +225,14 @@ object BackupHelper : KoinComponent { if (!parentFolder.exists()) { parentFolder.mkdirs() } - BufferedOutputStream( - FileOutputStream( - File( - parentFolder, - zipEntry.getFileName() - ) - ) - ).use { bos -> - zipIn.copyTo(bos) - } + val file = File( + parentFolder, + zipEntry.getFileName() + ) + file.outputStream().buffered() + .use { bos -> + zipIn.copyTo(bos) + } } private fun restoreCustomArtistPrefs( @@ -252,7 +242,7 @@ object BackupHelper : KoinComponent { ) { val file = File(context.filesDir.parentFile, "shared_prefs".child(zipEntry.getFileName())) - BufferedOutputStream(FileOutputStream(file)).use { bos -> + file.outputStream().buffered().use { bos -> zipIn.copyTo(bos) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt b/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt index a8235ad80..0a69baaaa 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt @@ -25,6 +25,7 @@ import android.provider.DocumentsContract import android.widget.Toast import androidx.core.content.ContextCompat import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.repository.SongRepository import code.name.monkey.retromusic.service.MusicService @@ -317,11 +318,7 @@ object MusicPlayerRemote : KoinComponent { queue.add(song) openQueue(queue, 0, false) } - Toast.makeText( - musicService, - musicService!!.resources.getString(R.string.added_title_to_playing_queue), - Toast.LENGTH_SHORT - ).show() + musicService?.showToast(R.string.added_title_to_playing_queue) return true } return false @@ -340,7 +337,7 @@ object MusicPlayerRemote : KoinComponent { R.string.added_x_titles_to_playing_queue, songs.size ) - Toast.makeText(musicService, toast, Toast.LENGTH_SHORT).show() + musicService?.showToast(toast, Toast.LENGTH_SHORT) return true } return false @@ -355,11 +352,7 @@ object MusicPlayerRemote : KoinComponent { queue.add(song) openQueue(queue, 0, false) } - Toast.makeText( - musicService, - musicService!!.resources.getString(R.string.added_title_to_playing_queue), - Toast.LENGTH_SHORT - ).show() + musicService?.showToast(R.string.added_title_to_playing_queue) return true } return false @@ -377,7 +370,7 @@ object MusicPlayerRemote : KoinComponent { R.string.added_x_titles_to_playing_queue, songs.size ) - Toast.makeText(musicService, toast, Toast.LENGTH_SHORT).show() + musicService?.showToast(toast) return true } return false diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt index 85dc63596..0a58e6573 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt @@ -21,7 +21,6 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.Toast import androidx.core.graphics.BlendModeColorFilterCompat import androidx.core.graphics.BlendModeCompat.SRC_IN import androidx.fragment.app.DialogFragment @@ -81,7 +80,7 @@ class AlbumCoverStylePreferenceDialog : DialogFragment(), val coverStyle = values()[viewPagerPosition] if (isAlbumCoverStyle(coverStyle)) { val result = getString(coverStyle.titleRes) + " theme is Pro version feature." - Toast.makeText(context, result, Toast.LENGTH_SHORT).show() + showToast(result) NavigationUtil.goToProVersion(requireActivity()) } else { PreferenceUtil.albumCoverStyle = coverStyle diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt index e88120a9c..3fa4aad50 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt @@ -18,7 +18,6 @@ import android.app.Dialog import android.content.Context import android.os.Bundle import android.util.AttributeSet -import android.widget.Toast import androidx.core.graphics.BlendModeColorFilterCompat import androidx.core.graphics.BlendModeCompat.SRC_IN import androidx.fragment.app.DialogFragment @@ -30,6 +29,7 @@ import code.name.monkey.retromusic.databinding.PreferenceDialogLibraryCategories import code.name.monkey.retromusic.extensions.colorButtons import code.name.monkey.retromusic.extensions.colorControlNormal import code.name.monkey.retromusic.extensions.materialDialog +import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.model.CategoryInfo import code.name.monkey.retromusic.util.PreferenceUtil @@ -76,7 +76,7 @@ class LibraryPreferenceDialog : DialogFragment() { private fun updateCategories(categories: List) { if (getSelected(categories) == 0) return if (getSelected(categories) > 5) { - Toast.makeText(context, "Not more than 5 items", Toast.LENGTH_SHORT).show() + showToast("Not more than 5 items") return } PreferenceUtil.libraryCategory = categories diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt index 64b95d87e..3b038f120 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt @@ -21,7 +21,6 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.Toast import androidx.core.graphics.BlendModeColorFilterCompat import androidx.core.graphics.BlendModeCompat.SRC_IN import androidx.fragment.app.DialogFragment @@ -91,7 +90,7 @@ class NowPlayingScreenPreferenceDialog : DialogFragment(), ViewPager.OnPageChang if (isNowPlayingThemes(nowPlayingScreen)) { val result = "${getString(nowPlayingScreen.titleRes)} theme is Pro version feature." - Toast.makeText(context, result, Toast.LENGTH_SHORT).show() + showToast(result) NavigationUtil.goToProVersion(requireContext()) } else { PreferenceUtil.nowPlayingScreen = nowPlayingScreen diff --git a/app/src/main/java/code/name/monkey/retromusic/service/CrossFadePlayer.kt b/app/src/main/java/code/name/monkey/retromusic/service/CrossFadePlayer.kt index e9a7ffd00..d1e0e33f6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/CrossFadePlayer.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/CrossFadePlayer.kt @@ -9,9 +9,9 @@ import android.media.MediaPlayer import android.media.audiofx.AudioEffect import android.os.PowerManager import android.util.Log -import android.widget.Toast import androidx.core.net.toUri import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.service.AudioFader.Companion.createFadeAnimator import code.name.monkey.retromusic.service.playback.Playback @@ -291,12 +291,7 @@ class CrossFadePlayer(val context: Context) : Playback, MediaPlayer.OnCompletion player2 = MediaPlayer() mIsInitialized = true mp?.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK) - Toast.makeText( - context, - context.resources.getString(R.string.unplayable_file), - Toast.LENGTH_SHORT - ) - .show() + context.showToast(R.string.unplayable_file) Log.e(TAG, what.toString() + extra) return false } diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt index d656df16e..99d75b6d3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt @@ -38,7 +38,6 @@ import android.support.v4.media.session.PlaybackStateCompat import android.telephony.PhoneStateListener import android.telephony.TelephonyManager import android.util.Log -import android.widget.Toast import androidx.core.content.edit import androidx.core.content.getSystemService import androidx.media.AudioAttributesCompat @@ -54,6 +53,7 @@ import code.name.monkey.retromusic.activities.LockScreenActivity import code.name.monkey.retromusic.appwidgets.* import code.name.monkey.retromusic.auto.AutoMediaIDHelper import code.name.monkey.retromusic.auto.AutoMusicProvider +import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.glide.BlurTransformation import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension.getSongModel @@ -891,10 +891,7 @@ class MusicService : MediaBrowserServiceCompat(), } } } else { - Toast.makeText( - this, resources.getString(R.string.audio_focus_denied), Toast.LENGTH_SHORT - ) - .show() + showToast(R.string.audio_focus_denied) } } @@ -924,8 +921,7 @@ class MusicService : MediaBrowserServiceCompat(), if (openTrackAndPrepareNextAt(position)) { play() } else { - Toast.makeText(this, resources.getString(R.string.unplayable_file), Toast.LENGTH_SHORT) - .show() + showToast(resources.getString(R.string.unplayable_file)) } } @@ -940,7 +936,7 @@ class MusicService : MediaBrowserServiceCompat(), } play() } else { - Toast.makeText(applicationContext, R.string.playlist_is_empty, Toast.LENGTH_LONG).show() + showToast(R.string.playlist_is_empty) } } @@ -1315,11 +1311,10 @@ class MusicService : MediaBrowserServiceCompat(), openQueue(playlistSongs, 0, true) } } else { - Toast.makeText(applicationContext, R.string.playlist_is_empty, Toast.LENGTH_LONG) - .show() + showToast( R.string.playlist_is_empty) } } else { - Toast.makeText(applicationContext, R.string.playlist_is_empty, Toast.LENGTH_LONG).show() + showToast(R.string.playlist_is_empty) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/BackupUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/BackupUtil.kt index c3f00af0f..e7a6f430a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/BackupUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/BackupUtil.kt @@ -2,8 +2,8 @@ package code.name.monkey.retromusic.util import android.content.Context import android.content.Intent -import android.widget.Toast import androidx.core.content.FileProvider +import code.name.monkey.retromusic.extensions.showToast import java.io.File object BackupUtil { @@ -19,11 +19,9 @@ object BackupUtil { ).addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION).setType("*/*") } catch (e: IllegalArgumentException) { e.printStackTrace() - Toast.makeText( - context, - "Could not share this file.", - Toast.LENGTH_SHORT - ).show() + context.showToast( + "Could not share this file." + ) Intent() } } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt index 4836032a1..fa6e52fd3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt @@ -25,14 +25,13 @@ import android.provider.MediaStore import android.widget.Toast import androidx.core.content.edit import code.name.monkey.retromusic.App +import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.model.Artist import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.request.target.SimpleTarget import com.bumptech.glide.request.transition.Transition -import java.io.BufferedOutputStream import java.io.File -import java.io.FileOutputStream import java.io.IOException import java.util.* @@ -53,7 +52,7 @@ class CustomArtistImageUtil private constructor(context: Context) { .into(object : SimpleTarget() { override fun onLoadFailed(errorDrawable: Drawable?) { super.onLoadFailed(errorDrawable) - Toast.makeText(App.getContext(), "Load Failed", Toast.LENGTH_LONG).show() + App.getContext().showToast("Load Failed") } @SuppressLint("StaticFieldLeak") @@ -70,13 +69,12 @@ class CustomArtistImageUtil private constructor(context: Context) { var succesful = false try { - val os = BufferedOutputStream(FileOutputStream(file)) - succesful = ImageUtil.resizeBitmap(resource, 2048) - .compress(Bitmap.CompressFormat.JPEG, 100, os) - os.close() + file.outputStream().buffered().use { bos -> + succesful = ImageUtil.resizeBitmap(resource, 2048) + .compress(Bitmap.CompressFormat.JPEG, 100, bos) + } } catch (e: IOException) { - Toast.makeText(App.getContext(), e.toString(), Toast.LENGTH_LONG) - .show() + App.getContext().showToast(e.toString(), Toast.LENGTH_LONG) } if (succesful) { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt index b37b01710..bab409796 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt @@ -9,7 +9,6 @@ import android.os.Environment import android.provider.BaseColumns import android.provider.MediaStore import android.util.Log -import android.widget.Toast import androidx.core.content.FileProvider import androidx.core.content.contentValuesOf import androidx.core.net.toUri @@ -20,6 +19,7 @@ import code.name.monkey.retromusic.db.PlaylistEntity import code.name.monkey.retromusic.db.SongEntity import code.name.monkey.retromusic.db.toSongEntity import code.name.monkey.retromusic.extensions.getLong +import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.helper.MusicPlayerRemote.removeFromQueue import code.name.monkey.retromusic.model.Artist import code.name.monkey.retromusic.model.Playlist @@ -58,11 +58,7 @@ object MusicUtil : KoinComponent { } catch (e: IllegalArgumentException) { // TODO the path is most likely not like /storage/emulated/0/... but something like /storage/28C7-75B0/... e.printStackTrace() - Toast.makeText( - context, - "Could not share this file, I'm aware of the issue.", - Toast.LENGTH_SHORT - ).show() + context.showToast("Could not share this file, I'm aware of the issue.") Intent() } } @@ -456,12 +452,7 @@ object MusicUtil : KoinComponent { } activity.contentResolver.notifyChange("content://media".toUri(), null) activity.runOnUiThread { - Toast.makeText( - activity, - activity.getString(R.string.deleted_x_songs, songCount), - Toast.LENGTH_SHORT - ) - .show() + activity.showToast(activity.getString(R.string.deleted_x_songs, songCount)) callback?.run() } @@ -519,11 +510,7 @@ object MusicUtil : KoinComponent { cursor.close() } withContext(Dispatchers.Main) { - Toast.makeText( - context, - context.getString(R.string.deleted_x_songs, deletedCount), - Toast.LENGTH_SHORT - ).show() + context.showToast(context.getString(R.string.deleted_x_songs, deletedCount)) } } catch (ignored: SecurityException) { 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 37e26254f..45d8f1e1a 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 @@ -22,6 +22,7 @@ import android.widget.Toast import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.* import code.name.monkey.retromusic.activities.bugreport.BugReportActivity +import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.helper.MusicPlayerRemote.audioSessionId object NavigationUtil { @@ -68,10 +69,7 @@ object NavigationUtil { private fun stockEqualizer(activity: Activity) { val sessionId = audioSessionId if (sessionId == AudioEffect.ERROR_BAD_VALUE) { - Toast.makeText( - activity, activity.resources.getString(R.string.no_audio_ID), Toast.LENGTH_LONG - ) - .show() + activity.showToast(R.string.no_audio_ID, Toast.LENGTH_LONG) } else { try { val effects = Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL) @@ -79,12 +77,7 @@ object NavigationUtil { effects.putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC) activity.startActivityForResult(effects, 0) } catch (notFound: ActivityNotFoundException) { - Toast.makeText( - activity, - activity.resources.getString(R.string.no_equalizer), - Toast.LENGTH_SHORT - ) - .show() + activity.showToast(R.string.no_equalizer) } } } 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 589795243..8347f4ba1 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 @@ -424,10 +424,11 @@ object PreferenceUtil { val position = sharedPreferences.getStringOrDefault( HOME_ARTIST_GRID_STYLE, "0" ).toInt() - val typedArray = App.getContext() - .resources.obtainTypedArray(R.array.pref_home_grid_style_layout) - val layoutRes = typedArray.getResourceId(position, 0) - typedArray.recycle() + val layoutRes = + App.getContext().resources.obtainTypedArray(R.array.pref_home_grid_style_layout) + .use { + it.getResourceId(position, 0) + } return if (layoutRes == 0) { R.layout.item_artist } else layoutRes @@ -438,10 +439,10 @@ object PreferenceUtil { val position = sharedPreferences.getStringOrDefault( HOME_ALBUM_GRID_STYLE, "4" ).toInt() - val typedArray = App.getContext() - .resources.obtainTypedArray(R.array.pref_home_grid_style_layout) - val layoutRes = typedArray.getResourceId(position, 0) - typedArray.recycle() + val layoutRes = App.getContext() + .resources.obtainTypedArray(R.array.pref_home_grid_style_layout).use { + it.getResourceId(position, 0) + } return if (layoutRes == 0) { R.layout.item_image } else layoutRes @@ -582,7 +583,7 @@ object PreferenceUtil { 4 -> VerticalFlipTransformation() 5 -> HingeTransformation() 6 -> VerticalStackTransformer() - else -> ViewPager.PageTransformer { _, _ -> } + else -> ViewPager.PageTransformer { _, _ -> } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt b/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt index a023e7475..8071ce4fa 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt @@ -19,10 +19,10 @@ import android.content.Intent import android.provider.BaseColumns import android.provider.MediaStore import android.provider.Settings -import android.widget.Toast import androidx.core.net.toUri import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.MusicUtil.getSongFileUri import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -45,7 +45,7 @@ class RingtoneManager(val context: Context) { Settings.System.putString(resolver, Settings.System.RINGTONE, uri.toString()) val message = context .getString(R.string.x_has_been_set_as_ringtone, cursorSong.getString(0)) - Toast.makeText(context, message, Toast.LENGTH_SHORT).show() + context.showToast(message) } } } catch (ignored: SecurityException) { diff --git a/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.kt b/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.kt index 0c2a84b68..8dd3887a5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.kt @@ -15,24 +15,24 @@ package code.name.monkey.retromusic.views import android.content.Context import android.util.AttributeSet +import androidx.core.content.withStyledAttributes import code.name.monkey.retromusic.R import com.bumptech.glide.Glide /** @author Hemanth S (h4h13). */ -class NetworkImageView : CircularImageView { - constructor(context: Context) : super(context) { - init(context, null) - } +class NetworkImageView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : + CircularImageView(context, attrs, defStyleAttr) { - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { - init(context, attrs) - } - - constructor( - context: Context, attrs: AttributeSet?, defStyleAttr: Int - ) : super(context, attrs, defStyleAttr) { - init(context, attrs) + init { + context.withStyledAttributes(attrs, R.styleable.NetworkImageView, 0, 0) { + val url = getString(R.styleable.NetworkImageView_url_link) + setImageUrl(context, url!!) + } } fun setImageUrl(imageUrl: String) { @@ -46,12 +46,4 @@ class NetworkImageView : CircularImageView { .placeholder(R.drawable.ic_account) .into(this) } - - private fun init(context: Context, attributeSet: AttributeSet?) { - val attributes = - context.obtainStyledAttributes(attributeSet, R.styleable.NetworkImageView, 0, 0) - val url = attributes.getString(R.styleable.NetworkImageView_url_link) - setImageUrl(context, url!!) - attributes.recycle() - } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/views/RetroShapeableImageView.kt b/app/src/main/java/code/name/monkey/retromusic/views/RetroShapeableImageView.kt index 18939a3ec..de9d391b3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/RetroShapeableImageView.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/RetroShapeableImageView.kt @@ -15,6 +15,7 @@ package code.name.monkey.retromusic.views import android.content.Context import android.util.AttributeSet +import androidx.core.content.withStyledAttributes import code.name.monkey.retromusic.R import com.google.android.material.imageview.ShapeableImageView import com.google.android.material.shape.CornerFamily @@ -29,13 +30,12 @@ class RetroShapeableImageView @JvmOverloads constructor( init { - val typedArray = - context.obtainStyledAttributes(attrs, R.styleable.RetroShapeableImageView, defStyle, -1) - addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ -> - val radius = width / 2f - shapeAppearanceModel = ShapeAppearanceModel().withCornerSize(radius) + context.withStyledAttributes(attrs, R.styleable.RetroShapeableImageView, defStyle, -1) { + addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ -> + val radius = width / 2f + shapeAppearanceModel = ShapeAppearanceModel().withCornerSize(radius) + } } - typedArray.recycle() } private fun updateCornerSize(cornerSize: Float) { diff --git a/app/src/main/res/layout/item_list.xml b/app/src/main/res/layout/item_list.xml index 55df9fda7..ea27f4647 100755 --- a/app/src/main/res/layout/item_list.xml +++ b/app/src/main/res/layout/item_list.xml @@ -61,6 +61,14 @@ android:visibility="gone" tools:text="100" tools:visibility="visible" /> + + - @string/collapsing - @string/simple + @string/expanded + @string/compact @@ -229,5 +229,4 @@ @string/choose_image @string/remove_image - Collapsing \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 83301254e..af2db3a02 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -103,6 +103,7 @@ Please enter your valid GitHub password Please enter an issue title Please enter your valid GitHub username + Bug report successful An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account Buy now @@ -126,6 +127,7 @@ Clear queue Color Colors + Compact Composer Copied device info to clipboard. Couldn\u2019t create playlist. @@ -168,6 +170,7 @@ Edit Synced Lyrics Empty Equalizer + Expanded FAQ Favorites Finish last song @@ -533,5 +536,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Bug report successful From 4a7c367ab563a4fe7967dc24285b77ed34e1c485 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 13 Apr 2022 20:15:26 +0530 Subject: [PATCH 09/65] Fixed Window bottom insets when Expanded header(Collapsing toolbar) is enabled --- .../base/AbsSlidingMusicPanelActivity.kt | 5 ++++- .../monkey/retromusic/util/PreferenceUtil.kt | 1 + .../res/layout-land/fragment_artist_details.xml | 1 - .../main/res/layout/fragment_main_recycler.xml | 16 ++++++++-------- app/src/main/res/layout/home_content.xml | 1 - .../res/layout/sliding_music_panel_layout.xml | 7 +++---- app/src/main/res/values/strings.xml | 2 +- 7 files changed, 17 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index 2a6a6e82e..af1158784 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -399,7 +399,10 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { if (hide) { bottomSheetBehavior.peekHeight = -windowInsets.safeGetBottomInsets() bottomSheetBehavior.state = STATE_COLLAPSED - libraryViewModel.setFabMargin(this, if (isBottomNavVisible) dip(R.dimen.bottom_nav_height) else 0) + libraryViewModel.setFabMargin( + this, + if (isBottomNavVisible) dip(R.dimen.bottom_nav_height) else 0 + ) } else { if (MusicPlayerRemote.playingQueue.isNotEmpty()) { binding.slidingPanel.elevation = 0F 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 8347f4ba1..326384006 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 @@ -5,6 +5,7 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener import android.net.ConnectivityManager import androidx.core.content.edit import androidx.core.content.getSystemService +import androidx.core.content.res.use import androidx.preference.PreferenceManager import androidx.viewpager.widget.ViewPager import code.name.monkey.appthemehelper.util.VersionUtils diff --git a/app/src/main/res/layout-land/fragment_artist_details.xml b/app/src/main/res/layout-land/fragment_artist_details.xml index 50c9c1882..4bd023275 100644 --- a/app/src/main/res/layout-land/fragment_artist_details.xml +++ b/app/src/main/res/layout-land/fragment_artist_details.xml @@ -4,7 +4,6 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="?attr/colorSurface" android:fitsSystemWindows="true" android:orientation="vertical" tools:ignore="UnusedAttribute"> diff --git a/app/src/main/res/layout/fragment_main_recycler.xml b/app/src/main/res/layout/fragment_main_recycler.xml index 1e74d3aa1..65201612e 100644 --- a/app/src/main/res/layout/fragment_main_recycler.xml +++ b/app/src/main/res/layout/fragment_main_recycler.xml @@ -6,14 +6,6 @@ android:layout_height="match_parent" android:fitsSystemWindows="true"> - - + + + app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" + tools:layout="@layout/fragment_home" /> Album cover theme Album cover skip Colored app shortcuts - App bar mode + Header style Reduce volume on focus loss Fade audio Auto-download artist images From 60b740021a511ebda844cb7b242b563dde81bd6b Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 13 Apr 2022 20:56:41 +0530 Subject: [PATCH 10/65] Fixed Classic notification crash --- .../service/notification/PlayingNotificationClassic.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationClassic.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationClassic.kt index 8bd1bceff..75f43bcde 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationClassic.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationClassic.kt @@ -261,8 +261,8 @@ class PlayingNotificationClassic( override fun setPlaying(isPlaying: Boolean) { getPlayPauseBitmap(isPlaying).also { - contentView.setImageViewBitmap(R.id.action_play_pause, it) - bigContentView.setImageViewBitmap(R.id.action_play_pause, it) + contentView?.setImageViewBitmap(R.id.action_play_pause, it) + bigContentView?.setImageViewBitmap(R.id.action_play_pause, it) } } From 9a1cf7655b9d023ed057e5ef81df79b5def45568 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 14 Apr 2022 17:30:45 +0530 Subject: [PATCH 11/65] Fixed sharing of files from SD Card --- .../java/code/name/monkey/retromusic/util/MusicUtil.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt index bab409796..397637de8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt @@ -56,10 +56,10 @@ object MusicUtil : KoinComponent { ) ).addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION).setType("audio/*") } catch (e: IllegalArgumentException) { - // TODO the path is most likely not like /storage/emulated/0/... but something like /storage/28C7-75B0/... - e.printStackTrace() - context.showToast("Could not share this file, I'm aware of the issue.") - Intent() + Intent().setAction(Intent.ACTION_SEND).putExtra( + Intent.EXTRA_STREAM, + getSongFileUri(song.id) + ).addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION).setType("audio/*") } } From 986216e6ade54cb7354d98b822b15ff2c0e977b0 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 14 Apr 2022 23:34:57 +0530 Subject: [PATCH 12/65] Fixed Circle Widget bugs --- .../retromusic/appwidgets/AppWidgetCircle.kt | 15 ++++++++------- app/src/main/res/values/strings.xml | 1 + 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCircle.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCircle.kt index f89319eea..ba6abe7f7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCircle.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCircle.kt @@ -37,9 +37,8 @@ import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.Glide -import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.request.RequestOptions -import com.bumptech.glide.request.target.SimpleTarget +import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.transition.Transition import kotlinx.coroutines.Dispatchers @@ -122,10 +121,8 @@ class AppWidgetCircle : BaseAppWidget() { } target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) .load(RetroGlideExtension.getSongModel(song)) - .apply( - RequestOptions().transform(RoundedCorners(imageSize / 2)) - ) - .into(object : SimpleTarget(imageSize, imageSize) { + .apply(RequestOptions.circleCropTransform()) + .into(object : CustomTarget(imageSize, imageSize) { override fun onResourceReady( resource: BitmapPaletteWrapper, transition: Transition? @@ -165,10 +162,14 @@ class AppWidgetCircle : BaseAppWidget() { ) ) ) - appWidgetView.setImageViewBitmap(R.id.image, bitmap) + if (bitmap != null) { + appWidgetView.setImageViewBitmap(R.id.image, bitmap) + } pushUpdate(service, appWidgetIds, appWidgetView) } + + override fun onLoadCleared(placeholder: Drawable?) { } }) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0a0ebd0a5..120c8b9af 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -9,6 +9,7 @@ Add to favorites Add to playing queue Add to playlist + Cancel Cast Clear playing queue Cycle repeat mode From 2119e0c754ae87d835d0d34e5856e5c59c1b2485 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 14 Apr 2022 23:36:30 +0530 Subject: [PATCH 13/65] Fixed a crash when opening music file from a external file manager --- .../retromusic/activities/MainActivity.kt | 2 +- .../retromusic/helper/MusicPlayerRemote.kt | 13 +++++----- .../retromusic/repository/SongRepository.kt | 24 ------------------- 3 files changed, 7 insertions(+), 32 deletions(-) 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 6757172d2..0ead00101 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 @@ -179,7 +179,7 @@ class MainActivity : AbsCastActivity(), OnSharedPreferenceChangeListener { handled = true } if (uri != null && uri.toString().isNotEmpty()) { - MusicPlayerRemote.playFromUri(uri) + MusicPlayerRemote.playFromUri(this@MainActivity, uri) handled = true } else if (MediaStore.Audio.Playlists.CONTENT_TYPE == mimeType) { val id = parseLongFromIntent(intent, "playlistId", "playlist") diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt b/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt index 0a69baaaa..028460f8b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt @@ -172,7 +172,7 @@ object MusicPlayerRemote : KoinComponent { return cursor.getString(columnIndex) } } catch (e: Exception) { - println(e.message) + e.printStackTrace() } finally { cursor?.close() } @@ -419,7 +419,7 @@ object MusicPlayerRemote : KoinComponent { } @JvmStatic - fun playFromUri(uri: Uri) { + fun playFromUri(context: Context, uri: Uri) { if (musicService != null) { var songs: List? = null @@ -431,10 +431,8 @@ object MusicPlayerRemote : KoinComponent { } else if (uri.authority == "media") { songId = uri.lastPathSegment } - songs = if (songId != null) { - songRepository.songs(songId) - } else { - songRepository.songsIgnoreBlacklist(uri) + if (songId != null) { + songs = songRepository.songs(songId) } } } @@ -447,7 +445,7 @@ object MusicPlayerRemote : KoinComponent { ) } if (songFile == null) { - val path = getFilePathFromUri(musicService!!, uri) + val path = getFilePathFromUri(context, uri) if (path != null) songFile = File(path) } @@ -462,6 +460,7 @@ object MusicPlayerRemote : KoinComponent { openQueue(songs, 0, true) } else { // TODO the file is not listed in the media store + context.showToast(R.string.unplayable_file) println("The file is not listed in the media store") } } diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt index 0b5f237e7..bf0184b92 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt @@ -52,8 +52,6 @@ interface SongRepository { fun song(cursor: Cursor?): Song fun song(songId: Long): Song - - fun songsIgnoreBlacklist(uri: Uri): List } class RealSongRepository(private val context: Context) : SongRepository { @@ -127,28 +125,6 @@ class RealSongRepository(private val context: Context) : SongRepository { ) } - override fun songsIgnoreBlacklist(uri: Uri): List { - var filePath = "" - context.contentResolver.query( - uri, - arrayOf(AudioColumns.DATA), - null, - null, - null - ).use { cursor -> - if (cursor != null) { - if (cursor.count != 0) { - cursor.moveToFirst() - filePath = cursor.getString(AudioColumns.DATA) - println("File Path: $filePath") - } - } - } - return songsByFilePath( - filePath, true - ) - } - private fun getSongFromCursorImpl( cursor: Cursor ): Song { From b572fe1aee89d634753a020fbba622f8e6aeb718 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 16 Apr 2022 01:32:14 +0530 Subject: [PATCH 14/65] Swipe down to dismiss Mini player (Made Bottom Sheet hideable) --- .../activities/base/AbsSlidingMusicPanelActivity.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index af1158784..8f8b22dc3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -122,6 +122,9 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { fromNotification = false } } + STATE_HIDDEN -> { + MusicPlayerRemote.clearQueue() + } else -> { println("Do a flip") } @@ -156,7 +159,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { private fun setupBottomSheet() { bottomSheetBehavior = from(binding.slidingPanel) as RetroBottomSheetBehavior bottomSheetBehavior.addBottomSheetCallback(bottomSheetCallbackList) - bottomSheetBehavior.isHideable = false + bottomSheetBehavior.isHideable = true setMiniPlayerAlphaProgress(0F) } From 6116b4714f0e5868ff71738b72be97f61a93a424 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 16 Apr 2022 01:32:48 +0530 Subject: [PATCH 15/65] Fixed notification not dismissible on pre-A12 devices --- .../player/PlayerAlbumCoverFragment.kt | 5 +- .../monkey/retromusic/service/MusicService.kt | 46 +++++++++---------- 2 files changed, 23 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt index 0eb420560..cd5f1f06b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt @@ -116,12 +116,11 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe binding.viewPager.addOnPageChangeListener(this) val nps = PreferenceUtil.nowPlayingScreen - val metrics = resources.displayMetrics - val ratio = metrics.heightPixels.toFloat() / metrics.widthPixels.toFloat() - if (nps == Full || nps == Classic || nps == Fit || nps == Gradient) { binding.viewPager.offscreenPageLimit = 2 } else if (PreferenceUtil.isCarouselEffect) { + val metrics = resources.displayMetrics + val ratio = metrics.heightPixels.toFloat() / metrics.widthPixels.toFloat() binding.viewPager.clipToPadding = false val padding = if (ratio >= 1.777f) { diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt index 99d75b6d3..c74f6b184 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt @@ -38,6 +38,7 @@ import android.support.v4.media.session.PlaybackStateCompat import android.telephony.PhoneStateListener import android.telephony.TelephonyManager import android.util.Log +import android.widget.Toast import androidx.core.content.edit import androidx.core.content.getSystemService import androidx.media.AudioAttributesCompat @@ -57,7 +58,6 @@ import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.glide.BlurTransformation import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension.getSongModel -import code.name.monkey.retromusic.helper.MusicPlayerRemote.isCasting import code.name.monkey.retromusic.helper.ShuffleHelper.makeShuffleList import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song.Companion.emptySong @@ -90,7 +90,6 @@ import code.name.monkey.retromusic.util.PreferenceUtil.unregisterOnSharedPrefere import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.volume.AudioVolumeObserver import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener -import com.bumptech.glide.RequestBuilder import com.bumptech.glide.request.target.SimpleTarget import com.bumptech.glide.request.transition.Transition import org.koin.java.KoinJavaComponent.get @@ -303,7 +302,7 @@ class MusicService : MediaBrowserServiceCompat(), HandlerThread("QueueSaveHandler", Process.THREAD_PRIORITY_BACKGROUND) queueSaveHandlerThread?.start() queueSaveHandler = QueueSaveHandler(this, queueSaveHandlerThread!!.looper) - uiThreadHandler = Handler() + uiThreadHandler = Handler(Looper.getMainLooper()) registerReceiver(widgetIntentReceiver, IntentFilter(APP_WIDGET_UPDATE)) registerReceiver(updateFavoriteReceiver, IntentFilter(FAVORITE_STATE_CHANGED)) registerReceiver(lockScreenReceiver, IntentFilter(Intent.ACTION_SCREEN_OFF)) @@ -698,9 +697,7 @@ class MusicService : MediaBrowserServiceCompat(), val progress = songProgressMillis val wasPlaying = isPlaying /* Switch to MultiPlayer if Crossfade duration is 0 and - Playback is not an instance of MultiPlayer */if (playback != null) playback?.setCrossFadeDuration( - crossFadeDuration - ) + Playback is not an instance of MultiPlayer */ if (playback !is MultiPlayer && crossFadeDuration == 0) { if (playback != null) { playback?.release() @@ -728,6 +725,9 @@ class MusicService : MediaBrowserServiceCompat(), } } } + if (playback != null) playback?.setCrossFadeDuration( + crossFadeDuration + ) } ALBUM_ART_ON_LOCK_SCREEN, BLURRED_ALBUM_ART -> updateMediaSessionMetaData() COLORED_NOTIFICATION -> { @@ -1130,24 +1130,21 @@ class MusicService : MediaBrowserServiceCompat(), } val metaData = MediaMetadataCompat.Builder() .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, song.artistName) - .putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ARTIST, song.artistName) + .putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ARTIST, song.albumArtist) .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, song.albumName) .putString(MediaMetadataCompat.METADATA_KEY_TITLE, song.title) .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, song.duration) .putLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER, (getPosition() + 1).toLong()) .putLong(MediaMetadataCompat.METADATA_KEY_YEAR, song.year.toLong()) .putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, null) - metaData.putLong( - MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, - playingQueue.size.toLong() - ) + .putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, playingQueue.size.toLong()) + if (isAlbumArtOnLockScreen) { val screenSize = RetroUtil.getScreenSize(this@MusicService) - val request: RequestBuilder = - GlideApp.with(this@MusicService) - .asBitmap() - .songCoverOptions(song) - .load(getSongModel(song)) + val request = GlideApp.with(this@MusicService) + .asBitmap() + .songCoverOptions(song) + .load(getSongModel(song)) if (isBlurredAlbumArt) { request.transform(BlurTransformation.Builder(this@MusicService).build()) } @@ -1240,17 +1237,16 @@ class MusicService : MediaBrowserServiceCompat(), private fun startForegroundOrNotify() { if (playingNotification != null && currentSong.id != -1L) { - if (!VersionUtils.hasS()) { - if (isForeground && !isPlaying) { - // This makes the notification dismissible - // We can't call stopForeground(false) on A12 though, which may result in crashes - // when we call startForeground after that e.g. when Alarm goes off - + if (isForeground && !isPlaying) { + // This makes the notification dismissible + // We can't call stopForeground(false) on A12 though, which may result in crashes + // when we call startForeground after that e.g. when Alarm goes off, + if (!VersionUtils.hasS()) { stopForeground(false) isForeground = false } } - if (!isForeground) { + if (!isForeground && isPlaying) { // Specify that this is a media service, if supported. if (VersionUtils.hasQ()) { startForeground( @@ -1311,10 +1307,10 @@ class MusicService : MediaBrowserServiceCompat(), openQueue(playlistSongs, 0, true) } } else { - showToast( R.string.playlist_is_empty) + showToast(R.string.playlist_is_empty, Toast.LENGTH_LONG) } } else { - showToast(R.string.playlist_is_empty) + showToast(R.string.playlist_is_empty, Toast.LENGTH_LONG) } } From 904dd748cbbf457826b86cf64919d182525b8ba3 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 16 Apr 2022 22:26:43 +0530 Subject: [PATCH 16/65] Fixed Material theme light status bar when Adaptive color is on --- .../retromusic/activities/base/AbsSlidingMusicPanelActivity.kt | 2 +- .../retromusic/fragments/player/PlayerAlbumCoverFragment.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index 8f8b22dc3..75f1584a3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -297,7 +297,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { navigationBarColor = surfaceColor() setTaskDescColor(paletteColor) val isColorLight = paletteColor.isColorLight - if (PreferenceUtil.isAdaptiveColor && (nowPlayingScreen == Normal || nowPlayingScreen == Flat)) { + if (PreferenceUtil.isAdaptiveColor && (nowPlayingScreen == Normal || nowPlayingScreen == Flat || nowPlayingScreen == Material)) { setLightNavigationBar(true) setLightStatusBar(isColorLight) } else if (nowPlayingScreen == Card || nowPlayingScreen == Blur || nowPlayingScreen == BlurCard) { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt index cd5f1f06b..9e7f7673a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt @@ -280,7 +280,7 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe setLRCViewColors( when (PreferenceUtil.nowPlayingScreen) { Adaptive, Fit, Plain, Simple -> surfaceColor() - Flat, Normal -> if (PreferenceUtil.isAdaptiveColor) { + Flat, Normal, Material -> if (PreferenceUtil.isAdaptiveColor) { color.backgroundColor } else { surfaceColor() From 5ff4438a4266a59e59c9c0b93c19728cb87e3d51 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sun, 17 Apr 2022 15:11:43 +0530 Subject: [PATCH 17/65] Not using static app context wherever possible --- .../activities/base/AbsThemeActivity.kt | 11 ++-- .../retromusic/appwidgets/AppWidgetCard.kt | 2 +- .../retromusic/appwidgets/AppWidgetClassic.kt | 2 +- .../retromusic/appwidgets/AppWidgetMD3.kt | 2 +- .../retromusic/appwidgets/AppWidgetSmall.kt | 2 +- .../retromusic/appwidgets/AppWidgetText.kt | 14 ++--- .../appwidgets/base/BaseAppWidget.kt | 7 +-- .../fragments/backup/RestoreActivity.kt | 25 ++++++-- .../fragments/folder/FoldersFragment.kt | 2 +- .../retromusic/fragments/home/HomeFragment.kt | 3 +- .../fragments/other/UserInfoFragment.kt | 59 +++++++++++++------ .../retromusic/helper/menu/SongMenuHelper.kt | 2 +- .../preferences/BlacklistPreferenceDialog.kt | 7 +-- .../monkey/retromusic/util/PreferenceUtil.kt | 5 +- .../retromusic/util/theme/ThemeManager.kt | 35 +++++------ 15 files changed, 107 insertions(+), 71 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt index 25e6d2d65..9aa25a49a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt @@ -18,9 +18,11 @@ import android.content.Context import android.content.res.Resources import android.os.Bundle import android.os.Handler +import android.os.Looper import android.view.KeyEvent import android.view.View import androidx.appcompat.app.AppCompatDelegate.setDefaultNightMode +import androidx.core.graphics.ColorUtils import androidx.core.os.ConfigurationCompat import code.name.monkey.appthemehelper.common.ATHToolbarActivity import code.name.monkey.appthemehelper.util.VersionUtils @@ -28,12 +30,13 @@ import code.name.monkey.retromusic.LanguageContextWrapper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.theme.ThemeManager +import code.name.monkey.retromusic.util.theme.getNightMode +import code.name.monkey.retromusic.util.theme.getThemeResValue import java.util.* abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { - private val handler = Handler() + private val handler = Handler(Looper.getMainLooper()) override fun onCreate(savedInstanceState: Bundle?) { updateTheme() @@ -50,9 +53,9 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { } private fun updateTheme() { - setTheme(ThemeManager.getThemeResValue()) + setTheme(getThemeResValue()) if (PreferenceUtil.materialYou) { - setDefaultNightMode(ThemeManager.getNightMode()) + setDefaultNightMode(getNightMode()) } if (PreferenceUtil.isCustomFont) { diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt index ee3e1c990..a6e6524b9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt @@ -206,7 +206,7 @@ class AppWidgetCard : BaseAppWidget() { ) ) - val image = getAlbumArtDrawable(service.resources, bitmap) + val image = getAlbumArtDrawable(service, bitmap) val roundedBitmap = createRoundedBitmap( image, imageSize, imageSize, cardRadius, 0F, cardRadius, 0F ) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt index 87cacc283..e6db7985a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt @@ -190,7 +190,7 @@ class AppWidgetClassic : BaseAppWidget() { ) ) - val image = getAlbumArtDrawable(service.resources, bitmap) + val image = getAlbumArtDrawable(service, bitmap) val roundedBitmap = createRoundedBitmap( image, diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetMD3.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetMD3.kt index 0ce4ebf28..9be2d108d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetMD3.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetMD3.kt @@ -207,7 +207,7 @@ class AppWidgetMD3 : BaseAppWidget() { ) ) - val image = getAlbumArtDrawable(service.resources, bitmap) + val image = getAlbumArtDrawable(service, bitmap) val roundedBitmap = createRoundedBitmap( image, imageSize, diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt index 3a92daa1e..42677486e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt @@ -182,7 +182,7 @@ class AppWidgetSmall : BaseAppWidget() { ) ) - val image = getAlbumArtDrawable(service.resources, bitmap) + val image = getAlbumArtDrawable(service, bitmap) val roundedBitmap = createRoundedBitmap( image, imageSize, imageSize, cardRadius, 0f, 0f, 0f ) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt index 76bbc77c5..c8005768d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt @@ -22,7 +22,6 @@ import android.view.View import android.widget.RemoteViews import androidx.core.content.ContextCompat import code.name.monkey.appthemehelper.util.VersionUtils -import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget @@ -134,8 +133,8 @@ class AppWidgetText : BaseAppWidget() { appWidgetView.setImageViewBitmap( R.id.button_toggle_play_pause, createBitmap( RetroUtil.getTintedVectorDrawable( - App.getContext(), playPauseRes, ContextCompat.getColor( - App.getContext(), R.color.md_white_1000 + service, playPauseRes, ContextCompat.getColor( + service, R.color.md_white_1000 ) ), 1f ) @@ -143,10 +142,11 @@ class AppWidgetText : BaseAppWidget() { appWidgetView.setImageViewBitmap( R.id.button_next, createBitmap( RetroUtil.getTintedVectorDrawable( - App.getContext(), + service, R.drawable.ic_skip_next, ContextCompat.getColor( - App.getContext(), R.color.md_white_1000 + service, + R.color.md_white_1000 ) ), 1f ) @@ -154,10 +154,10 @@ class AppWidgetText : BaseAppWidget() { appWidgetView.setImageViewBitmap( R.id.button_prev, createBitmap( RetroUtil.getTintedVectorDrawable( - App.getContext(), + service, R.drawable.ic_skip_previous, ContextCompat.getColor( - App.getContext(), R.color.md_white_1000 + service, R.color.md_white_1000 ) ), 1f ) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt index a95c35a7e..bd5ee4aad 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt @@ -20,7 +20,6 @@ import android.appwidget.AppWidgetProvider import android.content.ComponentName import android.content.Context import android.content.Intent -import android.content.res.Resources import android.graphics.* import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable @@ -116,11 +115,11 @@ abstract class BaseAppWidget : AppWidgetProvider() { abstract fun performUpdate(service: MusicService, appWidgetIds: IntArray?) - protected fun getAlbumArtDrawable(resources: Resources, bitmap: Bitmap?): Drawable { + protected fun getAlbumArtDrawable(context: Context, bitmap: Bitmap?): Drawable { return if (bitmap == null) { - ContextCompat.getDrawable(App.getContext(), R.drawable.default_audio_art)!! + ContextCompat.getDrawable(context, R.drawable.default_audio_art)!! } else { - BitmapDrawable(resources, bitmap) + BitmapDrawable(context.resources, bitmap) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/RestoreActivity.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/RestoreActivity.kt index 73983765b..c5e554533 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/RestoreActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/RestoreActivity.kt @@ -10,12 +10,17 @@ import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatDelegate import androidx.core.view.updateLayoutParams import androidx.lifecycle.lifecycleScope +import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.ActivityRestoreBinding +import code.name.monkey.retromusic.extensions.accentColor +import code.name.monkey.retromusic.extensions.accentOutlineColor +import code.name.monkey.retromusic.extensions.addAccentColor import code.name.monkey.retromusic.helper.BackupContent import code.name.monkey.retromusic.helper.BackupContent.* import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.theme.ThemeManager +import code.name.monkey.retromusic.util.theme.getNightMode import com.google.android.material.color.DynamicColors +import com.google.android.material.color.DynamicColorsOptions import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -33,15 +38,21 @@ class RestoreActivity : AppCompatActivity() { setWidth() val backupUri = intent?.data binding.backupName.setText(getFileName(backupUri)) + binding.cancelButton.accentOutlineColor() binding.cancelButton.setOnClickListener { finish() } + binding.restoreButton.accentColor() + binding.checkArtistImages.addAccentColor() + binding.checkDatabases.addAccentColor() + binding.checkSettings.addAccentColor() + binding.checkUserImages.addAccentColor() binding.restoreButton.setOnClickListener { val backupContents = mutableListOf() - if (binding.checkSettings.isChecked) backupContents.add(SETTINGS) if (binding.checkDatabases.isChecked) backupContents.add(PLAYLISTS) if (binding.checkArtistImages.isChecked) backupContents.add(CUSTOM_ARTIST_IMAGES) - if (binding.checkUserImages.isChecked) backupContents.add(USER_IMAGES) + if (binding.checkSettings.isChecked) backupContents.add(SETTINGS) + if (binding.checkUserImages.isChecked) backupContents.add(SETTINGS) lifecycleScope.launch(Dispatchers.IO) { if (backupUri != null) { contentResolver.openInputStream(backupUri)?.use { @@ -53,13 +64,15 @@ class RestoreActivity : AppCompatActivity() { } private fun updateTheme() { - AppCompatDelegate.setDefaultNightMode(ThemeManager.getNightMode()) + AppCompatDelegate.setDefaultNightMode(getNightMode()) // Apply dynamic colors to activity if enabled if (PreferenceUtil.materialYou) { - DynamicColors.applyIfAvailable( + DynamicColors.applyToActivityIfAvailable( this, - com.google.android.material.R.style.ThemeOverlay_Material3_DynamicColors_DayNight + DynamicColorsOptions.Builder() + .setThemeOverlay(R.style.ThemeOverlay_Material3_DynamicColors_DayNight) + .build() ) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt index 63d3848ae..2eb564a6f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt @@ -205,7 +205,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), return@setOnMenuItemClickListener true } R.id.action_add_to_blacklist -> { - BlacklistStore.getInstance(App.getContext()).addPath(file) + BlacklistStore.getInstance(requireContext()).addPath(file) return@setOnMenuItemClickListener true } R.id.action_set_as_start_directory -> { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt index c8794f149..5f4043521 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt @@ -49,6 +49,7 @@ import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.interfaces.IScrollHelper import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.PreferenceUtil.userName import com.google.android.gms.cast.framework.CastButtonFactory import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.transition.MaterialFadeThrough @@ -67,7 +68,7 @@ class HomeFragment : mainActivity.setSupportActionBar(binding.toolbar) mainActivity.supportActionBar?.title = null setupListeners() - binding.titleWelcome.text = String.format("%s", PreferenceUtil.userName) + binding.titleWelcome.text = String.format("%s", userName) enterTransition = MaterialFadeThrough().addTarget(binding.contentContainer) reenterTransition = MaterialFadeThrough().addTarget(binding.contentContainer) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt index 7844a9ab4..3a486df02 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt @@ -15,7 +15,6 @@ package code.name.monkey.retromusic.fragments.other import android.app.Activity -import android.content.Intent import android.graphics.Bitmap import android.graphics.Color import android.net.Uri @@ -24,6 +23,8 @@ import android.view.LayoutInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup +import androidx.activity.result.ActivityResult +import androidx.activity.result.contract.ActivityResultContracts import androidx.core.view.doOnPreDraw import androidx.core.view.updateLayoutParams import androidx.fragment.app.Fragment @@ -40,7 +41,7 @@ import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.util.ImageUtil -import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.PreferenceUtil.userName import com.bumptech.glide.Glide import com.bumptech.glide.load.DataSource import com.bumptech.glide.load.engine.DiskCacheStrategy @@ -83,7 +84,7 @@ class UserInfoFragment : Fragment() { binding.nameContainer.accentColor() binding.next.accentColor() - binding.name.setText(PreferenceUtil.userName) + binding.name.setText(userName) binding.userImage.setOnClickListener { showUserImageOptions() @@ -99,7 +100,7 @@ class UserInfoFragment : Fragment() { showToast("Your name can't be empty!") return@setOnClickListener } - PreferenceUtil.userName = nameString + userName = nameString findNavController().navigateUp() } @@ -178,7 +179,9 @@ class UserInfoFragment : Fragment() { .compress(1440) .provider(ImageProvider.GALLERY) .crop(16f, 9f) - .start(PICK_BANNER_REQUEST) + .createIntent { + startForBannerImageResult.launch(it) + } } private fun pickNewPhoto() { @@ -186,21 +189,40 @@ class UserInfoFragment : Fragment() { .provider(ImageProvider.GALLERY) .cropSquare() .compress(1440) - .start(PICK_IMAGE_REQUEST) + .createIntent { + startForProfileImageResult.launch(it) + } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (resultCode == Activity.RESULT_OK && requestCode == PICK_IMAGE_REQUEST) { - val fileUri = data?.data - fileUri?.let { setAndSaveUserImage(it) } - } else if (resultCode == Activity.RESULT_OK && requestCode == PICK_BANNER_REQUEST) { - val fileUri = data?.data - fileUri?.let { setAndSaveBannerImage(it) } - } else if (resultCode == ImagePicker.RESULT_ERROR) { - showToast(ImagePicker.getError(data)) - } else { - showToast("Task Cancelled") + private val startForProfileImageResult = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult -> + saveImage(result) { fileUri -> + setAndSaveUserImage(fileUri) + } + } + + private val startForBannerImageResult = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult -> + saveImage(result) { fileUri -> + setAndSaveBannerImage(fileUri) + } + } + + private fun saveImage(result: ActivityResult, doIfResultOk: (uri: Uri) -> Unit) { + val resultCode = result.resultCode + val data = result.data + when (resultCode) { + Activity.RESULT_OK -> { + data?.data?.let { uri -> + doIfResultOk(uri) + } + } + ImagePicker.RESULT_ERROR -> { + showToast(ImagePicker.getError(data)) + } + else -> { + showToast("Task Cancelled") + } } } @@ -288,6 +310,7 @@ class UserInfoFragment : Fragment() { _binding = null } + companion object { private const val PICK_IMAGE_REQUEST = 9002 private const val PICK_BANNER_REQUEST = 9004 diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/menu/SongMenuHelper.kt b/app/src/main/java/code/name/monkey/retromusic/helper/menu/SongMenuHelper.kt index 26dfe7a8c..7c1d48847 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/menu/SongMenuHelper.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/menu/SongMenuHelper.kt @@ -124,7 +124,7 @@ object SongMenuHelper : KoinComponent { return true } R.id.action_add_to_blacklist -> { - BlacklistStore.getInstance(App.getContext()).addPath(File(song.data)) + BlacklistStore.getInstance(activity).addPath(File(song.data)) libraryViewModel.forceReload(ReloadType.Songs) return true } diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt index 6c47487e5..c3283be21 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt @@ -24,7 +24,6 @@ import androidx.core.graphics.BlendModeCompat.SRC_IN import androidx.core.text.parseAsHtml import androidx.fragment.app.DialogFragment import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEDialogPreference -import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.dialogs.BlacklistFolderChooserDialog import code.name.monkey.retromusic.extensions.accentTextColor @@ -90,7 +89,7 @@ class BlacklistPreferenceDialog : DialogFragment(), BlacklistFolderChooserDialog ).parseAsHtml() ) .setPositiveButton(R.string.remove_action) { _, _ -> - BlacklistStore.getInstance(App.getContext()) + BlacklistStore.getInstance(requireContext()) .removePath(File(paths[which])) refreshBlacklistData() } @@ -119,13 +118,13 @@ class BlacklistPreferenceDialog : DialogFragment(), BlacklistFolderChooserDialog private lateinit var paths: ArrayList private fun refreshBlacklistData() { - this.paths = BlacklistStore.getInstance(App.getContext()).paths + this.paths = BlacklistStore.getInstance(requireContext()).paths val dialog = dialog as MaterialAlertDialogBuilder? dialog?.setItems(paths.toTypedArray(), null) } override fun onFolderSelection(dialog: BlacklistFolderChooserDialog, folder: File) { - BlacklistStore.getInstance(App.getContext()).addPath(folder) + BlacklistStore.getInstance(requireContext()).addPath(folder) refreshBlacklistData() } } 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 326384006..614a2f519 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 @@ -6,6 +6,7 @@ import android.net.ConnectivityManager import androidx.core.content.edit import androidx.core.content.getSystemService import androidx.core.content.res.use +import androidx.fragment.app.Fragment import androidx.preference.PreferenceManager import androidx.viewpager.widget.ViewPager import code.name.monkey.appthemehelper.util.VersionUtils @@ -98,10 +99,10 @@ object PreferenceUtil { val languageCode: String get() = sharedPreferences.getString(LANGUAGE_NAME, "auto") ?: "auto" - var userName + var Fragment.userName get() = sharedPreferences.getString( USER_NAME, - App.getContext().getString(R.string.user_name) + getString(R.string.user_name) ) set(value) = sharedPreferences.edit { putString(USER_NAME, value) diff --git a/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt b/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt index 1f69fbc4f..39da2f4c2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt @@ -1,31 +1,28 @@ package code.name.monkey.retromusic.util.theme +import android.content.Context import androidx.annotation.StyleRes import androidx.appcompat.app.AppCompatDelegate -import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.extensions.generalThemeValue import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.theme.ThemeMode.* -object ThemeManager { - - @StyleRes - fun getThemeResValue(): Int = - if (PreferenceUtil.materialYou) { - R.style.Theme_RetroMusic_MD3 - } else { - when (App.getContext().generalThemeValue) { - LIGHT -> R.style.Theme_RetroMusic_Light - DARK -> R.style.Theme_RetroMusic_Base - BLACK -> R.style.Theme_RetroMusic_Black - AUTO -> R.style.Theme_RetroMusic_FollowSystem - } +@StyleRes +fun Context.getThemeResValue(): Int = + if (PreferenceUtil.materialYou) { + R.style.Theme_RetroMusic_MD3 + } else { + when (generalThemeValue) { + LIGHT -> R.style.Theme_RetroMusic_Light + DARK -> R.style.Theme_RetroMusic_Base + BLACK -> R.style.Theme_RetroMusic_Black + AUTO -> R.style.Theme_RetroMusic_FollowSystem } - - fun getNightMode(): Int = when (App.getContext().generalThemeValue) { - LIGHT -> AppCompatDelegate.MODE_NIGHT_NO - DARK -> AppCompatDelegate.MODE_NIGHT_YES - else -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM } + +fun Context.getNightMode(): Int = when (generalThemeValue) { + LIGHT -> AppCompatDelegate.MODE_NIGHT_NO + DARK -> AppCompatDelegate.MODE_NIGHT_YES + else -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM } \ No newline at end of file From b6fee3e25d985d06507364c13d0a1145c66ea024 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sun, 17 Apr 2022 15:14:02 +0530 Subject: [PATCH 18/65] Fixed incorrect windowBackground --- app/src/main/res/values-v27/styles_parents.xml | 4 ++-- app/src/main/res/values/styles.xml | 2 +- app/src/main/res/values/styles_parents.xml | 5 +++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-v27/styles_parents.xml b/app/src/main/res/values-v27/styles_parents.xml index 3197150b8..e50cf022c 100644 --- a/app/src/main/res/values-v27/styles_parents.xml +++ b/app/src/main/res/values-v27/styles_parents.xml @@ -35,7 +35,7 @@ @style/MaterialButtonTheme @color/darkColorSurface - @color/window_color_dark + ?colorSurface @style/Widget.Material3.CardView.Elevated @color/elevationOverlay @drawable/popup_background @@ -45,7 +45,7 @@ @drawable/round_selector @drawable/rect_selector @style/ThemeOverlay.AppCompat.Light - @color/md_white_1000 + ?colorSurface @style/Widget.ActionButton.Overflow @style/MaterialAlertDialogTheme @style/MaterialButtonTheme diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index cf42f1d20..775104217 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -7,7 +7,7 @@ - + @@ -142,23 +142,7 @@ center_vertical|end - + + diff --git a/app/src/main/res/values-v31/styles.xml b/app/src/main/res/values-v31/styles.xml index f10e95659..7437a1528 100644 --- a/app/src/main/res/values-v31/styles.xml +++ b/app/src/main/res/values-v31/styles.xml @@ -11,6 +11,8 @@ ?attr/colorSurface + diff --git a/app/src/main/res/xml/pref_general.xml b/app/src/main/res/xml/pref_general.xml index a075b334a..0fc27c2e5 100755 --- a/app/src/main/res/xml/pref_general.xml +++ b/app/src/main/res/xml/pref_general.xml @@ -17,7 +17,6 @@ app:icon="@drawable/ic_color_lens" /> From f55c7ac21c3e0fca3b2189c197881840cb570c00 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Mon, 2 May 2022 18:39:25 +0530 Subject: [PATCH 54/65] Transparent background for WebView in Changelog --- .../name/monkey/retromusic/activities/WhatsNewFragment.kt | 6 ++---- app/src/main/res/layout/fragment_whats_new.xml | 3 ++- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewFragment.kt b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewFragment.kt index c6d8a783b..299658032 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewFragment.kt @@ -53,9 +53,7 @@ class WhatsNewFragment : BottomSheetDialogFragment() { // Inject color values for WebView body background and links val isDark = isWindowBackgroundDark(requireContext()) val accentColor = accentColor() - val backgroundColor = colorToCSS( - surfaceColor(Color.parseColor(if (isDark) "#424242" else "#ffffff")) - ) + binding.webView.setBackgroundColor(0) val contentColor = colorToCSS(Color.parseColor(if (isDark) "#ffffff" else "#000000")) val textColor = colorToCSS(Color.parseColor(if (isDark) "#60FFFFFF" else "#80000000")) val accentColorString = colorToCSS(accentColor()) @@ -69,7 +67,7 @@ class WhatsNewFragment : BottomSheetDialogFragment() { val changeLog = buf.toString() .replace( "{style-placeholder}", - "body { background-color: $backgroundColor; color: $contentColor; } li {color: $textColor;} h3 {color: $accentColorString;} .tag {background-color: $accentColorString; color: $accentTextColor; } div{background-color: $cardBackgroundColor;}" + "body { color: $contentColor; } li {color: $textColor;} h3 {color: $accentColorString;} .tag {background-color: $accentColorString; color: $accentTextColor; } div{background-color: $cardBackgroundColor;}" ) .replace("{link-color}", colorToCSS(accentColor())) .replace( diff --git a/app/src/main/res/layout/fragment_whats_new.xml b/app/src/main/res/layout/fragment_whats_new.xml index 9888221b5..afb6fca00 100644 --- a/app/src/main/res/layout/fragment_whats_new.xml +++ b/app/src/main/res/layout/fragment_whats_new.xml @@ -3,7 +3,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:fitsSystemWindows="true"> + android:fitsSystemWindows="true" + android:paddingTop="8dp"> Date: Mon, 2 May 2022 19:13:17 +0530 Subject: [PATCH 55/65] Optimized imports and removed unused dependencies --- app/build.gradle | 8 +++----- .../name/monkey/retromusic/activities/WhatsNewFragment.kt | 1 - .../retromusic/activities/bugreport/model/DeviceInfo.kt | 1 - .../monkey/retromusic/extensions/ContextExtensions.kt | 1 - 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f26c19790..5462a7967 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { vectorDrawables.useSupportLibrary = true applicationId "code.name.monkey.retromusic" - versionCode 10574 - versionName '5.8.1' + versionCode 10575 + versionName '5.8.2' buildConfigField("String", "GOOGLE_PLAY_LICENSING_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"") } @@ -132,7 +132,6 @@ dependencies { implementation "com.afollestad.material-dialogs:core:$material_dialog_version" implementation "com.afollestad.material-dialogs:input:$material_dialog_version" implementation "com.afollestad.material-dialogs:color:$material_dialog_version" - implementation "com.afollestad.material-dialogs:bottomsheets:$material_dialog_version" implementation 'com.afollestad:material-cab:2.0.1' @@ -171,6 +170,5 @@ dependencies { 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.github.amitshekhariitbhu:Android-Debug-Database:1.0.6' - //debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1' + debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1' } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewFragment.kt b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewFragment.kt index 299658032..dd0f50821 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewFragment.kt @@ -19,7 +19,6 @@ import code.name.monkey.retromusic.Constants 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 com.google.android.material.bottomsheet.BottomSheetDialogFragment import java.nio.charset.StandardCharsets 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 5d1ea8977..142d3fed5 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,7 +2,6 @@ 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 diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt index e5581b2e6..8cbc4be53 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt @@ -3,7 +3,6 @@ package code.name.monkey.retromusic.extensions import android.content.Context import android.content.res.Configuration import android.widget.Toast -import androidx.annotation.DrawableRes import androidx.annotation.StringRes fun Context.showToast(@StringRes stringRes: Int, duration: Int = Toast.LENGTH_SHORT) { From 95e39e4f4c469002c0a7d32b0d1e3fb84c8f8d33 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 3 May 2022 20:31:53 +0530 Subject: [PATCH 56/65] Better BottomNavigationView hide/unhide animation --- .../base/AbsSlidingMusicPanelActivity.kt | 13 ++- .../retromusic/extensions/ViewExtensions.kt | 82 +++++++++++++++++++ 2 files changed, 87 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index ef42c8ebf..62101f2d4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -366,18 +366,15 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { ) return } - val translationY = - if (visible) 0F else dip(R.dimen.bottom_nav_height).toFloat() + windowInsets.safeGetBottomInsets() val mAnimate = animate && bottomSheetBehavior.state == STATE_COLLAPSED if (mAnimate) { - binding.bottomNavigationView.translateYAnimate(translationY).doOnEnd { - if (visible && bottomSheetBehavior.state != STATE_EXPANDED) { - binding.bottomNavigationView.bringToFront() - } + if (visible) { + binding.bottomNavigationView.bringToFront() + binding.bottomNavigationView.show() + } else { + binding.bottomNavigationView.hide() } } else { - binding.bottomNavigationView.translationY = - translationY binding.bottomNavigationView.isVisible = false if (visible && bottomSheetBehavior.state != STATE_EXPANDED) { binding.bottomNavigationView.bringToFront() diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt index 2c7dc75ed..2ca9bbd37 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt @@ -16,10 +16,13 @@ package code.name.monkey.retromusic.extensions import android.animation.Animator import android.animation.ObjectAnimator +import android.animation.ValueAnimator +import android.graphics.drawable.BitmapDrawable import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.ViewTreeObserver +import android.view.animation.AnimationUtils import android.view.inputmethod.InputMethodManager import android.widget.EditText import androidx.annotation.LayoutRes @@ -32,6 +35,7 @@ import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil +import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomsheet.BottomSheetBehavior import dev.chrisbanes.insetter.applyInsetter @@ -58,6 +62,84 @@ fun EditText.appHandleColor(): EditText { return this } +/** + * Potentially animate showing a [BottomNavigationView]. + * + * Abruptly changing the visibility leads to a re-layout of main content, animating + * `translationY` leaves a gap where the view was that content does not fill. + * + * Instead, take a snapshot of the view, and animate this in, only changing the visibility (and + * thus layout) when the animation completes. + */ +fun BottomNavigationView.show() { + if (isVisible) return + + val parent = parent as ViewGroup + // View needs to be laid out to create a snapshot & know position to animate. If view isn't + // laid out yet, need to do this manually. + if (!isLaidOut) { + measure( + View.MeasureSpec.makeMeasureSpec(parent.width, View.MeasureSpec.EXACTLY), + View.MeasureSpec.makeMeasureSpec(parent.height, View.MeasureSpec.AT_MOST) + ) + layout(parent.left, parent.height - measuredHeight, parent.right, parent.height) + } + + val drawable = BitmapDrawable(context.resources, drawToBitmap()) + drawable.setBounds(left, parent.height, right, parent.height + height) + parent.overlay.add(drawable) + ValueAnimator.ofInt(parent.height, top).apply { + duration = 300 + interpolator = AnimationUtils.loadInterpolator( + context, + android.R.interpolator.linear_out_slow_in + ) + addUpdateListener { + val newTop = it.animatedValue as Int + drawable.setBounds(left, newTop, right, newTop + height) + } + doOnEnd { + parent.overlay.remove(drawable) + isVisible = true + } + start() + } +} + +/** + * Potentially animate hiding a [BottomNavigationView]. + * + * Abruptly changing the visibility leads to a re-layout of main content, animating + * `translationY` leaves a gap where the view was that content does not fill. + * + * Instead, take a snapshot, instantly hide the view (so content lays out to fill), then animate + * out the snapshot. + */ +fun BottomNavigationView.hide() { + if (isGone) return + + val drawable = BitmapDrawable(context.resources, drawToBitmap()) + val parent = parent as ViewGroup + drawable.setBounds(left, top, right, bottom) + parent.overlay.add(drawable) + isGone = true + ValueAnimator.ofInt(top, parent.height).apply { + duration = 300L + interpolator = AnimationUtils.loadInterpolator( + context, + android.R.interpolator.fast_out_linear_in + ) + addUpdateListener { + val newTop = it.animatedValue as Int + drawable.setBounds(left, newTop, right, newTop + height) + } + doOnEnd { + parent.overlay.remove(drawable) + } + start() + } +} + fun View.translateYAnimate(value: Float): Animator { return ObjectAnimator.ofFloat(this, "translationY", value) .apply { From a0c745641a8c4c5ce8177d4701841366d6bf034e Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 4 May 2022 17:53:54 +0530 Subject: [PATCH 57/65] Fix Backup & Restore not restoring user profile images --- .../monkey/retromusic/fragments/backup/RestoreActivity.kt | 6 +++--- app/src/main/res/layout/activity_restore.xml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/RestoreActivity.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/RestoreActivity.kt index c5e554533..6ef85b503 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/RestoreActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/RestoreActivity.kt @@ -44,15 +44,15 @@ class RestoreActivity : AppCompatActivity() { } binding.restoreButton.accentColor() binding.checkArtistImages.addAccentColor() - binding.checkDatabases.addAccentColor() + binding.checkPlaylists.addAccentColor() binding.checkSettings.addAccentColor() binding.checkUserImages.addAccentColor() binding.restoreButton.setOnClickListener { val backupContents = mutableListOf() - if (binding.checkDatabases.isChecked) backupContents.add(PLAYLISTS) + if (binding.checkPlaylists.isChecked) backupContents.add(PLAYLISTS) if (binding.checkArtistImages.isChecked) backupContents.add(CUSTOM_ARTIST_IMAGES) if (binding.checkSettings.isChecked) backupContents.add(SETTINGS) - if (binding.checkUserImages.isChecked) backupContents.add(SETTINGS) + if (binding.checkUserImages.isChecked) backupContents.add(USER_IMAGES) lifecycleScope.launch(Dispatchers.IO) { if (backupUri != null) { contentResolver.openInputStream(backupUri)?.use { diff --git a/app/src/main/res/layout/activity_restore.xml b/app/src/main/res/layout/activity_restore.xml index e9e922f8d..8e3d5f561 100644 --- a/app/src/main/res/layout/activity_restore.xml +++ b/app/src/main/res/layout/activity_restore.xml @@ -34,7 +34,7 @@ android:text="@string/action_settings" /> Date: Wed, 4 May 2022 23:51:23 +0530 Subject: [PATCH 58/65] Fix ChromeCast crash and bugs --- .../code/name/monkey/retromusic/MainModule.kt | 4 ++ .../activities/base/AbsCastActivity.kt | 63 +++++++++---------- .../name/monkey/retromusic/cast/CastHelper.kt | 1 - .../cast/RetroSessionManagerListener.kt | 16 ++--- .../monkey/retromusic/cast/RetroWebServer.kt | 7 --- .../retromusic/helper/MusicPlayerRemote.kt | 1 - .../res/layout/cast_controller_layout.xml | 6 -- .../res/layout/sliding_music_panel_layout.xml | 8 +-- 8 files changed, 43 insertions(+), 63 deletions(-) delete mode 100644 app/src/main/res/layout/cast_controller_layout.xml 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 3e7021f3a..c1c58f3de 100644 --- a/app/src/main/java/code/name/monkey/retromusic/MainModule.kt +++ b/app/src/main/java/code/name/monkey/retromusic/MainModule.kt @@ -4,6 +4,7 @@ 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.PlaylistWithSongs @@ -103,6 +104,9 @@ private val mainModule = module { single { androidContext().contentResolver } + single { + RetroWebServer(get()) + } } private val dataModule = module { single { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsCastActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsCastActivity.kt index 360bb3853..ffd0eaadc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsCastActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsCastActivity.kt @@ -1,8 +1,6 @@ package code.name.monkey.retromusic.activities.base import android.os.Bundle -import android.view.ViewStub -import code.name.monkey.retromusic.R import code.name.monkey.retromusic.cast.CastHelper import code.name.monkey.retromusic.cast.RetroSessionManagerListener import code.name.monkey.retromusic.cast.RetroWebServer @@ -12,36 +10,40 @@ import com.google.android.gms.cast.framework.CastSession import com.google.android.gms.cast.framework.SessionManager import com.google.android.gms.common.ConnectionResult import com.google.android.gms.common.GoogleApiAvailability +import org.koin.android.ext.android.inject abstract class AbsCastActivity : AbsSlidingMusicPanelActivity() { private var mCastSession: CastSession? = null private lateinit var sessionManager: SessionManager - private var webServer: RetroWebServer? = null + private val webServer: RetroWebServer by inject() + private var playServicesAvailable: Boolean = false private val sessionManagerListener by lazy { object : RetroSessionManagerListener { override fun onSessionStarting(castSession: CastSession) { - invalidateOptionsMenu() - webServer = RetroWebServer.getInstance(this@AbsCastActivity) - webServer?.start() + webServer.start() } override fun onSessionStarted(castSession: CastSession, p1: String) { invalidateOptionsMenu() mCastSession = castSession - loadCastQueue(MusicPlayerRemote.position) - inflateCastController() + loadCastQueue() MusicPlayerRemote.isCasting = true setAllowDragging(false) collapsePanel() } - override fun onSessionEnding(p0: CastSession) { - invalidateOptionsMenu() - webServer?.stop() + override fun onSessionEnding(castSession: CastSession) { + MusicPlayerRemote.isCasting = false + castSession.remoteMediaClient?.let { + val position = it.mediaQueue.indexOfItemWithId(it.currentItem?.itemId ?: 0) + val progress = it.approximateStreamPosition + MusicPlayerRemote.position = position + MusicPlayerRemote.seekTo(progress.toInt()) + } } override fun onSessionEnded(castSession: CastSession, p1: Int) { @@ -49,15 +51,18 @@ abstract class AbsCastActivity : AbsSlidingMusicPanelActivity() { if (mCastSession == castSession) { mCastSession = null } - MusicPlayerRemote.isCasting = false setAllowDragging(true) + webServer.stop() } override fun onSessionResumed(castSession: CastSession, p1: Boolean) { invalidateOptionsMenu() mCastSession = castSession - loadCastQueue(MusicPlayerRemote.position) - inflateCastController() + webServer.start() + mCastSession?.remoteMediaClient?.let { + loadCastQueue(it.mediaQueue.indexOfItemWithId(it.currentItem?.itemId ?: 0), it.approximateStreamPosition) + } + MusicPlayerRemote.isCasting = true setAllowDragging(false) collapsePanel() @@ -70,6 +75,7 @@ abstract class AbsCastActivity : AbsSlidingMusicPanelActivity() { } MusicPlayerRemote.isCasting = false setAllowDragging(true) + webServer.stop() } } } @@ -92,6 +98,7 @@ abstract class AbsCastActivity : AbsSlidingMusicPanelActivity() { } override fun onResume() { + super.onResume() if (playServicesAvailable) { sessionManager.addSessionManagerListener( sessionManagerListener, @@ -101,7 +108,6 @@ abstract class AbsCastActivity : AbsSlidingMusicPanelActivity() { mCastSession = sessionManager.currentCastSession } } - super.onResume() } override fun onPause() { @@ -115,33 +121,26 @@ abstract class AbsCastActivity : AbsSlidingMusicPanelActivity() { } } - private fun songChanged(position: Int) { - loadCastQueue(position) - } - - fun loadCastQueue(position: Int) { - if (!MusicPlayerRemote.playingQueue.isNullOrEmpty()) { - mCastSession?.let { + fun loadCastQueue( + position: Int = MusicPlayerRemote.position, + progress: Long = MusicPlayerRemote.songProgressMillis.toLong(), + ) { + mCastSession?.let { + if (!MusicPlayerRemote.playingQueue.isNullOrEmpty()) { CastHelper.castQueue( it, MusicPlayerRemote.playingQueue, position, - MusicPlayerRemote.songProgressMillis.toLong() + progress ) } - } else { - mCastSession?.let { CastHelper.castSong(it, MusicPlayerRemote.currentSong) } } } - override fun onPlayingMetaChanged() { - super.onPlayingMetaChanged() + override fun onQueueChanged() { + super.onQueueChanged() if (playServicesAvailable) { - songChanged(MusicPlayerRemote.position) + loadCastQueue() } } - - fun inflateCastController() { - findViewById(R.id.cast_stub)?.inflate() - } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.kt b/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.kt index 426fdcb9a..05839216f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.kt +++ b/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.kt @@ -79,6 +79,5 @@ object CastHelper { setMetadata(musicMetadata) setStreamDuration(song.duration) }.build() - } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/RetroSessionManagerListener.kt b/app/src/main/java/code/name/monkey/retromusic/cast/RetroSessionManagerListener.kt index 32817ab40..020dd21b2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/cast/RetroSessionManagerListener.kt +++ b/app/src/main/java/code/name/monkey/retromusic/cast/RetroSessionManagerListener.kt @@ -4,19 +4,11 @@ import com.google.android.gms.cast.framework.CastSession import com.google.android.gms.cast.framework.SessionManagerListener interface RetroSessionManagerListener : SessionManagerListener { - override fun onSessionResuming(p0: CastSession, p1: String) { + override fun onSessionResuming(p0: CastSession, p1: String) {} - } + override fun onSessionStartFailed(p0: CastSession, p1: Int) {} - override fun onSessionStartFailed(p0: CastSession, p1: Int) { + override fun onSessionResumeFailed(p0: CastSession, p1: Int) {} - } - - override fun onSessionResumeFailed(p0: CastSession, p1: Int) { - - } - - override fun onSessionEnding(p0: CastSession) { - - } + override fun onSessionEnding(castSession: CastSession) {} } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt b/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt index cd76776e5..658e1bf88 100644 --- a/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt +++ b/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt @@ -17,13 +17,6 @@ class RetroWebServer(val context: Context) : NanoHTTPD(SERVER_PORT) { const val PART_COVER_ART = "coverart" const val PART_SONG = "song" const val PARAM_ID = "id" - private var mRetroWebServer: RetroWebServer? = null - fun getInstance(context: Context): RetroWebServer { - if (mRetroWebServer == null) { - mRetroWebServer = RetroWebServer(context) - } - return mRetroWebServer!! - } } override fun serve(session: IHTTPSession?): Response { diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt b/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt index 9974df37b..fb03f95a6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt @@ -49,7 +49,6 @@ object MusicPlayerRemote : KoinComponent { if (value) { musicService?.quit() } - println(value.toString() + "" + isCasting.toString()) } @JvmStatic diff --git a/app/src/main/res/layout/cast_controller_layout.xml b/app/src/main/res/layout/cast_controller_layout.xml deleted file mode 100644 index 1047760d2..000000000 --- a/app/src/main/res/layout/cast_controller_layout.xml +++ /dev/null @@ -1,6 +0,0 @@ - - \ No newline at end of file diff --git a/app/src/main/res/layout/sliding_music_panel_layout.xml b/app/src/main/res/layout/sliding_music_panel_layout.xml index f75941155..faf3cd16e 100644 --- a/app/src/main/res/layout/sliding_music_panel_layout.xml +++ b/app/src/main/res/layout/sliding_music_panel_layout.xml @@ -39,11 +39,11 @@ android:layout_height="@dimen/mini_player_height" tools:layout="@layout/fragment_mini_player" /> - + android:layout_height="wrap_content" /> From 82d4649346f46703b62819b2556c6d5adba80537 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 5 May 2022 00:04:52 +0530 Subject: [PATCH 59/65] Bump version & update changelog --- app/build.gradle | 4 ++-- app/src/main/assets/retro-changelog.html | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5462a7967..f6d3ec5e4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { vectorDrawables.useSupportLibrary = true applicationId "code.name.monkey.retromusic" - versionCode 10575 - versionName '5.8.2' + versionCode 10576 + versionName '5.8.3' buildConfigField("String", "GOOGLE_PLAY_LICENSING_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"") } diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html index 1d9e08272..d110ac751 100644 --- a/app/src/main/assets/retro-changelog.html +++ b/app/src/main/assets/retro-changelog.html @@ -62,6 +62,22 @@ +

+
May 07, 2022
+

v5.8.3

+

What's New

+
    +
  • Swipe down to dismiss Mini player
  • +
  • Add support for Just Black with Material You
  • +
+

Fixed

+
    +
  • Fixed sharing of files from SD Card
  • +
  • Fix ChromeCast crash and bugs
  • +
  • Fix Audio Crossfade
  • +
  • Tried to fix incorrect song data in notification
  • +
+
April 8, 2022

v5.8.0

From ee300722af86d7d48a8ec665ac355f818492fb9d Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 5 May 2022 10:48:21 +0530 Subject: [PATCH 60/65] Migrate to coroutines from AsyncTask for saving of custom artist images --- .../artists/AbsArtistDetailsFragment.kt | 26 ++-- .../retromusic/misc/DialogAsyncTask.java | 104 -------------- .../retromusic/misc/WeakContextAsyncTask.kt | 1 - .../retromusic/util/CustomArtistImageUtil.kt | 135 ++++++++---------- 4 files changed, 80 insertions(+), 186 deletions(-) delete mode 100644 app/src/main/java/code/name/monkey/retromusic/misc/DialogAsyncTask.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/misc/WeakContextAsyncTask.kt diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AbsArtistDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AbsArtistDetailsFragment.kt index 17ddfd0d4..eaa4a621b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AbsArtistDetailsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AbsArtistDetailsFragment.kt @@ -173,7 +173,7 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm private fun loadBiography( name: String, - lang: String? = Locale.getDefault().language + lang: String? = Locale.getDefault().language, ) { biography = null this.lang = lang @@ -274,12 +274,16 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm R.id.action_set_artist_image -> { val intent = Intent(Intent.ACTION_GET_CONTENT) intent.type = "image/*" - selectImageLauncher.launch(Intent.createChooser(intent, getString(R.string.pick_from_local_storage))) + selectImageLauncher.launch(Intent.createChooser(intent, + getString(R.string.pick_from_local_storage))) return true } R.id.action_reset_artist_image -> { showToast(resources.getString(R.string.updating)) - CustomArtistImageUtil.getInstance(requireContext()).resetCustomArtistImage(artist) + lifecycleScope.launch { + CustomArtistImageUtil.getInstance(requireContext()) + .resetCustomArtistImage(artist) + } forceDownload = true return true } @@ -335,14 +339,18 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm } } - private val selectImageLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {result-> - if (result.resultCode == Activity.RESULT_OK) { - result.data?.data?.let { - CustomArtistImageUtil.getInstance(requireContext()) - .setCustomArtistImage(artist, it) + private val selectImageLauncher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == Activity.RESULT_OK) { + result.data?.data?.let { + lifecycleScope.launch { + CustomArtistImageUtil.getInstance(requireContext()) + .setCustomArtistImage(artist, it) + } + + } } } - } override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.menu_artist_detail, menu) diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/DialogAsyncTask.java b/app/src/main/java/code/name/monkey/retromusic/misc/DialogAsyncTask.java deleted file mode 100644 index 38e41539b..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/misc/DialogAsyncTask.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * 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.misc; - -import android.app.Dialog; -import android.content.Context; -import android.os.Handler; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import java.lang.ref.WeakReference; - -public abstract class DialogAsyncTask - extends WeakContextAsyncTask { - private final int delay; - - private WeakReference dialogWeakReference; - - private boolean supposedToBeDismissed; - - public DialogAsyncTask(Context context) { - this(context, 0); - } - - public DialogAsyncTask(Context context, int showDelay) { - super(context); - this.delay = showDelay; - dialogWeakReference = new WeakReference<>(null); - } - - @Override - protected void onPreExecute() { - super.onPreExecute(); - if (delay > 0) { - new Handler().postDelayed(this::initAndShowDialog, delay); - } else { - initAndShowDialog(); - } - } - - private void initAndShowDialog() { - Context context = getContext(); - if (!supposedToBeDismissed && context != null) { - Dialog dialog = createDialog(context); - dialogWeakReference = new WeakReference<>(dialog); - dialog.show(); - } - } - - @SuppressWarnings("unchecked") - @Override - protected void onProgressUpdate(Progress... values) { - super.onProgressUpdate(values); - Dialog dialog = getDialog(); - if (dialog != null) { - onProgressUpdate(dialog, values); - } - } - - @SuppressWarnings("unchecked") - protected void onProgressUpdate(@NonNull Dialog dialog, Progress... values) {} - - @Nullable - protected Dialog getDialog() { - return dialogWeakReference.get(); - } - - @Override - protected void onCancelled(Result result) { - super.onCancelled(result); - tryToDismiss(); - } - - @Override - protected void onPostExecute(Result result) { - super.onPostExecute(result); - tryToDismiss(); - } - - private void tryToDismiss() { - supposedToBeDismissed = true; - try { - Dialog dialog = getDialog(); - if (dialog != null) dialog.dismiss(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - protected abstract Dialog createDialog(@NonNull Context context); -} diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/WeakContextAsyncTask.kt b/app/src/main/java/code/name/monkey/retromusic/misc/WeakContextAsyncTask.kt deleted file mode 100644 index 9b9b4896b..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/misc/WeakContextAsyncTask.kt +++ /dev/null @@ -1 +0,0 @@ -/* * Copyright (c) 2019 Hemanth Savarala. * * Licensed under the GNU General Public License v3 * * This is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by * the Free Software Foundation either version 3 of the License, or (at your option) any later version. * * 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.misc import android.content.Context import android.os.AsyncTask import java.lang.ref.WeakReference abstract class WeakContextAsyncTask(context: Context) : AsyncTask() { private val contextWeakReference: WeakReference = WeakReference(context) protected val context: Context? get() = contextWeakReference.get() } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt index fa6e52fd3..39994818f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt @@ -14,23 +14,20 @@ package code.name.monkey.retromusic.util -import android.annotation.SuppressLint import android.content.Context import android.content.SharedPreferences import android.graphics.Bitmap -import android.graphics.drawable.Drawable import android.net.Uri -import android.os.AsyncTask import android.provider.MediaStore import android.widget.Toast import androidx.core.content.edit import code.name.monkey.retromusic.App import code.name.monkey.retromusic.extensions.showToast +import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.model.Artist -import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy -import com.bumptech.glide.request.target.SimpleTarget -import com.bumptech.glide.request.transition.Transition +import kotlinx.coroutines.Dispatchers.IO +import kotlinx.coroutines.withContext import java.io.File import java.io.IOException import java.util.* @@ -43,77 +40,71 @@ class CustomArtistImageUtil private constructor(context: Context) { Context.MODE_PRIVATE ) - fun setCustomArtistImage(artist: Artist, uri: Uri) { - Glide.with(App.getContext()) - .asBitmap() - .load(uri) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .skipMemoryCache(true) - .into(object : SimpleTarget() { - override fun onLoadFailed(errorDrawable: Drawable?) { - super.onLoadFailed(errorDrawable) - App.getContext().showToast("Load Failed") + suspend fun setCustomArtistImage(artist: Artist, uri: Uri) { + val context = App.getContext() + withContext(IO) { + runCatching { + GlideApp.with(context) + .asBitmap() + .load(uri) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .skipMemoryCache(true) + .submit() + .get() + } + .onSuccess { + saveImage(context, artist, it) } - - @SuppressLint("StaticFieldLeak") - override fun onResourceReady(resource: Bitmap, transition: Transition?) { - object : AsyncTask() { - override fun doInBackground(vararg params: Void): Void? { - val dir = File(App.getContext().filesDir, FOLDER_NAME) - if (!dir.exists()) { - if (!dir.mkdirs()) { // create the folder - return null - } - } - val file = File(dir, getFileName(artist)) - - var succesful = false - try { - file.outputStream().buffered().use { bos -> - succesful = ImageUtil.resizeBitmap(resource, 2048) - .compress(Bitmap.CompressFormat.JPEG, 100, bos) - } - } catch (e: IOException) { - App.getContext().showToast(e.toString(), Toast.LENGTH_LONG) - } - - if (succesful) { - mPreferences.edit { putBoolean(getFileName(artist), true) } - ArtistSignatureUtil.getInstance(App.getContext()) - .updateArtistSignature(artist.name) - App.getContext().contentResolver.notifyChange( - MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, - null - ) // trigger media store changed to force artist image reload - } - return null - } - }.execute() + .onFailure { + context.showToast("Load Failed") } - }) + } } - @SuppressLint("StaticFieldLeak") - fun resetCustomArtistImage(artist: Artist) { - object : AsyncTask() { - @SuppressLint("ApplySharedPref") - override fun doInBackground(vararg params: Void): Void? { - mPreferences.edit(commit = true) { putBoolean(getFileName(artist), false) } - ArtistSignatureUtil.getInstance(App.getContext()).updateArtistSignature(artist.name) - App.getContext().contentResolver.notifyChange( - MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, - null - ) // trigger media store changed to force artist image reload - - val file = getFile(artist) - if (!file.exists()) { - return null - } else { - file.delete() - } - return null + private fun saveImage(context: Context, artist: Artist, bitmap: Bitmap) { + val dir = File(context.filesDir, FOLDER_NAME) + if (!dir.exists()) { + if (!dir.mkdirs()) { // create the folder + return } - }.execute() + } + val file = File(dir, getFileName(artist)) + + var successful = false + try { + file.outputStream().buffered().use { bos -> + successful = ImageUtil.resizeBitmap(bitmap, 2048) + .compress(Bitmap.CompressFormat.JPEG, 100, bos) + } + } catch (e: IOException) { + context.showToast(e.toString(), Toast.LENGTH_LONG) + } + + if (successful) { + mPreferences.edit { putBoolean(getFileName(artist), true) } + ArtistSignatureUtil.getInstance(context) + .updateArtistSignature(artist.name) + context.contentResolver.notifyChange( + MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, + null + ) // trigger media store changed to force artist image reload + } + } + + suspend fun resetCustomArtistImage(artist: Artist) { + withContext(IO) { + mPreferences.edit { putBoolean(getFileName(artist), false) } + ArtistSignatureUtil.getInstance(App.getContext()).updateArtistSignature(artist.name) + App.getContext().contentResolver.notifyChange( + MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, + null + ) // trigger media store changed to force artist image reload + + val file = getFile(artist) + if (file.exists()) { + file.delete() + } + } } // shared prefs saves us many IO operations From 08f4c62b4ac2262321b5291a1bd6b96f58e3491f Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 5 May 2022 11:55:54 +0530 Subject: [PATCH 61/65] Migrated some legacy functions to kotlin extensions --- .../retromusic/adapter/SongFileAdapter.kt | 8 +- .../appshortcuts/AppShortcutIconGenerator.kt | 25 +- .../retromusic/appwidgets/AppWidgetBig.kt | 81 +++---- .../retromusic/appwidgets/AppWidgetCard.kt | 105 ++++----- .../retromusic/appwidgets/AppWidgetCircle.kt | 61 +++-- .../retromusic/appwidgets/AppWidgetClassic.kt | 81 +++---- .../retromusic/appwidgets/AppWidgetMD3.kt | 105 ++++----- .../retromusic/appwidgets/AppWidgetSmall.kt | 69 +++--- .../retromusic/appwidgets/AppWidgetText.kt | 77 +++---- .../appwidgets/base/BaseAppWidget.kt | 12 - .../retromusic/auto/MediaItemBuilder.kt | 11 +- .../extensions/ContextExtensions.kt | 10 +- .../extensions/DrawableExtensions.kt | 2 +- .../fragments/base/AbsPlayerFragment.kt | 12 +- .../full/FullPlaybackControlsFragment.kt | 16 +- .../PlayingNotificationClassic.kt | 27 +-- .../monkey/retromusic/util/ImageUtil.java | 215 ------------------ .../name/monkey/retromusic/util/RetroUtil.kt | 35 +-- 18 files changed, 290 insertions(+), 662 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt index 3192d1700..f6ed05809 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt @@ -25,13 +25,13 @@ import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.audiocover.AudioFileCover import code.name.monkey.retromusic.interfaces.ICabHolder import code.name.monkey.retromusic.interfaces.ICallbacks import code.name.monkey.retromusic.util.MusicUtil -import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.signature.MediaStoreSignature import me.zhanghai.android.fastscroll.PopupTextProvider @@ -45,7 +45,7 @@ class SongFileAdapter( private var dataSet: List, private val itemLayoutRes: Int, private val iCallbacks: ICallbacks?, - iCabHolder: ICabHolder? + iCabHolder: ICabHolder?, ) : AbsMultiSelectAdapter( activity, iCabHolder, R.menu.menu_media_selection ), PopupTextProvider { @@ -110,9 +110,7 @@ class SongFileAdapter( ) ) } else { - val error = RetroUtil.getTintedVectorDrawable( - activity, R.drawable.ic_file_music, iconColor - ) + val error = activity.getTintedDrawable(R.drawable.ic_file_music, iconColor) GlideApp.with(activity) .load(AudioFileCover(file.path)) .diskCacheStrategy(DiskCacheStrategy.NONE) diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.kt index 78d8d90a2..ad8f964e7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.kt @@ -15,19 +15,16 @@ package code.name.monkey.retromusic.appshortcuts import android.content.Context -import android.graphics.Bitmap -import android.graphics.drawable.Drawable import android.graphics.drawable.Icon import android.graphics.drawable.LayerDrawable import android.os.Build import android.util.TypedValue import androidx.annotation.RequiresApi -import androidx.core.graphics.applyCanvas -import androidx.core.graphics.createBitmap +import androidx.core.graphics.drawable.toBitmap import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil @RequiresApi(Build.VERSION_CODES.N_MR1) object AppShortcutIconGenerator { @@ -64,25 +61,17 @@ object AppShortcutIconGenerator { context: Context, iconId: Int, foregroundColor: Int, - backgroundColor: Int + backgroundColor: Int, ): Icon { // Get and tint foreground and background drawables - val vectorDrawable = RetroUtil.getTintedVectorDrawable(context, iconId, foregroundColor) - val backgroundDrawable = RetroUtil.getTintedVectorDrawable( - context, R.drawable.ic_app_shortcut_background, backgroundColor - ) + val vectorDrawable = context.getTintedDrawable(iconId, foregroundColor) + val backgroundDrawable = + context.getTintedDrawable(R.drawable.ic_app_shortcut_background, backgroundColor) // Squash the two drawables together val layerDrawable = LayerDrawable(arrayOf(backgroundDrawable, vectorDrawable)) // Return as an Icon - return Icon.createWithBitmap(drawableToBitmap(layerDrawable)) - } - - private fun drawableToBitmap(drawable: Drawable): Bitmap { - return createBitmap(drawable.intrinsicWidth, drawable.intrinsicHeight).applyCanvas { - drawable.setBounds(0, 0, width, height) - drawable.draw(this) - } + return Icon.createWithBitmap(layerDrawable.toBitmap()) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt index ac2f6359f..0aea9d366 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt @@ -22,11 +22,13 @@ import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.view.View import android.widget.RemoteViews +import androidx.core.graphics.drawable.toBitmap import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.service.MusicService @@ -36,7 +38,7 @@ import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_ import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.Glide -import com.bumptech.glide.request.target.SimpleTarget +import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.transition.Transition @@ -58,31 +60,24 @@ class AppWidgetBig : BaseAppWidget() { ) appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art) appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_next, - MaterialValueHelper.getPrimaryTextColor(context, false) - ), 1f - ) + R.id.button_next, context.getTintedDrawable( + R.drawable.ic_skip_next, + MaterialValueHelper.getPrimaryTextColor(context, false) + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_previous, - MaterialValueHelper.getPrimaryTextColor(context, false) - ), 1f - ) + R.id.button_prev, + context.getTintedDrawable( + R.drawable.ic_skip_previous, + MaterialValueHelper.getPrimaryTextColor(context, false) + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_play_arrow_white_32dp, - MaterialValueHelper.getPrimaryTextColor(context, false) - ), 1f - ) + R.id.button_toggle_play_pause, + context.getTintedDrawable( + R.drawable.ic_play_arrow_white_32dp, + MaterialValueHelper.getPrimaryTextColor(context, false) + ).toBitmap() ) linkButtons(context, appWidgetView) @@ -123,33 +118,27 @@ class AppWidgetBig : BaseAppWidget() { val playPauseRes = if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow_white_32dp appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - playPauseRes, - primaryColor - ), 1f - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable( + playPauseRes, + primaryColor + ).toBitmap() ) // Set prev/next button drawables appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_next, - primaryColor - ), 1f - ) + R.id.button_next, + service.getTintedDrawable( + R.drawable.ic_skip_next, + primaryColor + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_previous, - primaryColor - ), 1f - ) + R.id.button_prev, + service.getTintedDrawable( + R.drawable.ic_skip_previous, + primaryColor + ).toBitmap() ) // Link actions buttons to intents @@ -167,10 +156,10 @@ class AppWidgetBig : BaseAppWidget() { .asBitmap() //.checkIgnoreMediaStore() .load(RetroGlideExtension.getSongModel(song)) - .into(object : SimpleTarget(widgetImageSize, widgetImageSize) { + .into(object : CustomTarget(widgetImageSize, widgetImageSize) { override fun onResourceReady( resource: Bitmap, - transition: Transition? + transition: Transition?, ) { update(resource) } @@ -180,6 +169,8 @@ class AppWidgetBig : BaseAppWidget() { update(null) } + override fun onLoadCleared(placeholder: Drawable?) {} + private fun update(bitmap: Bitmap?) { if (bitmap == null) { appWidgetView.setImageViewResource( diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt index a6e6524b9..80e0b09ea 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt @@ -22,11 +22,13 @@ import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.view.View import android.widget.RemoteViews +import androidx.core.graphics.drawable.toBitmap import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper @@ -34,11 +36,9 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_SKIP import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE -import code.name.monkey.retromusic.util.ImageUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.Glide -import com.bumptech.glide.request.target.SimpleTarget +import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.transition.Transition @@ -56,31 +56,25 @@ class AppWidgetCard : BaseAppWidget() { appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art) val secondaryColor = MaterialValueHelper.getSecondaryTextColor(context, true) appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_next, - secondaryColor - ), 1f - ) + R.id.button_next, + context.getTintedDrawable( + R.drawable.ic_skip_next, + secondaryColor + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_previous, - secondaryColor - ), 1f - ) + R.id.button_prev, + context.getTintedDrawable( + R.drawable.ic_skip_previous, + secondaryColor + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_play_arrow_white_32dp, - secondaryColor - ), 1f - ) + R.id.button_toggle_play_pause, + context.getTintedDrawable( + R.drawable.ic_play_arrow_white_32dp, + secondaryColor + ).toBitmap() ) linkButtons(context, appWidgetView) @@ -109,33 +103,27 @@ class AppWidgetCard : BaseAppWidget() { val playPauseRes = if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow_white_32dp appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - playPauseRes, - MaterialValueHelper.getSecondaryTextColor(service, true) - ), 1f - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable( + playPauseRes, + MaterialValueHelper.getSecondaryTextColor(service, true) + ).toBitmap() ) // Set prev/next button drawables appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_next, - MaterialValueHelper.getSecondaryTextColor(service, true) - ), 1f - ) + R.id.button_next, + service.getTintedDrawable( + R.drawable.ic_skip_next, + MaterialValueHelper.getSecondaryTextColor(service, true) + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_previous, - MaterialValueHelper.getSecondaryTextColor(service, true) - ), 1f - ) + R.id.button_prev, + service.getTintedDrawable( + R.drawable.ic_skip_previous, + MaterialValueHelper.getSecondaryTextColor(service, true) + ).toBitmap() ) // Link actions buttons to intents @@ -158,10 +146,10 @@ class AppWidgetCard : BaseAppWidget() { target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) .load(RetroGlideExtension.getSongModel(song)) .centerCrop() - .into(object : SimpleTarget(imageSize, imageSize) { + .into(object : CustomTarget(imageSize, imageSize) { override fun onResourceReady( resource: BitmapPaletteWrapper, - transition: Transition? + transition: Transition?, ) { val palette = resource.palette update( @@ -180,30 +168,23 @@ class AppWidgetCard : BaseAppWidget() { update(null, MaterialValueHelper.getSecondaryTextColor(service, true)) } + override fun onLoadCleared(placeholder: Drawable?) {} + private fun update(bitmap: Bitmap?, color: Int) { // Set correct drawable for pause state appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, playPauseRes, color - ) - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable(playPauseRes, color).toBitmap() ) // Set prev/next button drawables appWidgetView.setImageViewBitmap( - R.id.button_next, ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, R.drawable.ic_skip_next, color - ) - ) + R.id.button_next, + service.getTintedDrawable(R.drawable.ic_skip_next, color).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, R.drawable.ic_skip_previous, color - ) - ) + R.id.button_prev, + service.getTintedDrawable(R.drawable.ic_skip_previous, color).toBitmap() ) val image = getAlbumArtDrawable(service, bitmap) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCircle.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCircle.kt index ba6abe7f7..cdb48a063 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCircle.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCircle.kt @@ -21,18 +21,19 @@ import android.content.Intent import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.widget.RemoteViews +import androidx.core.graphics.drawable.toBitmap import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE import code.name.monkey.retromusic.service.MusicService.Companion.TOGGLE_FAVORITE -import code.name.monkey.retromusic.util.ImageUtil import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil @@ -57,13 +58,11 @@ class AppWidgetCircle : BaseAppWidget() { appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art) val secondaryColor = MaterialValueHelper.getSecondaryTextColor(context, true) appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_play_arrow, - secondaryColor - ), 1f - ) + R.id.button_toggle_play_pause, + context.getTintedDrawable( + R.drawable.ic_play_arrow, + secondaryColor + ).toBitmap() ) linkButtons(context, appWidgetView) @@ -83,13 +82,11 @@ class AppWidgetCircle : BaseAppWidget() { val playPauseRes = if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - playPauseRes, - MaterialValueHelper.getSecondaryTextColor(service, true) - ), 1f - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable( + playPauseRes, + MaterialValueHelper.getSecondaryTextColor(service, true) + ).toBitmap() ) val isFavorite = runBlocking(Dispatchers.IO) { return@runBlocking MusicUtil.repository.isSongFavorite(song.id) @@ -97,13 +94,11 @@ class AppWidgetCircle : BaseAppWidget() { val favoriteRes = if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border appWidgetView.setImageViewBitmap( - R.id.button_toggle_favorite, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - favoriteRes, - MaterialValueHelper.getSecondaryTextColor(service, true) - ), 1f - ) + R.id.button_toggle_favorite, + service.getTintedDrawable( + favoriteRes, + MaterialValueHelper.getSecondaryTextColor(service, true) + ).toBitmap() ) // Link actions buttons to intents @@ -125,7 +120,7 @@ class AppWidgetCircle : BaseAppWidget() { .into(object : CustomTarget(imageSize, imageSize) { override fun onResourceReady( resource: BitmapPaletteWrapper, - transition: Transition? + transition: Transition?, ) { val palette = resource.palette update( @@ -147,20 +142,18 @@ class AppWidgetCircle : BaseAppWidget() { private fun update(bitmap: Bitmap?, color: Int) { // Set correct drawable for pause state appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, playPauseRes, color - ) - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable( + playPauseRes, color + ).toBitmap() ) // Set favorite button drawables appWidgetView.setImageViewBitmap( - R.id.button_toggle_favorite, ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, favoriteRes, color - ) - ) + R.id.button_toggle_favorite, + service.getTintedDrawable( + favoriteRes, color + ).toBitmap() ) if (bitmap != null) { appWidgetView.setImageViewBitmap(R.id.image, bitmap) @@ -169,7 +162,7 @@ class AppWidgetCircle : BaseAppWidget() { pushUpdate(service, appWidgetIds, appWidgetView) } - override fun onLoadCleared(placeholder: Drawable?) { } + override fun onLoadCleared(placeholder: Drawable?) {} }) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt index e6db7985a..2f1d7b173 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt @@ -23,11 +23,13 @@ import android.graphics.Color import android.graphics.drawable.Drawable import android.view.View import android.widget.RemoteViews +import androidx.core.graphics.drawable.toBitmap import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper @@ -35,11 +37,9 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_SKIP import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE -import code.name.monkey.retromusic.util.ImageUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.Glide -import com.bumptech.glide.request.target.SimpleTarget +import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.transition.Transition @@ -57,33 +57,27 @@ class AppWidgetClassic : BaseAppWidget() { appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art) appWidgetView.setImageViewBitmap( R.id.button_next, - createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_next, - MaterialValueHelper.getSecondaryTextColor(context, true) - ), 1f - ) + + context.getTintedDrawable( + R.drawable.ic_skip_next, + MaterialValueHelper.getSecondaryTextColor(context, true) + ).toBitmap() ) appWidgetView.setImageViewBitmap( R.id.button_prev, - createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_previous, - MaterialValueHelper.getSecondaryTextColor(context, true) - ), 1f - ) + + context.getTintedDrawable( + R.drawable.ic_skip_previous, + MaterialValueHelper.getSecondaryTextColor(context, true) + ).toBitmap() ) appWidgetView.setImageViewBitmap( R.id.button_toggle_play_pause, - createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_play_arrow_white_32dp, - MaterialValueHelper.getSecondaryTextColor(context, true) - ), 1f - ) + + context.getTintedDrawable( + R.drawable.ic_play_arrow_white_32dp, + MaterialValueHelper.getSecondaryTextColor(context, true) + ).toBitmap() ) linkButtons(context, appWidgetView) @@ -129,10 +123,10 @@ class AppWidgetClassic : BaseAppWidget() { .load(RetroGlideExtension.getSongModel(song)) //.checkIgnoreMediaStore() .centerCrop() - .into(object : SimpleTarget(imageSize, imageSize) { + .into(object : CustomTarget(imageSize, imageSize) { override fun onResourceReady( resource: BitmapPaletteWrapper, - transition: Transition? + transition: Transition?, ) { val palette = resource.palette update( @@ -153,41 +147,34 @@ class AppWidgetClassic : BaseAppWidget() { update(null, Color.WHITE) } + override fun onLoadCleared(placeholder: Drawable?) {} + private fun update(bitmap: Bitmap?, color: Int) { // Set correct drawable for pause state val playPauseRes = if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow appWidgetView.setImageViewBitmap( R.id.button_toggle_play_pause, - ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, - playPauseRes, - color - ) - ) + service.getTintedDrawable( + playPauseRes, + color + ).toBitmap() ) // Set prev/next button drawables appWidgetView.setImageViewBitmap( R.id.button_next, - ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_next, - color - ) - ) + service.getTintedDrawable( + R.drawable.ic_skip_next, + color + ).toBitmap() ) appWidgetView.setImageViewBitmap( R.id.button_prev, - ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_previous, - color - ) - ) + service.getTintedDrawable( + R.drawable.ic_skip_previous, + color + ).toBitmap() ) val image = getAlbumArtDrawable(service, bitmap) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetMD3.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetMD3.kt index 9be2d108d..cc07fa1d2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetMD3.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetMD3.kt @@ -22,11 +22,13 @@ import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.view.View import android.widget.RemoteViews +import androidx.core.graphics.drawable.toBitmap import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper @@ -35,11 +37,9 @@ import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_SKIP import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE import code.name.monkey.retromusic.util.DensityUtil -import code.name.monkey.retromusic.util.ImageUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.Glide -import com.bumptech.glide.request.target.SimpleTarget +import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.transition.Transition @@ -57,31 +57,25 @@ class AppWidgetMD3 : BaseAppWidget() { appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art) val secondaryColor = MaterialValueHelper.getSecondaryTextColor(context, true) appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_next, - secondaryColor - ), 1f - ) + R.id.button_next, + context.getTintedDrawable( + R.drawable.ic_skip_next, + secondaryColor + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_previous, - secondaryColor - ), 1f - ) + R.id.button_prev, + context.getTintedDrawable( + R.drawable.ic_skip_previous, + secondaryColor + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_play_arrow_white_32dp, - secondaryColor - ), 1f - ) + R.id.button_toggle_play_pause, + context.getTintedDrawable( + R.drawable.ic_play_arrow_white_32dp, + secondaryColor + ).toBitmap() ) linkButtons(context, appWidgetView) @@ -110,33 +104,27 @@ class AppWidgetMD3 : BaseAppWidget() { val playPauseRes = if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow_white_32dp appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - playPauseRes, - MaterialValueHelper.getSecondaryTextColor(service, true) - ), 1f - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable( + playPauseRes, + MaterialValueHelper.getSecondaryTextColor(service, true) + ).toBitmap() ) // Set prev/next button drawables appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_next, - MaterialValueHelper.getSecondaryTextColor(service, true) - ), 1f - ) + R.id.button_next, + service.getTintedDrawable( + R.drawable.ic_skip_next, + MaterialValueHelper.getSecondaryTextColor(service, true) + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_previous, - MaterialValueHelper.getSecondaryTextColor(service, true) - ), 1f - ) + R.id.button_prev, + service.getTintedDrawable( + R.drawable.ic_skip_previous, + MaterialValueHelper.getSecondaryTextColor(service, true) + ).toBitmap() ) // Link actions buttons to intents @@ -159,10 +147,10 @@ class AppWidgetMD3 : BaseAppWidget() { target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) .load(RetroGlideExtension.getSongModel(song)) .centerCrop() - .into(object : SimpleTarget(imageSize, imageSize) { + .into(object : CustomTarget(imageSize, imageSize) { override fun onResourceReady( resource: BitmapPaletteWrapper, - transition: Transition? + transition: Transition?, ) { val palette = resource.palette update( @@ -181,30 +169,23 @@ class AppWidgetMD3 : BaseAppWidget() { update(null, MaterialValueHelper.getSecondaryTextColor(service, true)) } + override fun onLoadCleared(placeholder: Drawable?) {} + private fun update(bitmap: Bitmap?, color: Int) { // Set correct drawable for pause state appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, playPauseRes, color - ) - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable(playPauseRes, color).toBitmap() ) // Set prev/next button drawables appWidgetView.setImageViewBitmap( - R.id.button_next, ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, R.drawable.ic_skip_next, color - ) - ) + R.id.button_next, + service.getTintedDrawable(R.drawable.ic_skip_next, color).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, R.drawable.ic_skip_previous, color - ) - ) + R.id.button_prev, + service.getTintedDrawable(R.drawable.ic_skip_previous, color).toBitmap() ) val image = getAlbumArtDrawable(service, bitmap) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt index 42677486e..12246e860 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt @@ -22,11 +22,13 @@ import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.view.View import android.widget.RemoteViews +import androidx.core.graphics.drawable.toBitmap import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper @@ -35,9 +37,8 @@ import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_SKIP import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.Glide -import com.bumptech.glide.request.target.SimpleTarget +import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.transition.Transition @@ -55,33 +56,26 @@ class AppWidgetSmall : BaseAppWidget() { appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art) appWidgetView.setImageViewBitmap( R.id.button_next, - createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_next, - MaterialValueHelper.getSecondaryTextColor(context, true) - ), 1f - ) + context.getTintedDrawable( + R.drawable.ic_skip_next, + MaterialValueHelper.getSecondaryTextColor(context, true) + ).toBitmap() ) appWidgetView.setImageViewBitmap( R.id.button_prev, - createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_previous, - MaterialValueHelper.getSecondaryTextColor(context, true) - ), 1f - ) + + context.getTintedDrawable( + R.drawable.ic_skip_previous, + MaterialValueHelper.getSecondaryTextColor(context, true) + ).toBitmap() ) appWidgetView.setImageViewBitmap( R.id.button_toggle_play_pause, - createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_play_arrow_white_32dp, - MaterialValueHelper.getSecondaryTextColor(context, true) - ), 1f - ) + + context.getTintedDrawable( + R.drawable.ic_play_arrow_white_32dp, + MaterialValueHelper.getSecondaryTextColor(context, true) + ).toBitmap() ) linkButtons(context, appWidgetView) @@ -132,10 +126,10 @@ class AppWidgetSmall : BaseAppWidget() { //.checkIgnoreMediaStore() .load(RetroGlideExtension.getSongModel(song)) .centerCrop() - .into(object : SimpleTarget(imageSize, imageSize) { + .into(object : CustomTarget(imageSize, imageSize) { override fun onResourceReady( resource: BitmapPaletteWrapper, - transition: Transition? + transition: Transition?, ) { val palette = resource.palette update( @@ -154,32 +148,27 @@ class AppWidgetSmall : BaseAppWidget() { update(null, MaterialValueHelper.getSecondaryTextColor(service, true)) } + override fun onLoadCleared(placeholder: Drawable?) { + update(null, MaterialValueHelper.getSecondaryTextColor(service, true)) + } + private fun update(bitmap: Bitmap?, color: Int) { // Set correct drawable for pause state val playPauseRes = if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow_white_32dp appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, playPauseRes, color - ), 1f - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable(playPauseRes, color).toBitmap() ) // Set prev/next button drawables appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, R.drawable.ic_skip_next, color - ), 1f - ) + R.id.button_next, + service.getTintedDrawable(R.drawable.ic_skip_next, color).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, R.drawable.ic_skip_previous, color - ), 1f - ) + R.id.button_prev, + service.getTintedDrawable(R.drawable.ic_skip_previous, color).toBitmap() ) val image = getAlbumArtDrawable(service, bitmap) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt index c8005768d..5e9004e98 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt @@ -21,47 +21,41 @@ import android.content.Intent import android.view.View import android.widget.RemoteViews import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.toBitmap import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_SKIP import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil class AppWidgetText : BaseAppWidget() { override fun defaultAppWidget(context: Context, appWidgetIds: IntArray) { val appWidgetView = RemoteViews(context.packageName, R.layout.app_widget_text) appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, R.drawable.ic_skip_next, ContextCompat.getColor( - context, R.color.md_white_1000 - ) - ), 1f - ) + R.id.button_next, + context.getTintedDrawable(R.drawable.ic_skip_next, ContextCompat.getColor( + context, R.color.md_white_1000 + )).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, R.drawable.ic_skip_previous, ContextCompat.getColor( - context, R.color.md_white_1000 - ) - ), 1f + R.id.button_prev, + context.getTintedDrawable(R.drawable.ic_skip_previous, ContextCompat.getColor( + context, R.color.md_white_1000 ) + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, R.drawable.ic_play_arrow_white_32dp, ContextCompat.getColor( - context, R.color.md_white_1000 - ) - ), 1f + R.id.button_toggle_play_pause, + context.getTintedDrawable(R.drawable.ic_play_arrow_white_32dp, ContextCompat.getColor( + context, R.color.md_white_1000 ) + ).toBitmap() ) appWidgetView.setTextColor( @@ -131,36 +125,29 @@ class AppWidgetText : BaseAppWidget() { val playPauseRes = if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow_white_32dp appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, playPauseRes, ContextCompat.getColor( - service, R.color.md_white_1000 - ) - ), 1f - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable(playPauseRes, ContextCompat.getColor( + service, R.color.md_white_1000) + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( + R.id.button_next, + service.getTintedDrawable( + R.drawable.ic_skip_next, + ContextCompat.getColor( service, - R.drawable.ic_skip_next, - ContextCompat.getColor( - service, - R.color.md_white_1000 - ) - ), 1f - ) + R.color.md_white_1000 + ) + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_previous, - ContextCompat.getColor( - service, R.color.md_white_1000 - ) - ), 1f - ) + R.id.button_prev, + service.getTintedDrawable( + R.drawable.ic_skip_previous, + ContextCompat.getColor( + service, R.color.md_white_1000 + ) + ).toBitmap() ) pushUpdate(service.applicationContext, appWidgetIds, appWidgetView) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt index 24b73c085..e460b7956 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt @@ -25,8 +25,6 @@ import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable import android.widget.RemoteViews import androidx.core.content.ContextCompat -import androidx.core.graphics.applyCanvas -import androidx.core.graphics.createBitmap import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.model.Song @@ -169,16 +167,6 @@ abstract class BaseAppWidget : AppWidgetProvider() { return rounded } - fun createBitmap(drawable: Drawable, sizeMultiplier: Float): Bitmap { - return createBitmap( - (drawable.intrinsicWidth * sizeMultiplier).toInt(), - (drawable.intrinsicHeight * sizeMultiplier).toInt(), - ).applyCanvas { - drawable.setBounds(0, 0, this.width, this.height) - drawable.draw(this) - } - } - protected fun composeRoundedRectPath( rect: RectF, tl: Float, diff --git a/app/src/main/java/code/name/monkey/retromusic/auto/MediaItemBuilder.kt b/app/src/main/java/code/name/monkey/retromusic/auto/MediaItemBuilder.kt index b94a60274..534b0ec52 100644 --- a/app/src/main/java/code/name/monkey/retromusic/auto/MediaItemBuilder.kt +++ b/app/src/main/java/code/name/monkey/retromusic/auto/MediaItemBuilder.kt @@ -4,8 +4,9 @@ import android.content.Context import android.net.Uri import android.support.v4.media.MediaBrowserCompat import android.support.v4.media.MediaDescriptionCompat +import androidx.core.content.res.ResourcesCompat +import androidx.core.graphics.drawable.toBitmap import androidx.core.os.bundleOf -import code.name.monkey.retromusic.util.ImageUtil internal object AutoMediaItem { @@ -13,7 +14,7 @@ internal object AutoMediaItem { return Builder(context) } - internal class Builder(val mContext: Context) { + internal class Builder(private val mContext: Context) { private var mBuilder: MediaDescriptionCompat.Builder? private var mFlags = 0 fun path(fullPath: String): Builder { @@ -42,13 +43,11 @@ internal object AutoMediaItem { fun icon(iconDrawableId: Int): Builder { mBuilder?.setIconBitmap( - ImageUtil.createBitmap( - ImageUtil.getVectorDrawable( + ResourcesCompat.getDrawable( mContext.resources, iconDrawableId, mContext.theme - ) - ) + )?.toBitmap() ) return this } diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt index 8cbc4be53..a479903d7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt @@ -2,8 +2,12 @@ package code.name.monkey.retromusic.extensions import android.content.Context import android.content.res.Configuration +import android.graphics.drawable.Drawable import android.widget.Toast +import androidx.annotation.ColorInt +import androidx.annotation.DrawableRes import androidx.annotation.StringRes +import androidx.core.content.ContextCompat fun Context.showToast(@StringRes stringRes: Int, duration: Int = Toast.LENGTH_SHORT) { showToast(getString(stringRes), duration) @@ -15,4 +19,8 @@ fun Context.showToast(message: String, duration: Int = Toast.LENGTH_SHORT) { val Context.isLandscape: Boolean get() = resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE -val Context.isTablet: Boolean get() = resources.configuration.smallestScreenWidthDp >= 600 \ No newline at end of file +val Context.isTablet: Boolean get() = resources.configuration.smallestScreenWidthDp >= 600 + +fun Context.getTintedDrawable(@DrawableRes id: Int, @ColorInt color: Int): Drawable { + return ContextCompat.getDrawable(this, id)?.tint(color)!! +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/DrawableExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/DrawableExtensions.kt index db06f137f..c23f0e979 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/DrawableExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/DrawableExtensions.kt @@ -27,7 +27,7 @@ import androidx.core.graphics.drawable.toBitmap fun Context.scaledDrawableResources( @DrawableRes id: Int, @DimenRes width: Int, - @DimenRes height: Int + @DimenRes height: Int, ): Drawable { val w = resources.getDimension(width).toInt() val h = resources.getDimension(height).toInt() 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 03dfc27f3..082f1ce4b 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 @@ -20,7 +20,6 @@ import android.content.ContentUris import android.content.Context import android.content.Intent import android.graphics.drawable.AnimatedVectorDrawable -import android.graphics.drawable.Drawable import android.media.MediaMetadataRetriever import android.os.Bundle import android.provider.MediaStore @@ -59,7 +58,6 @@ import code.name.monkey.retromusic.repository.RealRepository import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.RingtoneManager import com.google.android.material.bottomsheet.BottomSheetBehavior import kotlinx.coroutines.Dispatchers.IO @@ -81,7 +79,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme private var playerAlbumCoverFragment: PlayerAlbumCoverFragment? = null override fun onMenuItemClick( - item: MenuItem + item: MenuItem, ): Boolean { val song = MusicPlayerRemote.currentSong when (item.itemId) { @@ -212,8 +210,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme private fun showLyricsIcon(item: MenuItem) { val icon = if (PreferenceUtil.showLyrics) R.drawable.ic_lyrics else R.drawable.ic_lyrics_outline - val drawable: Drawable = RetroUtil.getTintedVectorDrawable( - requireContext(), + val drawable = requireContext().getTintedDrawable( icon, toolbarIconColor() ) @@ -268,8 +265,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme } else { if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border } - val drawable: Drawable = RetroUtil.getTintedVectorDrawable( - requireContext(), + val drawable = requireContext().getTintedDrawable( icon, toolbarIconColor() ) @@ -337,7 +333,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme e1: MotionEvent?, e2: MotionEvent?, distanceX: Float, - distanceY: Float + distanceY: Float, ): Boolean { return when { abs(distanceX) > abs(distanceY) -> { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt index 51cfe3308..08831b0c6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt @@ -18,7 +18,6 @@ import android.content.Intent import android.content.res.ColorStateList import android.graphics.Color import android.graphics.drawable.AnimatedVectorDrawable -import android.graphics.drawable.Drawable import android.os.Bundle import android.view.MenuItem import android.view.View @@ -34,10 +33,7 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentFullPlayerControlsBinding import code.name.monkey.retromusic.db.PlaylistEntity import code.name.monkey.retromusic.db.toSongEntity -import code.name.monkey.retromusic.extensions.applyColor -import code.name.monkey.retromusic.extensions.getSongInfo -import code.name.monkey.retromusic.extensions.hide -import code.name.monkey.retromusic.extensions.show +import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment @@ -48,7 +44,6 @@ import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -237,17 +232,14 @@ class FullPlaybackControlsFragment : } else { if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border } - val drawable: Drawable = RetroUtil.getTintedVectorDrawable( - requireContext(), + val drawable = requireContext().getTintedDrawable( icon, Color.WHITE ) binding.songFavourite.apply { setImageDrawable(drawable) - getDrawable().also { - if (it is AnimatedVectorDrawable) { - it.start() - } + if (drawable is AnimatedVectorDrawable) { + drawable.start() } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationClassic.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationClassic.kt index 2e39e6cdd..7acb1d21c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationClassic.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationClassic.kt @@ -33,6 +33,7 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.extensions.isColorLight import code.name.monkey.retromusic.extensions.isSystemDarkModeEnabled import code.name.monkey.retromusic.extensions.toBitmap @@ -56,7 +57,7 @@ import com.bumptech.glide.request.transition.Transition */ @SuppressLint("RestrictedApi") class PlayingNotificationClassic( - val context: Context + val context: Context, ) : PlayingNotification(context) { private var primaryColor: Int = 0 @@ -115,7 +116,7 @@ class PlayingNotificationClassic( ) { override fun onResourceReady( resource: BitmapPaletteWrapper, - transition: Transition? + transition: Transition?, ) { val colors = MediaNotificationProcessor(context, resource.bitmap) update(resource.bitmap, colors.backgroundColor) @@ -184,20 +185,17 @@ class PlayingNotificationClassic( val secondary = MaterialValueHelper.getSecondaryTextColor(context, dark) primaryColor = primary - val close = RetroUtil.getTintedVectorDrawable( - context, + val close = context.getTintedDrawable( R.drawable.ic_close, primary ).toBitmap() val prev = - RetroUtil.getTintedVectorDrawable( - context, + context.getTintedDrawable( R.drawable.ic_skip_previous_round_white_32dp, primary ).toBitmap() val next = - RetroUtil.getTintedVectorDrawable( - context, + context.getTintedDrawable( R.drawable.ic_skip_next_round_white_32dp, primary ).toBitmap() @@ -222,16 +220,14 @@ class PlayingNotificationClassic( contentView.setImageViewBitmap( R.id.smallIcon, - RetroUtil.getTintedVectorDrawable( - context, + context.getTintedDrawable( R.drawable.ic_notification, secondary ).toBitmap(0.6f) ) bigContentView.setImageViewBitmap( R.id.smallIcon, - RetroUtil.getTintedVectorDrawable( - context, + context.getTintedDrawable( R.drawable.ic_notification, secondary ).toBitmap(0.6f) @@ -241,8 +237,7 @@ class PlayingNotificationClassic( } private fun getPlayPauseBitmap(isPlaying: Boolean): Bitmap { - return RetroUtil.getTintedVectorDrawable( - context, + return context.getTintedDrawable( if (isPlaying) R.drawable.ic_pause_white_48dp else @@ -262,7 +257,7 @@ class PlayingNotificationClassic( private fun buildPendingIntent( context: Context, action: String, - serviceName: ComponentName? + serviceName: ComponentName?, ): PendingIntent { val intent = Intent(action) intent.component = serviceName @@ -299,7 +294,7 @@ class PlayingNotificationClassic( companion object { fun from( context: Context, - notificationManager: NotificationManager + notificationManager: NotificationManager, ): PlayingNotification { if (VersionUtils.hasOreo()) { createNotificationChannel(context, notificationManager) diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java index d67f0721c..b87eceab9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java @@ -14,128 +14,17 @@ package code.name.monkey.retromusic.util; -import android.content.Context; -import android.content.res.Resources; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Matrix; -import android.graphics.Paint; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffColorFilter; -import android.graphics.drawable.Drawable; -import androidx.annotation.ColorInt; -import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.res.ResourcesCompat; -import androidx.exifinterface.media.ExifInterface; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; - -import code.name.monkey.appthemehelper.util.TintHelper; /** * Created on : June 18, 2016 Author : zetbaitsu Name : Zetra GitHub : https://github.com/zetbaitsu */ public class ImageUtil { - private static final int TOLERANCE = 20; - // Alpha amount for which values below are considered transparent. - private static final int ALPHA_TOLERANCE = 50; - private static int[] mTempBuffer; - private ImageUtil() {} - public static boolean isGrayscale(Bitmap bitmap) { - final int height = bitmap.getHeight(); - final int width = bitmap.getWidth(); - int size = height * width; - ensureBufferSize(size); - bitmap.getPixels(mTempBuffer, 0, width, 0, 0, width, height); - for (int i = 0; i < size; i++) { - if (!isGrayscale(mTempBuffer[i])) { - return false; - } - } - return true; - } - - public static Bitmap createBitmap(Drawable drawable) { - return createBitmap(drawable, 1f); - } - - public static Bitmap createBitmap(Drawable drawable, float sizeMultiplier) { - Bitmap bitmap = - Bitmap.createBitmap( - (int) (drawable.getIntrinsicWidth() * sizeMultiplier), - (int) (drawable.getIntrinsicHeight() * sizeMultiplier), - Bitmap.Config.ARGB_8888); - Canvas c = new Canvas(bitmap); - drawable.setBounds(0, 0, c.getWidth(), c.getHeight()); - drawable.draw(c); - return bitmap; - } - - public static Drawable getTintedVectorDrawable( - @NonNull Resources res, - @DrawableRes int resId, - @Nullable Resources.Theme theme, - @ColorInt int color) { - return TintHelper.createTintedDrawable(getVectorDrawable(res, resId, theme), color); - } - - public static Drawable getTintedVectorDrawable( - @NonNull Context context, @DrawableRes int id, @ColorInt int color) { - return TintHelper.createTintedDrawable( - getVectorDrawable(context.getResources(), id, context.getTheme()), color); - } - - public static Drawable getVectorDrawable(@NonNull Context context, @DrawableRes int id) { - return getVectorDrawable(context.getResources(), id, context.getTheme()); - } - - public static Drawable getVectorDrawable( - @NonNull Resources res, @DrawableRes int resId, @Nullable Resources.Theme theme) { - return ResourcesCompat.getDrawable(res,resId, theme); - } - - /** Makes sure that {@code mTempBuffer} has at least length {@code size}. */ - private static void ensureBufferSize(int size) { - if (mTempBuffer == null || mTempBuffer.length < size) { - mTempBuffer = new int[size]; - } - } - - public static Bitmap setBitmapColor(Bitmap bitmap, int color) { - Bitmap result = - Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth() - 1, bitmap.getHeight() - 1); - Paint paint = new Paint(); - paint.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP)); - - Canvas canvas = new Canvas(result); - canvas.drawBitmap(result, 0, 0, paint); - - return result; - } - - public static boolean isGrayscale(int color) { - int alpha = 0xFF & (color >> 24); - if (alpha < ALPHA_TOLERANCE) { - return true; - } - int r = 0xFF & (color >> 16); - int g = 0xFF & (color >> 8); - int b = 0xFF & color; - return Math.abs(r - g) < TOLERANCE - && Math.abs(r - b) < TOLERANCE - && Math.abs(g - b) < TOLERANCE; - } // Amount (max is 255) that two channels can differ before the color is no longer "gray". - public static Bitmap resizeBitmap(@NonNull Bitmap src, int maxForSmallerSize) { int width = src.getWidth(); int height = src.getHeight(); @@ -185,108 +74,4 @@ public class ImageUtil { return inSampleSize; } - - static File compressImage( - File imageFile, - int reqWidth, - int reqHeight, - Bitmap.CompressFormat compressFormat, - int quality, - String destinationPath) - throws IOException { - FileOutputStream fileOutputStream = null; - File file = new File(destinationPath).getParentFile(); - if (!file.exists()) { - file.mkdirs(); - } - try { - fileOutputStream = new FileOutputStream(destinationPath); - // write the compressed bitmap at the destination specified by destinationPath. - decodeSampledBitmapFromFile(imageFile, reqWidth, reqHeight) - .compress(compressFormat, quality, fileOutputStream); - } finally { - if (fileOutputStream != null) { - fileOutputStream.flush(); - fileOutputStream.close(); - } - } - - return new File(destinationPath); - } - - static Bitmap decodeSampledBitmapFromFile(File imageFile, int reqWidth, int reqHeight) - throws IOException { - // First decode with inJustDecodeBounds=true to check dimensions - BitmapFactory.Options options = new BitmapFactory.Options(); - options.inJustDecodeBounds = true; - BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options); - - // Calculate inSampleSize - options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); - - // Decode bitmap with inSampleSize set - options.inJustDecodeBounds = false; - - Bitmap scaledBitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options); - - // check the rotation of the image and display it properly - ExifInterface exif; - exif = new ExifInterface(imageFile.getAbsolutePath()); - int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 0); - Matrix matrix = new Matrix(); - if (orientation == 6) { - matrix.postRotate(90); - } else if (orientation == 3) { - matrix.postRotate(180); - } else if (orientation == 8) { - matrix.postRotate(270); - } - scaledBitmap = - Bitmap.createBitmap( - scaledBitmap, 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true); - return scaledBitmap; - } - - private static int calculateInSampleSize( - BitmapFactory.Options options, int reqWidth, int reqHeight) { - // Raw height and width of image - final int height = options.outHeight; - final int width = options.outWidth; - int inSampleSize = 1; - - if (height > reqHeight || width > reqWidth) { - - final int halfHeight = height / 2; - final int halfWidth = width / 2; - - // Calculate the largest inSampleSize value that is a power of 2 and keeps both - // height and width larger than the requested height and width. - while ((halfHeight / inSampleSize) >= reqHeight && (halfWidth / inSampleSize) >= reqWidth) { - inSampleSize *= 2; - } - } - - return inSampleSize; - } - - @NonNull - public static Bitmap getResizedBitmap(@NonNull Bitmap image, int maxSize) { - int width = image.getWidth(); - int height = image.getHeight(); - - float bitmapRatio = (float) width / (float) height; - if (bitmapRatio > 1) { - width = maxSize; - height = (int) (width / bitmapRatio); - } else { - height = maxSize; - width = (int) (height * bitmapRatio); - } - return Bitmap.createScaledBitmap(image, width, height, true); - } - - public static Bitmap resize(InputStream stream, int scaledWidth, int scaledHeight) { - final Bitmap bitmap = BitmapFactory.decodeStream(stream); - return Bitmap.createScaledBitmap(bitmap, scaledWidth, scaledHeight, true); - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.kt index 25223ec32..60f4f5823 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.kt @@ -15,14 +15,7 @@ package code.name.monkey.retromusic.util import android.content.Context import android.content.res.Configuration -import android.content.res.Resources -import android.content.res.Resources.Theme import android.graphics.Point -import android.graphics.drawable.Drawable -import androidx.annotation.ColorInt -import androidx.annotation.DrawableRes -import androidx.core.content.res.ResourcesCompat -import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.App.Companion.getContext import java.net.InetAddress import java.net.NetworkInterface @@ -30,8 +23,8 @@ import java.text.DecimalFormat import java.util.* object RetroUtil { - fun formatValue(value: Float): String { - var value = value + fun formatValue(numValue: Float): String { + var value = numValue val arr = arrayOf("", "K", "M", "B", "T", "P", "E") var index = 0 while (value / 1000 >= 1) { @@ -76,30 +69,6 @@ object RetroUtil { return result } - fun getTintedVectorDrawable( - context: Context, - @DrawableRes id: Int, - @ColorInt color: Int, - ): Drawable { - return TintHelper.createTintedDrawable( - getVectorDrawable(context.resources, id, context.theme), color) - } - - fun getTintedVectorDrawable( - res: Resources, - @DrawableRes resId: Int, - theme: Theme?, - @ColorInt color: Int, - ): Drawable { - return TintHelper.createTintedDrawable(getVectorDrawable(res, resId, theme), color) - } - - private fun getVectorDrawable( - res: Resources, @DrawableRes resId: Int, theme: Theme?, - ): Drawable? { - return ResourcesCompat.getDrawable(res, resId, theme) - } - val isLandscape: Boolean get() = (getContext().resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) From 07cfd6cd6e42108efd4c148f8d2e1984dc6f7e03 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 5 May 2022 11:57:44 +0530 Subject: [PATCH 62/65] Suppress deprecated warnings We can't do much about these. We have to work with playlists even though they are deprecated. --- .../name/monkey/retromusic/repository/PlaylistRepository.kt | 2 +- .../name/monkey/retromusic/repository/PlaylistSongsLoader.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/PlaylistRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/PlaylistRepository.kt index b1f5c548d..75fbeaca1 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/PlaylistRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/PlaylistRepository.kt @@ -51,7 +51,7 @@ interface PlaylistRepository { fun playlistSongs(playlistId: Long): List } - +@Suppress("Deprecation") class RealPlaylistRepository( private val contentResolver: ContentResolver ) : PlaylistRepository { diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/PlaylistSongsLoader.kt b/app/src/main/java/code/name/monkey/retromusic/repository/PlaylistSongsLoader.kt index b90af455f..abdec08fb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/PlaylistSongsLoader.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/PlaylistSongsLoader.kt @@ -30,7 +30,7 @@ import code.name.monkey.retromusic.model.Song /** * Created by hemanths on 16/08/17. */ - +@Suppress("Deprecation") object PlaylistSongsLoader { @JvmStatic From d823c2039626519f788df791d9fced95216b73f4 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 5 May 2022 11:58:06 +0530 Subject: [PATCH 63/65] Updated MDC to stable version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 55167b315..f427c5604 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { ext { kotlin_version = '1.6.21' navigation_version = '2.5.0-beta01' - mdc_version = '1.7.0-alpha01' + mdc_version = '1.6.0' preference_version = '1.2.0' appcompat_version = '1.4.1' } From 50e8d3e2ef8dabcb66741889bd06eb8ddb75e329 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 5 May 2022 16:26:01 +0530 Subject: [PATCH 64/65] Fix build warnings for strings --- app/src/main/res/values-ar-rSA/strings.xml | 2 +- app/src/main/res/values-b+es+419/strings.xml | 2 +- app/src/main/res/values-cs-rCZ/strings.xml | 2 +- app/src/main/res/values-de-rDE/strings.xml | 2 +- app/src/main/res/values-el-rGR/strings.xml | 2 +- app/src/main/res/values-es-rES/strings.xml | 2 +- app/src/main/res/values-fa-rIR/strings.xml | 2 +- app/src/main/res/values-fil-rPH/strings.xml | 2 +- app/src/main/res/values-fr-rFR/strings.xml | 2 +- app/src/main/res/values-hi-rIN/strings.xml | 2 +- app/src/main/res/values-hr-rHR/strings.xml | 2 +- app/src/main/res/values-hu-rHU/strings.xml | 2 +- app/src/main/res/values-in-rID/strings.xml | 2 +- app/src/main/res/values-it-rIT/strings.xml | 2 +- app/src/main/res/values-ja-rJP/strings.xml | 2 +- app/src/main/res/values-kmr-rTR/strings.xml | 2 +- app/src/main/res/values-ko-rKR/strings.xml | 2 +- app/src/main/res/values-ml-rIN/strings.xml | 4 ++-- app/src/main/res/values-my-rMM/strings.xml | 2 +- app/src/main/res/values-nl-rNL/strings.xml | 2 +- app/src/main/res/values-pl-rPL/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-pt-rPT/strings.xml | 2 +- app/src/main/res/values-ro-rRO/strings.xml | 2 +- app/src/main/res/values-ru-rRU/strings.xml | 2 +- app/src/main/res/values-sr-rSP/strings.xml | 2 +- app/src/main/res/values-sv-rSE/strings.xml | 2 +- app/src/main/res/values-ta-rIN/strings.xml | 2 +- app/src/main/res/values-te-rIN/strings.xml | 2 +- app/src/main/res/values-th-rTH/strings.xml | 2 +- app/src/main/res/values-tr-rTR/strings.xml | 2 +- app/src/main/res/values-uk-rUA/strings.xml | 2 +- app/src/main/res/values-vi-rVN/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 36 files changed, 37 insertions(+), 37 deletions(-) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 3beb84458..2fc33b052 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -54,7 +54,7 @@ إضافة "إضافة الى قائمة التشغيل" أضف وقت كلمات الأغاني - Added %d song(s) to %s + Added %1$d song(s) to %2$s "إضافة ١ من العناوين الى قائمة التشغيل الحالية" إضافة %1$d من العناوين الى قائمة التشغيل الحالية البوم diff --git a/app/src/main/res/values-b+es+419/strings.xml b/app/src/main/res/values-b+es+419/strings.xml index 68bd9385d..bbaa37a86 100644 --- a/app/src/main/res/values-b+es+419/strings.xml +++ b/app/src/main/res/values-b+es+419/strings.xml @@ -54,7 +54,7 @@ Agregar "Agregar a playlist" Agregar letras de marcos de tiempo - %d Cancion(es) añadidas a %s + %1$d Canción(es) añadidas a %2$s "Se agregó 1 canción a la cola de reproducción." Se agregó %1$d canción a la cola de reproducción. Álbum diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 140fa08af..5502dcb1f 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -54,7 +54,7 @@ Přidat "Přidat do seznamu skladeb" Add Time Framed Lyrics - Added %d song(s) to %s + Added %1$d song(s) to %2$s "Přidán 1 titul do fronty přehrávání." Přidány %1$d tituly do fronty přehrávání. Album diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index f6fbc59bb..84ae5337b 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -54,7 +54,7 @@ Hinzufügen "Zur Playlist hinzufügen" Synchronisierten Songtext hinzufügen - %d Titel(e) zu %s hinzugefügt + %1$d Titel(e) zu %2$s hinzugefügt "1 Titel wurde zur Wiedergabeliste hinzugefügt." %1$d Titel wurden zur Wiedergabeliste hinzugefügt. Album diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 117023c1e..97b2edcf8 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -54,7 +54,7 @@ Προσθήκη "Προσθήκη στη λίστα αναπαραγωγής" Προσθήκη Στίχων Με Χρονικό Πλαίσιο - Added %d song(s) to %s + Added %1$d song(s) to %2$s "Προστέθηκε 1 κομμάτι στην ουρά αναπαραγωγής." Προστέθηκαν %1$d κομμάτια στην ουρά αναπαραγωγής. Άλμπουμ diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index a731715b5..2e33599da 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -54,7 +54,7 @@ Agregar "Agregar a lista de reproducción" Añadir letras sincronizadas - %d Canción(es) añadidas a %s + %1$d Canción(es) añadidas a %2$s "Se ha agregado 1 canción a la cola de reproducción." %1$d canciones agregadas a la cola de reproducción. Álbum diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 567c5a8fa..ee84236a0 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -54,7 +54,7 @@ ﺍﻓﺰﻭﺩﻥ "افزودن به لیست پخش" اضافه کردن متون دارای زمان - Added %d song(s) to %s + Added %1$d song(s) to %2$s "یک‌ مورد به لیست پخش اهنگ ها اضافه شد." مورد خاص به لیست پخش اهنگ اضافه شد. آلبوم diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index c1c8d8707..12238017a 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -54,7 +54,7 @@ Magdagdag "Idagdag sa playlist" Mag-dagdag ng Time Framed Lyrics - Added %d song(s) to %s + Added %1$d song(s) to %2$s "Nadagdag ang 1 title sa playing queue." Nadagdag ang %1$d titles sa playing queue. Album diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 666d6dd91..918eaeb19 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -54,7 +54,7 @@ Ajouter "Ajouter à la liste de lecture" Ajouter des paroles synchronisées - Added %d song(s) to %s + Added %1$d song(s) to %2$d "1 titre a été ajouté à la file d'attente." %1$d titres ont été ajoutés à la file d\'attente. Album diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 09bd81b24..9e21856d3 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -54,7 +54,7 @@ जोड़ें "प्लेलिस्ट में जोड़ें" Add Time Framed Lyrics - Added %d song(s) to %s + Added %1$d song(s) to %2$s "कतार मे 1 शीर्षक जोड़ा गया है।" कतार मे %1$d शीर्षक जोड़ा गया है। एल्बम diff --git a/app/src/main/res/values-hr-rHR/strings.xml b/app/src/main/res/values-hr-rHR/strings.xml index b36e3825b..a98faa588 100644 --- a/app/src/main/res/values-hr-rHR/strings.xml +++ b/app/src/main/res/values-hr-rHR/strings.xml @@ -54,7 +54,7 @@ Dodaj "Dodaj na popis" Add Time Framed Lyrics - Added %d song(s) to %s + Added %1$d song(s) to %2$s "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index f698d0293..2c2f18275 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -54,7 +54,7 @@ Hozzáad "Hozzáadás lejátszási listához" Időzített dalszöveg hozzáadása - Added %d song(s) to %s + Added %1$d song(s) to %2$s "1 cím lett hozzáadva a lejátszási sorhoz." %1$d cím hozzáadva a lejátszási sorhoz. Album diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 5a4cd253a..2d46bb7ac 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -54,7 +54,7 @@ Tambah "Tambah ke daftar putar" Tambah kerangka waktu pada lirik - Menambah %d lagu ke %s + Menambah %1$d lagu ke %2$s "1 lagu ditambah ke antrean." %1$d lagu telah ditambah ke antrean. Album diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 3276130d6..e3cdc978c 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -54,7 +54,7 @@ Aggiungi "Aggiungi alla playlist" Aggiungi testi sincronizzati - Aggiunta/e %d canzone/i a %s + Aggiunta/e %1$d canzone/i a %2$s "Aggiunto un brano alla coda." Aggiunti %1$d brani alla coda. Album diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index e639a483a..3b32d17aa 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -54,7 +54,7 @@ 追加 "プレイリストに追加" 時間指定の歌詞を追加 - Added %d song(s) to %s + Added %1$d song(s) to %2$s "1曲が再生キューに追加されました" %1$d 曲が再生キューに追加されました アルバム diff --git a/app/src/main/res/values-kmr-rTR/strings.xml b/app/src/main/res/values-kmr-rTR/strings.xml index a3dbde88a..989673e9a 100644 --- a/app/src/main/res/values-kmr-rTR/strings.xml +++ b/app/src/main/res/values-kmr-rTR/strings.xml @@ -54,7 +54,7 @@ Tevlî bike "Tevlî rêzoka lêdanê bike" Dema peyvên stranê têxe - %d stran tevlî %s bû + %1$d stran tevlî %2$s bû "1 sernav li rêzeya lêdanê hate tevlîkirin." %1$d sernav li rêzeya lêdanê hate tevlîkirin. Album diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 19eb22d8f..ebe09dea7 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -54,7 +54,7 @@ 추가 "재생목록에 추가" Add Time Framed Lyrics - Added %d song(s) to %s + Added %1$d song(s) to %2$s "재생 대기열에 1곡이 추가되었습니다." 재생 대기열에 %1$d곡이 추가되었습니다. 앨범 diff --git a/app/src/main/res/values-ml-rIN/strings.xml b/app/src/main/res/values-ml-rIN/strings.xml index e8a6fb641..9d6c5189e 100644 --- a/app/src/main/res/values-ml-rIN/strings.xml +++ b/app/src/main/res/values-ml-rIN/strings.xml @@ -54,9 +54,9 @@ Add "പ്ലേലിസ്റ്റിലേക്ക് ആഡ് ചെയ്യുക" Add Time Framed Lyrics - Added %d song(s) to %s + Added %1$d song(s) to %2$s "Added 1 title to the playing queue." - Added %1$d titles to the playing queue. + Added %d titles to the playing queue. Album Song diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml index b07d7e6f5..98dd1c1ae 100644 --- a/app/src/main/res/values-my-rMM/strings.xml +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -54,7 +54,7 @@ ထည့်မည် "အောက်ပါ Playlist သို့ထည့်မည်" Add Time Framed Lyrics - Added %d song(s) to %s + Added %1$d song(s) to %2$s "နားထောင်နေသည့်စာရင်းထဲသို့ ၁ ပုဒ်ပေါင်းထည့်ခဲ့သည်" နားထောင်နေသည့်စာရင်းထဲသို့ %1$d ပုဒ်ပေါင်းထည့်ခဲ့သည် Album diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index e34d1c008..6363cab46 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -54,7 +54,7 @@ Toevoegen "Toevogen aan afspeellijst" Add Time Framed Lyrics - Added %d song(s) to %s + Added %1$d song(s) to %2$s "1 titel aan afspeel wachtrij toegevoegd." %1$d titels toegevoegd aan afspeel wachtrij Album diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 256510e2a..c781cf0f6 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -54,7 +54,7 @@ Dodaj "Dodaj do playlisty" Dodaj tekst z ramką czasową - Dodano %d utwór(y/ów) do %s + Dodano %1$d utwór(y/ów) do %2$s "Dodano tytuł do kolejki odtwarzania" Dodano %1$d tytułów do kolejki Album diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 6dea88a7e..0448124f4 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -54,7 +54,7 @@ Adicionar "Adicionar à playlist" Adicionar Letras Sincronizadas - %d música(s) adicionada(s) para %s + %1$d música(s) adicionada(s) para %2$s "1 música foi adicionada à fila." %1$d músicas foram adicionadas à fila. Álbum diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 8ec00e0c1..bb857c9c6 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -54,7 +54,7 @@ Adicionar "Adicionar à lista" Adicionar letras do cronograma - Added %d song(s) to %s + Added %1$d song(s) to %2$s "Adicionada 1 música à fila." Adicionadas %1$d músicas à fila. Álbum diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 7f44b5b0c..8eea2ce46 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -54,7 +54,7 @@ Adaugă "Adaugă la playlist" Add Time Framed Lyrics - Added %d song(s) to %s + Added %1$d song(s) to %2$s "Adăugat 1 titlu la coada de redare." Adăugate %1$d titluri la coada de redare Album diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index c513da203..e29588c3c 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -54,7 +54,7 @@ Добавить "Добавить в плейлист" Добавить синхронизированный текст - Добавлено %d песни в %s + Добавлено %1$d песни в %2$s "В очередь добавлен 1 трек" В очередь добавлено %1$d треков. Альбом diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index d364b6197..5de96b8e3 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -54,7 +54,7 @@ Dodaj "Dodaj na plejlistu" Add Time Framed Lyrics - Added %d song(s) to %s + Added %1$d song(s) to %2$s "Dodata je 1 pesma na plejlistu" Dodato %1$d pesama na plejlistu Album diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 71789b986..ef0f3c33b 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -54,7 +54,7 @@ Lägg till "Lägg till i spellista" Add Time Framed Lyrics - Added %d song(s) to %s + Added %1$d song(s) to %2$s "Lade till en titel i spelkön." Lade till %1$d titlar i spelkön. Album diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index 93910f316..dc165393b 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -54,7 +54,7 @@ சேர் "பாடல் வரிசையில் சேர்" Add Time Framed Lyrics - Added %d song(s) to %s + Added %1$d song(s) to %2$s "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album diff --git a/app/src/main/res/values-te-rIN/strings.xml b/app/src/main/res/values-te-rIN/strings.xml index 71a1f4f90..267e00c22 100644 --- a/app/src/main/res/values-te-rIN/strings.xml +++ b/app/src/main/res/values-te-rIN/strings.xml @@ -114,7 +114,7 @@ సృష్టించు ప్లేజాబితా%1$sసృష్టించబడింది. సభ్యులు మరియు సహాయకులు - ప్రస్తుతం% 2 by s ద్వారా%1$sవింటున్నారు. + ప్రస్తుతం %2$s ద్వారా %1$d వింటున్నారు. కైండా డార్క్ ప్లేజాబితాను తొలగించండి %1$s ప్లేజాబితాను తొలగించాలా?]]> diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index 7dde01368..33f4859d2 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -54,7 +54,7 @@ เพิ่ม "เพิ่มชื่อเพลย์ลิสต์" เพิ่มเนื้อเพลงในกรอบเวลา - Added %d song(s) to %s + Added %1$d song(s) to %2$s "เพิ่ม 1 ชื่อเข้าคิวเพลง" เพิ่ม %1$d ชื่อเข้าคิวเพลง อัลบัม diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index f46783536..66adbe280 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -54,7 +54,7 @@ Ekle "Oynatma listesine ekle" Zaman Dilimli Sözleri Ekle - Added %d song(s) to %s + Added %1$d song(s) to %2$s "Kuyruğa 1 parça eklendi." %1$d şarkı kuyruğuna eklendi. Albüm diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index f3a8b09dd..11f4923e2 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -54,7 +54,7 @@ Додати "Додати до списку відтворення" Додати часові розмежування тексту - Added %d song(s) to %s + Added %1$d song(s) to %2$s "Додано 1 композицію до черги відтворення." Додано %1$d композицій до черги відтворення. Альбом diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index c6cb73463..0755ab598 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -54,7 +54,7 @@ Thêm "Thêm vào danh sách phát" Thêm lời theo thời gian - Added %d song(s) to %s + Added %1$d song(s) to %2$s "Đã thêm 1 bài vào danh sách chờ phát." Đã thêm %1$d bài vào danh sách chờ phát. Album diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index ac79b705a..d444cfdac 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -54,7 +54,7 @@ 添加 "加入播放列表" 添加同步歌词 - 已将 %d 首歌添加到 %s + 已将 %1$d 首歌添加到 %2$s "已添加 1 首歌到播放队列。" 已添加 %1$d 首歌到播放队列。 专辑 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index fa6cba7f8..539931ac8 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -54,7 +54,7 @@ 新增 "新增到播放清單" 新增同步歌詞 - 新增 %d 首歌到 %s + 新增 %1$d 首歌到 %2$s "已新增 1 首歌到播放佇列。" 已新增 %1$d 首歌到播放佇列。 專輯 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 120c8b9af..85d53e52c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -55,7 +55,7 @@ Add "Add to playlist" Add Time Framed Lyrics - Added %d song(s) to %s + Added %1$d song(s) to %2$s "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album From 0433e464d8ffcaa20dd75cb387dd76baae986f21 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 5 May 2022 18:22:00 +0530 Subject: [PATCH 65/65] Revert "Added Java 8+ API desugaring, so we can use Java 8+ features on any API" This reverts commit ab5015d4 --- app/build.gradle | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f6d3ec5e4..deab9fdbc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -55,8 +55,6 @@ android { disable 'MissingTranslation', 'InvalidPackage' } compileOptions { - coreLibraryDesugaringEnabled true - sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } @@ -150,8 +148,6 @@ dependencies { kapt "com.github.bumptech.glide:compiler:$glide_version" implementation "com.github.bumptech.glide:okhttp3-integration:$glide_version" - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' - implementation 'com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:1.0.0' implementation 'com.github.bosphere.android-fadingedgelayout:fadingedgelayout:1.0.0'