diff --git a/CHANGELOG.md b/CHANGELOG.md index 49474667d..04987976c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,19 @@ # Changelog -## dev +## 3.3.1 + +#### What's Improved +- The OPUS base volume adjustment field is now parsed and used as a ReplayGain adjustment +- Added ReplayGain adjustment values to Song Properties dialog + +#### What's Changed +- Added donation links to the about page + +#### What's Fixed +- Fixed a crash occuring if you navigated to the settings page from the playlist view +and then back +- Fixed music loading failing with an SQL error with certain music folder configurations +- Fixed issue where song title on playback screen would not scroll ## 3.3.0 diff --git a/README.md b/README.md index e57f93417..b78bca77d 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@

Auxio

A simple, rational music player for android.

- - Latest Version + + Latest Version Releases @@ -13,10 +13,10 @@ Minimum SDK Version

-

Changelog | Wiki

+

Changelog | Wiki | Donate

- Translation status + Translation status

## About @@ -38,6 +38,7 @@ Auxio is a local music player with a fast, reliable UI/UX without the many usele

+ ## Features - Playback based on [Media3 ExoPlayer](https://developer.android.com/guide/topics/media/exoplayer) @@ -65,6 +66,20 @@ precise/original dates, sort tags, and more - Storage (`READ_MEDIA_AUDIO`, `READ_EXTERNAL_STORAGE`) to read and play your music files - Services (`FOREGROUND_SERVICE`, `WAKE_LOCK`) to keep the music playing in the background +## Donate + +You can support Auxio's development through [my Github Sponsors page](https://github.com/sponsors/OxygenCobalt). Get the ability to prioritize features and have your profile added to the README, Release Changelogs, and even App Itself! + +**$16/month supporters:** + +*Be the first to have their profile picture and username added here!* + +**$8/month supporters:** + +

+ +

+ ## Building Auxio relies on a custom version of Media3 that enables some extra features. This adds some caveats to the build process: @@ -82,6 +97,8 @@ However, feature additions and major UI changes are less likely to be accepted. [Why Are These Features Missing?](https://github.com/OxygenCobalt/Auxio/wiki/Why-Are-These-Features-Missing%3F) for more information. + + ## License [![GNU GPLv3 Image](https://www.gnu.org/graphics/gplv3-127x51.png)](http://www.gnu.org/licenses/gpl-3.0.en.html) diff --git a/app/build.gradle b/app/build.gradle index 999ea5e8c..c908a0094 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,8 +21,8 @@ android { defaultConfig { applicationId namespace - versionName "3.3.0" - versionCode 37 + versionName "3.3.1" + versionCode 38 minSdk 24 targetSdk 34 diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt index 742018420..3adfa6089 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt @@ -25,6 +25,7 @@ import android.view.WindowInsets import androidx.activity.OnBackPressedCallback import androidx.core.view.ViewCompat import androidx.core.view.isInvisible +import androidx.core.view.isVisible import androidx.core.view.updatePadding import androidx.fragment.app.activityViewModels import androidx.navigation.findNavController @@ -33,7 +34,9 @@ import com.google.android.material.R as MR import com.google.android.material.bottomsheet.BackportBottomSheetBehavior import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.transition.MaterialFadeThrough +import com.leinardi.android.speeddial.SpeedDialOverlayLayout import dagger.hilt.android.AndroidEntryPoint +import java.lang.reflect.Field import kotlin.math.max import kotlin.math.min import org.oxycblt.auxio.databinding.FragmentMainBinding @@ -56,6 +59,7 @@ import org.oxycblt.auxio.util.context import org.oxycblt.auxio.util.coordinatorLayoutBehavior import org.oxycblt.auxio.util.getAttrColorCompat import org.oxycblt.auxio.util.getDimen +import org.oxycblt.auxio.util.lazyReflectedField import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.navigateSafe import org.oxycblt.auxio.util.systemBarInsetsCompat @@ -153,6 +157,9 @@ class MainFragment : } } + binding.mainScrim.setOnClickListener { homeModel.setSpeedDialOpen(false) } + binding.sheetScrim.setOnClickListener { homeModel.setSpeedDialOpen(false) } + // --- VIEWMODEL SETUP --- // This has to be done here instead of the playback panel to make sure that it's prioritized // by StateFlow over any detail fragment. @@ -161,7 +168,7 @@ class MainFragment : collect(detailModel.toShow.flow, ::handleShow) collectImmediately(detailModel.editedPlaylist, detailBackCallback::invalidateEnabled) collectImmediately(homeModel.showOuter.flow, ::handleShowOuter) - collectImmediately(homeModel.speedDialOpen, speedDialBackCallback::invalidateEnabled) + collectImmediately(homeModel.speedDialOpen, ::handleSpeedDialState) collectImmediately(listModel.selected, selectionBackCallback::invalidateEnabled) collectImmediately(playbackModel.song, ::updateSong) collectImmediately(playbackModel.openPanel.flow, ::handlePanel) @@ -336,6 +343,13 @@ class MainFragment : homeModel.showOuter.consume() } + private fun handleSpeedDialState(open: Boolean) { + requireNotNull(speedDialBackCallback) { "SpeedDialBackPressedCallback was not available" } + .invalidateEnabled(open) + requireBinding().mainScrim.isVisible = open + requireBinding().sheetScrim.isVisible = open + } + private fun updateSong(song: Song?) { if (song != null) { tryShowSheets() @@ -519,4 +533,9 @@ class MainFragment : isEnabled = open } } + + private companion object { + val SPEED_DIAL_OVERLAY_ANIMATION_DURATION_FIELD: Field by + lazyReflectedField(SpeedDialOverlayLayout::class, "mAnimationDuration") + } } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/SongDetailDialog.kt b/app/src/main/java/org/oxycblt/auxio/detail/SongDetailDialog.kt index d7c682ce6..9bad4e225 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/SongDetailDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/SongDetailDialog.kt @@ -38,6 +38,7 @@ import org.oxycblt.auxio.music.info.Name import org.oxycblt.auxio.music.metadata.AudioProperties import org.oxycblt.auxio.music.resolveNames import org.oxycblt.auxio.playback.formatDurationMs +import org.oxycblt.auxio.playback.replaygain.formatDb import org.oxycblt.auxio.ui.ViewBindingMaterialDialogFragment import org.oxycblt.auxio.util.collectImmediately import org.oxycblt.auxio.util.concatLocalized @@ -118,6 +119,12 @@ class SongDetailDialog : ViewBindingMaterialDialogFragment(R.id.main_scrim).setOnClickListener { - homeModel.setSpeedDialOpen(false) - } - - findViewById(R.id.main_scrim).setOnTouchListener { _, event -> - handleSpeedDialBoundaryTouch(event) - } - - findViewById(R.id.sheet_scrim).setOnClickListener { - homeModel.setSpeedDialOpen(false) - } - - findViewById(R.id.sheet_scrim).setOnTouchListener { _, event -> - handleSpeedDialBoundaryTouch(event) + post { + findViewById(R.id.main_scrim).setOnTouchListener { _, event -> + handleSpeedDialBoundaryTouch(event) + } + findViewById(R.id.sheet_scrim).setOnTouchListener { _, event -> + handleSpeedDialBoundaryTouch(event) + } } } @@ -616,13 +611,6 @@ class HomeFragment : private fun updateSpeedDial(open: Boolean) { val binding = requireBinding() - binding.root.rootView.apply { - // Stock bottom sheet overlay won't work with our nested UI setup, have to replicate - // it ourselves. - findViewById(R.id.main_scrim).isClickable = open - findViewById(R.id.sheet_scrim).isClickable = open - } - if (open) { binding.homeNewPlaylistFab.open(true) } else { diff --git a/app/src/main/java/org/oxycblt/auxio/music/decision/ExportPlaylistDialog.kt b/app/src/main/java/org/oxycblt/auxio/music/decision/ExportPlaylistDialog.kt index db9b8c22a..5fa78726f 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/decision/ExportPlaylistDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/decision/ExportPlaylistDialog.kt @@ -143,7 +143,13 @@ class ExportPlaylistDialog : ViewBindingMaterialDialogFragment= 18) { + val header = format.initializationData[0] + val gain = header[1].toInt() or ((header[0].toInt() shl 8) and 0xFF) + logD("Obtained opus base gain: ${gain / 256f} dB") + rawSong.replayGainTrackAdjustment = + rawSong.replayGainTrackAdjustment?.plus(gain / 256f) + rawSong.replayGainAlbumAdjustment = + rawSong.replayGainAlbumAdjustment?.plus(gain / 256f) + } } else { logD("No metadata could be extracted for ${rawSong.name}") } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt index d03e0cb1c..08befa950 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt @@ -104,7 +104,10 @@ class PlaybackPanelFragment : } binding.playbackCover.onSwipeListener = this - binding.playbackSong.setOnClickListener { navigateToCurrentSong() } + binding.playbackSong.apply { + isSelected = true + setOnClickListener { navigateToCurrentSong() } + } binding.playbackArtist.setOnClickListener { navigateToCurrentArtist() } binding.playbackAlbum.setOnClickListener { navigateToCurrentAlbum() } @@ -130,6 +133,7 @@ class PlaybackPanelFragment : override fun onDestroyBinding(binding: FragmentPlaybackPanelBinding) { equalizerLauncher = null coverAdapter = null + binding.playbackSong.isSelected = false binding.playbackToolbar.setOnMenuItemClickListener(null) } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/replaygain/PreAmpCustomizeDialog.kt b/app/src/main/java/org/oxycblt/auxio/playback/replaygain/PreAmpCustomizeDialog.kt index 6cc1cea54..8a98eb99a 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/replaygain/PreAmpCustomizeDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/replaygain/PreAmpCustomizeDialog.kt @@ -24,7 +24,6 @@ import android.widget.TextView import androidx.appcompat.app.AlertDialog import dagger.hilt.android.AndroidEntryPoint import javax.inject.Inject -import kotlin.math.abs import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.DialogPreAmpBinding import org.oxycblt.auxio.playback.PlaybackSettings @@ -85,11 +84,6 @@ class PreAmpCustomizeDialog : ViewBindingMaterialDialogFragment= 0) { - getString(R.string.fmt_db_pos, valueDb) - } else { - getString(R.string.fmt_db_neg, abs(valueDb)) - } + ticker.text = valueDb.formatDb(requireContext()) } } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGain.kt b/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGain.kt index 1495fd6fb..5a19c7df3 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGain.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGain.kt @@ -18,7 +18,10 @@ package org.oxycblt.auxio.playback.replaygain +import android.content.Context +import kotlin.math.abs import org.oxycblt.auxio.IntegerTable +import org.oxycblt.auxio.R /** * The current ReplayGain configuration. @@ -67,3 +70,16 @@ data class ReplayGainAdjustment(val track: Float?, val album: Float?) * @author Alexander Capehart (OxygenCobalt) */ data class ReplayGainPreAmp(val with: Float, val without: Float) + +/** + * Format a decibel value in a human-readable format. + * + * @param context The context to resolve resources from. + * @return A formatted decibel value. Will be prefixed by a + or - sign. + */ +fun Float.formatDb(context: Context) = + if (this >= 0) { + context.getString(R.string.fmt_db_pos, this) + } else { + context.getString(R.string.fmt_db_neg, abs(this)) + } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/BetterShuffleOrder.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/BetterShuffleOrder.kt new file mode 100644 index 000000000..233e490c3 --- /dev/null +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/BetterShuffleOrder.kt @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2017 Auxio Project + * BetterShuffleOrder.kt is part of Auxio. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.oxycblt.auxio.playback.system + +import androidx.media3.common.C +import androidx.media3.exoplayer.source.ShuffleOrder +import java.util.* + +/** + * A ShuffleOrder that fixes the poorly defined default implementation of cloneAndInsert. Whereas + * the default implementation will randomly spread out added media items, this implementation will + * insert them in the order they are added contiguously. + * + * @author media3 team, Alexander Capehart (OxygenCobalt) + */ +class BetterShuffleOrder +private constructor(private val shuffled: IntArray, private val random: Random) : ShuffleOrder { + private val indexInShuffled: IntArray = IntArray(shuffled.size) + + /** + * Creates an instance with a specified length. + * + * @param length The length of the shuffle order. + */ + constructor(length: Int) : this(length, Random()) + + constructor(length: Int, random: Random) : this(createShuffledList(length, random), random) + + init { + for (i in shuffled.indices) { + indexInShuffled[shuffled[i]] = i + } + } + + override fun getLength(): Int { + return shuffled.size + } + + override fun getNextIndex(index: Int): Int { + var shuffledIndex = indexInShuffled[index] + return if (++shuffledIndex < shuffled.size) shuffled[shuffledIndex] else C.INDEX_UNSET + } + + override fun getPreviousIndex(index: Int): Int { + var shuffledIndex = indexInShuffled[index] + return if (--shuffledIndex >= 0) shuffled[shuffledIndex] else C.INDEX_UNSET + } + + override fun getLastIndex(): Int { + return if (shuffled.isNotEmpty()) shuffled[shuffled.size - 1] else C.INDEX_UNSET + } + + override fun getFirstIndex(): Int { + return if (shuffled.isNotEmpty()) shuffled[0] else C.INDEX_UNSET + } + + override fun cloneAndInsert(insertionIndex: Int, insertionCount: Int): ShuffleOrder { + val newShuffled = IntArray(shuffled.size + insertionCount) + val pivot = indexInShuffled[insertionIndex] + for (i in shuffled.indices) { + var currentIndex = shuffled[i] + if (currentIndex > insertionIndex) { + currentIndex += insertionCount + } + + if (i <= pivot) { + newShuffled[i] = currentIndex + } else if (i > pivot) { + newShuffled[i + insertionCount] = currentIndex + } + } + for (i in 0 until insertionCount) { + newShuffled[pivot + i + 1] = insertionIndex + i + 1 + } + return BetterShuffleOrder(newShuffled, Random(random.nextLong())) + } + + override fun cloneAndRemove(indexFrom: Int, indexToExclusive: Int): ShuffleOrder { + val numberOfElementsToRemove = indexToExclusive - indexFrom + val newShuffled = IntArray(shuffled.size - numberOfElementsToRemove) + var foundElementsCount = 0 + for (i in shuffled.indices) { + if (shuffled[i] in indexFrom until indexToExclusive) { + foundElementsCount++ + } else { + newShuffled[i - foundElementsCount] = + if (shuffled[i] >= indexFrom) shuffled[i] - numberOfElementsToRemove + else shuffled[i] + } + } + return BetterShuffleOrder(newShuffled, Random(random.nextLong())) + } + + override fun cloneAndClear(): ShuffleOrder { + return BetterShuffleOrder(0, Random(random.nextLong())) + } + + companion object { + private fun createShuffledList(length: Int, random: Random): IntArray { + val shuffled = IntArray(length) + for (i in 0 until length) { + val swapIndex = random.nextInt(i + 1) + shuffled[i] = shuffled[swapIndex] + shuffled[swapIndex] = i + } + return shuffled + } + } +} diff --git a/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt index 3c3258ab9..a80bc446d 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt @@ -66,7 +66,11 @@ class AboutFragment : ViewBindingFragment() { binding.aboutCode.setOnClickListener { requireContext().openInBrowser(LINK_SOURCE) } binding.aboutWiki.setOnClickListener { requireContext().openInBrowser(LINK_WIKI) } binding.aboutLicenses.setOnClickListener { requireContext().openInBrowser(LINK_LICENSES) } - binding.aboutAuthor.setOnClickListener { requireContext().openInBrowser(LINK_AUTHOR) } + binding.aboutProfile.setOnClickListener { requireContext().openInBrowser(LINK_PROFILE) } + binding.aboutDonate.setOnClickListener { requireContext().openInBrowser(LINK_DONATE) } + binding.aboutSupportersPromo.setOnClickListener { + requireContext().openInBrowser(LINK_DONATE) + } // VIEWMODEL SETUP collectImmediately(musicModel.statistics, ::updateStatistics) @@ -88,13 +92,10 @@ class AboutFragment : ViewBindingFragment() { } private companion object { - /** The URL to the source code. */ const val LINK_SOURCE = "https://github.com/OxygenCobalt/Auxio" - /** The URL to the app wiki. */ const val LINK_WIKI = "$LINK_SOURCE/wiki" - /** The URL to the licenses wiki page. */ const val LINK_LICENSES = "$LINK_WIKI/Licenses" - /** The URL to the app author. */ - const val LINK_AUTHOR = "https://github.com/OxygenCobalt" + const val LINK_PROFILE = "https://github.com/OxygenCobalt" + const val LINK_DONATE = "https://github.com/sponsors/OxygenCobalt" } } diff --git a/app/src/main/res/drawable/ic_donate_24.xml b/app/src/main/res/drawable/ic_donate_24.xml new file mode 100644 index 000000000..2e40a458e --- /dev/null +++ b/app/src/main/res/drawable/ic_donate_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/fragment_about.xml b/app/src/main/res/layout/fragment_about.xml index ae6eb64ba..1088aff21 100644 --- a/app/src/main/res/layout/fragment_about.xml +++ b/app/src/main/res/layout/fragment_about.xml @@ -152,19 +152,92 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/about_wiki" /> + + + + + + + + + + - + + + + + + + + + + + + + + + + الإصدار عرض على الكود في Github التراخيص - تمت برمجة التطبيق من قبل الكساندر كابيهارت + تمت برمجة التطبيق من قبل الكساندر كابيهارت الإعدادات المظهر diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 28a0b7797..3a7d1044b 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -10,7 +10,7 @@ Персаналізаваць Адсочванне змяненняў у вашай музычнай бібліятэцы… Дададзены ў чаргу - Распрацавана Аляксандрам Кейпхартам + Распрацавана Аляксандрам Кейпхартам Карыстальніцкае дзеянне панэлі прайгравання Прайграць з альбома Коска (,) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 57d8ea84a..c62df4253 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -49,7 +49,7 @@ Verze Zdrojový kód Licence - Vytvořil Alexander Capehart + Vytvořil Alexander Capehart Statistiky knihovny Nastavení diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 32626f27c..2714faddd 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -32,7 +32,7 @@ Version Quellcode Lizenzen - Entwickelt von Alexander Capehart + Entwickelt von Alexander Capehart Einstellungen Erscheinungsbild diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index fbf304499..08dfc0973 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -40,7 +40,7 @@ Versión Código fuente Licencias - Desarrollado por Alexander Capehart + Desarrollado por Alexander Capehart Ajustes Aspecto y Comportamiento diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 0bbdde9ec..95271d9ff 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -155,7 +155,7 @@ Tarkkaillaan musiikkikirjastoa Lähdekoodi - Kehittänyt Alexander Capehart + Kehittänyt Alexander Capehart Kesto yhteensä: %s Live-albumi Remix-albumi diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml index bc3ad9dc4..b65baaf8f 100644 --- a/app/src/main/res/values-fil/strings.xml +++ b/app/src/main/res/values-fil/strings.xml @@ -59,7 +59,7 @@ Ulat Tignan sa GitHub Mga Lisensya - Binuo ni OxygenCobalt + Binuo ni OxygenCobalt Istatistika ng library Mga Setting Hitsura diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index eaacbbc02..9fd021428 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -26,7 +26,7 @@ Version Code source Licences - Développé par Alexandre Capehart + Développé par Alexandre Capehart Paramètres Apparence diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index d1a992526..50748355f 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -126,7 +126,7 @@ Frecuencia de mostraxe Acerca de Monitorizando cambios na túa biblioteca… - Desenvolvido por Alexander Capehart + Desenvolvido por Alexander Capehart Aspecto e sensación Modo redondo Habilita as esquinas redondeadas en elementos adicionais da interface de usuario (require que as portadas dos álbums estean redondeadas) diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index d29a3564e..87d236503 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -177,7 +177,7 @@ शफल करें स्थिति बहाल प्लेलिस्ट का नाम बदला गया - अलेक्जेंडर कैपहार्ट द्वारा विकसित + अलेक्जेंडर कैपहार्ट द्वारा विकसित एकाधिक टैग मानों को निरूपित करने वाले वर्ण कॉन्फ़िगर करें अल्पविराम (,) स्लैश (/) diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 0aa0251a7..cadb7a570 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -56,7 +56,7 @@ Inačica Izvorni kod Licencije - Programer: Alexander Capehart + Programer: Alexander Capehart Statistika zbirke Izgled Svjetla diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index ad272228a..a994adbda 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -170,7 +170,7 @@ Ment Alaphelyzet Állapot törölve - Fejlesztő Alexander Capehart + Fejlesztő Alexander Capehart Lejátszás az összes dalból Lejátszás műfajból Tartalom diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 05c65a556..707c86f24 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -79,7 +79,7 @@ Disk Lihat properti Format - Dikembangkan oleh Alexander Capehart + Dikembangkan oleh Alexander Capehart Statistik pustaka Tindakan notifikasi khusus Acak diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 68d67a9de..53fc707cd 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -40,7 +40,7 @@ Versione Codice sorgente Licenze - Sviluppato da Alexander Capehart + Sviluppato da Alexander Capehart Statistiche libreria Opzioni diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index ecdb73c14..df16c74a2 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -66,7 +66,7 @@ ספריית המוזיקה שלך נטענת… ספריית המוזיקה שלך נסרקת לאיתור שינויים… התווסף לתור - מפותח על ידי אלכסנדר קייפהארט + מפותח על ידי אלכסנדר קייפהארט חיפוש בספרייה שלך… מראה ותחושה שינוי ערכת הנושא והצבעים של היישום diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index e3b8dc43c..fd4e11299 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -118,7 +118,7 @@ アルバムに移動 曲のプロパティ 再生待ちに追加 - 開発者 アレクサンダー・ケイプハート (Alexander Capehart) + 開発者 アレクサンダー・ケイプハート (Alexander Capehart) %s のアーティスト画像 オムニバス オムニバス diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 78848acd3..7efc46d01 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -47,7 +47,7 @@ 버전 소스 코드 라이선스 - Alexander Capehart가 개발 + Alexander Capehart가 개발 라이브러리 통계 설정 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index da150c3ea..3fa2e9b91 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -122,7 +122,7 @@ Gyvai Visada pradėti groti, kai ausinės yra prijungtos (gali neveikti visuose įrenginiuose) Ogg garsas - Sukūrė Alexanderis Capehartas (angl. Alexander Capehart) + Sukūrė Alexanderis Capehartas (angl. Alexander Capehart) Pageidauti takelį Jokių aplankų Šis aplankas nepalaikomas diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 230f1fe37..85c0607ee 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -202,7 +202,7 @@ Spor Dato tillagt Sorter - Utviklet av Alexander Capehart + Utviklet av Alexander Capehart Søk i biblioteket ditt … Innstillinger Spilleliste opprettet diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 8c760d532..7f3ea75d0 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -35,7 +35,7 @@ Versie Broncode Licenties - Ontwikkeld door Alexander Capehart + Ontwikkeld door Alexander Capehart Instellingen Uiterlijk en gevoel diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 6176826db..c720d353b 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -84,7 +84,7 @@ ਸੰਗੀਤ ਪਲੇਬੈਕ ਵੇਖੋ ਅਤੇ ਕੰਟਰੋਲ ਕਰੋ ਤੁਹਾਡੀ ਸੰਗੀਤ ਲਾਇਬ੍ਰੇਰੀ ਨੂੰ ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ… ਕਤਾਰ ਵਿੱਚ ਸ਼ਾਮਿਲ ਕੀਤਾ - ਅਲੈਗਜ਼ੈਂਡਰ ਕੇਪਹਾਰਟ ਦੁਆਰਾ ਵਿਕਸਿਤ + ਅਲੈਗਜ਼ੈਂਡਰ ਕੇਪਹਾਰਟ ਦੁਆਰਾ ਵਿਕਸਿਤ ਆਪਣੀ ਲਾਇਬ੍ਰੇਰੀ ਖੋਜੋ… ਸੈਟਿੰਗਾਂ ਦਿੱਖ ਅਤੇ ਛੋਹ diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index fa4993f8d..02c6dd410 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -147,7 +147,7 @@ DJ Mix Przejdź do ostatniego utworu Przejdź do następnego utworu - Autorstwa Alexandra Capeharta + Autorstwa Alexandra Capeharta Zaokrąglone krawędzie Włącz zaokrąglone rogi na dodatkowych elementach interfejsu (wymaga zaokrąglenia okładek albumów) Akcja na pasku odtwarzania diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 366aa1e2e..a0f817cae 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -25,7 +25,7 @@ Versão Código-fonte Licenças - Desenvolvido por Alexander Capehart + Desenvolvido por Alexander Capehart Configurações Visualização e Aparência diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 2fa1582f3..1011bf65d 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -26,7 +26,7 @@ Versão Código fonte Licenças - Desenvolvido por Alexander Capehart + Desenvolvido por Alexander Capehart Definições Aparência diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 3ad8ebd47..e55370394 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -26,7 +26,7 @@ Versiune Cod sursă Licențe - Dezvoltat de Alexander Capehart + Dezvoltat de Alexander Capehart Setări Aspect și caracteristici diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index cb7dd1a08..e0a785ced 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -40,7 +40,7 @@ Версия Исходный код Лицензии - Разработано Александром Кейпхартом + Разработано Александром Кейпхартом Настройки Внешний вид diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 1cbd74549..08fc56f5c 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -128,7 +128,7 @@ Glasba Ta mapa ni podprta Obnovi prej shranjeno stanje predvajanja (če obstaja) - Razvil Alexander Capehart + Razvil Alexander Capehart Odstrani mapo Kopirano Nalaganje glasbe ni uspelo diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 2c9a072cb..5485d4eb9 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -107,7 +107,7 @@ Statistik över beroende Byt namn av spellista Spellista tog bort - Utvecklad av Alexander Capeheart + Utvecklad av Alexander Capeheart Tema Mörkt Färgschema diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 68997f497..16eacfc8a 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -78,7 +78,7 @@ Yıl Süre Durum kaydedildi - Alexander Capehart tarafından geliştirildi + Alexander Capehart tarafından geliştirildi Siyah tema Kitaplık istatistikleri Kapkara koyu tema kullan diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 9d8b54c34..c14a92f56 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -130,7 +130,7 @@ Концертний мініальбом Статистика бібліотеки Завантаження музичної бібліотеки… - Розроблено Олександром Кейпхартом + Розроблено Олександром Кейпхартом Завантажено виконавців: %d Автоматично Кольоровий акцент diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index e0449d0bd..9991f91d0 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -40,7 +40,7 @@ 版本 源代码 许可证 - 由 Alexander Capehart 开发 + 由 Alexander Capehart 开发 设置 外观和感觉 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 045965a4d..241b71838 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -146,6 +146,8 @@ Size Bit rate Sample rate + ReplayGain Track Adjustment + ReplayGain Album Adjustment Shuffle @@ -189,6 +191,11 @@ Report + Author + Alexander Capehart + Donate + Supporters + @@ -202,7 +209,7 @@ Playlist exported Playlist deleted Added to playlist - Developed by Alexander Capehart + Donate to the project to get your name added here! Search your library… diff --git a/fastlane/metadata/android/en-US/changelogs/38.txt b/fastlane/metadata/android/en-US/changelogs/38.txt new file mode 100644 index 000000000..8c0701516 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/38.txt @@ -0,0 +1,3 @@ +Auxio 3.3.1 adds the ability to import and export playlists, skip gestures, and fixes/improvements to the music loader. +This release fixes a critical bug with the music loader, among other issues. +For more information, see https://github.com/OxygenCobalt/Auxio/releases/tag/v3.3.1 \ No newline at end of file