From 23da382b220ca55eebb75670195bd88fe4099687 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 14 Mar 2023 12:47:22 +0530 Subject: [PATCH] refactor: Migrate to Photo picker to select images --- .../tageditor/AbsTagEditorActivity.kt | 48 +++-------------- .../artists/AbsArtistDetailsFragment.kt | 52 +++++++------------ 2 files changed, 25 insertions(+), 75 deletions(-) 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 c8ca11247..df973203e 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 @@ -29,6 +29,7 @@ import android.view.animation.OvershootInterpolator import android.widget.ImageView import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.IntentSenderRequest +import androidx.activity.result.PickVisualMediaRequest import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AlertDialog import androidx.lifecycle.lifecycleScope @@ -37,7 +38,6 @@ import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R 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.colorButtons import code.name.monkey.retromusic.extensions.hideSoftKeyboard @@ -45,7 +45,6 @@ import code.name.monkey.retromusic.extensions.setTaskDescriptionColorAuto import code.name.monkey.retromusic.model.ArtworkInfo import code.name.monkey.retromusic.model.AudioTagInfo import code.name.monkey.retromusic.repository.Repository -import code.name.monkey.retromusic.util.SAFUtil import code.name.monkey.retromusic.util.logD import com.google.android.material.button.MaterialButton import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -56,7 +55,6 @@ import org.jaudiotagger.audio.AudioFileIO import org.jaudiotagger.tag.FieldKey import org.koin.android.ext.android.inject import java.io.File -import java.util.Collections abstract class AbsTagEditorActivity : AbsBaseActivity() { abstract val editorImage: ImageView @@ -212,6 +210,11 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { } } + private val pickArtworkImage = + registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri -> + loadImageFromFile(uri) + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) _binding = bindingInflater.invoke(layoutInflater) @@ -252,14 +255,7 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { } private fun startImagePicker() { - val intent = Intent(Intent.ACTION_GET_CONTENT) - intent.type = "image/*" - startActivityForResult( - Intent.createChooser( - intent, - getString(R.string.pick_from_local_storage) - ), REQUEST_CODE_SELECT_IMAGE - ) + pickArtworkImage.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly)) } protected abstract fun loadCurrentImage() @@ -400,36 +396,6 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { } } - - override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) { - super.onActivityResult(requestCode, resultCode, intent) - when (requestCode) { - REQUEST_CODE_SELECT_IMAGE -> if (resultCode == Activity.RESULT_OK) { - intent?.data?.let { - loadImageFromFile(it) - } - } - - SAFGuideActivity.REQUEST_CODE_SAF_GUIDE -> { - SAFUtil.openTreePicker(this) - } - - SAFUtil.REQUEST_SAF_PICK_TREE -> { - if (resultCode == Activity.RESULT_OK) { - SAFUtil.saveTreeUri(this, intent) - writeTags(savedSongPaths) - } - } - - SAFUtil.REQUEST_SAF_PICK_FILE -> { - if (resultCode == Activity.RESULT_OK) { - writeTags(Collections.singletonList(currentSongPath + SAFUtil.SEPARATOR + intent!!.dataString)) - } - } - } - } - - private fun getAudioFile(path: String): AudioFile { return try { AudioFileIO.read(File(path)) 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 3dfae6cd5..8f2acec1b 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 @@ -1,6 +1,5 @@ package code.name.monkey.retromusic.fragments.artists -import android.app.Activity import android.content.Intent import android.graphics.Color import android.os.Bundle @@ -9,6 +8,7 @@ import android.view.Menu import android.view.MenuInflater import android.view.MenuItem import android.view.View +import androidx.activity.result.PickVisualMediaRequest import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.widget.PopupMenu import androidx.core.os.bundleOf @@ -153,14 +153,10 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(artist.songs)) ) val songText = resources.getQuantityString( - R.plurals.albumSongs, - artist.songCount, - artist.songCount + R.plurals.albumSongs, artist.songCount, artist.songCount ) val albumText = resources.getQuantityString( - R.plurals.albums, - artist.songCount, - artist.songCount + R.plurals.albums, artist.songCount, artist.songCount ) binding.fragmentArtistContent.songTitle.text = songText binding.fragmentArtistContent.albumTitle.text = albumText @@ -174,8 +170,7 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm ) { biography = null this.lang = lang - detailsViewModel.getArtistInfo(name, lang, null) - .observe(viewLifecycleOwner) { result -> + detailsViewModel.getArtistInfo(name, lang, null).observe(viewLifecycleOwner) { result -> when (result) { is Result.Loading -> logD("Loading") is Result.Error -> logE("Error") @@ -214,11 +209,8 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm } private fun loadArtistImage(artist: Artist) { - Glide.with(requireContext()) - .asBitmapPalette() - .artistImageOptions(artist) - .load(RetroGlideExtension.getArtistModel(artist)) - .dontAnimate() + Glide.with(requireContext()).asBitmapPalette().artistImageOptions(artist) + .load(RetroGlideExtension.getArtistModel(artist)).dontAnimate() .into(object : SingleColorTarget(binding.image) { override fun onColorReady(color: Int) { setColors(color) @@ -274,13 +266,8 @@ 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) - ) + PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly) ) return true } @@ -336,14 +323,14 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm SortOrder.ArtistSongSortOrder.SONG_Z_A -> sortOrder.findItem(R.id.action_sort_order_title_desc).isChecked = true - SortOrder.ArtistSongSortOrder.SONG_ALBUM -> - sortOrder.findItem(R.id.action_sort_order_album).isChecked = true + SortOrder.ArtistSongSortOrder.SONG_ALBUM -> sortOrder.findItem(R.id.action_sort_order_album).isChecked = + true - SortOrder.ArtistSongSortOrder.SONG_YEAR -> - sortOrder.findItem(R.id.action_sort_order_year).isChecked = true + SortOrder.ArtistSongSortOrder.SONG_YEAR -> sortOrder.findItem(R.id.action_sort_order_year).isChecked = + true - SortOrder.ArtistSongSortOrder.SONG_DURATION -> - sortOrder.findItem(R.id.action_sort_order_song_duration).isChecked = true + SortOrder.ArtistSongSortOrder.SONG_DURATION -> sortOrder.findItem(R.id.action_sort_order_song_duration).isChecked = + true else -> { throw IllegalArgumentException("invalid $savedSongSortOrder") @@ -352,14 +339,11 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm } 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) - } - + registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri -> + lifecycleScope.launch { + if (uri != null) { + CustomArtistImageUtil.getInstance(requireContext()) + .setCustomArtistImage(artist, uri) } } }