From dd628ed6f12f093009526ca2bc4d0eb27780c9a4 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 14 Mar 2023 12:47:50 +0530 Subject: [PATCH 01/28] Update targetSdk to 33 --- app/build.gradle | 2 +- appthemehelper/build.gradle | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8641e6fa14..dae931b97f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,7 +10,7 @@ android { defaultConfig { minSdk 21 - targetSdk 32 + targetSdk 33 vectorDrawables.useSupportLibrary = true diff --git a/appthemehelper/build.gradle b/appthemehelper/build.gradle index 31bfc76af1..2a5e0f50dc 100644 --- a/appthemehelper/build.gradle +++ b/appthemehelper/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - compileSdk 32 + compileSdk 33 namespace "code.name.monkey.appthemehelper" defaultConfig { minSdk 21 - targetSdk 32 + targetSdk 33 } buildTypes { release { From 23da382b220ca55eebb75670195bd88fe4099687 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 14 Mar 2023 12:47:22 +0530 Subject: [PATCH 02/28] 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 c8ca11247c..df973203e9 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 3dfae6cd5b..8f2acec1b7 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) } } } From 931e59319a00e8cdb3ff8c786775e329198e5892 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 14 Mar 2023 13:17:57 +0530 Subject: [PATCH 03/28] fix: Fix Home tab title --- .../code/name/monkey/retromusic/fragments/home/HomeFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 2946b4f168..48b60aa819 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 @@ -175,7 +175,7 @@ class HomeFragment : findNavController().navigate(R.id.action_search, null, navOptions) } val hexColor = String.format("#%06X", 0xFFFFFF and accentColor()) - val appName = "Retro Music".parseAsHtml() + val appName = "Retro Music".parseAsHtml() binding.appBarLayout.title = appName } From ccf3b7f6a52144b74df231c23caf1b547ec3a2cf Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 14 Mar 2023 13:06:19 +0530 Subject: [PATCH 04/28] fix: Remove Blurred album art on lockscreen feature for Android 11 and above Hide Blur album art preference on Android 11+ devices as the lockscreen album art feature was removed by Google. And even if the feature is present in some Custom ROMs there is also an option to set blur so this preference is unnecessary on Android 11 and above. --- .../fragments/settings/PersonalizeSettingsFragment.kt | 8 ++++++++ .../code/name/monkey/retromusic/util/PreferenceUtil.kt | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonalizeSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonalizeSettingsFragment.kt index 24218f6fb8..f02727d20d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonalizeSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonalizeSettingsFragment.kt @@ -17,7 +17,10 @@ package code.name.monkey.retromusic.fragments.settings import android.os.Bundle import android.view.View import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEListPreference +import code.name.monkey.appthemehelper.common.prefs.supportv7.ATESwitchPreference +import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.APPBAR_MODE +import code.name.monkey.retromusic.BLURRED_ALBUM_ART import code.name.monkey.retromusic.HOME_ALBUM_GRID_STYLE import code.name.monkey.retromusic.HOME_ARTIST_GRID_STYLE import code.name.monkey.retromusic.R @@ -27,12 +30,17 @@ class PersonalizeSettingsFragment : AbsSettingsFragment() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { addPreferencesFromResource(R.xml.pref_ui) + // Hide Blur album art preference on Android 11+ devices as the lockscreen album art feature was removed by Google + // And if the feature is present in some Custom ROM's there is also an option to set blur so this preference is unnecessary on Android 11 and above + val blurredAlbumArt: ATESwitchPreference? = findPreference(BLURRED_ALBUM_ART) + blurredAlbumArt?.isVisible = !VersionUtils.hasR() } override fun invalidateSettings() {} override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + val homeArtistStyle: ATEListPreference? = findPreference(HOME_ARTIST_GRID_STYLE) homeArtistStyle?.setOnPreferenceChangeListener { preference, newValue -> setSummary(preference, newValue) 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 493949be78..68c2be9ab1 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 @@ -279,7 +279,7 @@ object PreferenceUtil { val isBlurredAlbumArt get() = sharedPreferences.getBoolean( BLURRED_ALBUM_ART, false - ) + ) && !VersionUtils.hasR() val blurAmount get() = sharedPreferences.getInt(NEW_BLUR_AMOUNT, 25) From 6ec2e6ee9a6aa9d849d292b3d4d549d2f1bcd5a0 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 14 Mar 2023 13:36:07 +0530 Subject: [PATCH 05/28] Code Cleanup --- .../java/code/name/monkey/retromusic/Constants.kt | 1 - .../retromusic/fragments/settings/AudioSettings.kt | 13 +++++++++---- .../fragments/settings/ThemeSettingsFragment.kt | 3 +++ .../name/monkey/retromusic/util/PreferenceUtil.kt | 5 ----- app/src/main/res/values-v26/bools.xml | 4 ---- app/src/main/res/values-v27/bools.xml | 4 ---- app/src/main/res/values-v31/bools.xml | 2 -- app/src/main/res/values/bools.xml | 4 ---- app/src/main/res/xml/pref_audio.xml | 9 --------- app/src/main/res/xml/pref_general.xml | 5 ++--- 10 files changed, 14 insertions(+), 36 deletions(-) delete mode 100644 app/src/main/res/values-v26/bools.xml delete mode 100644 app/src/main/res/values-v27/bools.xml diff --git a/app/src/main/java/code/name/monkey/retromusic/Constants.kt b/app/src/main/java/code/name/monkey/retromusic/Constants.kt index d17b3194e2..c51689cab3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt @@ -119,7 +119,6 @@ const val ARTIST_GRID_SIZE_LAND = "artist_grid_size_land" const val PLAYLIST_GRID_SIZE = "playlist_grid_size" const val PLAYLIST_GRID_SIZE_LAND = "playlist_grid_size_land" const val COLORED_APP_SHORTCUTS = "colored_app_shortcuts" -const val AUDIO_DUCKING = "audio_ducking" const val LAST_ADDED_CUTOFF = "last_added_interval" const val LAST_SLEEP_TIMER_VALUE = "last_sleep_timer_value" const val NEXT_SLEEP_TIMER_ELAPSED_REALTIME = "next_sleep_timer_elapsed_real_time" diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AudioSettings.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AudioSettings.kt index 17915712a9..d493085c07 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AudioSettings.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AudioSettings.kt @@ -49,11 +49,16 @@ class AudioSettings : AbsSettingsFragment() { if (VersionUtils.hasS()) { bluetoothPreference?.setOnPreferenceChangeListener { _, newValue -> if (newValue as Boolean) { - if (ActivityCompat.checkSelfPermission(requireContext(), - BLUETOOTH_CONNECT) != PERMISSION_GRANTED + if (ActivityCompat.checkSelfPermission( + requireContext(), + BLUETOOTH_CONNECT + ) != PERMISSION_GRANTED ) { - ActivityCompat.requestPermissions(requireActivity(), arrayOf( - BLUETOOTH_CONNECT), BLUETOOTH_PERMISSION_REQUEST) + ActivityCompat.requestPermissions( + requireActivity(), arrayOf( + BLUETOOTH_CONNECT + ), BLUETOOTH_PERMISSION_REQUEST + ) } } return@setOnPreferenceChangeListener true diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt index f7fbc122bb..a89fedf969 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt @@ -16,6 +16,7 @@ package code.name.monkey.retromusic.fragments.settings import android.annotation.SuppressLint import android.os.Bundle +import android.view.View import androidx.core.content.edit import androidx.preference.Preference import androidx.preference.TwoStatePreference @@ -139,5 +140,7 @@ class ThemeSettingsFragment : AbsSettingsFragment() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { addPreferencesFromResource(R.xml.pref_general) + val wallpaperAccent: ATESwitchPreference? = findPreference(WALLPAPER_ACCENT) + wallpaperAccent?.isVisible = VersionUtils.hasOreoMR1() && !VersionUtils.hasS() } } 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 68c2be9ab1..18991786a6 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 @@ -266,11 +266,6 @@ object PreferenceUtil { ALBUM_ART_ON_LOCK_SCREEN, true ) - val isAudioDucking - get() = sharedPreferences.getBoolean( - AUDIO_DUCKING, true - ) - val isBluetoothSpeaker get() = sharedPreferences.getBoolean( BLUETOOTH_PLAYBACK, false diff --git a/app/src/main/res/values-v26/bools.xml b/app/src/main/res/values-v26/bools.xml deleted file mode 100644 index e557d81d87..0000000000 --- a/app/src/main/res/values-v26/bools.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - false - \ No newline at end of file diff --git a/app/src/main/res/values-v27/bools.xml b/app/src/main/res/values-v27/bools.xml deleted file mode 100644 index a3eb593f3c..0000000000 --- a/app/src/main/res/values-v27/bools.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - true - \ No newline at end of file diff --git a/app/src/main/res/values-v31/bools.xml b/app/src/main/res/values-v31/bools.xml index 51349c34e2..e9ef74c3c9 100644 --- a/app/src/main/res/values-v31/bools.xml +++ b/app/src/main/res/values-v31/bools.xml @@ -2,6 +2,4 @@ true true - - false \ No newline at end of file diff --git a/app/src/main/res/values/bools.xml b/app/src/main/res/values/bools.xml index 654eeffa5b..5e9f24c9f9 100644 --- a/app/src/main/res/values/bools.xml +++ b/app/src/main/res/values/bools.xml @@ -5,9 +5,5 @@ true - false - false - - true false \ No newline at end of file diff --git a/app/src/main/res/xml/pref_audio.xml b/app/src/main/res/xml/pref_audio.xml index 749202cedd..6bf54069c9 100755 --- a/app/src/main/res/xml/pref_audio.xml +++ b/app/src/main/res/xml/pref_audio.xml @@ -2,15 +2,6 @@ - - + android:title="@string/pref_title_wallpaper_accent" /> Date: Tue, 14 Mar 2023 18:48:22 +0530 Subject: [PATCH 06/28] fix: Fix activity recreate logic when downloading split language apk --- .../java/code/name/monkey/retromusic/extensions/extensions.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/normal/java/code/name/monkey/retromusic/extensions/extensions.kt b/app/src/normal/java/code/name/monkey/retromusic/extensions/extensions.kt index 59d05fb745..2bedd4a72b 100644 --- a/app/src/normal/java/code/name/monkey/retromusic/extensions/extensions.kt +++ b/app/src/normal/java/code/name/monkey/retromusic/extensions/extensions.kt @@ -12,6 +12,7 @@ import com.google.android.play.core.splitinstall.SplitInstallManagerFactory import com.google.android.play.core.splitinstall.SplitInstallRequest import com.google.android.play.core.splitinstall.SplitInstallSessionState import com.google.android.play.core.splitinstall.SplitInstallStateUpdatedListener +import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus import java.util.* fun Context.setUpMediaRouteButton(menu: Menu) { @@ -24,7 +25,8 @@ fun FragmentActivity.installLanguageAndRecreate(code: String) { val manager = SplitInstallManagerFactory.create(this) val listener = object: SplitInstallStateUpdatedListener{ override fun onStateUpdate(state: SplitInstallSessionState) { - if (state.sessionId() == mySessionId) { + // Restart the activity if the language is installed (sessionId is same and status is installed) + if (state.sessionId() == mySessionId && state.status() == SplitInstallSessionStatus.INSTALLED) { recreate() manager.unregisterListener(this) } From 3e93dcfc4d560b86193c1f70eb2a06e35e4c7ff8 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 14 Mar 2023 18:50:18 +0530 Subject: [PATCH 07/28] feat: Add a function to check for Android 13 --- .../code/name/monkey/appthemehelper/util/VersionUtils.kt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/VersionUtils.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/VersionUtils.kt index ac8db0c5d4..269c2c6988 100644 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/VersionUtils.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/VersionUtils.kt @@ -82,4 +82,13 @@ object VersionUtils { fun hasS(): Boolean { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.S } + + /** + * @return true if device is running API >= 33 + */ + @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.TIRAMISU) + @JvmStatic + fun hasT(): Boolean { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU + } } From ab16d7e105e0816ec34f96c1cd9e94ec3cbe43f4 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 15 Mar 2023 12:09:53 +0530 Subject: [PATCH 08/28] fix: Fix playlist reordering crash --- .../song/OrderablePlaylistSongAdapter.kt | 29 +++++++------------ .../playlists/PlaylistDetailsFragment.kt | 12 +++----- .../fragments/queue/PlayingQueueFragment.kt | 19 ++++++------ 3 files changed, 25 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt index 88a0b7a8dd..bf85fe28b9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt @@ -26,6 +26,7 @@ import code.name.monkey.retromusic.db.toSongsEntity import code.name.monkey.retromusic.dialogs.RemoveSongFromPlaylistDialog import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.util.ViewUtil import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemAdapter import com.h6ah4i.android.widget.advrecyclerview.draggable.ItemDraggableRange import kotlinx.coroutines.Dispatchers @@ -50,11 +51,7 @@ class OrderablePlaylistSongAdapter( override fun getItemId(position: Int): Long { // requires static value, it means need to keep the same value // even if the item position has been changed. - return if (position != 0) { - dataSet[position - 1].id - } else { - -1 - } + return dataSet[position].id } override fun createViewHolder(view: View): SongAdapter.ViewHolder { @@ -99,26 +96,22 @@ class OrderablePlaylistSongAdapter( } override fun onCheckCanStartDrag(holder: ViewHolder, position: Int, x: Int, y: Int): Boolean { - if (dataSet.size == 0 or 1 || isInQuickSelectMode) { + if (isInQuickSelectMode) { return false } - val dragHandle = holder.dragView ?: return false - - val handleWidth = dragHandle.width - val handleHeight = dragHandle.height - val handleLeft = dragHandle.left - val handleTop = dragHandle.top - - return (x >= handleLeft && x < handleLeft + handleWidth && - y >= handleTop && y < handleTop + handleHeight) && position != 0 + return ViewUtil.hitTest(holder.imageText!!, x, y) || ViewUtil.hitTest( + holder.dragView!!, + x, + y + ) } override fun onMoveItem(fromPosition: Int, toPosition: Int) { - dataSet.add(toPosition - 1, dataSet.removeAt(fromPosition - 1)) + dataSet.add(toPosition, dataSet.removeAt(fromPosition)) } - override fun onGetItemDraggableRange(holder: ViewHolder, position: Int): ItemDraggableRange { - return ItemDraggableRange(0, itemCount - 1) + override fun onGetItemDraggableRange(holder: ViewHolder, position: Int): ItemDraggableRange? { + return null } override fun onCheckCanDrop(draggingPosition: Int, dropPosition: Int): Boolean { 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 a4e2152d3c..bb99dbdc9c 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 @@ -12,6 +12,7 @@ import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.SimpleItemAnimator import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.song.OrderablePlaylistSongAdapter import code.name.monkey.retromusic.databinding.FragmentPlaylistDetailNewBinding @@ -34,7 +35,6 @@ import com.google.android.material.transition.MaterialArcMotion import com.google.android.material.transition.MaterialContainerTransform import com.google.android.material.transition.MaterialSharedAxis import com.h6ah4i.android.widget.advrecyclerview.animator.DraggableItemAnimator -import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager import org.koin.androidx.viewmodel.ext.android.viewModel import org.koin.core.parameter.parametersOf @@ -126,15 +126,11 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli val wrappedAdapter: RecyclerView.Adapter<*> = dragDropManager.createWrappedAdapter(playlistSongAdapter) - - val animator: GeneralItemAnimator = DraggableItemAnimator() - binding.recyclerView.itemAnimator = animator - - dragDropManager.attachRecyclerView(binding.recyclerView) - binding.recyclerView.apply { + adapter = wrappedAdapter layoutManager = LinearLayoutManager(requireContext()) - binding.recyclerView.adapter = wrappedAdapter + itemAnimator = DraggableItemAnimator() + dragDropManager.attachRecyclerView(this) ThemedFastScroller.create(this) } playlistSongAdapter.registerAdapterDataObserver(object : diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt index 059b10bb0f..84ecea2a3f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt @@ -80,9 +80,6 @@ class PlayingQueueFragment : AbsMusicServiceFragment(R.layout.fragment_playing_q recyclerViewDragDropManager = RecyclerViewDragDropManager() recyclerViewSwipeManager = RecyclerViewSwipeManager() - val animator = DraggableItemAnimator() - animator.supportsChangeAnimations = false - playingQueueAdapter = PlayingQueueAdapter( requireActivity(), MusicPlayerRemote.playingQueue.toMutableList(), @@ -94,12 +91,15 @@ class PlayingQueueFragment : AbsMusicServiceFragment(R.layout.fragment_playing_q linearLayoutManager = LinearLayoutManager(requireContext()) - binding.recyclerView.layoutManager = linearLayoutManager - binding.recyclerView.adapter = wrappedAdapter - binding.recyclerView.itemAnimator = animator - recyclerViewTouchActionGuardManager?.attachRecyclerView(binding.recyclerView) - recyclerViewDragDropManager?.attachRecyclerView(binding.recyclerView) - recyclerViewSwipeManager?.attachRecyclerView(binding.recyclerView) + + binding.recyclerView.apply { + layoutManager = linearLayoutManager + adapter = wrappedAdapter + itemAnimator = DraggableItemAnimator() + recyclerViewTouchActionGuardManager?.attachRecyclerView(this) + recyclerViewDragDropManager?.attachRecyclerView(this) + recyclerViewSwipeManager?.attachRecyclerView(this) + } linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) binding.recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { @@ -184,6 +184,7 @@ class PlayingQueueFragment : AbsMusicServiceFragment(R.layout.fragment_playing_q private fun setupToolbar() { binding.appBarLayout.toolbar.subtitle = getUpNextAndQueueTime() + binding.appBarLayout.toolbar.isTitleCentered = false binding.clearQueue.backgroundTintList = ColorStateList.valueOf(accentColor()) ColorStateList.valueOf( MaterialValueHelper.getPrimaryTextColor( From 8772bcb0b7dc8dc855891a730052fd4f7d0e8cb5 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 15 Mar 2023 12:10:51 +0530 Subject: [PATCH 09/28] fix: Use ShapeableImageView and added top margin to artist name in song item --- app/src/main/res/layout-sw600dp/item_queue.xml | 6 ++++-- app/src/main/res/layout/item_list.xml | 6 ++++-- app/src/main/res/layout/item_queue.xml | 16 ++++++++++------ 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/app/src/main/res/layout-sw600dp/item_queue.xml b/app/src/main/res/layout-sw600dp/item_queue.xml index 7917c4ea86..11d8b1336e 100644 --- a/app/src/main/res/layout-sw600dp/item_queue.xml +++ b/app/src/main/res/layout-sw600dp/item_queue.xml @@ -44,18 +44,19 @@ android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginStart="16dp" - app:cardCornerRadius="6dp" + app:cardCornerRadius="8dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toEndOf="@id/drag_view" app:layout_constraintTop_toTopOf="parent"> - @@ -93,6 +94,7 @@ android:id="@+id/text" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_marginTop="4dp" android:ellipsize="end" android:maxLines="1" android:paddingHorizontal="16dp" diff --git a/app/src/main/res/layout/item_list.xml b/app/src/main/res/layout/item_list.xml index 55df9fda7b..c23159d1ad 100755 --- a/app/src/main/res/layout/item_list.xml +++ b/app/src/main/res/layout/item_list.xml @@ -35,18 +35,19 @@ android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginStart="16dp" - app:cardCornerRadius="10dp" + app:cardCornerRadius="8dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toEndOf="@id/drag_view" app:layout_constraintTop_toTopOf="parent"> - @@ -87,6 +88,7 @@ android:ellipsize="end" android:maxLines="1" android:paddingHorizontal="16dp" + android:layout_marginTop="4dp" android:textAppearance="@style/TextViewBody2" android:textColor="?android:attr/textColorSecondary" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/layout/item_queue.xml b/app/src/main/res/layout/item_queue.xml index 8553920640..83a497076b 100644 --- a/app/src/main/res/layout/item_queue.xml +++ b/app/src/main/res/layout/item_queue.xml @@ -4,14 +4,15 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:clickable="true" - android:focusable="true" android:background="?rectSelector" - android:transitionGroup="true"> + android:clickable="true" + android:focusable="true"> + + @@ -43,18 +44,20 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - app:cardCornerRadius="6dp" + android:transitionGroup="true" + app:cardCornerRadius="4dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toEndOf="@id/drag_view" app:layout_constraintTop_toTopOf="parent"> - @@ -94,6 +97,7 @@ android:id="@+id/text" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_marginTop="4dp" android:ellipsize="end" android:maxLines="1" android:paddingHorizontal="16dp" From 21b142d341b542ebbc98caecc81460a70029d4e4 Mon Sep 17 00:00:00 2001 From: Milind Goel Date: Wed, 15 Mar 2023 18:31:20 +0530 Subject: [PATCH 10/28] fix monochrome icon on some devices --- .../res/drawable/ic_launcher_monochrome.xml | 31 +++++++++++++++++++ app/src/main/res/drawable/retro_you_icon.xml | 27 ---------------- .../res/mipmap-anydpi-v26/ic_launcher.xml | 2 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 2 +- 4 files changed, 33 insertions(+), 29 deletions(-) create mode 100644 app/src/main/res/drawable/ic_launcher_monochrome.xml delete mode 100644 app/src/main/res/drawable/retro_you_icon.xml diff --git a/app/src/main/res/drawable/ic_launcher_monochrome.xml b/app/src/main/res/drawable/ic_launcher_monochrome.xml new file mode 100644 index 0000000000..f6615115b2 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_monochrome.xml @@ -0,0 +1,31 @@ + + + + + + + diff --git a/app/src/main/res/drawable/retro_you_icon.xml b/app/src/main/res/drawable/retro_you_icon.xml deleted file mode 100644 index 0e59bc17dd..0000000000 --- a/app/src/main/res/drawable/retro_you_icon.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 4bf80dfc69..1413a3145b 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index 4bf80dfc69..1413a3145b 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file From 3d7e89e2705fc8137430ef401ddeb6214b5eccf8 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 15 Mar 2023 19:27:55 +0530 Subject: [PATCH 11/28] fix: Fix incorrect color of Top App Bar in Home tab in Landscape mode --- app/src/main/res/layout-land/fragment_home.xml | 5 ++--- app/src/main/res/layout/fragment_home.xml | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout-land/fragment_home.xml b/app/src/main/res/layout-land/fragment_home.xml index a9e0cca1e5..c18e497105 100644 --- a/app/src/main/res/layout-land/fragment_home.xml +++ b/app/src/main/res/layout-land/fragment_home.xml @@ -13,17 +13,16 @@ --> + android:fitsSystemWindows="true" /> Date: Sat, 18 Mar 2023 14:28:53 +0530 Subject: [PATCH 12/28] fix: Fix corrupting of files when writing tags to unsupported files --- app/build.gradle | 2 +- .../tageditor/AbsTagEditorActivity.kt | 51 ++-- .../activities/tageditor/TagWriter.kt | 249 +++++++++--------- app/src/main/res/values/strings.xml | 1 + 4 files changed, 164 insertions(+), 139 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index dae931b97f..6bd881cf1b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -154,7 +154,7 @@ dependencies { implementation "io.insert-koin:koin-core:$koin_version" implementation "io.insert-koin:koin-android:$koin_version" - def glide_version = '4.15.0' + def glide_version = '4.15.1' implementation "com.github.bumptech.glide:glide:$glide_version" ksp "com.github.bumptech.glide:ksp:$glide_version" implementation "com.github.bumptech.glide:okhttp3-integration:$glide_version" 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 df973203e9..dbdfb2b699 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 @@ -46,6 +46,7 @@ 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.logD +import code.name.monkey.retromusic.util.logE import com.google.android.material.button.MaterialButton import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.coroutines.GlobalScope @@ -98,7 +99,8 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { get() { return try { getAudioFile(songPaths!![0]).tagOrCreateAndSetDefault.getFirst(FieldKey.ALBUM_ARTIST) - } catch (ignored: Exception) { + } catch (e: Exception) { + logE(e) null } } @@ -107,7 +109,8 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { get() { return try { getAudioFile(songPaths!![0]).tagOrCreateAndSetDefault.getFirst(FieldKey.TITLE) - } catch (ignored: Exception) { + } catch (e: Exception) { + logE(e) null } } @@ -115,7 +118,8 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { get() { return try { getAudioFile(songPaths!![0]).tagOrCreateAndSetDefault.getFirst(FieldKey.COMPOSER) - } catch (ignored: Exception) { + } catch (e: Exception) { + logE(e) null } } @@ -124,7 +128,8 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { get() { return try { getAudioFile(songPaths!![0]).tagOrCreateAndSetDefault.getFirst(FieldKey.ALBUM) - } catch (ignored: Exception) { + } catch (e: Exception) { + logE(e) null } } @@ -133,7 +138,8 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { get() { return try { getAudioFile(songPaths!![0]).tagOrCreateAndSetDefault.getFirst(FieldKey.ARTIST) - } catch (ignored: Exception) { + } catch (e: Exception) { + logE(e) null } } @@ -142,7 +148,8 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { get() { return try { getAudioFile(songPaths!![0]).tagOrCreateAndSetDefault.getFirst(FieldKey.ALBUM_ARTIST) - } catch (ignored: Exception) { + } catch (e: Exception) { + logE(e) null } } @@ -151,7 +158,8 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { get() { return try { getAudioFile(songPaths!![0]).tagOrCreateAndSetDefault.getFirst(FieldKey.GENRE) - } catch (ignored: Exception) { + } catch (e: Exception) { + logE(e) null } } @@ -160,7 +168,8 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { get() { return try { getAudioFile(songPaths!![0]).tagOrCreateAndSetDefault.getFirst(FieldKey.YEAR) - } catch (ignored: Exception) { + } catch (e: Exception) { + logE(e) null } } @@ -169,7 +178,8 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { get() { return try { getAudioFile(songPaths!![0]).tagOrCreateAndSetDefault.getFirst(FieldKey.TRACK) - } catch (ignored: Exception) { + } catch (e: Exception) { + logE(e) null } } @@ -178,7 +188,8 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { get() { return try { getAudioFile(songPaths!![0]).tagOrCreateAndSetDefault.getFirst(FieldKey.DISC_NO) - } catch (ignored: Exception) { + } catch (e: Exception) { + logE(e) null } } @@ -187,7 +198,8 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { get() { return try { getAudioFile(songPaths!![0]).tagOrCreateAndSetDefault.getFirst(FieldKey.LYRICS) - } catch (ignored: Exception) { + } catch (e: Exception) { + logE(e) null } } @@ -205,7 +217,8 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { ) } return null - } catch (ignored: Exception) { + } catch (e: Exception) { + logE(e) return null } } @@ -356,9 +369,12 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { artworkInfo ) ) - val pendingIntent = MediaStore.createWriteRequest(contentResolver, getSongUris()) - launcher.launch(IntentSenderRequest.Builder(pendingIntent).build()) + if (cacheFiles.isNotEmpty()) { + val pendingIntent = + MediaStore.createWriteRequest(contentResolver, getSongUris()) + launcher.launch(IntentSenderRequest.Builder(pendingIntent).build()) + } } else { TagWriter.writeTagsToFiles( this@AbsTagEditorActivity, AudioTagInfo( @@ -396,9 +412,14 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { } } + private lateinit var audioFile: AudioFile + private fun getAudioFile(path: String): AudioFile { return try { - AudioFileIO.read(File(path)) + if (!this::audioFile.isInitialized) { + audioFile = AudioFileIO.read(File(path)) + } + audioFile } catch (e: Exception) { Log.e(TAG, "Could not read audio file $path", e) AudioFile() 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 e4cf7fe89f..b9d5f28ddc 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 @@ -7,6 +7,7 @@ import android.media.MediaScannerConnection import android.os.Build import android.util.Log import androidx.annotation.RequiresApi +import code.name.monkey.retromusic.R import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.misc.UpdateToastMediaScannerCompletionListener import code.name.monkey.retromusic.model.AudioTagInfo @@ -20,6 +21,7 @@ import org.jaudiotagger.audio.exceptions.CannotReadException import org.jaudiotagger.audio.exceptions.CannotWriteException import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException import org.jaudiotagger.audio.exceptions.ReadOnlyFileException +import org.jaudiotagger.tag.FieldDataInvalidException import org.jaudiotagger.tag.TagException import org.jaudiotagger.tag.images.AndroidArtwork import org.jaudiotagger.tag.images.Artwork @@ -31,9 +33,9 @@ class TagWriter { companion object { suspend fun scan(context: Context, toBeScanned: List?) { - if (toBeScanned == null || toBeScanned.isEmpty()) { + if (toBeScanned.isNullOrEmpty()) { Log.i("scan", "scan: Empty") - context.showToast( "Scan file from folder") + context.showToast("Scan file from folder") return } MediaScannerConnection.scanFile( @@ -50,150 +52,151 @@ class TagWriter { suspend fun writeTagsToFiles(context: Context, info: AudioTagInfo) { withContext(Dispatchers.IO) { - runCatching { - var artwork: Artwork? = null - var albumArtFile: File? = null - if (info.artworkInfo?.artwork != null) { - try { - albumArtFile = createAlbumArtFile(context).canonicalFile - info.artworkInfo.artwork.compress( - Bitmap.CompressFormat.JPEG, - 100, - albumArtFile.outputStream() - ) - artwork = AndroidArtwork.createArtworkFromFile(albumArtFile) - } catch (e: IOException) { - e.printStackTrace() - } + var artwork: Artwork? = null + var albumArtFile: File? = null + if (info.artworkInfo?.artwork != null) { + try { + albumArtFile = createAlbumArtFile(context).canonicalFile + info.artworkInfo.artwork.compress( + Bitmap.CompressFormat.JPEG, + 100, + albumArtFile.outputStream() + ) + artwork = AndroidArtwork.createArtworkFromFile(albumArtFile) + } catch (e: IOException) { + e.printStackTrace() } - var wroteArtwork = false - var deletedArtwork = false - for (filePath in info.filePaths!!) { - try { - val audioFile = AudioFileIO.read(File(filePath)) - val tag = audioFile.tagOrCreateAndSetDefault - if (info.fieldKeyValueMap != null) { - for ((key, value) in info.fieldKeyValueMap) { - try { - tag.setField(key, value) - } catch (e: Exception) { - e.printStackTrace() + } + var wroteArtwork = false + var deletedArtwork = false + for (filePath in info.filePaths!!) { + try { + val audioFile = AudioFileIO.read(File(filePath)) + val tag = audioFile.tagOrCreateAndSetDefault + if (info.fieldKeyValueMap != null) { + for ((key, value) in info.fieldKeyValueMap) { + try { + tag.setField(key, value) + } catch (e: FieldDataInvalidException) { + withContext(Dispatchers.Main) { + context.showToast(R.string.could_not_write_tags_to_file) } + return@withContext listOf() + } catch (e: Exception) { + e.printStackTrace() } } - if (info.artworkInfo != null) { - if (info.artworkInfo.artwork == null) { - tag.deleteArtworkField() - deletedArtwork = true - } else if (artwork != null) { - tag.deleteArtworkField() - tag.setField(artwork) - wroteArtwork = true - } + } + if (info.artworkInfo != null) { + if (info.artworkInfo.artwork == null) { + tag.deleteArtworkField() + deletedArtwork = true + } else if (artwork != null) { + tag.deleteArtworkField() + tag.setField(artwork) + wroteArtwork = true } - audioFile.commit() - } catch (e: CannotReadException) { - e.printStackTrace() - } catch (e: IOException) { - e.printStackTrace() - } catch (e: CannotWriteException) { - e.printStackTrace() - } catch (e: TagException) { - e.printStackTrace() - } catch (e: ReadOnlyFileException) { - e.printStackTrace() - } catch (e: InvalidAudioFrameException) { - e.printStackTrace() } + audioFile.commit() + } catch (e: CannotReadException) { + e.printStackTrace() + } catch (e: IOException) { + e.printStackTrace() + } catch (e: CannotWriteException) { + e.printStackTrace() + } catch (e: TagException) { + e.printStackTrace() + } catch (e: ReadOnlyFileException) { + e.printStackTrace() + } catch (e: InvalidAudioFrameException) { + e.printStackTrace() } - if (wroteArtwork) { - insertAlbumArt(context, info.artworkInfo!!.albumId, albumArtFile!!.path) - } else if (deletedArtwork) { - deleteAlbumArt(context, info.artworkInfo!!.albumId) - } - scan(context, info.filePaths) - }.onFailure { - it.printStackTrace() } + if (wroteArtwork) { + insertAlbumArt(context, info.artworkInfo!!.albumId, albumArtFile!!.path) + } else if (deletedArtwork) { + deleteAlbumArt(context, info.artworkInfo!!.albumId) + } + scan(context, info.filePaths) } } - @RequiresApi(Build.VERSION_CODES.R) suspend fun writeTagsToFilesR(context: Context, info: AudioTagInfo): List = withContext(Dispatchers.IO) { val cacheFiles = mutableListOf() - runCatching { - var artwork: Artwork? = null - var albumArtFile: File? = null - if (info.artworkInfo?.artwork != null) { - try { - albumArtFile = createAlbumArtFile(context).canonicalFile - info.artworkInfo.artwork.compress( - Bitmap.CompressFormat.JPEG, - 100, - albumArtFile.outputStream() - ) - artwork = AndroidArtwork.createArtworkFromFile(albumArtFile) - } catch (e: IOException) { - e.printStackTrace() - } + var artwork: Artwork? = null + var albumArtFile: File? = null + if (info.artworkInfo?.artwork != null) { + try { + albumArtFile = createAlbumArtFile(context).canonicalFile + info.artworkInfo.artwork.compress( + Bitmap.CompressFormat.JPEG, + 100, + albumArtFile.outputStream() + ) + artwork = AndroidArtwork.createArtworkFromFile(albumArtFile) + } catch (e: IOException) { + e.printStackTrace() } - var wroteArtwork = false - var deletedArtwork = false - for (filePath in info.filePaths!!) { - try { - val originFile = File(filePath) - val cacheFile = File(context.cacheDir, originFile.name) - cacheFiles.add(cacheFile) - originFile.inputStream().use { input -> - cacheFile.outputStream().use { output -> - input.copyTo(output) - } + } + var wroteArtwork = false + var deletedArtwork = false + for (filePath in info.filePaths!!) { + try { + val originFile = File(filePath) + val cacheFile = File(context.cacheDir, originFile.name) + cacheFiles.add(cacheFile) + originFile.inputStream().use { input -> + cacheFile.outputStream().use { output -> + input.copyTo(output) } - val audioFile = AudioFileIO.read(cacheFile) - val tag = audioFile.tagOrCreateAndSetDefault - if (info.fieldKeyValueMap != null) { - for ((key, value) in info.fieldKeyValueMap) { - try { - tag.setField(key, value) - } catch (e: Exception) { - e.printStackTrace() + } + val audioFile = AudioFileIO.read(cacheFile) + val tag = audioFile.tagOrCreateAndSetDefault + if (info.fieldKeyValueMap != null) { + for ((key, value) in info.fieldKeyValueMap) { + try { + tag.setField(key, value) + } catch (e: FieldDataInvalidException) { + withContext(Dispatchers.Main) { + context.showToast(R.string.could_not_write_tags_to_file) } + return@withContext listOf() + } catch (e: Exception) { + e.printStackTrace() } } - if (info.artworkInfo != null) { - if (info.artworkInfo.artwork == null) { - tag.deleteArtworkField() - deletedArtwork = true - } else if (artwork != null) { - tag.deleteArtworkField() - tag.setField(artwork) - wroteArtwork = true - } + } + if (info.artworkInfo != null) { + if (info.artworkInfo.artwork == null) { + tag.deleteArtworkField() + deletedArtwork = true + } else if (artwork != null) { + tag.deleteArtworkField() + tag.setField(artwork) + wroteArtwork = true } - audioFile.commit() - } catch (e: CannotReadException) { - e.printStackTrace() - } catch (e: IOException) { - e.printStackTrace() - } catch (e: CannotWriteException) { - e.printStackTrace() - } catch (e: TagException) { - e.printStackTrace() - } catch (e: ReadOnlyFileException) { - e.printStackTrace() - } catch (e: InvalidAudioFrameException) { - e.printStackTrace() } + audioFile.commit() + } catch (e: CannotReadException) { + e.printStackTrace() + } catch (e: IOException) { + e.printStackTrace() + } catch (e: CannotWriteException) { + e.printStackTrace() + } catch (e: TagException) { + e.printStackTrace() + } catch (e: ReadOnlyFileException) { + e.printStackTrace() + } catch (e: InvalidAudioFrameException) { + e.printStackTrace() } - if (wroteArtwork) { - insertAlbumArt(context, info.artworkInfo!!.albumId, albumArtFile!!.path) - } else if (deletedArtwork) { - deleteAlbumArt(context, info.artworkInfo!!.albumId) - } - }.onFailure { - it.printStackTrace() + } + if (wroteArtwork) { + insertAlbumArt(context, info.artworkInfo!!.albumId, albumArtFile!!.path) + } else if (deletedArtwork) { + deleteAlbumArt(context, info.artworkInfo!!.albumId) } cacheFiles } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0e6eaba7a9..e9609c7c19 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -562,4 +562,5 @@ 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. + Could not write tags to the music file! From 4e557fffaebc285fd05aaffb2e8f1053f31d8a18 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 18 Mar 2023 15:08:07 +0530 Subject: [PATCH 13/28] feat: Add A13 granular permissions --- app/src/main/AndroidManifest.xml | 11 ++++++++--- .../retromusic/activities/PermissionActivity.kt | 5 +---- .../activities/base/AbsMusicServiceActivity.kt | 13 ++++++++++--- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8db74d0f6d..c9c99e633f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,7 +9,11 @@ - + + + @@ -30,7 +34,9 @@ + tools:ignore="UnusedAttribute"> 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 da88b2a90d..f58be5ba21 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 @@ -129,10 +129,7 @@ class PermissionActivity : AbsMusicServiceActivity() { } private fun hasStoragePermission(): Boolean { - return ActivityCompat.checkSelfPermission( - this, - Manifest.permission.READ_EXTERNAL_STORAGE - ) == PackageManager.PERMISSION_GRANTED + return hasPermissions() } @RequiresApi(Build.VERSION_CODES.S) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt index 07937c7b55..e2485a7eea 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt @@ -16,8 +16,10 @@ package code.name.monkey.retromusic.activities.base import android.Manifest import android.content.* +import android.os.Build.VERSION_CODES import android.os.Bundle import android.os.IBinder +import androidx.core.content.ContextCompat import androidx.lifecycle.lifecycleScope import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R @@ -96,8 +98,7 @@ abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventLi filter.addAction(MEDIA_STORE_CHANGED) filter.addAction(FAVORITE_STATE_CHANGED) - registerReceiver(musicStateReceiver, filter) - + ContextCompat.registerReceiver(this, musicStateReceiver, filter, ContextCompat.RECEIVER_NOT_EXPORTED) receiverRegistered = true } @@ -190,7 +191,13 @@ abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventLi } override fun getPermissionsToRequest(): Array { - return mutableListOf(Manifest.permission.READ_EXTERNAL_STORAGE).apply { + return mutableListOf().apply { + if (VersionUtils.hasT()) { + add(Manifest.permission.READ_MEDIA_AUDIO) + add(Manifest.permission.POST_NOTIFICATIONS) + } else { + add(Manifest.permission.READ_EXTERNAL_STORAGE) + } if (!VersionUtils.hasR()) { add(Manifest.permission.WRITE_EXTERNAL_STORAGE) } From e483038b6c6451b6f50b73c20419f9884d748595 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 18 Mar 2023 15:50:50 +0530 Subject: [PATCH 14/28] feat: Add A13 per-app language preference compatibility with the existing language chooser --- .../retromusic/extensions/extensions.kt | 4 +- app/src/main/AndroidManifest.xml | 11 +++++ .../code/name/monkey/retromusic/Constants.kt | 1 + .../retromusic/LanguageContextWrapper.kt | 25 ----------- .../activities/base/AbsThemeActivity.kt | 24 +++++----- .../activities/bugreport/model/DeviceInfo.kt | 3 +- .../settings/OtherSettingsFragment.kt | 18 +++++++- .../retromusic/glide/RetroMusicGlideModule.kt | 8 +++- .../monkey/retromusic/util/PreferenceUtil.kt | 15 ++++++- app/src/main/res/xml/locales_config.xml | 45 +++++++++++++++++++ .../retromusic/extensions/extensions.kt | 4 +- 11 files changed, 113 insertions(+), 45 deletions(-) delete mode 100644 app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.kt create mode 100644 app/src/main/res/xml/locales_config.xml diff --git a/app/src/fdroid/java/code/name/monkey/retromusic/extensions/extensions.kt b/app/src/fdroid/java/code/name/monkey/retromusic/extensions/extensions.kt index 1dc3ae58f7..dffaedfa45 100644 --- a/app/src/fdroid/java/code/name/monkey/retromusic/extensions/extensions.kt +++ b/app/src/fdroid/java/code/name/monkey/retromusic/extensions/extensions.kt @@ -8,8 +8,8 @@ import androidx.fragment.app.FragmentActivity fun Context.setUpMediaRouteButton(menu: Menu) {} -fun FragmentActivity.installLanguageAndRecreate(code: String) { - recreate() +fun FragmentActivity.installLanguageAndRecreate(code: String, onInstallComplete: () -> Unit) { + onInstallComplete() } fun Context.goToProVersion() {} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c9c99e633f..e35633fe0f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -39,6 +39,7 @@ android:enableOnBackInvokedCallback="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" + android:localeConfig="@xml/locales_config" android:requestLegacyExternalStorage="true" android:restoreAnyVersion="true" android:roundIcon="@mipmap/ic_launcher_round" @@ -328,6 +329,16 @@ + + + + + نمی توان آدرس را دریافت کرد - بازکردن حالت کشویی + کشوی ناوبری را باز کنید «نمایش کارت حافظه» را در منوی زیرین فعال کنید %s نیاز به دسترسی به کارت حافظه دارد - باید دایرکتوری ریشه کارت حافظه خود را انتخاب کنید + باید دایرکتوری ریشه کارت SD خود را انتخاب کنید مکان کارت SD خود را انتخاب کنید هیچ زیر پوشه ای را باز نکنید بر روی دکمه \"انتخاب\" در پایین صفحه ضربه بزنید @@ -483,7 +483,7 @@ اشتراک گذاری در استوری نمایش هنرمندان آلبوم حالت مخلوط - نمونه + ساده زمان خواب لغو شد. تایمر خواب از هم اکنون برای %d دقیقه تنظیم شده است. شبکه های اجتماعی @@ -496,9 +496,9 @@ آلبوم هنرمند آهنگساز - تاریخ اضافه شدن + تاریخ اضافه شده تاریخ ویرایش شده - Default + پیش‌فرض تعداد آهنگ کاهش تعداد آهنگ سال @@ -512,13 +512,13 @@ برای باز کردن قفل، انگشت خود را بکشید همگام سازی متن ترانه ها تلگرام - برای بحث در مورد اشکالات، ارائه پیشنهادات، خودنمایی و موارد دیگر به گروه تلگرام بپیوندید + برای بحث در مورد اشکالات، ارائه پیشنهادات، نمایش و موارد دیگر به گروه تلگرام بپیوندید متشکریم! فایل صوتی این ماه این هفته امسال - بسیار کوچک + کوچک کارت کوچک عنوان پشتیبان گیری جدید @@ -529,11 +529,11 @@ شماره آهنگ ترجمه کردن به ما کمک کنید تا برنامه را به زبان شما ترجمه کنیم - موزیک پلیر ریت رو نسخه ویژه را امتحان کنید + نسخه ویژه موزیک پلیر Retro را امتحان کنید توییتر - نشان دادن طراحی شما با موزیک پلیر ریت رو + طرح خود را با موسیقی Retro به اشتراک بگذارید بدون برچسب - این موزیک پخش نمیشود + این آهنگ پخش نمیشود. تا بعدی بروز رسانی تصویر درحال به روز رسانی… diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 61d18e3b06..ec25194366 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -5,13 +5,13 @@ एक्सेंट रंग The theme accent color, defaults to purple जानकारी - Add to Blacklist + कालीसूची में जोड़ें पसंदीदा में जोड़े - Add to playing queue + बजने वाली कतार में जोड़ें प्लेलिस्ट में जोड़ें वर्तमान टाइमर को रद्द करें - Cast - Clear playing queue + प्रसारित करें + बजने वाली कतार साफ़ करें Cycle repeat mode हटाएं डिवाइस से हटाएं diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index c3c3e0ac32..bf89c2c75d 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -177,7 +177,7 @@ Biztonsági mentés törlése sikertelen A neved nem lehet üres! Betöltés sikertelen - Couldn\'t share file + Nem sikerült megosztani a fájlt Kibővített GYIK Kedvencek @@ -421,7 +421,7 @@ Háttérkép kiemelő szín Engedélyezett zenelisták Pro - Black theme, Now playing themes, Carousel effect and more.. + Fekete téma, Most lejátszott téma, Carousel effekt és több.. Profil Vásárlás Sorban áll @@ -498,7 +498,7 @@ Zeneszerző Hozzáadás dátuma Módosítás dátuma - Default + Alapértelmezett Zenék darabszáma Zenék darabszáma szerint csökkenő sorrendben Év diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 885a1fa300..91fd054ad4 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -3,12 +3,12 @@ %s について 我々のチームとソーシャルリンク アクセントカラー - テーマのアクセントカラー、既定は青緑色です。 + テーマのアクセントカラー、既定は紫色です。 このアプリについて ブラックリストに追加 お気に入りに追加 再生キューに追加 - プレイリストに追加… + プレイリストに追加 キャンセル キャスト 再生キューをクリア @@ -60,14 +60,14 @@ %1$d 曲が再生キューに追加されました アルバム - + 楽曲 アルバムアーティスト アルバム アルバム - 常に + 常時 クールな音楽プレイヤーをチェックしよう: https://play.google.com/store/apps/details?id=%s シャッフル トップ曲 @@ -86,7 +86,7 @@ 設定、プレイリストのバックアップと復元 バックアップ - バイオグラフィー + 説明 ダークテーマ時に漆黒にする ブラックリスト 付近の Bluetooth デバイスを確認するために Nearby デバイス権限が必要です @@ -140,7 +140,7 @@ 作成 プレイリストを作成しました %1$s メンバーと貢献者 - 現在、 %1$s によって %2$s で聴いています。 + 現在、 %2$s で %1$s を聴いています。 カスタムアーティスト画像 クラッシュレポートを共有 ダーク @@ -181,12 +181,12 @@ よくある質問 お気に入り ファイルは既に存在します - 最後の曲を終了する + 最後の曲の終了を待つ フィット フラット フォルダ システムに従う - あなたのために + おすすめ なし フル 全体のカード @@ -232,7 +232,7 @@ サンプリングレート 長さ ラベルを表示する - 最後に追加された + 最近追加 前の曲 はじめよう ライブラリの表示項目 @@ -243,7 +243,7 @@ 商品の読み込み中... ログイン 歌詞 - インドの❤によって開発 + インドにて、❤をこめて開発 マテリアル エラー 権限が付与されていません @@ -254,9 +254,9 @@ 更新しました %s へようこそ]]> 名前 - 最も再生された + 最近のお気に入り 決して - 新しい曲のミックス + 新曲ミックス 新しいプレイリスト %s は新しい開始ディレクトリです。 次の曲 @@ -361,7 +361,7 @@ 有効にすると、新たに再生された曲は履歴に表示されません 開始時に最後に表示したタブに移動します 同期歌詞をアルバムカバーに重ねて表示します - 新しい音楽ミックスをホーム画面に表示する + 新曲ミックスをホーム画面に表示する 再生中画面のどこかをスワイプして、楽曲の変更を行います 下にスワイプしてミニプレイヤーを閉じます アプリをフルスクリーン表示にする @@ -378,7 +378,7 @@ ヘッダーのスタイル フォーカスロス時に音量を下げる オーディオをフェードする - アーティスト画像を自動でダウンロードする + アーティスト画像を自動でダウンロード ブラックリスト Bluetooth接続時に再生 アルバムジャケットにぼかしを適用する @@ -400,7 +400,7 @@ Media Store のカバーを無視する 最後に追加されたプレイリストの間隔 フルスクリーンコントロール - 歌詞を表示するときは画面を点灯したままにします + 歌詞の表示時に画面を点灯し続ける 歌詞の種類 常に再生する 再生中のテーマ diff --git a/app/src/main/res/values-kmr-rTR/strings.xml b/app/src/main/res/values-kmr-rTR/strings.xml index 77ba12bba5..20ac634915 100644 --- a/app/src/main/res/values-kmr-rTR/strings.xml +++ b/app/src/main/res/values-kmr-rTR/strings.xml @@ -44,13 +44,13 @@ Wek rêberiya destpêkê saz bike "Sazkarî" Parve bike - Hemûyan tevlihev bike - Rêzoka lêdanê tevlihev bike + Hemûyan tevlîhev bike + Rêzoka lêdanê tevlîhev bike Demkera xewê Rêzkirin bi Zanyariyên stranê serrast bike Bijarteyan biguherîne - Awaya tevlihevkirinê çalak bike + Awaya tevlîhevkirinê çalak bike Guncav Tevlî bike "Tevlî rêzoka lêdanê bike" @@ -72,8 +72,8 @@ Her dem Silav ev lêdera muzîkê ya xweşik li vir binêre: https://play.google.com/store/apps/details?id=%s - Tevlihev bike - Xweştirîn stran + Tevlîhev bike + Baştirîn stran Wêneya tijî Kert Klasîk @@ -184,7 +184,7 @@ https://play.google.com/store/apps/details?id=%s Bijarte Pel jixwe heye Strana dawî biqedîne - Guncav bike + Lihevhatî Dûz Peldank Pergalê bişopîne @@ -207,7 +207,7 @@ https://play.google.com/store/apps/details?id=%s 6 7 8 - Şêwaza torê + Awaya torê Bêtir alîkarî dixwazî? Mofirk Dîrok @@ -258,7 +258,7 @@ https://play.google.com/store/apps/details?id=%s Nav Herî pir lêdayî Tu car - Muzîka nû tevlihev bike + Muzîka nû tevlîhev bike Rêzoka lêdanê ya nû %s reberiya destpêkê ya nû ye. Strana pêş @@ -281,7 +281,7 @@ https://play.google.com/store/apps/details?id=%s Tiştek bo venêrînê tune ye. Tiştek bo dîtinê tune ye Agahî - Şêwaza agahiyan kesane bike + Awaya agahiyan kesane bike Niha tê lêdan Rêzeya niha tê lêdan Dîmendera niha tê lêdan kesane bike @@ -321,7 +321,7 @@ https://play.google.com/store/apps/details?id=%s Stranan bi ya dirêjahiyê parzûn bike Dema stranê parzûn bike Pêşketî - Şêwaza albumê + Awaya albumê Deng Rêzoka reş Kontrol @@ -364,12 +364,12 @@ têne guhertin Dema ku çalak be, stranên ku nû hatine lêdan wê di dîrokê de neyên xuyakirin Dema ku dest pê dike, biçe rûgera herî dawî ya ku hatiye bikaranîn Peyvên stranê hevdemkirî li ser berga albumê nîşan bide - Bişkoka tevlihevkirina Muzîka nû li ser dîmenera sereke nîşan bide + Bişkoka tevlîhevkirina Muzîka nû li ser dîmenera sereke nîşan bide Bi kişandina li her derê li ser dîmendera lêdanê stranan biguherîne Berjêr kaş bike da ku lêdera mini paşguh bikî Awaya dîmendera tije çalak bike Piştî ku guhik hate girêdan tavilê dest bi lêdanê bike - Dema ku ji rêzeyeke stran were lêdan wê awaya tevlihevkirinê were neçalakkirin + Dema ku ji rêzeyeke stran were lêdan wê awaya tevlîhevkirinê were neçalakkirin Ku şûn hebe, di dîmendera ku niha tê lêdan de kontrolên dengê nîşan bide Renga çarçoveyê ji paşrûyê derxîne Muzîkê tenê ji /Peldanka muzîkê nîşan bide @@ -418,7 +418,7 @@ têne guhertin Bandora gilover Sepanê di dîmendera tije bide xebitandin Lêdana xweber - Awaya tevlihevkirinê + Awaya tevlîhevkirinê Kontrola dengê Rengê devokê paşrûyê Rêzoka stranên spî @@ -458,7 +458,7 @@ têne guhertin Nikare girêdana SAF bi dest bixe Menuya geranê veke - Di menuya tevlihev de \'Kerta SD nîşan bide\' çalak bike + Di menuya tevlîhev de \'Kerta SD nîşan bide\' çalak bike %s pêdivî bi gihiştina karta SD heye Pêdivî ye ku tu rêberiya rehê kerta SD hilbijêrî @@ -474,7 +474,7 @@ têne guhertin Rêzoka lêdanê li %s hate tomarkirin. Guhertinan tomar bike Medya venêre - %1$d ji %2$d pel hate venêrîn. + %1$d ji %2$d pel hate guhertin. Scrobbles Hemûyan hilbijêre Hilbijartî @@ -484,7 +484,7 @@ têne guhertin Sepanê bi heval û malbata xwe re parve bike Di çîrokan de parve bike Hunermendê albumê nîşan bide - Tevlihev bike + Tevlîhev bike Hêsan Demkera xewê hate têkbirin. Demkera xewê ji bo %d xulek hate sazkirin. @@ -525,8 +525,8 @@ têne guhertin Sernav Hilanîna nû Îro - Xweştirîn album - Xweştirîn hunermend + Baştirîn album + Baştirîn hunermend "Herik (2 bo herika 2 an jî 3004 bo herika CD3 4)" Jimara herikê Wergerandin diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 4653affb79..428eec4b5b 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -1,11 +1,11 @@ - About %s + %s에 관하여 Team, social links 강조 색상 강조 색상을 지정합니다. 기본값은 녹색입니다. 정보 - Add to Blacklist + 블랙 리스트에 추가 즐겨찾기에 추가 재생 대기열에 추가 재생목록에 추가... diff --git a/app/src/main/res/values-lv-rLV/strings.xml b/app/src/main/res/values-lv-rLV/strings.xml index 4b3227ac77..341d7a886f 100644 --- a/app/src/main/res/values-lv-rLV/strings.xml +++ b/app/src/main/res/values-lv-rLV/strings.xml @@ -148,21 +148,21 @@ Share Crash Report Nedaudz tumšs Dzēst atskaņošanas sarakstu - %1$s?]]> + %1$s?]]> Dzēst atskaņošanas sarakstus Dzēst dziesmu %1$s?]]> Dzēst dziesmas - %1$d playlists?]]> + %1$d atskaņošanas sarakstus?]]> %1$d dziesmas?]]> Tika izdzēstas %1$d dziesmas. - Deleting Songs + Dziesmas tiek dzēstas Depth Apraksts Informācija par ierīci Ļaut Retro Music mainīt audio iestatījumus Iestatīt zvana signālu - Disc Number + Diska numurs Do you want to clear the blacklist? %1$s from the blacklist?]]> Ziedot @@ -179,7 +179,7 @@ Couldn\u2019t delete backup Your name can\'t be empty! Load failed - Couldn\'t share file + Neizdevās kopīgot failu Expanded BUJ Izlase @@ -198,8 +198,8 @@ Žanrs Žanri Fork the project on GitHub - Gradient - Grant access + Krāsu pāreja + Piešķirt piekļuvi 1 2 3 @@ -209,7 +209,7 @@ 7 8 Grid style - Need more help? + Nepieciešama papildu palīdzība? Hinge Vēsture Vēsture notīrīta @@ -231,12 +231,12 @@ File path Izmērs Last Modified - More from %s + Vairāk no %s Sampling rate Ilgums Labeled - Last added - Last song + Pēdējie pievienotie + Pēdējā dziesma Let\'s go Library categories Licences @@ -245,15 +245,15 @@ Listing files Loading products… Login - Lyrics + Vārdi Radīts Indijā ar ❤️ Material Kļūda - Permission error + Atļauju kļūda Dublējums izveidots veiksmīgi. Not more than 5 items %s ir Pro funkcija. - Restore completed successfully. + Atjaunošana veikta veiksmīgi. Updated Welcome to %s]]> Vārds @@ -263,14 +263,14 @@ Jauns atskaņošanas saraksts %s is the new start directory. Nākamā dziesma - You have no albums + Jums nav mūzikas albumu You have no artists - "Play a song first, then try again." - No Backups Found - No equalizer found + "Vispirms atskaņojiet kaut ko, tad mēģiniet vēlreiz." + Rezerves kopija nav atrasta + Ekvalaizeris nav atrasts You have no genres - No lyrics found - No songs playing + Dziesmas vārdi nav atrasti + Šobrīd nekas netiek atskaņots You have no playlists No purchase found. Nav rezultātu @@ -284,7 +284,7 @@ Paziņojums Mainīt paziņojuma stilu Pašlaik atskaņo - Now playing queue + Pašreizējā atskaņošanas rinda Customize the now playing screen 9+ now playing themes Tikai izmantojot Wi-Fi @@ -293,7 +293,7 @@ Over Cover Parole Past 3 months - Paste Lyrics Here + Ielīmēt vārdus šeit Paste timeframe lyrics here Peek Nearby devices permission denied. @@ -307,29 +307,29 @@ Pinterest Follow Pinterest page for Retro Music design inspiration Plain - Playlist already exists + Atskaņošanas saraksts jau pastāv Pitch Atskaņošnas Iestatījumi Atskaņošanas ātrums The playing notification provides actions for play/pause etc. Playing notification - %s created successfully - Playlist is empty - Playlist name - Playlists + %s izveidots veiksmīgi + Atskaņošanas saraksts ir tukšs + Atskaņošanas saraksta nosaukums + Atskaņošanas saraksti Izpludināšanas līmenis, kas tiek piemērots motīviem ar izpludinātiem elementiem. Jo zemāka vērtiba, jo ātrāk tiek izpludināts Blur amount - Filter songs by length + Šķirot mūziku pēc ilguma Filter song duration Advanced Album style Audio - Blacklist + Pevienot melnajam sarakstam Vadība Motīvs - Images + Attēli Library - Lockscreen + Bloķēšanas ekrāns Atskaņošanas saraksti Aptur dziesmu, kad skaļums ir 0, un atsāk atskaņošanu, kad skaļums tiek palielināts. Strādā arī ārpus lietotnes Apturēt atskaņošanu, ja skaļums ir 0 @@ -350,29 +350,29 @@ Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" Duration to crossfade between songs - As per Material Design guide lines in dark mode colors should be desaturated - Clicking on the notification will show now playing screen instead of the home screen + Kā norādīts Material design standartos, tumšajā režīmā krāsu piesātinājumam ir jābūt mazākam + Uzspiežot uz paziņojumatiks rādīts tas, kas pašreiz tiek atskaņots, nevis sākuma ekrāns Add extra controls for mini player Show extra Song information, such as file format, bitrate and frequency - "Can cause playback issues on some devices." - Show or hide the home banner + "Dažām ierīcēm var radīt atskaņošanas problēmas." + Rādīt vai slēpt sākuma baneri Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls - Always play audio in background regardless of anything else being played - License details for open source software - When enabled, newly played songs won\'t show in history - Navigate to the last used tab on start + Vienmēr atskaņot audio, pat tad, ja tajā pašā brīdī tiek atskaņots kas cits + Licences skaidrojums atvērtā pirmkoda programmatūrām + Kad iespējots, nesen atskaņotas dziesmas netiks rādītas vēsturē + Atverot doties uz pēdējā reizē atvērto cilni Display synced lyrics over album cover - Show New Music Mix on homescreen + Rādīt jaunās mūzikas miksli sākuma ekrānā Enables changing song by swiping anywhere on the now playing screen Swipe down to dismiss mini player Immersive mode - Start playing immediately after headphones are connected - Shuffle mode will turn off when playing a new list of songs + Sākt atskaņošanu uzreiz pēc austiņu pieslēgšanas + Jaukšana tiks izslēgta atskaņojot jaunu mūziku If enough space is available, show volume controls in the now playing screen - Extract accent color from wallpaper - Only show music from /Music Folder + Iegūt akcenta krāsu no ekrāna tapetes + Rādīt mūziku tikai no /Music mapes Rādīt albuma vāku Navigate by Album Artist Album cover theme @@ -382,20 +382,20 @@ Reduce volume on focus loss Fade audio Automātiski lejupielādēt izpildītāju attēlus - Blacklist + Pevienot melnajam sarakstam Bluetooth playback Blur album cover Circular play button Classic notification design Adaptive color - Colored notification + Iekrāsots paziņojums Crossfade (Beta) Izmantot Manrope fontu - Desaturated color + Nepiesātinātas krāsas Show now playing screen - Extra controls + Papildus vadība Dziesmas info - Gapless playback + Bezatstarpju atskaņošana Lietotnes motīvs Album grid Artist grid @@ -404,11 +404,11 @@ Last added playlist interval Fullscreen controls Keep screen on when showing lyrics - Lyrics type - Always play + Vārdu veids + Vienmēr atskaņot Now playing theme - Open source licences - Pause history + Atvērtā pirmkoda licences + Apturēt vēsturi Remember last tab Show lyrics Show suggestions @@ -426,35 +426,35 @@ Black theme, Now playing themes, Carousel effect and more.. Profile Iegādāties - Playing Queue + Atskaņošanas rinda Novērtēt lietotni Love this app? Let us know in the Google Play Store how we can make it even better Nesenie albumi Recent artists - Remove - Remove cover - Remove from blacklist + Noņemt + Noņemt albuma vāku + Izņemt no melnā saraksta Noņemt attēlu - Remove song from playlist - %1$s from the playlist?]]> - Remove songs from playlist - %1$d songs from the playlist?]]> - Rename playlist - Replace Cover - Report an issue - Report bug - Reset + Izņemt dziesmu no atskaņošanas saraksta + %1$s no atskaņošanas saraksta?]]> + Izņemt dziesmas no atskaņošanas saraksta + %1$d dziesams no atskaņošanas saraksta?]]> + Mainīt atskaņošanas saraksta nosaukumu + Mainīt albuma vāku + Ziņot par problēmu + Ziņot par kļūdu + Atiestatīt Atiestatīt izpildītāja attēlu Atjaunot - Do you want to restore backup? - Restored previous purchase. Please restart the app to make use of all features. - Restored previous purchases. - Restoring purchase… + Vai vēlaties atjaunot no rezerves kopijas? + Iepriekšējais pirkums atjaunots. Lūdzu, restartējiet lietotni, lai varētu lietot visas funkcijas. + Iepriekšējais pirkums atjaunots veiksmīgi. + Pirkums tiek atjaunots… Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone Ringtone (Optional) - File delete failed: %s + Faila dzēšana neizdevās: %s Can\'t get SAF URI Open navigation drawer diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index d81deb6fe2..070ec270af 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -20,7 +20,7 @@ Ga naar album Ga naar artiest Ga naar genre - Go to Lyrics + Ga naar Songtekst Ga naar begin directory Geef toestemming Raster grootte @@ -55,7 +55,7 @@ Toevoegen "Toevogen aan afspeellijst" Add Time Framed Lyrics - Added %1$d song(s) to %2$s + %1$d nummer(s) toegevoegd aan %2$s "1 titel aan afspeel wachtrij toegevoegd." %1$d titels toegevoegd aan afspeel wachtrij Album @@ -78,26 +78,26 @@ Klassiek MD3 Klein - Minimal Text + Minimale tekst Artiest Artiesten - Audio fade duration + Audio fade duur Geluid focus geweigerd Wijzig de geluidsinstellingen en pas de equalizer aan Automatisch - Backup and restore your settings, playlists - - Backups + Back-up en herstel je instellingen, afspeellijsten + + Back-ups Biografie Gewoon zwart Zwarte lijst - The app needs nearby devices permission to check for bluetooth devices - Nearby devices + De app heeft nabije toestel toestemming nodig om te checken voor bluetooth toestellen + Apparaten in de buurt Vervagen - Blur Card + Vervaag Kaart Mislukt om het rapport te verzenden Ongeldige toegangstoken. Neem alsjeblieft contact op met de app-ontwikkelaar. - Issues are not enabled for the selected repository. Please contact the app developer. + Problemen zijn niet ingeschakeld voor de geselecteerde opslagplaats. Gelieve de app ontwikkelaar te contacteren. Er is een onverwachte fout opgetreden. Neem alsjeblieft contact op met de app-ontwikkelaar. Verkeerde gebruikersnaam of wachtwoord Probleem @@ -106,27 +106,27 @@ Vul alsjeblieft je geldig GitHub-wachtwoord in Vul alsjeblieft een titel voor het probleem in Vul alsjeblieft je geldig GitHub-gebruikersnaam in - Bug report successful + Fout rapporteren succesvol Een onverwachte fout is opgetreden. Het spijt me dat je deze bug tegengekomen bent. Als het blijft crashen, kies dan \"Clear app data\" of verstuur een email Verstuur door middel van je GitHub-account Kopen Annuleer huidige timer Kaart - Colored Card - Square Card + Gekleurde Kaart + Vierkante Kaart Kaart - Carousel effect on the now playing screen - Cascading + Carrousel effect op het nu aan het spelen scherm + Trapsgewijs Logboek Bekijk wat er nieuw is - Choose Image - Choose what to restore + Kies Afbeelding + Kies wat u wil herstellen Cirkel Rond Klassiek Legen Leeg zwarte lijst - Clear History + Geschiedenis Wissen Maak wachtrij leeg Kleur Kleuren @@ -135,15 +135,15 @@ Apparaatinfo is naar klembord gekopiëerd. Kon geen afspeellijst maken. "Kon geen matchende album cover downloaden." - Could not restore purchase. + Kon aankoop niet herstellen. Kon %d files niet scannen. Aanmaken Aanmaken Afspeellijst %1$s aangemaakt. - Members and contributors + Leden en bijdragers Nu luisterend naar %1$s van %2$s. - Custom Artist Images - Share Crash Report + Aangepaste artiestenafbeeldingen + Deel Crash Rapport Soort van donker Afspeellijst verwijderen %1$s verwijderen?]]> @@ -160,7 +160,7 @@ Apparaatinfo Sta Retro Music toe om audioinstellingen te wijzigen Stel in als beltoon - Disc Number + Schijfnummer Wil je de zwarte lijst leegmaken? %1$s verwijderen van de zwarte lijst?]]> Doneren @@ -168,36 +168,36 @@ Koop mij een Klaar Rijmodus - Edit Button - Edit Lyrics - Edit Synced Lyrics + Bewerk knop + Muziek tekst bewerken + Gesynchroniseerde muziek tekst bewerken Leeg Equalizer - Couldn\u2019t create backup - Couldn\u2019t delete backup - Your name can\'t be empty! - Load failed - Couldn\'t share file + Kon geen back-up maken + Kon back-up niet verwijderen + Uw naam kan niet leeg zijn! + Laden mislukt + Kon bestand niet delen Expanded Veelgestelde vragen Favorieten - File already exists - Finish last song + Bestand bestaat al + Eindig laatste nummer Fit Plat Mappen - Follow system - For you + Volg systeem + Voor jou Gratis Vol - Full card + Volledige kaart Pas het thema en de kleuren van de app aan - Look and feel + Look en feel Genre Genres - Fork the project on GitHub - Gradient - Grant access + Fork het project op GitHub + Gradiënt + Verleen toegang 1 2 3 @@ -208,15 +208,15 @@ 8 Rasterstijl Meer hulp nodig? - Hinge + Scharnier Geschiedenis - History cleared - Undo + Geschiedenis gewist + Ongedaan maken Start Flip horizontaal Afbeelding - Gradient image - Change artist image download settings + Gradiënt afbeelding + Wijzig downloadinstellingen voor artiesten afbeeldingen Importeren Importeer afspeellijst Het importeert alle afspeellijsten binnenin de Android Media Store met nummers. Als de afspeellijst al bestaat, worden de nummers samengevoegd. @@ -228,7 +228,7 @@ Bestandsnaam Bestandslocatie Grootte - Last Modified + Laatst gewijzigd Meer van %s Samplingfrequentie Duur @@ -236,7 +236,7 @@ Laatst toegevoegd Vorige nummer Let\'s go - Library categories + Bibliotheek categorieën Licenties Clearly wit Luisteraars @@ -249,11 +249,11 @@ Fout Toegangsfout Backup created successfully. - Not more than 5 items - %s is a Pro feature. - Restore completed successfully. + Niet meer dan 5 items + %s is een Pro-functie. + Herstellen succesvol voltooid. Updated - Welcome to %s]]> + Welkom bij %s]]> Mijn naam Mijn top tracks Nooit @@ -264,7 +264,7 @@ Geen albums Geen artiesten "Laat eerst een liedje afspelen, probeer dan opniew." - No Backups Found + Geen Back-ups Gevonden Geen equalizer gevonden. Je hebt geen genres Geen lyrics gevonden @@ -305,36 +305,36 @@ Pinterest Follow Pinterest page for Retro Music design inspiration Vlak - Playlist already exists + Afspeellijst bestaat al Pitch - Playback Settings - Playback Speed + Afspeel instellingen + Afspeelsnelheid De afspeel notificatie bied acties om af te spelen/pauzeren etc. Afspeel notificatie - %s created successfully + %s succesvol aangemaakt Afspeellijst is leeg Naam afspeellijst Afspeellijsten Amount of blur applied for blur themes, lower is faster Blur amount - Filter songs by length + Filter nummers op lengte Filter song duration - Advanced - Album style + Geavanceerd + Album stijl Geluid Zwarte lijst - Controls - Theme + Bedieningselementen + Thema Afbeeldingen - Library + Bibliotheek Vergrendelscherm Afspeellijsten Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app - Pause on zero - Keep in mind that enabling this feature may affect battery life - Keep the screen on - Select language - Snow fall effect + Pauzeer op nul + Houd er rekening mee dat het inschakelen van deze functie de levensduur van de batterij kan beïnvloeden + Houd het scherm aan + Taal selecteren + Sneeuwval effect Gebruik de huidige cover als vergrendelscherm achtergrond. Show Album Artists in the Artist category Notificaties, bediening etc. @@ -350,7 +350,7 @@ Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen - Add extra controls for mini player + Extra besturingselementen voor mini speler toevoegen Show extra Song information, such as file format, bitrate and frequency "Kan afspeelproblemen veroorzaken op sommige toestellen" Show or hide the home banner @@ -359,21 +359,21 @@ Zet besturing knoppen aan op vergrendelscherm Always play audio in background regardless of anything else being played Licentie details voor open source software - When enabled, newly played songs won\'t show in history + Wanneer ingeschakeld, zullen nieuw afgespeelde nummers niet zichtbaar zijn in de geschiedenis Navigate to the last used tab on start Display synced lyrics over album cover - Show New Music Mix on homescreen + Toon Nieuwe Muziek Mix op het startscherm Enables changing song by swiping anywhere on the now playing screen Swipe down to dismiss mini player Zet dit aan voor immersive mode Wanneer headphones ingeplugd zijn, afspelen start automatisch Shuffle mode will turn off when playing a new list of songs Als er ruimte is in het nu afspelen scherm, zet volume knoppen aan - Extract accent color from wallpaper + Haal accentkleur uit achtergrond Only show music from /Music Folder Laat album cover zien - Navigate by Album Artist - Album cover theme + Navigeer via Album Artiest + Album cover thema Album cover skip Gekleurde app snelkoppelingen Header style @@ -383,12 +383,12 @@ Zwarte lijst Bluetooth playback Vervaag album cover - Circular play button + Ronde afspeelknop Klassiek notificatie design Aangepaste kleur Gekleurde notificatie Crossfade (Beta) - Use Manrope font + Gebruik Manrope lettertype Desaturated color Show now playing screen Extra controls @@ -403,10 +403,10 @@ Volledig scherm besturing knoppen Keep screen on when showing lyrics Lyrics type - Always play + Altijd afspelen Uiterlijk Open source licenties - Pause history + Pauzeer geschiedenis Remember last tab Show lyrics Show suggestions @@ -418,7 +418,7 @@ Automatisch afspelen Shufflemodus Volume knoppen - Wallpaper accent color + Achtergrond accentkleur Whitelist music Pro Black theme, Now playing themes, Carousel effect and more.. @@ -432,13 +432,13 @@ Verwijderen Verwijder cover Verwijder van zwarte lijst - Remove Image + Verwijder afbeelding Verwijder liedje van afspeellijst %1$s van de afspeellijst?]]> Verwijder liedjes van afspeellijst %1$d van de afspeellijst?]]> Hernoem afspeellijst - Replace Cover + Vervang Cover Een probleem melden Een bug rapporteren Resetten @@ -454,8 +454,8 @@ Beltoon (Optioneel) Bestand verwijderen gefaald: %s - Can\'t get SAF URI - Open navigation drawer + Kan SAF URI niet ophalen + Navigatielade openen Enable \'Show SD card\' in overflow menu %s heeft toegang tot de SD-kaart nodig @@ -487,7 +487,7 @@ Slaap timer geannuleerd Slaap timer ingesteld in %d minuten vanaf nu Social - Share story + Verhaal delen Liedje Duur liedje Nummers @@ -496,18 +496,18 @@ Album Artiest Componist - Date added - Date modified + Datum toegevoegd + Datum aangepast Default - Song count + Aantal nummers Song count desc - Year + Jaar Descending Sorry! Je apparaat ondersteunt geen spraak invoer Zoek door je bibliotheek Stack - Start playing music. - Suggestions + Begin muziek afspelen. + Suggesties Ondersteun ontwikkelaars Swipe to unlock Synced lyrics @@ -520,42 +520,42 @@ Dit jaar Tiny Tiny card - Title + Titel New Backup Vandaag Top albums - Top artists + Top Artiesten "Nummer (2 voor nummer 2 of 3004 voor CD3 nummer 4)" Track nummer Vertalen Help us translate the app to your language - Try Retro Music Premium + Probeer Retro Muziek Premium Twitter - Share your design with Retro Music - Unlabeled + Deel jouw ontwerp met Retro Muziek + Niet gelabeld Kon dit nummer niet afspelen Volgende Update afbeelding Bijwerken... User Images User Name - Username + Gebruikersnaam Versie Vertical flip - View on Telegram + Bekijk op Telegram Volume Web zoekopdracht Website Check out our Website - Welcome, + Welkom, Wat wil je delen? - What\'s New - Window - Rounded corners + Wat is er nieuw + Venster + Afgeronde hoeken Stel %1$s in als ringtone %1$d geselecteerd Jaar - You have to select at least one category. + Je moet ten minste één categorie selecteren. You will be forwarded to the issue tracker website. Your account data is only used for authentication. diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 8a938fb255..95a14162e1 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -106,7 +106,7 @@ Por favor, digite sua senha válida do GitHub Por favor, insira um título do problema Por favor, digite seu nome de usuário válido do GitHub - Bug reportado com sucesso + Erro reportado com sucesso Um erro inesperado ocorreu. Se você tentar novamente e o erro persistir, use a opção \"Limpar dados do aplicativo\" ou envie-nos um e-mail Enviar usando uma conta do GitHub Comprar agora @@ -177,7 +177,7 @@ Não foi possível excluir o backup Seu nome não pode estar em branco! Falha ao carregar - Couldn\'t share file + Não foi possível salvar o arquivo Expandido Perguntas frequentes Favoritos @@ -421,7 +421,7 @@ Cor de destaque do papel de parede Lista branca Pro - Black theme, Now playing themes, Carousel effect and more.. + Tema escuro, Temas na tela de reprodução, Efeito carrossel e mais.. Perfil Comprar Fila @@ -498,7 +498,7 @@ Compositor Data adicionada Data de alteração - Default + Padrão Quantidade de músicas (crescente) Quantidade de músicas (decrescente) Ano diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 02d4b026ec..e04b164dd3 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -35,11 +35,11 @@ Șterge din favorite Șterge din coada de redare Șterge din playlist - redenumiți + Redenumiți Salvează coada de redare Scanează Căutare - Setare + Pornește Setează ca ton de apel Setează ca registru principal "Setări" @@ -48,7 +48,7 @@ Amestecă playlist Cronometru de somn Ordine de sortare - Redactor info + Detalii piesă Comutare favorite Comutare amestecare Adaptiv @@ -94,22 +94,22 @@ Negru Lista neagră Aplicația are nevoie de permisiunea dispozitive din apropiere pentru a verifica dacă există dispozitive bluetooth - Nearby devices + Dispozitive în apropiere Estompare Estompare card Imposibil de trimis raportul Jeton de acces nevalid. Vă rugăm să contactați dezvoltatorul aplicației. - Issues are not enabled for the selected repository. Please contact the app developer. - An unexpected error occurred. Please contact the app developer. + Trimiterea problemelor nu este disponibilă pentru repertoriul selectat. Te rugăm să contactezi dezvoltatorul aplicației. + A apărut o eroare neașteptată. Te rugăm să contactezi dezvoltatorul aplicației. Nume de utilizator sau parolă greșită Problemă Trimite manual Introduceți o descriere a problemei - 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 + Te rugăm să introduci parola ta validă de GitHub + Te rugăm să introduci un titlu pentru problemă + Te rugăm să introduci numele tău de utilizator valid + Raportul de erori s-a încheiat cu succes + A apărut o eroare neașteptată. Ne pare rău că ai întâmpinat această problemă. Dacă aplicația continuă să se închidă, șterge datele acesteia din setări sau trimite-ne un email Trimiteți utilizând contul GitHub Cumpărați acum Anulează cronometrul curent @@ -197,7 +197,7 @@ Aspect Gen muzical Genuri - Fork the project on GitHub + Creează o copie a repertoriului pe GitHub Gradient Acordare acces 1 @@ -210,20 +210,20 @@ 8 Stil grilă Aveți nevoie de mai mult ajutor? - Hinge + Balama Istoric Istoric șters Anulare Acasă Întoarcere pe orizontală Imagine - Gradient image - Change artist image download settings - Import - Import playlist - It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Imagine gradient + Schimbă setările de descărcare a imaginii artistului + Importare + Importare listă de redare + Importă toate listele de redare listate în Android Media Store cu melodii, dacă listele de redare există deja, melodiile vor fi îmbinate. Au fost insertate %1$d cântece în playlist-ul %2$s. - Share your Retro Music setup to showcase on Instagram + Partajați configurația Retro Music pentru a o publica pe Instagram Tastatură Rată de biți Format @@ -238,7 +238,7 @@ Adăugate recent Ultima melodie Să începem - Library categories + Categorii bibliotecă Licențe Alb Ascultători @@ -286,7 +286,7 @@ Se redă Coada de redare Personalizează ecranul de redare acum - 9+ now playing themes + 9+ teme Doar pe Wi-Fi Funcții avansate de testare Altele @@ -294,21 +294,21 @@ Parolă Ultimele 3 luni Lipește versuri aici - Paste timeframe lyrics here - Peek - Nearby devices permission denied. + Lipiți versurile temporale aici + Vizualizare + Permisiunea pentru dispozitivele din apropiere a fost refuzată. Accesul la stocarea externă este respinsă. - The app needs permission to access your device storage for playing music - Storage Access + Aplicația are nevoie de permisiunea de a accesa spațiul de stocare al dispozitivului pentru a reda muzica + Acces la stocare Permisiunile au fost respinse. Personalizare Personalizează UI si pagina de redare Alegeți din spațiul de stocare local Pinterest - Follow Pinterest page for Retro Music design inspiration + Urmărește pagina Pinterest pentru inspirație de design Retro Music Simplu - Playlist already exists - Pitch + Lista de redare există deja + Pas Setări de redare Viteză de redare Notificarea de redare oferă acțiuni de redare / pauză etc. @@ -317,10 +317,10 @@ Playlist-ul este gol Numele playlist-ului Playlist-uri - Amount of blur applied for blur themes, lower is faster - Blur amount - Filter songs by length - Filter song duration + Cantitatea de blur aplicată temelor din această categorie, o valoare mai mică redă performanțe mai bune + Cantitatea de blur + Filtrează melodiile după lungime + Filtrează durata melodiei Avansat Stil album Audio @@ -331,68 +331,68 @@ Bibliotecă Ecran de blocare Playlist-uri - Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pune pe pauză melodia când volumul scade la zero și reia redarea când volumul crește. De asemenea această funcție funcționează și în afara aplicației Pauză la zero Rețineți că activarea acestei funcții poate afecta durata bateriei - Keep the screen on - Select language - Snow fall effect + Păstrează ecranul pornit + Selectați limba + Efectul de cădere a zăpezii Folosește coperta de album curentă ca imagine de fundal pe ecranul de blocare. - Show Album Artists in the Artist category + Arată și albumul artiștilor în categoria Artist Notificațiile, navigarea etc. - Fade audio when song is paused or played - The content of blacklisted folders is hidden from your library. - Start playing as soon as connected to bluetooth device + Estompare audio atunci când melodia este oprită sau redată + Conținutul dosarelor din lista neagră este ascuns în bibliotecă. + Începe redarea imediat ce este conectat un dispozitiv Bluetooth Spălăcește coperta de album pe ecranul de blocare. Poate cauza probleme cu alte aplcicatii sau widget-uri. Efectul carusel pentru coperţile de album în ecranul de redare. Rețineți că tema Card și Blur Card nu va funcționa Folosește designul classic de notificare. Culoarea fundalului și a butonului de control se schimbă în dependență de coperta albumului din ecranul de redare Colorează comenzile rapide în culoarea de accent. De fiecare dată cînd schimbați culoarea, comutați această opțiune pentru effect "Coloreaz\u0103 notificarea dup\u0103 culoarea copertei de album." - Duration to crossfade between songs - As per Material Design guide lines in dark mode colors should be desaturated - Clicking on the notification will show now playing screen instead of the home screen - Add extra controls for mini player + Durata de intersectare între melodii + Conform schemei folosite, Material Design, în modul întunecat, culorile ar trebui să fie mai desaturate + Apăsând pe notificare se va afișa ecranul cu actuala melodia redată, în locul ecranului principal + Adaugă controale suplementare pentru mini player Afișează informații suplimentare despre piesă, cum ar fi formatul fișierului, rata de biți și frecvența "Poate cauza probleme de redare pe unele dispozitive." - Show or hide the home banner + Arată sau ascunde banner-ul acasă Poate mări calitatea copertei de album, dar cauzează încărcarea mai lentă a imaginilor. Activați această opțiune doar dacă aveți probleme cu coperta de album cu rezoluție mică. - Configure visibility and order of library categories. + Configurează vizibilitatea și ordinea categoriilor de librării. Comenzi pe ecranul de blocare pentru Retro music. - Always play audio in background regardless of anything else being played + Redă mereu audio în fundal, indiferent dacă altceva este redat Detalii privind licența pentru software open source - When enabled, newly played songs won\'t show in history - Navigate to the last used tab on start - Display synced lyrics over album cover - Show New Music Mix on homescreen - Enables changing song by swiping anywhere on the now playing screen - Swipe down to dismiss mini player + Când este activată, melodiile noi recent redate, nu vor apărea în istoric + Navigați la ultima filă folosită la pornire + Afișează versurile sincronizate peste coperta de album + Arată Noul Mix de Muzică pe ecranul principal + Activează schimbarea melodiei prin glisare oriunde pe ecranul cu melodia redată actuală + Glisează în jos pentru a închide mini player-ul Mod imersiv Începe redarea imediat ce sunt conectate căștile. - Shuffle mode will turn off when playing a new list of songs + Modul de amestecare se va dezactiva atunci când vei asculta o nouă listă de melodii Dacă aveți spațiu pe ecranul de redare, activați controalele de volum - Extract accent color from wallpaper - Only show music from /Music Folder + Extrage accentul de culoare din fundal + Arată doar melodiile din folderul de muzică Afișați coperta albumului - Navigate by Album Artist - Album cover theme - Album cover skip + Navighează după Artistul de album + Temă pentru coperta albumului + Ignoră coperta de album Comenzi rapide colorate - Header style + Stil antet Reduce volumul la pierderea focalizării - Fade audio + Estompare audio Descărcați automat imagini ale artistului Lista neagră - Bluetooth playback + Redare prin Bluetooth Spălăcește coperta albumului - Circular play button + Butonul de redare circulară Design classic de notificare Culoare adaptivă Notificare colorată - Crossfade (Beta) - Use Manrope font - Desaturated color - Show now playing screen + Suprapunere între piese (Beta) + Utilizează fontul Manrope + Culoare desaturată + Arată ecranul de redare actuală Comenzi suplimentare Informații melodie Redare \"Gapless\" @@ -408,9 +408,9 @@ Redare întotdeauna Aspect Licențe open source - Pause history - Remember last tab - Show lyrics + Istoric de pauze + Reține ultima filă + Arată versurile Arată sugestiile Glisează oriunde pentru a schimba melodia Respinge prin glisare în jos @@ -421,10 +421,10 @@ Mod redare aleatorie Controale volum Culoare de accent fundal - Whitelist music + Lista albă de muzică Pro - Black theme, Now playing themes, Carousel effect and more.. - Profile + Temă neagră, teme pentru ecranul de redare, efectul Carusel și multe altele.. + Profil Procurare Coadă Evaluaţi aplicaţia @@ -434,130 +434,130 @@ Eliminare Eliminare copertă Eliminare din lista neagră - Remove Image + Ștergeți imaginea Eliminați melodia din lista de redare %1$s din lista de redare?]]> Eliminare melodii din lista de redare %1$d melodii din lista de redare?]]> Redenumiţi lista de redare - Replace Cover - Report an issue - Report bug - Reset + Înlocuiește coperta + Raportați o problemă + Raportare bug + Resetare Reseteţi imaginea artistului Restabilire - Do you want to restore backup? + Doriți să restaurați copia de rezervă? A fost restaurată achiziția anterioară. Reporniți aplicația pentru a utiliza toate funcțiile. Au fost restabilite achizițiile anterioare. Se restabilește achiziția... Retro Music Player Cumpărați RetroMusic Pro - The app needs permission to access your device settings in order to set music as Ringtone - Ringtone (Optional) - File delete failed: %s + Aplicația are nevoie de permisiunea de a accesa setările dispozitivului pentru a seta muzica ca ton de apel + Ton sonerie (opțional) + Ștergerea fișierului a eșuat: %s - Can\'t get SAF URI - Open navigation drawer - Enable \'Show SD card\' in overflow menu + Nu se poate obține SAF URI + Deschide sertarul de navigare + Activează opțiunea \"Arată cardul de memorie\" în meniu - %s needs SD card access - You need to select your SD card root directory - Select your SD card in navigation drawer - Do not open any sub-folders - Tap \'select\' button at the bottom of the screen - File write failed: %s - Save + %s are nevoie de acces la cardul SD + Trebuie să selectezi directorul root al cardului SD + Selectează cardul SD în meniul de navigare + Nu deschide niciun subdirector + Apasă butonul \'selectează\' din partea de jos a ecranului + Scrierea fișierului a eșuat: %s + Salvare Salvare ca fişier - Save as files + Salvează ca fișiere Salvaţi lista de redare în %s. Salvare modificări - Scan media + Scanare media Au fost scanate %1$d din %2$d fişiere. - Scrobbles - Select all - Selected - Set + Monitorizare timp muzică + Selectează tot + Selectat + Setare Setaţi imaginea artistului - Share app - Share the app with your friends and family - Share to Stories - Show Album Artists + Distribuie aplicația + Distribuie aplicația prietenilor și familiei + Distribuie în Poveste + Arată artiștii albumului Amestecare Simplu Temporizatorul a fost anulat. Temporizatorul este setat pentru %d minute de acum. Social - Share story + Partajează povestea Melodie Durată Melodii ordinea de sortare - Ascending + Ascendent Album Artist Compozitor - Date added - Date modified - Default - Song count - Song count desc - Year - Descending + Data adăugării + Data modificării + Implicit + Numărul pieselor + Numărul descrierilor de melodii + An + Descrescător Scuze! Dispozitivul tau nu suporta comenzi vocale Caută în colecția ta - Stack - Start playing music. - Suggestions + Stivă + Începe să redai muzică. + Sugestii Susţineţi dezvoltarea - Swipe to unlock - Synced lyrics + Glisează pentru a debloca + Versuri sincronizate Telegram - Join the Telegram group to discuss bugs, make suggestions, show off and more + Alătură-te grupului de Telegram pentru a discuta despre erori, a face sugestii și mai multe Mulțumesc! Fișier audio Luna aceasta Săptămâna aceasta Anul acesta Mic - Tiny card - Title - New Backup + Card mic + Titlu + Copie de rezervă nouă Astăzi Albume de top Artişti de top "Melodie (2 pentru melodia 2 sau 3004 pentru CD3 melodia 4)" Numărul piesei Traducere - Help us translate the app to your language - Try Retro Music Premium + Ajută-ne să traducem aplicația + Încearcă Retro Muzică Premium Twitter - Share your design with Retro Music - Unlabeled + Împărtășește design-ul tău cu Retro Music + Neetichetat Nu s-a putut reda aceast\u0103 melodie. Urmează Actualizare imagine Se actualizează... - User Images - User Name - Username + Imaginile utilizatorului + Nume utilizator + Nume utilizator Versiune - Vertical flip - View on Telegram - Volume + Rotire răsturnată + Vezi pe Telegram + Volum Căutare pe internet - Website - Check out our Website - Welcome, + Pagină web + Vizitați site-ul nostru + Bun venit, Ce doriți să expediați? - What\'s New + Ce e nou Fereastră - Rounded corners + Colțuri rotunjite Setează %1$s ca ton de apel %1$d selectat Anul - 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. + Trebuie să selectezi cel puțin o categorie. + O să fii redirecționat spre un site pentru monitorizarea erorilor. + Datele contului tău sunt folosite doar pentru autentificare. diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index d1d4e9131a..40177b1152 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -1,12 +1,12 @@ Об альбоме %s - Команда, ссылки на соц. сети - Основной цвет - Основной цвет, по умолчанию фиолетовый + Команда, ссылки на социальные сети + Цвет акцента + Акцентный цвет, по умолчанию фиолетовый О программe Добавить в чёрный список - Добавить в избранное + Добавить в любимые Добавить в очередь воспроизведения Добавить в плейлист Отменить @@ -15,12 +15,12 @@ Режим циклического повтора Удалить Удалить с устройства - Подробности + Информация о файле Изменить Перейти к альбому Перейти к исполнителю Перейти к жанру - К тексту песни + Перейти к тексту песни В начало Разрешить Размер сетки @@ -28,11 +28,11 @@ Новый плейлист Далее Играть - Воспроизвести всё - Играть далее + Играть все + Играть следующим Воспроизведение/Пауза - Предыдуший - Удалить из избранного + Предыдущий + Удалить из любимых Удалить из очереди воспроизведения Удалить из плейлиста Переименовать @@ -40,11 +40,11 @@ Сканировать Поиск Запустить - Задать в качества рингтона + Установить в качества мелодии звонка Установить как стартовый каталог "Настройки" Поделиться - Перемешать всё + Перемешать все Перемешать плейлист Таймер сна Порядок сортировки @@ -55,47 +55,47 @@ Добавить "Добавить в плейлист" Добавить синхронизированный текст - Добавлено %1$d песни в %2$s + Добавлено(-а) %1$d песня (-и, -ен) в %2$s "В очередь добавлен 1 трек" - В очередь добавлено %1$d треков. + В очередь добавлен(-о) %1$d трек(-а, -ов). Альбом Песня Песни - Песни - Песни + Песен + Треков Исполнитель альбома Альбомы Альбом - Альбомы - Альбомы - Альбомы + Альбома + Альбомов + Альбомов Всегда - Эй, попробуй этот крутой музыкальный плеер на Android: https://play.google.com/store/apps/details?id=%s + Привет, попробуй этот классный музыкальный плеер для Android: https://play.google.com/store/apps/details?id=%s Перемешать Лучшие треки - Полное Изображение + Заполнение Компактный Классический MD3 - Маленькое изображение - Минималистичный текст + Небольшой + Текстовый Исполнитель Исполнители Длительность затухания аудио Фокус на аудио отключен. Измените настройки звука и отрегулируйте настройки эквалайзера - Авто - Резервное копирование, восстановление ваших настроек и плейлистов - + Автоматически + Резервирование и восстановление настроек, плейлисты + Резервные копии Биография - Чёрная + Чёрное оформление Черный список - Приложению требуется разрешение на проверку Bluetooth устройств рядом + Приложению требуется разрешение на поиск ближайших устройств Bluetooth Ближайшие устройства Размытие Карточка с размытием @@ -111,7 +111,7 @@ Пожалуйста, введите название отчета о проблеме Пожалуйста, введите корректно ваше имя пользователя GitHub Отчёт об ошибке создан - Произошла непредвиденная ошибка. Извините, если это продолжится то \"Очистите данные приложения\" или отправьте сообщение на электронную почту + Произошла непредвиденная ошибка. Приносим извинения за предоставленные неудобства. Если проблемы не исчезают, очистите данные приложения или свяжитесь с нами по электронной почте Отправить с помощью учетной записи GitHub Купить сейчас Отменить @@ -146,9 +146,9 @@ Создан плейлист %1$s. Участники и помощники Сейчас играет %1$s от %2$s. - Пользовательские изображения - Отправить отчет о неполадке - Тёмная + Пользовательские изображения исполнителей + Отправить отчет о крахе + Тёмное оформление Удалить плейлист %1$s?]]> Удалить плейлисты @@ -159,18 +159,18 @@ %1$d песен?]]> Удалено %1$d песен. Удаление песен - Глубина + Масштабирование Описание Информация об устройстве Разрешить Retro Music изменять настройки звука - Выбрать рингтон + Выбрать мелодию звонка Номер диска - Вы хотите очистить черный список? - %1$s из черного списка?]]> + Очистить черный список? + %1$s из черного списка?]]> Пожертвовать - Если вы считаете, что я заслуживаю награды за свой труд, можете отправить мне несколько рублей здесь + Если вы считаете, что я заслуживаю награды за свой труд, можете отправить мне определённую сумму Купить мне: - Готов + Готово Режим вождения Кнопка редактирования Редактировать текст @@ -181,22 +181,22 @@ Не удалось удалить резервную копию Ваше имя не может быть пустым! Ошибка загрузки - Couldn\'t share file - Растянутый + Не удалось просканировать файл + Увеличенная ЧаВО - Избранное + Любимые Файл уже существует - Закончить вопсроизведение последней песни + Закончить вопсроизведение последнего трека По размеру - Плоская + Плоское Папки - Системная + Системное Для вас Доступно Заполнение Заполненная карточка - Измените тему и цвет в приложении - Внешний вид интерфейса + Изменение оформления и цвета приложения + Внешний вид Жанр Жанры Развивайте проект на GitHub @@ -212,7 +212,7 @@ 8 Стиль сетки Нужна ещё помощь? - Пластинки + Петля История История очищена Отменить @@ -220,10 +220,10 @@ Горизонтальный поворот Изображение Градиентное изображение - Изменение настроек загрузки изображения артиста + Изменение настроек загрузки изображений исполнителей Импорт Импорт плейлиста - Импортирует все плейлисты, перечисленные в Android Media Store с песнями, если плейлисты уже существуют, песни будут объединены. + Импортирует все плейлисты с песнями, находящиеся в Android Media Store. Если плейлисты уже существуют, песни будут объединены. В плейлист %2$s внесено %1$d песен. Поделитесь своим обзором на приложение Retro Music в Instagram Клавиатура @@ -235,17 +235,17 @@ Последнее изменение Больше от %s Частота дискретизации - Длина + Длительность Показывать всегда Последние добавленные - Последняя песня + Последний трек Вперед Разделы библиотеки Лицензии - Белая + Белое Слушатели Список файлов - Загрузка товаров... + Загрузка товаров… Войти Текст песни Сделано с ❤️ в Индии @@ -253,153 +253,153 @@ Ошибка Ошибка разрешения Резервная копия успешно создана. - Не более 5 элементов + Должно быть не более 5 элементов %s является Pro функцией. Восстановление успешно завершено. Обновлено - Добро пожаловать в %s]]> - Моё имя - Любимые треки + Добро пожаловать в %s]]> + Имя + Часто воспроизводимые Никогда Новый Микс Новый плейлист - %s новая стартовая директория. - Следующая песня - Альбомы отсутствуют - Исполнители отсутствуют - "Сначала проиграйте песню, затем попробуйте заново." + %s - новая стартовая директория. + Следующий трек + У вас нет альбомов + У вас нет исполнителей + "Сначала проиграйте песню, затем попробуйте ещё раз." Резервные копии не найдены Эквалайзер не найден - Жанры отсутствуют - Текст отсутствует + У вас нет жанров + Текст не найден Нет проигрываемых песен - Плейлисты отсутствуют + У вас нет плейлистов Покупки отсутствуют. Нет результатов - Нет песен + У вас нет песен Обычная Обычный текст %s не найден в хранилище медиа.]]> - Сейчас не проигрывается + Нет недавно воспроизведенных треков Нет файлов для сканирования. Нет файлов для сканирования - Уведомления - Настроить стиль уведомлений + Уведомление + Настроить стиль уведомления Экран воспроизведения - Очередь в \"Экране воспроизведения\" - Настроить экран воспроизведения - 9+ тем экрана текущего воспроизведения + Очередь в экране воспроизведения + Настройка экрана воспроизведения + 9 новых оформлений экрана воспроизведения Только по Wi-Fi - Эксперементальные возможности - Другое - За обложкой + Экспериментальные возможности + Другие + Поверх обложки Пароль Последние 3 месяца Вставьте текст песни Вставьте синхронизированный текст песни Просмотр - Отказано в доступе к устройствам поблизости. - Разрешение для доступа у внешнему хранилищу не получено. + Отказано в доступе к поиску устройств поблизости. + Разрешение для доступа к внешнему хранилищу не получено. Приложению требуется разрешение на доступ к внутренней памяти вашего устройства для воспроизведения музыки. - Доступ к внутренней памяти + Доступ к хранилищу Разрешения не получены. Персонализация - Настройте управление экрана воспроизведения и интерфейс управления музыкой + Настройка экрана воспроизведения и интерфейса управления музыкой Выбрать из хранилища Pinterest Подпишитесь на страницу Retro Music в Pinterest - Гладкая + Гладкое Плейлист уже существует Высота Параметры воспроизведения Скорость воспроизведения - Уведомление о песне предоставляет действия для воспроизведения/паузы и т.д. - Уведомления воспроизведения + Уведомление в виде плеера позволяет управлять воспроизведением музыки + Уведомление в виде плеера %s успешно создан Плейлист пуст Название плейлиста Плейлисты - Степень размытия в соответствующих темах; чем ниже, тем быстрее работает устройство + Степень размытия в соответствующих темах. Чем ниже значение размытия, тем выше быстродействие устройства Степень размытия - Фильтровать песни по длине + Убрать из списка песни, длительность которых ниже выбранного значения Фильтровать песни по длительности Расширенные настройки Стиль альбома Звук Черный список Управление - Тема + Оформление Изображения Библиотека Экран блокировки Плейлисты - Ставит музыку на паузу при уменьшении громкости до нуля и играет после увеличения громкости. Предупреждение, когда вы увеличиваете громкость не в приложении, то Retro Music также начнёт воспроизведение + Ставить музыку на паузу при уменьшении громкости до нуля и продолжать воспроизведение после увеличения громкости. Предупреждение: при увеличении громкости вне приложения, Retro Music также начнёт воспроизведение Пауза при нулевой громкости - Имейте в виду, что включение этой функции может повлиять на заряд батареи - Оставить экран включенным + Имейте в виду, что включение этой функции может повлиять время работы от батареи + Оставлять экран включенным Выберите язык Эффект снегопада Использовать обложку альбома текущей песни в качестве обоев на экране блокировки. - Только альбомы исполнителей - Снизить громкость воспроизведения когда приходит звуковое уведомление + Показывать исполнителей альбомов во вкладке \"Исполнители\" + Снижать громкость воспроизведения когда играет системный звук или приходит уведомление Затухать звук, когда песня приостановлена или воспроизведена Содержимое черного списка скрыто из вашей библиотеки. - Начать воспроизведение сразу же после подключения Bluetooth-устройства - Размыть обложку альбома на экране блокировки. Может вызывать проблемы со сторонними приложениями и виджетами. - Эффект карусели для обложек альбома на экране воспроизведения. Учтите, что темы \"Карточка\" и \"Карточка с размытием\" не будут работать - Использовать классический дизайн уведомлений. - Цвет кнопок фона и кнопок управления изменяется в соответствии с обложкой альбома с экрана воспроизведения - Окрашивает ярлыки в основной цвет. Каждый раз, когда вы меняете цвет, вкл-выкл эту настройку, чтобы изменение вступило в силу - "Окрашивает уведомление в доминирубщий цвет обложки альбома" - Продолжительность crossfade между песнями - Согласно Material Design в темном режиме цвета должны быть немного обесцвечены + Начать воспроизведение сразу же после подключения устройства Bluetooth + Размыть обложку альбома на экране блокировки. Может вызвать проблемы со сторонними приложениями и виджетами + Эффект карусели для обложек альбома на экране воспроизведения. Эффект не работает для тем \"Карточка\" и \"Карточка с размытием\" + Использовать классический дизайн уведомления + Цвет фона и кнопок управления изменяется в соответствии с обложкой альбома с экрана воспроизведения + Окрашивает ярлыки приложения в акцентный цвет. Каждый раз, когда вы меняете цвет, вкл-выкл эту настройку, чтобы изменение вступило в силу + "Окрашивает уведомление в доминирующий цвет обложки альбома" + Продолжительность кроссфейда между песнями + Согласно стилю Material Design, в темном режиме цвета должны быть немного обесцвечены Нажатие на уведомление будет показывать экран воспроизведения вместо домашнего экрана Добавить дополнительные элементы управления для мини-плеера - Показать дополнительную информацию о песне, такую как формат файла, битрейт и частота + Показывать дополнительную информацию о песне, такую как формат файла, битрейт и частота "Может вызвать проблемы с воспроизведением на некоторых устройствах." Показывать кнопку Домой - Может повысить качество обложки альбома, но привести к более медленной загрузки изображения. Включите это только в том случае, если у вас есть картинки с низким разрешением - Настроить вид и порядок категорий в библиотеке. + Может повысить качество обложки альбома, но привести к более медленной загрузке изображения. Включайте это только в том случае, если у вас есть проблемы с картинками низкого разрешения + Настроить вид и порядок вкладок в библиотеке. Используйте собственный экран блокировки Retro Music - Всегда воспроизводить звук в фоне, несмотря на воспроизведение чего-то другого + Всегда воспроизводить звук в фоне вне зависимости от других источников звука Сведения о лицензии для программного обеспечения с открытым исходным кодом Если включено, то новые песни не будут отображаться в истории - Перейдите к последней использованной вкладке при запуске + При открытии приложения переходить на последнюю использованную вкладку Показывать синхронизированный текст песни поверх обложки альбома - Показывать Новый Музыкальный Микс на главном экране - Включает смену песни, свайпом в любом месте на текущем экране + Показывать Новый Микс на главном экране + Включает смену песни по свайпу в любом месте на экране воспроизведения Проведите вниз, чтобы закрыть мини-плеер Полноэкранный режим Начать воспроизведение музыки сразу после подключения наушников Режим перемешивания выключится при проигрывании нового списка песен - Если доступно достаточно места, показывать регулировку громкости на экране воспроизведения - Использовать цветовое оформление из обоев + Если места на экране достаточно, показывать панель регулировки громкости на экране воспроизведения + Использовать цвет акцента из обоев Показывать музыку только из папки /Music Показать обложку альбома Показывать обложку альбома в разделе исполнители - Тема обложки альбома - Стиль смены обложки альбома + Оформление обложки альбома + Эффект смены обложки альбома Цветные ярлыки - Стиль заголовка - Уменьшить громкость при получении уведомлении + Стиль верхней панели + Уменьшать громкость при получении уведомления Затухание аудио Автозагрузка изображений исполнителя Черный список Воспроизведение при подключении Bluetooth - Размытие обложки альбома + Размывать обложку альбома Круглая кнопка воспроизведения Классический дизайн уведомлений - Адаптированный цвет - Цветное уведомление - Crossfade (бета) + Адаптивный цвет + Окрашенное уведомление + Кроссфейд (бета-версия) Использовать шрифт Manrope - Немного обесцвеченный цвет - Показать экран воспроизведения + Обесцвеченный цвет + Показывать экран воспроизведения Дополнительные элементы управления Информация о песне Непрерывное воспроизведение - Тема приложения - Сетка альбома на Главной странице + Оформление приложения + Сетка альбомов Сетка исполнителей Кнопка Домой Игнорировать обложки из хранилища @@ -407,32 +407,32 @@ Полноэкранное управление Не выключать экран при показе текста Тип текста песни - Играть всегда - Тема экрана воспроизведения - Лицензии с открытым кодом + Всегда проигрывать + Оформление экрана воспроизведения + Лицензии с открытым исходным кодом Приостановить историю - Запомнить последнюю вкладку + Запоманать последнюю использованную вкладку Показать текст песни Показывать предложения - Проведите пальцем где угодно, чтобы сменить песню + Проведите пальцем в любом месте, чтобы сменить песню Скрывать мини-плеер свайпом - Название нижних кнопок + Отображение названия вкладок Эффект карусели - Полноэкранное приложение + Полноэкранный режим приложения Автовоспроизведение Режим перемешивания Регулировка громкости Цвет акцента обоев Музыка из белого списка Pro - Black theme, Now playing themes, Carousel effect and more.. + Черное офромление, больше стилей экрана воспроизведения, эффект карусели и многое другое.. Профиль Купить - Очередь + Очередь воспроизведения Оценить приложение - Понравилось это приложение? Напишите нам в Google Play Store о том, как мы можем сделать его еще лучше - Последние альбомы - Последние исполнители + Понравилось приложение? Напишите нам в Google Play Store о том, как мы можем сделать его еще лучше + Недавние альбомы + Недавние исполнители Удалить Удалить обложку Удалить из черного списка @@ -440,7 +440,7 @@ Удалить песню из плейлиста %1$s из плейлиста?]]> Удалить песни из плейлиста - + Переименовать плейлист Заменить обложку Сообщить об ошибке @@ -449,17 +449,17 @@ Сбросить изображение исполнителя Восстановить Вы уверены, что хотите восстановить резервную копию? - Предыдущая покупка восстановлена. Перезагрузите приложение, чтобы использовать все функции. - Восстановленные предыдущие покупки. - Восстановление покупки ... + Предыдущая покупка восстановлена. Перезагрузите приложение, чтобы воспользоваться всеми функциями. + Предыдущие покупки восстановлены. + Восстановление покупки… Retro Music Player Retro Music Pro - Приложению требуется разрешение на доступ к настройкам вашего устройства, чтобы установить музыку в качестве рингтона. + Приложению требуется разрешение на доступ к изменению настроек вашего устройства, чтобы установливать музыку в качестве мелодии звонка Мелодия звонка (необязательно) Ошибка при удалении файла: %s Не удается получить SAF URI - Открыть навигационное меню + Открыть меню навигации Включите «Показать SD-карту» в всплывающем меню %s необходим доступ к SD-карте @@ -473,51 +473,51 @@ Сохранить как... Сохранить как... - Сохраненный список воспроизведения в %s. + Плейлист сохранён в %s. Сохранение изменений Сканировать медиа-файлы Просканировано %1$d из %2$d файлов. Скробблинг Выбрать все - Выбранная кнопка + Выбрано Установить Установить изображение исполнителя Поделиться приложением Поделитесь приложением со своими друзьями и родственниками Поделиться в Историях - Показать исполнителей альбома + Не показывать исполнителей альбомов Перемешать - Простая + Простой Таймер отключения отменен. Таймер сна установлен на %d минут. Социальный - Поделиться историей - Песня - Длительность песни - Песни + Поделиться в историях + Трек + Продолжительность трека + Треки Порядок сортировки По возрастанию Альбом Исполнитель Композитор - Дата + Дата добавления Дата изменения - Default - Колличество песен - Количество композиций по убыванию + По умолчанию + Количество треков + Количество треков по убыванию Год По убыванию - Извините! Ваше устройство не поддерживает ввод с помощью речи + Извините! Ваше устройство не поддерживает голосовой ввод Поиск в вашей библиотеке - Стэк + Стопка Начать воспроизведение музыки. Предложения Поддержать разработку Проведите, чтобы разблокировать - Синхронизируемый текст + Синхронизированный текст Telegram - Присоединяйтесь к группе Telegram, чтобы обсуждать ошибки, предлагать улучшения, хвастаться и т.д. - Спасибо ! + Присоединяйтесь в нашу группу в Telegram, чтобы обсуждать ошибки, предлагать улучшения, хвастаться и т.д. + Спасибо! Аудиофайл Этот месяц Это неделя @@ -529,34 +529,34 @@ Сегодня Топ альбомов Топ исполнителей - "Трек (2 для трека 2 или 3004 для CD3 трека 4)" + "Трек (2 для трека 2 или 3004 для трека 4 диска 3)" Номер трека - Переведите + Помочь с переводом Помогите нам перевести приложение на ваш язык Попробуйте Retro Music Premium Твиттер Поделитесь своим дизайном Retro Music Не показывать - Невозможно проиграть эту песню - Следующие песни + Невозможно проиграть этот трек. + Следующие треки Обновить изображение - Обновляется… + Обновление… Пользовательские изображения Имя Пользователя Имя пользователя Версия Вертикальный поворт - Смотреть в Telegram + Посмотреть в Telegram Громкость Поиск в интернете - Сайт + Наш сайт Посмотрите наш веб-сайт Добро пожаловать, Чем вы хотите поделиться? - Что нового : + Что нового: Окно Закругленные углы - Установите %1$s в качестве мелодии звонка. + Установить %1$s в качестве мелодии звонка. Выбрано %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 c99f33fcd1..276a5ef201 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -1,10 +1,10 @@ - About %s - Team, social links + О %s + Тим и платформе Boja detalja Boja plejera, uobičajena je zelena - O programerima + О апликацији Add to Blacklist Dodaj u omiljene Dodaj u listu za pustanje @@ -12,23 +12,23 @@ Otkazi trenutni tajmer Cast Izbrisi trenutnu plejlistu za pustanje - Cycle repeat mode + Понављај Obrisi Izbrisi sa uredjaja Detalji - Edit + Уреди Vidi album Vidi izvodjaca - Go to genre - Go to Lyrics + Иди на Жанр + Иди на текст Idi u pocetni direktorijum . Velicina kartica . - New playlist + Нова Плејлиста Sledece Pusti - Play all + Пусти све Pusti sledeće Pusti/pauziraj Prethodno @@ -42,95 +42,95 @@ Postavi Postavi kao melodiju zvona Postavi kao pocetni direktorijum - "Podesavanja" + "Подешавања" Podeli Nasumicno pusti Nasumicno pusti plejlistu Tajmer za iskljucivanje - Sort order + Сортирање Uredjivac tagova - Toggle favorite - Toggle shuffle mode - Adaptive - Dodaj + Укључи омиљење + Укључи насумично пуштање + Прилагодљиво + Додај "Dodaj na plejlistu" Add Time Framed Lyrics Added %1$d song(s) to %2$s "Dodata je 1 pesma na plejlistu" Dodato %1$d pesama na plejlistu - Album + Албум - Song - Songs - Songs + Нумера + Нумере + Нумера - Album Artist - Albumi + Извођач албума + Албуми - Album - Albums - Albums + Албум + Албумa + Албумa - Uvek + Увек Isprobaj ovaj fantastican plejer na: https://play.google.com/store/apps/details?id=%s Reprodukuj nasumicno Najvise slusano - Full Image + Цела слика Card Classic MD3 Small Minimal Text - Izvodjac - Izvodjac + Извођач + Извођач Audio fade duration Zvuk se vec reprodukuje Change the sound settings and adjust the equalizer controls - Auto + Аутоматски Backup and restore your settings, playlists - - Backups + + Резервне копије Biografija Perfektno crna Ne trazi muziku u... The app needs nearby devices permission to check for bluetooth devices - Nearby devices - Blur + Уређаји у близини + Замагли Blur Card - Unable to send report + Немогуће је послати извештај Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. An unexpected error occurred. Please contact the app developer. - Wrong username or password - Issue - Send manually + Погрешно корисничко име или лозинка + Проблем + Пошаљи ручно Please enter an issue description Please enter your valid GitHub password Please enter an issue title - Please enter your valid GitHub username + Унесите исправно корисничко име на GitHub-у 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 + Купи сада Otkazi trenutni tajmer - Card - Colored Card - Square Card - Card + Картица + Обојена картица + Квадратна картица + Картица Carousel effect on the now playing screen Cascading Izmene Check out What\'s New - Choose Image + Изабери слику Choose what to restore - Circle - Circular + Круг + Кружно Classic Ocisti Ocisti listu za ignorisanje foldera Clear History Clear queue - Color + Боја Boje Compact Composer @@ -150,9 +150,9 @@ Izbrisi plejlistu %1$s plejlistu?]]> Izbrisi plejlistu - Delete song + Обриши нумеру %1$s?]]> - Delete songs + Обриши нумере %1$d plejliste?]]> %1$d numere?]]> Izbrisi %1$d numere. @@ -177,28 +177,28 @@ Ekvilajzer Couldn\u2019t create backup Couldn\u2019t delete backup - Your name can\'t be empty! - Load failed - Couldn\'t share file + Име мора постојати + Учитавање неуспешно + Неуспешно дељење песме Expanded - FAQ + ЧП и О Favoriti - File already exists + Песма већ постоји Finish last song Fit Ravno Folderi Follow system Za tebe - Free + Бесплатно Ispunjen Full card - Change the theme and colors of the app - Look and feel + Прилагоди тему и боју + Изглед и утисак Zanr - Genres + Жанра Fork the project on GitHub - Gradient + Прелаз Grant access 1 2 @@ -209,47 +209,47 @@ 7 8 Grid style - Need more help? + Треба помоћ? Hinge Istorija reprodukovanja History cleared - Undo + Опозови Pocetak Horizontal flip - Image + Слика Gradient image Change artist image download settings - Import - Import playlist + Увези + Увези плејлисту It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Ubaceno %1$d pesama u plejlistu %2$s. Share your Retro Music setup to showcase on Instagram - Keyboard + Тастатура Bitrate Formatiraj Naziv datoteke Lokacija datoteke Velicina - Last Modified + Задње додирнуто More from %s Brzina uzorkovanja Duzina trajanja - Labeled + Названо Poslednje dodato - Last song - Let\'s go + Задња песма + Хајдемо! Library categories Licence Perfektno bela - Listeners + Слушаоци Pronalazenje pesama Ucitavanje datoteka... - Login + Пријава Tekst pesme - Made with ❤️ in India - Material - Error - Permission error + Направљено с љубављу из Индије + Материјал + Грешка + Немогуће приступити песмама Backup created successfully. Not more than 5 items %s is a Pro feature. @@ -262,7 +262,7 @@ New Music Mix Nova plejlista %s je novi pocetni direktorijum. - Next Song + Следећа Песма Nema albuma Nema izvodjaca "Prvo pusti pesmu, a onda pokusaj opet" @@ -276,14 +276,14 @@ Nema rezultata Nema pesama Normalno - Normal lyrics + Нормални текстови %s nije pronadjen u prodavnici pesama]]> Not recently played Nema se sta skenirati Nothing to see Obavestenja Customize the notification style - Now playing + Репродукује се Lista za trenutno pustanje Customize the now playing screen 9+ now playing themes @@ -299,9 +299,9 @@ Nearby devices permission denied. Dozvola za pristup spoljasnjem skladistu je odbijena The app needs permission to access your device storage for playing music - Storage Access + Приступ складишту Dozvola odbijena. - Personalize + Персонализуј Customize your now playing and UI controls Izaberi iz unutrasnjeg skladista Pinterest @@ -310,7 +310,7 @@ Playlist already exists Pitch Playback Settings - Playback Speed + Брзина репродукције Obavestenja obezbedjuju komande za pustanje/pauziranje itd. Obavestenja o reprodukciji %s created successfully @@ -325,17 +325,17 @@ Album style Zvuk Ne trazi muziku u... - Controls - Theme + Контроле + Тема Slike - Library + Библиотека Zakljucan ekran Plejliste Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app Pause on zero Keep in mind that enabling this feature may affect battery life - Keep the screen on - Select language + Задржи укључен екран + Изабери језик Snow fall effect Koristi omot albuma kao pozadinu kada se reprodukuje muzika Show Album Artists in the Artist category @@ -494,17 +494,17 @@ Trajanje pesme Pesme Nacin sortiranja - Ascending - Album + Растуће + Албум Izvodjac - Composer + Композитор Date added Date modified Default Song count Song count desc - Year - Descending + Година + Опадајуће Izvini! Tvoj uredjaj ne podrzava unos govorom Pretrazi svoju biblioteku Stack @@ -532,7 +532,7 @@ Prevod Help us translate the app to your language Try Retro Music Premium - Twitter + Твитер Share your design with Retro Music Unlabeled Nije moguce pustiti pesmu. diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index 87282779d5..921d409ba6 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -5,11 +5,11 @@ பொத்தான் நிறம் பொத்தான்_நிறம்_பற்றி எங்களை பற்றி - Add to Blacklist + பிடிக்காதவையில் சேர் பிடித்தவையில் சேமி பாடல் வரிசையில் சேர் பாடல் வரிசையில் சேர் - Cancel + நிராகரி ஒப்பனை பாடல் வரிசையை நீக்கு திரும்பச் செய் @@ -20,7 +20,7 @@ பாடல் படப்பட்டியல் செல் கலைஞரை காணவும் தொகுப்பு செல் - Go to Lyrics + பாடல் வரிகள் துவக்கப் பட்டியல் செல் அனுமதி பகுதி அளவு @@ -49,155 +49,155 @@ உறக்க கடிகாரம் வரிசை பட்டியல் பாடல் அமைப்பை மாற்று - Toggle favorite - Toggle shuffle mode - Adaptive + பிடித்தவை + குழப்பி இயக்கு + தகவமை சேர் "பாடல் வரிசையில் சேர்" - Add Time Framed Lyrics - Added %1$d song(s) to %2$s - "Added 1 title to the playing queue." - Added %1$d titles to the playing queue. - Album + இன்றைக்கும் பட்ட பாடல் வரிகளைச் சேர் + %1$d பாடல்கள் %2$sயில் சேர்க்கப்பட்டுள்ளது + "ஒரு பாடல் வரிசையில் சேர்க்கப்பட்டது." + %1$d பாடல்கள் வரிசையில் சேர்க்கப்பட்டுள்ளது. + தொகுப்பு Song பாடல்கள் - Album Artist - Albums + பாடல் ஆசிரியர் + தொகுப்புகள் - Album - Albums + தொகுப்பு + தொகுப்புகள் - Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s - Shuffle - Top Tracks - Full Image - Card - Classic + எப்பொழுதும் + இந்தச் செயலியைக் காண: https://play.google.com/store/apps/details?id=%s + குழப்பு + சிறந்த பாடல்கள் + முழு படம் + அட்டை + பழமையான MD3 - Small - Minimal Text - Artist - Artists - Audio fade duration - Audio focus denied. - Change the sound settings and adjust the equalizer controls - Auto - Backup and restore your settings, playlists - - Backups - Biography - Just Black - Blacklist - The app needs nearby devices permission to check for bluetooth devices - Nearby devices - Blur - Blur Card - Unable to send report - Invalid access token. Please contact the app developer. - Issues are not enabled for the selected repository. Please contact the app developer. - An unexpected error occurred. Please contact the app developer. - Wrong username or password - Issue - Send manually - Please enter an issue description - 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 - Cancel - Card - Colored Card - Square Card - Card - Carousel effect on the now playing screen - Cascading - Changelog - Check out What\'s New - Choose Image - Choose what to restore - Circle - Circular - Classic - Clear - Clear blacklist - Clear History - Clear queue - Color - Colors - Compact - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. - "Couldn\u2019t download a matching album cover." - Could not restore purchase. - Could not scan %d files. - Create - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Custom Artist Images - Share Crash Report - Kinda Dark - Delete playlist - %1$s?]]> - Delete playlists - Delete song - %1$s?]]> - Delete songs - %1$d playlists?]]> - %1$d songs?]]> - Deleted %1$d songs. - Deleting Songs - Depth - Description - Device info - Allow Retro Music to modify audio settings - Set ringtone - Disc Number - Do you want to clear the blacklist? - %1$s from the blacklist?]]> - Donate - If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - Done - Drive mode - Edit Button - Edit Lyrics - Edit Synced Lyrics - Empty - Equalizer - Couldn\u2019t create backup - Couldn\u2019t delete backup - Your name can\'t be empty! - Load failed - Couldn\'t share file - Expanded - FAQ - Favorites - File already exists - Finish last song - Fit - Flat - Folders - Follow system - For you - Free - Full - Full card - Change the theme and colors of the app - Look and feel - Genre - Genres - Fork the project on GitHub - Gradient - Grant access + சிறிய + சிறிய சொல் + பாடகர் + பாடகர்கள் + பாடல் மறையும் நேரம் + ஒலி அனுமதி மறுக்கப்பட்டுள்ளது. + ஒலி அமைப்புகளை மாற்று + தானியங்கி + அமைப்புக்கள் மற்றும் பாடல் கோப்புகளைச் சேமி + + பேக்கப் + வாழ்க்கை வரலாறு + இருட்டு மட்டும் + தேவையானவை + இந்தச் செயலிக்குப் பக்கத்தில் உல்ல புலுடூத் சாதனங்களைக் கண்டறிய அனுமதி வேண்டும் + பக்கத்தில் உள்ள சாதனங்கள் + மங்குதல் + தெளிவற்ற அட்டை + அறிக்கையை அனுப்ப முடியவில்லை + தவறான டோக்கன். இந்தச் செயலியின் வடிவமைப்பாளரை அனுகவும். + இப்பிரச்சனை இந்தக் கோப்பிற்கு இல்லை. இந்தச் செய்தியின் வடிவமைப்பாளரை அனுகவும். + எதிர்பாராத பிழை ஏற்பட்டது. தயவுசெய்து சிறிது நேரம் கழித்து முயற்சிக்கவும். + தவறான பயனாளர் பெயர் அல்லது கடவுச்சொல் + பிரச்சனை + தானாக அனுப்பு + பிரச்சனையை விவரி + சரியான கிட்கப் கடவுச்சொல்லை உள்ளிடவும் + பிரச்சினைக்கான தலைப்பை உள்ளிடு + சரியான கிட்கப் பயனர் பெயரை உள்ளிடவும் + பிரச்சனை வெற்றிகரமாகத் தெரிவிக்கப்பட்டது + தெரியாத தவறு ஏற்ப்பட்டுள்ளது. இடையூறுக்கு மன்னிக்கவும், இவ்வாறு மீண்டும் ஏற்பட்டால் \"தகவல்களை அழிக்கவும்\" அல்லது வடிவமைப்பாளரிடம் தெரிவிக்கலாம் + கிட்கப்பை பயன்படுத்தி அனுப்பவும் + இப்போது வாங்கு + இரத்து செய் + அட்டை + வண்ண அட்டை + சதுர அட்டை + அட்டை + படம் மாற்றும் அமைப்பு + ஒன்றின் மேல் ஒன்று + மாற்றங்களின் பதிவு + புதியவை + படத்தைத் தேர்வுசெய் + மீட்டெடுக்க தேர்வு செய் + வட்டம் + வட்ட + பழமையான + அழி + தடுப்புப் பட்டியலை நீக்கு + வரலாற்றை நீக்கு + வரிசையை அழி + வண்ணம் + வண்ணங்கள் + அடக்கமான + இசையமைப்பாளர் + சாதனத்தின் விவரங்கள் நகல் எடுக்கப்பட்டுள்ளது. + இசைப் பட்டியலை உருவாக்க முடியவில்லை. + "சரியான படத்தைப் பதிவேற்ற முடியவில்லை." + மீட்டெடுத்தல் தோல்வி. + கோப்பு %d\'யைத் தேட இயலவில்லை. + உருவாக்கு + உருவாக்கு + இசைப்பட்டியலை உருவாக்கு %1$s. + உருப்பினர் மற்றும் உதவியவர்கள் + தற்போது கேட்கும் பாடல் %1$s கலைஞர் %2$s. + சுயட்சி கலைஞர் படம் + தவற்றின் விவரத்தை பகிர் + இலங்கருப்பு + இசைப் பட்டியலை நீக்கு + %1$sயை நீக்கு?]]> + இசைப்பட்டியல்களை நீக்கு + பாடலை நீக்கு + %1$sயை நீக்கு?]]> + பாடல்களை நீக்கு + %1$dயை நீக்கு?]]> + %1$d நீக்கு?]]> + நீக்கப்பட்ட பாடல்கள் %1$d + பாடல்கள் நீக்கப்படுகிறது + ஆழம் + விளக்கம் + சாதனத்தின் விவரம் + ஒலி அமைப்புகளை மாற்ற Retro Musicஐ அனுமதி + அலைபேசி ஒலியாக அமை + பெட்டியின் எண் + தடுப்புப் பட்டியலை நீக்க வேண்டுமா? + %1$sஐ தடுப்புப் பட்டியலிருந்து நீக்க வேண்டுமா?]]> + நன்கொடை செய்க + எங்கள் உழைப்பு பிடித்திருந்ததால், சிறிதளவு பணம் அளித்த ஆதரிக்கலாம் + எனக்கு வாங்கு: + முடிந்தது + ஊர்தி பயனர் + திருத்து + பாடல் வரிகளைத் திருத்து + இனைக்கப்பட்ட பாடல் வரிகளைத் திருத்து + ஒன்றும் இல்லை + சமமாக்கி + பேக்கப் உருவாக்க முடியவில்லை + மேக்கப்பை நீக்க முடியவில்லை + பெயர் வெறுமையாக இருக்க இயலாது! + தடங்கள் ஏற்பட்டுள்ளது + கோப்பை பகிர இயலவில்லை + விரிவாக்கப்பட்டது + வினாக்கள் + விருப்பமானவை + இந்த கோப்பு ஏற்கனவே உள்ளது + கடைசி பாடலுடன் நிருத்திக்கொள் + பொருத்தம் + தட்டையான + கோப்புறைகள் + சாதனத்தின் அமைப்பை பின்பற்றவும் + தங்களுக்காக + இலவசம் + முழு + முழு அட்டை + செயலியின் வண்ணம் மற்றும் தீமை மாற்றவும் + திரை அமைப்புகள் + வகைகள் + வகைகள் + செயலியை நகலெடுத்து மேம்படுத்து + க்ரேடியன்ட்டுகள் + அனுமதி 1 2 3 @@ -206,65 +206,65 @@ 6 7 8 - Grid style - Need more help? - Hinge - History - History cleared - Undo - Home - Horizontal flip - Image - Gradient image - Change artist image download settings - Import - Import playlist - It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. - Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate - Format - File name - File path - Size - Last Modified - More from %s - Sampling rate - Length - Labeled - Last added - Last song - Let\'s go - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… - Login - Lyrics - Made with ❤️ in India - Material - Error - Permission error - Backup created successfully. - Not more than 5 items - %s is a Pro feature. - Restore completed successfully. - Updated - Welcome to %s]]> - Name - Most played - Never - New Music Mix + பகுதி அளவு + மேலும் உதவி வேண்டுமா? + ஒட்டு + வரலாறு + வரலாறு அழிக்கப்பட்டது + செயல்தவிர் + முகப்பு + சமமாக சுழற்று + படம் + படம் வண்ணம் + கலைஞர் படம் தரவுகள் அமைப்பு + இறக்குமதி + பாடல் வரிசைகளை எடு + சாதனத்தில் உள்ள அனைத்து பாடல்களும் இனைக்கப்படும். + %2$s\'யில் %1$d பாடல்கள் சேர்க்கப்பட்டுள்ளது. + தங்களின் Retro Music அமைப்பை Instagramயில் பகிரவும் + விசைப்பலகை + துடிப்பளவு + வடிவமைப்பு + கோப்புப் பெயர் + கோப்புப் பாதை + அளவு + கடைசியாக மாற்றப்பட்டது + இன்னும் பல %s + மாதிரி விகிதம் + நீளம் + முத்திரை + கடைசியாக சேர்த்தது + இறுதியாகக் கேட்டப் பாடல் + வாருங்கள் துவங்கலாம் + நூலக வகைகள் + உரிமங்கள் + முழுமையான வெள்ளை + கேட்பவர்கள் + கேட்கும் கோப்புகள் + Loading product… + உள்நுழை + பாடல் வரிகள் + அன்புடன் இந்தியாவில் உருவாக்கப்பட்டது + பொருள் + பிழை + அனுமதி பிழை + செயலிகள் மறுபிரதிஎடுத்தல் வெற்றி. + 5 பொருட்கள் மட்டும் + %s ஒரு ப்ரோ அம்சமாகும். + மீட்டெடுப்பு வெற்றிகரமாக முடிந்தது. + புதுப்பிக்கப்பட்டது + , %sக்கு வரவேற்கிறோம்]]> + பெயர் + அதிகம் விளையாடியது + ஒருபோதும் + புதிய இசை கலவை புதிய இசைப்பட்டியல் - %s is the new start directory. - Next Song - You have no albums - You have no artists - "Play a song first, then try again." - No Backups Found + %s என்பது புதிய தொடக்க கோப்பகம். + அடுத்த பாடல் + உங்களிடம் ஆல்பம் இல்லை + உங்களிடம் இசையமைப்பாளர் குறிப்புடு இல்லை + "முதலில் பாட்டைத் தொடக்கவும், அதன் பின்பு மீண்டும் முயற்சிக்கவும்." + மறுபிரதி காணவில்லை No equalizer found You have no genres No lyrics found @@ -322,7 +322,7 @@ Advanced Album style Audio - Blacklist + தேவையானவை Controls Theme Images @@ -380,7 +380,7 @@ Reduce volume on focus loss Fade audio Auto-download artist images - Blacklist + தேவையானவை Bluetooth playback Blur album cover Circular play button @@ -482,7 +482,7 @@ Share the app with your friends and family Share to Stories Show Album Artists - Shuffle + குழப்பு Simple Sleep timer canceled. Sleep timer set for %d minutes from now. @@ -493,9 +493,9 @@ Songs வரிசை பட்டியல் Ascending - Album - Artist - Composer + தொகுப்பு + பாடகர் + இசையமைப்பாளர் Date added Date modified Default diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 654ee369f5..5dbac01b42 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -253,7 +253,7 @@ %s bir Pro özelliğidir. Geri yükleme başarıyla tamamlandı. Güncellendi - Welcome to %s]]> + %s\'e
hoşgeldin]]>
İsim Sık oynatılanlar Asla diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index cd0a31edc3..74255debcb 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -1,15 +1,15 @@ - Про додаток %s + Про застосунок %s Команда, посилання на соц. мережі Акцентний колір Акцентний колір, за замовчуванням фіолетовий - Про додаток + Про застосунок Додати до чорного списку Додати в обране Додати до черги відтворення Додати до списку відтворення - Відмінити + Скасовувати Трансляція на іншому дисплеї Очистити чергу відтворення Циклічне повторення @@ -41,7 +41,7 @@ Пошук Розпочати Встановити як мелодію дзвінка - Встановити в якості початкової теки + Встановити як початкову теку "Налаштування" Поділитися Перемішати всі @@ -55,7 +55,7 @@ Додати "Додати до списку відтворення" Додати часові розмежування тексту - Added %1$d song(s) to %2$s + Додано %1$d пісень(ів) до %2$s "Додано 1 композицію до черги відтворення." Додано %1$d композицій до черги відтворення. Альбом @@ -70,39 +70,39 @@ Альбом Альбоми - Альбоми + Альбомів Альбоми Завжди Привіт, перегляньте цей крутий музичний плеєр за адресою: https://play.google.com/store/apps/details?id=%s Перемішати Кращі треки - Full Image + Повне зображення Ретро музика - Картка Ретро-музика - Класичний MD3 Ретро-музика - Малий - Minimal Text + Мінімум тексту Виконавець Виконавці - Audio fade duration + Тривалість затухання звуку В отриманні аудіофокусу відмовлено. Змінити налаштування звуку та налаштувати параметри еквалайзера Автоматично - Backup and restore your settings, playlists - - Backups + Резервне копіювання та відновлення налаштувань, плейлистів + + Резервні копії Життєпис Чорний Чорний список - The app needs nearby devices permission to check for bluetooth devices - Nearby devices + Застосунку потрібен дозвіл на пристрої поблизу, щоб перевірити наявність пристроїв Bluetooth + Пристрої поруч Розмиття Розмита картка Не вдалося надіслати звіт - Недійсний токен доступу. Зв’яжіться з розробником додатка. - Проблеми не включені для вибраного сховища. Зверніться до розробника програми. - Виникла несподівана помилка. Зв\'яжіться з розробником додатку. + Недійсний токен доступу. Зв’яжіться з розробником застосунку. + Проблеми не включені для вибраного сховища. Зверніться до розробника застосунку. + Виникла несподівана помилка. Зв\'яжіться з розробником застосунку. Неправильне ім\'я користувача або пароль Помилка Надіслати вручну @@ -110,31 +110,31 @@ Введіть свій дійсний пароль користувача GitHub Введіть заголовок проблеми Введіть своє дійсне ім’я користувача GitHub - Bug report successful - Сталася неочікувана помилка. Вибачте, що натрапили на цю помилку, якщо вона постійно повторюється, спробуйте \"Очистити дані додатка\" або надішліть лист на ел. пошту + Повідомлення про помилку успішне + Сталася неочікувана помилка. Вибачте, що натрапили на цю помилку, якщо вона постійно повторюється, спробуйте \"Очистити дані застосунку\" або надішліть лист на ел. пошту Надіслати через обліковий запис GitHub Придбайте вже Відмінити Картка Кольорова картка - Square Card + Квадратна картка Картка Карусель на екрані відтворення Каскад Історія змін - Check out What\'s New - Choose Image - Choose what to restore + Перевірте, що нового + Виберіть зображення + Обирайте, що відновлювати Коло Круглий Класичний Очистити Очистити чорний список - Clear History + Очистити історію Очистити чергу Колір Кольори - Compact + Компактний Композитор Скопійовано інформацію про пристрій у буфер обміну. Не вдалося створити список відтворення. @@ -146,8 +146,8 @@ Створено список відтворення %1$s. Учасники та меценати Зараз грає %1$s від %2$s. - Custom Artist Images - Share Crash Report + Індивідуальні зображення художників + Поділитися звітом про помилку Майже темна Видалити список відтворення %1$s?]]> @@ -158,34 +158,34 @@ %1$d списки відтворення?]]> %1$d пісень?]]> Видалено %1$d пісень. - Deleting Songs + Видалити пісні Глибина Опис Інформація про пристрій Дозволити Retro Music змінювати налаштування звуку Встановити як мелодію дзвінка - Disc Number + Номер диску Ви хочете очистити чорний список? %1$s з чорного списку?]]> Підтримати Якщо ви вважаєте, що я заслуговую на оплату своєї праці, ви можете залишити гроші тут Купіть мені: - Done + Готово Режим водія - Edit Button - Edit Lyrics - Edit Synced Lyrics + Кнопка редагування + Змінити текст пісні + Редагувати синхронізовані тексти Порожньо Еквалайзер - Couldn\u2019t create backup - Couldn\u2019t delete backup - Your name can\'t be empty! - Load failed - Couldn\'t share file - Expanded + Не вдалося створити резервну копію + Не можливо\u2019t видалити резервну копію + Ваше ім\'я не може бути порожнім! + Не вдалося завантажити + Не вдалося поділитися файлом + Розширений ЧаП Обране - File already exists + Файл вже існує Закінчити останню пісню Вмістити Плоский @@ -195,13 +195,13 @@ Безкоштовно Повний Повна картка - Змінити тему і кольори додатку + Змінити тему і кольори застосунку Вигляд Жанр Жанри - Розгалужити проект на GitHub - Gradient - Grant access + Форк проєкту на GitHub + Градієнт + Надати доступ 1 2 3 @@ -211,19 +211,19 @@ 7 8 Стиль сітки - Need more help? + Необхідна додаткова допомога? Завіса Історія - History cleared - Undo + Історію очищено + Скасувати Домашня сторінка Горизонтальне перевернення Зображення Градієнтне зображення Змінити параметри завантаження зображення виконавця - Import - Import playlist - It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Імпорт + Імпортувати плейліст + Імпортує всі плейлісти, перелічені в Android Media Store з піснями, якщо в списках відтворення вже є і пісні будуть об\'єднані. Додано %1$d пісень до списку відтворення %2$s. Похизуйтеся вашими налаштуваннями Retro Music у Instagram Клавіатура @@ -232,14 +232,14 @@ Назва файлу Шлях до файлу Розмір - Last Modified + Дата останньої зміни Більше від %s Частота дискретизації Довжина З відміткою Нещодавно додане Остання пісня - Let\'s go + Вперед! Категорії бібліотеки Ліцензії Яскраво-білий @@ -252,23 +252,23 @@ Матеріал Помилка Помилка дозволу - Backup created successfully. - Not more than 5 items - %s is a Pro feature. - Restore completed successfully. - Updated - Welcome to %s]]> + Резервну копію успішно створено. + Не більше 5 елементів + %s є Pro функцією. + Відновлення успішно завершено. + Оновлено + Вітаємо в %s]]> Назва Найчастіше відтворювані Ніколи - New Music Mix + Новий мікс Новий список відтворення %s є новим початковим каталогом. Наступна пісня Немає жодного альбому Немає жодного виконавця "Спочатку відтворіть пісню, а потім спробуйте ще раз." - No Backups Found + Не знайдено резервних копій Еквалайзер не знайдено У вас немає жанрів Текст не знайдено @@ -280,7 +280,7 @@ Нормальний Стандартний текст %s не вказано в медіа сховищі.]]> - Not recently played + Нещодавно відтворені Нічого сканувати. Порожньо Сповіщення @@ -292,16 +292,16 @@ Лише через Wi-Fi Розширені функції тестування Інше - Over Cover + Обкладинка Пароль Останні 3 місяці - Paste Lyrics Here - Paste timeframe lyrics here - Peek - Nearby devices permission denied. + Вставити текст сюди + Вставити текст пісні тут + Погляд + Доступ до пристроїв поблизу заборонено. Відмовлено у доступі до зовнішнього сховища. - The app needs permission to access your device storage for playing music - Storage Access + Застосунку потрібен дозвіл на доступ до пам\'яті пристрою для відтворення музики + Доступ до сховища У доступі відмовлено. Персоналізація Налаштуйте екран відтворення та зовнішній вигляд @@ -309,13 +309,13 @@ Pinterest Слідкуйте за сторінкою Pinterest від Retro Music для натхнення дизайну Звичайний - Playlist already exists - Pitch - Playback Settings - Playback Speed + Список відтворення вже існує + Тон + Налаштування відтворення + Швидкість Відтворення Сповіщення про відтворення надає дії для відтворення/паузи тощо. Сповіщення про відтворення - %s created successfully + %s успішно створено Список відтворення порожній Назва списку відтворення Списки відтворення @@ -333,25 +333,25 @@ Бібліотека Екран блокування Списки відтворення - Призупиняє пісню, коли гучність зменшується до нуля і починає грати під час підвищення гучності. Також працює поза додатком + Призупиняє пісню, коли гучність зменшується до нуля і починає грати під час підвищення гучності. Також працює поза застосунком Пауза при нулі Майте на увазі, що увімкнення цієї функції може вплинути на заряд акумулятора Не вимикати екран Обрати мову - Snow fall effect + Ефект снігопаду Використовувати обкладинку альбому пісні як шпалери екрана блокування - Show Album Artists in the Artist category + Показувати виконавців альбому в категорії виконавця Зменшення гучності при відтворенні системного звуку або сповіщення - Fade audio when song is paused or played + Приглушити звуку під час паузи або відтворення пісні Вміст тек чорного списку приховано з вашої бібліотеки. Почати відтворення відразу при під\'єднанні до Bluetooth пристрою - Розмивати обкладинку альбому на екрані блокування. Можуть виникнути проблеми з сторонніми додатками та віджетами + Розмивати обкладинку альбому на екрані блокування. Можуть виникнути проблеми зі сторонніми застосунками та віджетами Ефект каруселі для обкладинок альбомів на екрані відтворення. Теми \"Картка\" та \"Розмита картка\" не працюватимуть Використовувати класичне оформлення сповіщення Тло і кольори кнопок керування міняються в залежності від обкладинки екрана відтворення - Фарбує ярлики додатків у колір акценту. Кожного разу, коли ви змінюєте колір, будь ласка, перемкніть його, щоб зміни вступили в силу + Фарбує ярлики застосунків у колір акценту. Кожного разу, коли ви змінюєте колір, будь ласка, перемкніть його, щоб зміни набрали чинності "Фарбує повідомлення в обкладинці альбому яскравим кольором" - Duration to crossfade between songs + Тривалість переходу між піснями Для Material Design лінії в темному режимі мають бути ненасичені При натисканні на сповіщення буде показано екран відтворення замість домашнього екрану Додати додаткові елементи керування до міні-програвача @@ -361,101 +361,101 @@ Може збільшити якість обкладинки альбому, але збільшує час завантаження зображення. Використовуйте тільки якщо у вас проблеми з обкладинками низької роздільної здатності Налаштувати видимість та порядок категорій бібліотеки. Використовувати керування музикою на екрані блокування від Retro Music - Always play audio in background regardless of anything else being played + Завжди відтворювати аудіо у фоновому режимі, незважаючи на інше відтворення Деталі ліцензії для програмного забезпечення з відкритим кодом - When enabled, newly played songs won\'t show in history - Navigate to the last used tab on start - Display synced lyrics over album cover - Show New Music Mix on homescreen - Enables changing song by swiping anywhere on the now playing screen - Swipe down to dismiss mini player + Коли увімкнено, нові пісні не відображатимуться в історії + Перейдіть до останньої використаної вкладки при старті + Відображати текст пісні над обкладинкою альбому + Показати новий мікс музики на домашньому екрані + Дозволяє змінювати пісню, проводячи пальцем по екрану відтворення + Проведіть вниз, щоб відхилити міні плеєр Режим занурення Почати відтворення відразу після підключення навушників Випадковий режим вимкнеться при відтворенні нового списку пісень Якщо вистачає місця, показувати панель гучності на екрані відтворення - Extract accent color from wallpaper - Only show music from /Music Folder + Використовувати колір акцентів зі шпалери + Відображувати музику лише з /Music Folder Показати обкладинку альбому - Navigate by Album Artist + Перейти за виконавцем альбому Тема обкладинки альбому Пропустити обкладинку альбому - Кольорові ярлики додатків - Header style + Кольорові ярлики застосунків + Стиль заголовку Зменшити гучність при сторонніх звуках - Fade audio + Затухання аудіо Автоматично завантажувати зображення виконавців Чорний список Відтворення Bluetooth Розмити обкладинку альбому - Circular play button + Кнопка кругового відтворення Класичне оформлення сповіщень Адаптивний колір Кольорове сповіщення - Crossfade (Beta) - Use Manrope font + Плавний перехід (бета-версія) + Використовувати шрифт Manrope Ненасичений колір Показувати на екрані відтворення Додаткові елементи керування Інформація про пісню Безперервне відтворення - Тема додатку - Album grid + Тема застосунку + Сітка альбому Домашня сітка виконавця Головний банер Ігнорувати обкладинки з Медіасховища Інтервал останнього доданого списку відтворення Повноекранне керування - Keep screen on when showing lyrics - Lyrics type - Always play + Не вимикати екран при відображенні тексту + Тип тексту + Завжди грати Тема відтворення Ліцензії з відкритим кодом - Pause history - Remember last tab - Show lyrics - Show suggestions - Swipe anywhere to change song - Dismiss with swipe down + Призупинити історію + Запам‘ятати останню вкладку + Показати текст + Показувати пропозиції + Проведіть де завгодно, щоб змінити пісню + Прибрати свайпом вниз Режим назв вкладок Ефект Каруселі На весь екран Автоматичне відтворення Режим перемішування Регулювання гучності - Wallpaper accent color - Whitelist music + Колір акцентів шпалер + Білий список музики Pro - Black theme, Now playing themes, Carousel effect and more.. + Чорна тема, теми відтворення, ефект каруселі та інше.. Профіль Придбати Черга - Оцініть додаток - Подобається цей додаток? Напишіть відгук нам у Google Play Store, як ми можемо зробити його ще кращим + Оцініть застосунок + Подобається цей застосунок? Напишіть відгук нам у Google Play Store, як ми можемо зробити його ще кращим Останні альбоми Останні виконавці Вилучити Видалити обкладинку Видалити з чорного списку - Remove Image + Видалити зображення Видалити пісню зі списку відтворення %1$s зі списку відтворення?]]> Видалити пісні зі списку відтворення %1$d пісень зі списку відтворення?]]> Перейменувати список відтворення - Replace Cover + Змінити обкладинку Повідомити про помилку Повідомити про помилку Скинути Скинути зображення виконавця Відновити - Do you want to restore backup? - Відновлено попередню покупку. Перезапустіть додаток, щоб скористатися всіма функціями. + Бажаєте відновити резервну копію? + Відновлено попередню покупку. Перезапустіть застосунок, щоб скористатися всіма функціями. Відновлені попередні покупки. Відновлення покупки… Retro Music плеєр Retro Music Pro - The app needs permission to access your device settings in order to set music as Ringtone - Ringtone (Optional) + Застосунку потрібен дозвіл на доступ до налаштувань вашого пристрою для того, щоб встановити музику як рингтон + Мелодія (Необов\'язково) Помилка видалення файлу: %s Неможливо отримати URI SAF @@ -482,10 +482,10 @@ Обрано Встановити Встановити зображення виконавця - Поділитися додатком - Share the app with your friends and family + Поділитися застосунком + Поділитися застосунком із друзями та сім\'єю Поділитися в Історії - Show Album Artists + Показати виконавців альбому Перемішати Простий Таймер сну скасовано. @@ -502,9 +502,9 @@ Композитор Дата додавання Дата змінення - Default - Song count - Song count desc + За замовчуванням + Кількість пісень + Опис кількості пісень Рік За спаданням Вибачте! Ваш пристрій не підтримує введення мови @@ -525,14 +525,14 @@ Дрібний Крихітна картка Назва - New Backup + Нова резервна копія Сьогодні Топ альбомів Топ виконавців "Доріжка (2 для доріжки 2 або 3004 для CD3 доріжки 4)" Номер пісні Перекласти - Допоможіть нам перекласти додаток на вашу мову + Допоможіть нам перекласти застосунок на вашу мову Спробуйте Retro Music Преміум Твіттер Поділіться своїм дизайном із Retro Music @@ -541,16 +541,16 @@ Наступне Оновити зображення Оновлення… - User Images - User Name + Зображення користувача + Ім\'я користувача Ім\'я користувача Версія додатку Вертикальне сальто - View on Telegram + Переглянути в Telegram Гучність Пошук в інтернеті - Website - Check out our Website + Сайт + Відвідайте наш веб-сайт Вітаємо вас, Чим ви хочете поділитися? Що нового diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index c8a4f68b1c..307c696d17 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -10,7 +10,7 @@ Thêm vào danh sách chờ phát Thêm vào danh sách phát Hủy - Truyền màn hình + Truyền tới Xoá danh sách chờ phát Chế độ lặp lại chu kỳ Xoá @@ -20,7 +20,7 @@ Đi đến album Đi đến nghệ sĩ Chuyển đến thể loại - Go to Lyrics + Đi tới lời bài hát Đến trang bắt đầu Cho phép Kích thước lưới @@ -55,7 +55,7 @@ Thêm "Thêm vào danh sách phát" Thêm lời theo thời gian - Added %1$d song(s) to %2$s + Thêm %1$d bài hát vào %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 @@ -79,18 +79,18 @@ Văn bản nhỏ nhất Nghệ sĩ Nghệ sĩ - Audio fade duration + Thời lượng làm mượt âm thanh Tập trung âm thanh bị từ chối Thay đổi cài đặt âm thanh và điều chỉnh các điều khiển bộ chỉnh âm Tự động - Backup and restore your settings, playlists - - Backups + Lưu trữ và khôi phục lại tùy chọn, danh sách phát của bạn + + Bản sao lưu Tiểu sử Đen hoàn toàn Danh sách đen - The app needs nearby devices permission to check for bluetooth devices - Nearby devices + Ứng dụng cần quyền các thiết bị lân cận để kiểm tra các thiết bị bluetooth + Thiết bị lân cận Làm mờ Thẻ mờ Không thể gửi báo cáo @@ -104,7 +104,7 @@ Vui lòng nhập đúng mật khẩu dùng Github của bạn Vui lòng nhập tiêu đề vấn đề Vui lòng nhập đúng tên người dùng Github của bạn - Bug report successful + Báo cáo lỗi thành công Đã xảy ra lỗi không mong muốn. Xin lỗi bạn vì lỗi này, nếu nó tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Gửi bằng tài khoản GitHub @@ -118,18 +118,18 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Xếp tầng Thay đổi Xem có gì mới - Choose Image - Choose what to restore + Chọn hình ảnh + Chọn mục để khôi phục Vòng tròn Dạng tròn Cổ điển Xóa Xóa danh sách đen - Clear History + Xóa Lịch sử Xoá danh sách Màu sắc Màu sắc - Compact + Nhỏ gọn Tác giả Đã sao chép thông tin thiết bị vào clipboard. Kh\u00f4ng th\u1ec3 t\u1ea1o danh s\u00e1ch ph\u00e1t @@ -141,8 +141,8 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Đã tạo danh sách phát %1$s. Thành viên và cộng tác viên Đang nghe %1$s bởi %2$s. - Custom Artist Images - Share Crash Report + Tùy chỉnh ảnh nghệ sĩ + Chia sẽ báo cáo lỗi Xám đen Xoá danh sách phát %1$s?]]> @@ -159,7 +159,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Thông tin thiết bị Cho phép Retro Music cấu hình cài đặt âm thanh Cài làm nhạc chuông - Disc Number + Số đĩa Bạn có muốn xóa danh sách đen? %1$s khỏi danh sách đen?]]> Ủng hộ @@ -172,15 +172,15 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Sửa Lời Đồng bộ Trống Bộ chỉnh âm - Couldn\u2019t create backup - Couldn\u2019t delete backup - Your name can\'t be empty! - Load failed - Couldn\'t share file - Expanded + Không thể tạo bản sao lưu + Không thể xóa bản sao lưu + Tên của bạn không được để trống! + Không thể tải + Không thể chia sẽ tập tin + Mở rộng Câu hỏi thường gặp Yêu thích - File already exists + Tập tin đã tồn tại Kết thúc bài cuối Phù hợp Phẳng @@ -196,7 +196,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Thể loại Tham gia phát triển dự án trên Github Gradient - Grant access + Trao quyền truy cập 1 2 3 @@ -209,8 +209,8 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Bạn cần hỗ trợ thêm? Bản lề Lịch sử - History cleared - Undo + Đã xóa lịch sử + Hoàn tác Trang chủ Lật ngang Hình ảnh @@ -227,14 +227,14 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Tên tệp Đường dẫn tệp Kích thước - Last Modified + Lần chỉnh sửa cuối Thêm thông tin từ %s Tần số lấy mẫu Độ dài Được dán nhãn Đã thêm gần đây Bài cuối - Let\'s go + Hãy bắt đầu Danh mục thư viện Giấy phép Hoàn toàn trắng @@ -247,23 +247,23 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Material Lỗi Lỗi quyền truy cập - Backup created successfully. - Not more than 5 items - %s is a Pro feature. - Restore completed successfully. - Updated - Welcome to %s]]> + Đã tạo thành công bản sao lưu. + Không nhiều hơn 5 tùy chọn + %s là một tính năng Pro. + Khôi phục thành công. + Đã cập nhật + Chào mừng bạn đến với %s]]> Tên Phát nhiều nhất Không bao giờ - New Music Mix + Bản phối nhạc mới Danh sách phát mới %s là trang bắt đầu mới. Bài tiếp theo Không có album Không có nghệ sĩ "Phát một bài hát trước, sau đó thử lại." - No Backups Found + Không tìm thấy bản sao lưu Không tìm thấy bộ chỉnh âm Không có thể loại Không tìm thấy lời bài hát @@ -292,8 +292,8 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Mỗi tháng Dán lời ở đây Dán lời theo thời gian ở đây - Peek - Nearby devices permission denied. + Nhìn trước + Quyền truy cập thiết bị lân cận bị từ chối. Quyền truy cập bộ nhớ ngoài bị từ chối. Ứng dụng cần quyền truy cập bộ nhớ thiết bị của bạn để phát nhạc Truy cập bộ nhớ @@ -304,13 +304,13 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Pinterest Theo dõi trang Pinterest để lấy cảm hứng thiết kế Retro Music Giản dị - Playlist already exists - Pitch - Playback Settings - Playback Speed + Danh sách phát đã tồn tại + Cao độ + Cài đặt phát lại + Tốc độ phát lại Thanh thông báo đang phát sẽ cho phép bạn phát/tạm dừng, chuyển bài, v.v. Thông báo đang phát - %s created successfully + %s đã tạo thành công Danh sách phát trống Tên danh sách phát Danh sách phát @@ -333,11 +333,11 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Lưu ý rằng việc bật tính năng này có thể ảnh hưởng đến tuổi thọ pin Giữ màn hình luôn bật Chọn ngôn ngữ - Snow fall effect + Hiệu ứng tuyết rơi Sử dụng ảnh bìa album bài hát đang phát làm ảnh nền màn hình khóa. Hiển thị Album Nghệ sĩ trong danh mục Nghệ sĩ Giảm âm lượng khi có âm báo hệ thống hoặc khi bạn có thông báo - Fade audio when song is paused or played + Làm mượt âm thanh khi tạm dừng hoặc phát bài hát Nội dung của các thư mục trong danh sách đen được ẩn khỏi thư viện của bạn. Tự động phát nhạc sau khi kết nối với thiết bị Bluetooth Làm mờ ảnh bìa album trên màn hình khóa. Có thể gây ra sự cố với các ứng dụng và tiện ích của bên thứ ba @@ -356,14 +356,14 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Có thể tăng chất lượng hiển thị ảnh bìa album, nhưng sẽ làm thời gian tải hình ảnh chậm hơn. Chỉ bật tính năng này nếu bạn không thích chất lượng ảnh gốc Khả năng hiển thị và thứ tự của các danh mục trong thư viện. Sử dụng các điều khiển màn hình khóa tùy chỉnh của Retro Music - Always play audio in background regardless of anything else being played + Luôn phát âm thanh trong nền bất kể các nguồn âm thanh đang phát khác Chi tiết giấy phép của phần mềm mã nguồn mở - When enabled, newly played songs won\'t show in history + Khi được bật, những bài hát mới phát sẽ không xuất hiện trong lịch sử Điều hướng đến tab được sử dụng gần nhất lúc bắt đầu - Display synced lyrics over album cover - Show New Music Mix on homescreen - Enables changing song by swiping anywhere on the now playing screen - Swipe down to dismiss mini player + Hiển thị lời bài hát đã đồng bộ trên bìa album + Hiện bản phối nhạc mới trên trang chủ + Cho phép chuyển bài bằng cách vuốt ở bất kì đâu tại màn hình phát + Trượt xuống để ẩn trình phát nhỏ Chế độ hoà nhập Tự động phát nhạc khi kết nối tai nghe Chế độ phát ngẫu nhiên sẽ tắt khi phát danh sách bài hát mới @@ -387,7 +387,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Màu sắc thích nghi Đổi màu thông báo Khoảng lặng (Beta) - Use Manrope font + Sử dụng font chữ Manrope Màu sắc tương thích Hiển thị màn hình phát nhạc Điều khiển bổ sung @@ -402,13 +402,13 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Điều khiển toàn màn hình. Keep screen on when showing lyrics Lyrics type - Always play + Luôn luôn phát Giao diện màn hình phát Giấy phép nguồn mở Pause history Remember last tab Show lyrics - Show suggestions + Hiển thị đề xuất Swipe anywhere to change song Dismiss with swipe down Chế độ tiêu đề thẻ @@ -437,7 +437,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Xoá bài hát khỏi danh sách phát %1$d bài hát khỏi danh sách phát?]]> Đổi tên danh sách phát - Replace Cover + Thay thế Ảnh bìa Album Báo cáo vấn đề Báo cáo lỗi Cài lại diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index ba2976d15a..e5dfcc0506 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -340,7 +340,8 @@ 在媒体库中隐藏列入黑名单的文件夹内容。 连接到蓝牙设备后立即开始播放 模糊化显示锁屏上的专辑封面。可能与第三方应用或微件产生冲突。 - 在播放页使用轮播效果。在使用卡片和模糊卡片主题时无效 。 + 在播放页为专辑图片使用轮播效果。 +使用时卡片和模糊卡片主题不会生效。 使用经典通知样式 背景及控件颜色跟随专辑封面变化 将快捷方式颜色更改为强调色,每次颜色更改后需要切换一下该设置才能生效 @@ -510,7 +511,7 @@ 滑动以解锁 滚动歌词 Telegram - 加入 Telegram 群组,讨论错误,提出建议,吹水聊天等等 + 加入 Telegram 群组,讨论错误,提出建议,水群聊天等等 谢谢您! 音频文件 本月 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index fdbab5012b..af56e2b1d5 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 @@ 適應風 新增 "新增至播放清單" - 新增同步歌詞 + 新增動態歌詞 已新增 %1$d 首歌至 %2$s "已新增 1 首歌至播放佇列。" 已新增 %1$d 首歌至播放佇列。 @@ -168,7 +168,7 @@ 駕駛模式 編輯按鈕 編輯歌詞 - 編輯同步歌詞 + 編輯動態歌詞 沒有內容 等化器 無法建立備份 @@ -255,7 +255,7 @@ 名稱 最佳單曲 永不 - 歌曲快選 + 新歌快選 新增播放清單 %s 為新起始目錄。 下一首 @@ -290,7 +290,7 @@ 密碼 過去 3 個月 在此貼上歌詞 - 在此貼上同步歌詞 + 在此貼上動態歌詞 懸浮風 鄰近裝置存取被拒。 無法取得存取外部儲存空間的權限。 @@ -359,8 +359,8 @@ 開源軟體授權詳細資訊 啟用此選項後,新播放的歌曲將不再顯示於歷史記錄 開啟應用程式後,自動顯示最後瀏覽的畫面 - 於專輯封面上顯示同步歌詞 - 於主畫面顯示歌曲快選 + 於專輯封面上顯示動態歌詞 + 於主畫面顯示新歌快選 啟用於現正播放畫面,可隨意滑動以切換歌曲 向下滑動以關閉迷你播放器 沉浸模式 @@ -470,7 +470,7 @@ 已儲存播放清單至 %s。 儲存變更 掃描媒體 - 已掃描 %2$d 個檔案夾中的 %1$d 個。 + 已掃描 %1$d 個檔案,共 %2$d 個。 音樂記錄 選取全部 僅顯示已選取的標籤 @@ -508,7 +508,7 @@ 建議 支持開發 滑動以解鎖 - 同步歌詞 + 動態歌詞 Telegram 加入 Telegram 群組以討論臭蟲、提供建議、交流,以及探索更多 感謝您! From 731f8d56e50ca37f03e57b8802ce6c44f3405d70 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 29 Mar 2023 21:26:14 +0530 Subject: [PATCH 23/28] Update dependencies --- app/build.gradle | 8 ++++---- build.gradle | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ed816d57c9..5eccf4ec28 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -112,7 +112,7 @@ dependencies { implementation 'androidx.mediarouter:mediarouter:1.3.1' //Cast Dependencies - normalImplementation 'com.google.android.gms:play-services-cast-framework:21.2.0' + normalImplementation 'com.google.android.gms:play-services-cast-framework:21.3.0' //WebServer by NanoHttpd normalImplementation "org.nanohttpd:nanohttpd:2.3.1" @@ -120,7 +120,7 @@ dependencies { implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version" implementation "androidx.navigation:navigation-ui-ktx:$navigation_version" - def room_version = '2.5.0' + def room_version = '2.5.1' implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-ktx:$room_version" ksp "androidx.room:room-compiler:$room_version" @@ -150,7 +150,7 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4" - def koin_version = '3.3.3' + def koin_version = '3.4.0' implementation "io.insert-koin:koin-core:$koin_version" implementation "io.insert-koin:koin-android:$koin_version" @@ -176,5 +176,5 @@ dependencies { implementation 'com.github.dhaval2404:imagepicker:2.1' implementation 'me.zhanghai.android.fastscroll:library:1.2.0' implementation 'cat.ereza:customactivityoncrash:2.4.0' - implementation 'me.tankery.lib:circularSeekBar:1.4.1' + implementation 'me.tankery.lib:circularSeekBar:1.4.2' } \ No newline at end of file diff --git a/build.gradle b/build.gradle index dce7f9bf7a..057d587915 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ buildscript { ext { - lifecycle_version = '2.6.0' + lifecycle_version = '2.6.1' navigation_version = '2.5.3' mdc_version = '1.9.0-beta01' preference_version = '1.2.0' From d0b0a03bd93c5da0eb080f2fbaef76e1a4596222 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 29 Mar 2023 21:50:44 +0530 Subject: [PATCH 24/28] Update version and changelog --- app/build.gradle | 4 ++-- app/src/main/assets/retro-changelog.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5eccf4ec28..9df28e38aa 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { vectorDrawables.useSupportLibrary = true applicationId namespace - versionCode 10601 - versionName '6.0.5' + versionCode 10602 + versionName '6.1.0' 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 36f50a8c0c..bdd91af637 100644 --- a/app/src/main/assets/retro-changelog.html +++ b/app/src/main/assets/retro-changelog.html @@ -72,8 +72,8 @@

Looking for maintainers/contributors

-
March 19, 2023
-

v6.0.5

+
March 30, 2023
+

v6.1.0

What's New

  • App now targets Android 13, support for Granular media permissions, Photo picker, Per-app language preferences & Predictive back gesture
  • From 2ea920019c6242cde8954d1ba2285e05f3fe14e7 Mon Sep 17 00:00:00 2001 From: Andrei M Date: Sat, 1 Apr 2023 22:27:04 +0300 Subject: [PATCH 25/28] Add required parameter for seek method in CastPlayer --- .../java/code/name/monkey/retromusic/service/CastPlayer.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/fdroid/java/code/name/monkey/retromusic/service/CastPlayer.kt b/app/src/fdroid/java/code/name/monkey/retromusic/service/CastPlayer.kt index 3a0eaca286..2363bc1879 100644 --- a/app/src/fdroid/java/code/name/monkey/retromusic/service/CastPlayer.kt +++ b/app/src/fdroid/java/code/name/monkey/retromusic/service/CastPlayer.kt @@ -35,7 +35,7 @@ class CastPlayer : Playback { override fun position() = 0 - override fun seek(whereto: Int) = whereto + override fun seek(whereto: Int, force: Boolean) = whereto override fun setVolume(vol: Float) = true From 025e908c22615ea591b1039cc509a6751b2c96e6 Mon Sep 17 00:00:00 2001 From: Andrei M Date: Sat, 1 Apr 2023 23:18:15 +0300 Subject: [PATCH 26/28] Add Upsert to PlayCountDao --- .../activities/base/AbsMusicServiceActivity.kt | 13 +++++-------- .../name/monkey/retromusic/db/PlayCountDao.kt | 13 ++++--------- .../monkey/retromusic/repository/Repository.kt | 16 ++++++---------- .../retromusic/repository/RoomRepository.kt | 16 ++++++---------- 4 files changed, 21 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt index 86bf864618..1d9489bb8d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt @@ -131,14 +131,11 @@ abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventLi repository.addSongToHistory(MusicPlayerRemote.currentSong) } } - val songs = repository.checkSongExistInPlayCount(MusicPlayerRemote.currentSong.id) - if (songs.isNotEmpty()) { - repository.updateSongInPlayCount(songs.first().apply { - playCount += 1 - }) - } else { - repository.insertSongInPlayCount(MusicPlayerRemote.currentSong.toPlayCount()) - } + val song = repository.findSongExistInPlayCount(MusicPlayerRemote.currentSong.id) + ?.apply { playCount += 1 } + ?: MusicPlayerRemote.currentSong.toPlayCount() + + repository.upsertSongInPlayCount(song) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/db/PlayCountDao.kt b/app/src/main/java/code/name/monkey/retromusic/db/PlayCountDao.kt index 420b2d4348..087ae4faf3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/db/PlayCountDao.kt +++ b/app/src/main/java/code/name/monkey/retromusic/db/PlayCountDao.kt @@ -18,24 +18,19 @@ import androidx.room.* @Dao interface PlayCountDao { - @Insert(onConflict = OnConflictStrategy.REPLACE) - fun insertSongInPlayCount(playCountEntity: PlayCountEntity) - @Update - fun updateSongInPlayCount(playCountEntity: PlayCountEntity) + @Upsert + fun upsertSongInPlayCount(playCountEntity: PlayCountEntity) @Delete fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) - @Query("SELECT * FROM PlayCountEntity WHERE id =:songId") - fun checkSongExistInPlayCount(songId: Long): List + @Query("SELECT * FROM PlayCountEntity WHERE id =:songId LIMIT 1") + fun findSongExistInPlayCount(songId: Long): PlayCountEntity? @Query("SELECT * FROM PlayCountEntity ORDER BY play_count DESC") fun playCountSongs(): List @Query("DELETE FROM SongEntity WHERE id =:songId") fun deleteSong(songId: Long) - - @Query("UPDATE PlayCountEntity SET play_count = play_count + 1 WHERE id = :id") - fun updateQuantity(id: Long) } diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt index 76f1fa53cb..d02b900b49 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt @@ -84,12 +84,11 @@ interface Repository { suspend fun favoritePlaylistSongs(): List suspend fun recentSongs(): List suspend fun topPlayedSongs(): List - suspend fun insertSongInPlayCount(playCountEntity: PlayCountEntity) - suspend fun updateSongInPlayCount(playCountEntity: PlayCountEntity) + suspend fun upsertSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun deleteSongInHistory(songId: Long) suspend fun clearSongHistory() - suspend fun checkSongExistInPlayCount(songId: Long): List + suspend fun findSongExistInPlayCount(songId: Long): PlayCountEntity? suspend fun playCountSongs(): List suspend fun deleteSongs(songs: List) suspend fun contributor(): List @@ -285,11 +284,8 @@ class RealRepository( override suspend fun topPlayedSongs(): List = topPlayedRepository.topTracks() - override suspend fun insertSongInPlayCount(playCountEntity: PlayCountEntity) = - roomRepository.insertSongInPlayCount(playCountEntity) - - override suspend fun updateSongInPlayCount(playCountEntity: PlayCountEntity) = - roomRepository.updateSongInPlayCount(playCountEntity) + override suspend fun upsertSongInPlayCount(playCountEntity: PlayCountEntity) = + roomRepository.upsertSongInPlayCount(playCountEntity) override suspend fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) = roomRepository.deleteSongInPlayCount(playCountEntity) @@ -301,8 +297,8 @@ class RealRepository( roomRepository.clearSongHistory() } - override suspend fun checkSongExistInPlayCount(songId: Long): List = - roomRepository.checkSongExistInPlayCount(songId) + override suspend fun findSongExistInPlayCount(songId: Long): PlayCountEntity? = + roomRepository.findSongExistInPlayCount(songId) override suspend fun playCountSongs(): List = roomRepository.playCountSongs() diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt index a5231ccae5..04d1da4ba6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt @@ -34,12 +34,11 @@ interface RoomRepository { suspend fun songPresentInHistory(song: Song): HistoryEntity? suspend fun updateHistorySong(song: Song) suspend fun favoritePlaylistSongs(favorite: String): List - suspend fun insertSongInPlayCount(playCountEntity: PlayCountEntity) - suspend fun updateSongInPlayCount(playCountEntity: PlayCountEntity) + suspend fun upsertSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun deleteSongInHistory(songId: Long) suspend fun clearSongHistory() - suspend fun checkSongExistInPlayCount(songId: Long): List + suspend fun findSongExistInPlayCount(songId: Long): PlayCountEntity? suspend fun playCountSongs(): List suspend fun deleteSongs(songs: List) suspend fun isSongFavorite(context: Context, songId: Long): Boolean @@ -155,11 +154,8 @@ class RealRoomRepository( playlistDao.playlist(favorite).first().playListId ) else emptyList() - override suspend fun insertSongInPlayCount(playCountEntity: PlayCountEntity) = - playCountDao.insertSongInPlayCount(playCountEntity) - - override suspend fun updateSongInPlayCount(playCountEntity: PlayCountEntity) = - playCountDao.updateSongInPlayCount(playCountEntity) + override suspend fun upsertSongInPlayCount(playCountEntity: PlayCountEntity) = + playCountDao.upsertSongInPlayCount(playCountEntity) override suspend fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) = playCountDao.deleteSongInPlayCount(playCountEntity) @@ -172,8 +168,8 @@ class RealRoomRepository( historyDao.clearHistory() } - override suspend fun checkSongExistInPlayCount(songId: Long): List = - playCountDao.checkSongExistInPlayCount(songId) + override suspend fun findSongExistInPlayCount(songId: Long): PlayCountEntity? = + playCountDao.findSongExistInPlayCount(songId) override suspend fun playCountSongs(): List = playCountDao.playCountSongs() From e27b7b07fef6b882765eabb86ca32cd79e1db247 Mon Sep 17 00:00:00 2001 From: Andrei M Date: Sat, 1 Apr 2023 23:35:45 +0300 Subject: [PATCH 27/28] Add Upsert to HistoryDao --- .../activities/base/AbsMusicServiceActivity.kt | 10 ++-------- .../code/name/monkey/retromusic/db/HistoryDao.kt | 9 ++------- .../retromusic/fragments/LibraryViewModel.kt | 2 +- .../monkey/retromusic/repository/Repository.kt | 14 +++----------- .../monkey/retromusic/repository/RoomRepository.kt | 14 +++----------- 5 files changed, 11 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt index 1d9489bb8d..f9f05c9196 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt @@ -122,14 +122,8 @@ abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventLi listener.onPlayingMetaChanged() } lifecycleScope.launch(Dispatchers.IO) { - val entity = repository.songPresentInHistory(MusicPlayerRemote.currentSong) - if (entity != null) { - repository.updateHistorySong(MusicPlayerRemote.currentSong) - } else { - // Check whether pause history option is ON or OFF - if (!PreferenceUtil.pauseHistory) { - repository.addSongToHistory(MusicPlayerRemote.currentSong) - } + if (!PreferenceUtil.pauseHistory) { + repository.upsertSongInHistory(MusicPlayerRemote.currentSong) } val song = repository.findSongExistInPlayCount(MusicPlayerRemote.currentSong.id) ?.apply { playCount += 1 } diff --git a/app/src/main/java/code/name/monkey/retromusic/db/HistoryDao.kt b/app/src/main/java/code/name/monkey/retromusic/db/HistoryDao.kt index c8b2e31650..2ceb309dbd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/db/HistoryDao.kt +++ b/app/src/main/java/code/name/monkey/retromusic/db/HistoryDao.kt @@ -23,16 +23,11 @@ interface HistoryDao { private const val HISTORY_LIMIT = 100 } - @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insertSongInHistory(historyEntity: HistoryEntity) + @Upsert + suspend fun upsertSongInHistory(historyEntity: HistoryEntity) @Query("DELETE FROM HistoryEntity WHERE id= :songId") fun deleteSongInHistory(songId: Long) - @Query("SELECT * FROM HistoryEntity WHERE id = :songId LIMIT 1") - suspend fun isSongPresentInHistory(songId: Long): HistoryEntity? - - @Update - suspend fun updateHistorySong(historyEntity: HistoryEntity) @Query("SELECT * FROM HistoryEntity ORDER BY time_played DESC LIMIT $HISTORY_LIMIT") fun historySongs(): List 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 ec7ab57b14..696efcabe3 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 @@ -311,7 +311,7 @@ class LibraryViewModel( if (previousSongHistory.isNotEmpty()) { val history = ArrayList() for (song in previousSongHistory) { - repository.addSongToHistory(song.toSong()) + repository.upsertSongInHistory(song.toSong()) history.add(song.toSong()) } songHistory.postValue(history) diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt index d02b900b49..11857bcc80 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt @@ -78,9 +78,7 @@ interface Repository { suspend fun deletePlaylistSongs(playlists: List) suspend fun favoritePlaylist(): PlaylistEntity suspend fun isFavoriteSong(songEntity: SongEntity): List - suspend fun addSongToHistory(currentSong: Song) - suspend fun songPresentInHistory(currentSong: Song): HistoryEntity? - suspend fun updateHistorySong(currentSong: Song) + suspend fun upsertSongInHistory(currentSong: Song) suspend fun favoritePlaylistSongs(): List suspend fun recentSongs(): List suspend fun topPlayedSongs(): List @@ -268,14 +266,8 @@ class RealRepository( override suspend fun isFavoriteSong(songEntity: SongEntity): List = roomRepository.isFavoriteSong(songEntity) - override suspend fun addSongToHistory(currentSong: Song) = - roomRepository.addSongToHistory(currentSong) - - override suspend fun songPresentInHistory(currentSong: Song): HistoryEntity? = - roomRepository.songPresentInHistory(currentSong) - - override suspend fun updateHistorySong(currentSong: Song) = - roomRepository.updateHistorySong(currentSong) + override suspend fun upsertSongInHistory(currentSong: Song) = + roomRepository.upsertSongInHistory(currentSong) override suspend fun favoritePlaylistSongs(): List = roomRepository.favoritePlaylistSongs(context.getString(R.string.favorites)) diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt index 04d1da4ba6..38edf8386e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt @@ -30,9 +30,7 @@ interface RoomRepository { suspend fun favoritePlaylist(favorite: String): PlaylistEntity suspend fun isFavoriteSong(songEntity: SongEntity): List suspend fun removeSongFromPlaylist(songEntity: SongEntity) - suspend fun addSongToHistory(currentSong: Song) - suspend fun songPresentInHistory(song: Song): HistoryEntity? - suspend fun updateHistorySong(song: Song) + suspend fun upsertSongInHistory(currentSong: Song) suspend fun favoritePlaylistSongs(favorite: String): List suspend fun upsertSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) @@ -132,14 +130,8 @@ class RealRoomRepository( override suspend fun removeSongFromPlaylist(songEntity: SongEntity) = playlistDao.deleteSongFromPlaylist(songEntity.playlistCreatorId, songEntity.id) - override suspend fun addSongToHistory(currentSong: Song) = - historyDao.insertSongInHistory(currentSong.toHistoryEntity(System.currentTimeMillis())) - - override suspend fun songPresentInHistory(song: Song): HistoryEntity? = - historyDao.isSongPresentInHistory(song.id) - - override suspend fun updateHistorySong(song: Song) = - historyDao.updateHistorySong(song.toHistoryEntity(System.currentTimeMillis())) + override suspend fun upsertSongInHistory(currentSong: Song) = + historyDao.upsertSongInHistory(currentSong.toHistoryEntity(System.currentTimeMillis())) override fun observableHistorySongs(): LiveData> = historyDao.observableHistorySongs() From feb89bb51a6e456004d6a0ba5b8f3a6c0779b64d Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sun, 2 Apr 2023 10:10:27 +0530 Subject: [PATCH 28/28] Bump versionCode --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 9df28e38aa..d476684caf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,7 +15,7 @@ android { vectorDrawables.useSupportLibrary = true applicationId namespace - versionCode 10602 + versionCode 10603 versionName '6.1.0' buildConfigField("String", "GOOGLE_PLAY_LICENSING_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"")