Translations update from Hosted Weblate (#524)

* weather: introduce display precipitation

Introduce a new datatype called DisplayPrecipitation that optimizes the
precipitation level for UI display.

This is primarily meant to fix improper precipitation displays when
values lower than 0.1 in are shown, albiet that may need to change
eventually.

* Translated using Weblate (Hindi)

Currently translated at 100.0% (283 of 283 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/hi/

* Translated using Weblate (Lithuanian)

Currently translated at 100.0% (283 of 283 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/lt/

* Translated using Weblate (Punjabi)

Currently translated at 100.0% (283 of 283 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/pa/

* Translated using Weblate (Punjabi)

Currently translated at 100.0% (36 of 36 strings)

Translation: Auxio/Metadata
Translate-URL: https://hosted.weblate.org/projects/auxio/metadata/pa/

* Translated using Weblate (Hindi)

Currently translated at 100.0% (36 of 36 strings)

Translation: Auxio/Metadata
Translate-URL: https://hosted.weblate.org/projects/auxio/metadata/hi/

* Translated using Weblate (Spanish)

Currently translated at 100.0% (283 of 283 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/es/

* Translated using Weblate (Polish)

Currently translated at 100.0% (283 of 283 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/pl/

* Translated using Weblate (Finnish)

Currently translated at 93.2% (264 of 283 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/fi/

---------

Co-authored-by: Alexander Capehart <alex@oxycblt.org>
Co-authored-by: ShareASmile <aapshergill@gmail.com>
Co-authored-by: Vaclovas Intas <vaclovas1999@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Co-authored-by: Jiri Grönroos <jiri.gronroos@iki.fi>
This commit is contained in:
Weblate (bot) 2023-07-26 01:36:09 +02:00 committed by Alexander Capehart
parent a1947c4102
commit 816ab04252
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
12 changed files with 223 additions and 65 deletions

View file

@ -192,7 +192,7 @@ class AlbumDetailFragment :
override fun onShuffle() {
playbackModel.shuffle(unlikelyToBeNull(detailModel.currentAlbum.value))
}
override fun onOpenSortMenu() {
findNavController().navigateSafe(AlbumDetailFragmentDirections.sort())
}

View file

@ -0,0 +1,88 @@
/*
* Copyright (c) 2023 Auxio Project
* SortAdapter.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 <https://www.gnu.org/licenses/>.
*/
package org.oxycblt.auxio.list.sort
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import org.oxycblt.auxio.databinding.ItemSortModeBinding
import org.oxycblt.auxio.list.Sort
import org.oxycblt.auxio.list.adapter.FlexibleListAdapter
import org.oxycblt.auxio.util.inflater
class SortAdapter(var selectedMode: Sort.Mode) :
FlexibleListAdapter<Sort.Mode, SortModeViewHolder>(SortModeViewHolder.DIFF_CALLBACK) {
var currentlySelected = selectedMode
private set
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
SortModeViewHolder.from(parent)
override fun onBindViewHolder(holder: SortModeViewHolder, position: Int) {
throw NotImplementedError()
}
override fun onBindViewHolder(holder: SortModeViewHolder, position: Int, payload: List<Any>) {
val mode = getItem(position)
if (payload.isEmpty()) {
holder.bind(mode)
}
holder.setSelected(mode == currentlySelected)
}
fun setSelected(mode: Sort.Mode) {
if (mode == currentlySelected) return
val oldMode = currentList.indexOf(currentlySelected)
val newMode = currentList.indexOf(mode)
currentlySelected = selectedMode
notifyItemChanged(oldMode, PAYLOAD_SELECTION_CHANGED)
notifyItemChanged(newMode, PAYLOAD_SELECTION_CHANGED)
}
private companion object {
val PAYLOAD_SELECTION_CHANGED = Any()
}
}
class SortModeViewHolder private constructor(private val binding: ItemSortModeBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(mode: Sort.Mode) {
// TODO: Add names to sort.mode
binding.sortRadio.text = mode.toString()
}
fun setSelected(selected: Boolean) {
binding.sortRadio.isChecked = selected
}
companion object {
fun from(parent: View) =
SortModeViewHolder(ItemSortModeBinding.inflate(parent.context.inflater))
val DIFF_CALLBACK =
object : DiffUtil.ItemCallback<Sort.Mode>() {
override fun areItemsTheSame(oldItem: Sort.Mode, newItem: Sort.Mode) =
oldItem == newItem
override fun areContentsTheSame(oldItem: Sort.Mode, newItem: Sort.Mode) =
oldItem == newItem
}
}
}

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2023 Auxio Project
* SortDialog.kt is part of Auxio.
* MenuDialogFragment.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
@ -16,74 +16,126 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.oxycblt.auxio.list.sort
package org.oxycblt.auxio.list.menu
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.LayoutInflater
import androidx.core.view.updatePadding
import android.view.MenuInflater
import android.view.MenuItem
import androidx.appcompat.view.menu.MenuBuilder
import androidx.core.view.children
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.RecyclerView
import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.DialogSortBinding
import org.oxycblt.auxio.databinding.DialogMenuBinding
import org.oxycblt.auxio.list.ClickableListListener
import org.oxycblt.auxio.list.Sort
import org.oxycblt.auxio.list.ListViewModel
import org.oxycblt.auxio.list.Menu
import org.oxycblt.auxio.list.adapter.UpdateInstructions
import org.oxycblt.auxio.ui.ViewBindingBottomSheetDialogFragment
import org.oxycblt.auxio.util.systemBarInsetsCompat
import org.oxycblt.auxio.util.collectImmediately
import org.oxycblt.auxio.util.logD
abstract class SortDialog :
ViewBindingBottomSheetDialogFragment<DialogSortBinding>(), ClickableListListener<Sort.Mode> {
private val modeAdapter = SortModeAdapter(this)
/**
* A [ViewBindingBottomSheetDialogFragment] that displays basic music information and a series of
* options.
*
* @author Alexander Capehart (OxygenCobalt)
*
* TODO: Extend the amount of music info shown in the dialog
*/
abstract class MenuDialogFragment<M : Menu> :
ViewBindingBottomSheetDialogFragment<DialogMenuBinding>(), ClickableListListener<MenuItem> {
protected abstract val menuModel: MenuViewModel
protected abstract val listModel: ListViewModel
private val menuAdapter = MenuItemAdapter(@Suppress("LeakingThis") this)
abstract fun getInitialSort(): Sort
abstract val parcel: Menu.Parcel
abstract fun applyChosenSort(sort: Sort)
/**
* Get the options to disable in the context of the currently shown [M].
*
* @param menu The currently-shown menu [M].
*/
abstract fun getDisabledItemIds(menu: M): Set<Int>
abstract fun getModeChoices(): List<Sort.Mode>
/**
* Update the displayed information about the currently shown [M].
*
* @param binding The [DialogMenuBinding] to bind information to.
* @param menu The currently-shown menu [M].
*/
abstract fun updateMenu(binding: DialogMenuBinding, menu: M)
override fun onCreateBinding(inflater: LayoutInflater) = DialogSortBinding.inflate(inflater)
/**
* Forward the clicked [MenuItem] to it's corresponding handler in another module.
*
* @param item The [MenuItem] that was clicked.
* @param menu The currently-shown menu [M].
*/
abstract fun onClick(item: MenuItem, menu: M)
override fun onBindingCreated(binding: DialogSortBinding, savedInstanceState: Bundle?) {
override fun onCreateBinding(inflater: LayoutInflater) = DialogMenuBinding.inflate(inflater)
override fun onBindingCreated(binding: DialogMenuBinding, savedInstanceState: Bundle?) {
super.onBindingCreated(binding, savedInstanceState)
// --- UI SETUP ---
binding.root.setOnApplyWindowInsetsListener { v, insets ->
v.updatePadding(bottom = insets.systemBarInsetsCompat.bottom)
insets
binding.menuName.isSelected = true
binding.menuInfo.isSelected = true
binding.menuOptionRecycler.apply {
adapter = menuAdapter
itemAnimator = null
}
binding.sortModeRecycler.adapter = modeAdapter
// --- VIEWMODEL SETUP ---
listModel.menu.consume()
menuModel.setMenu(parcel)
collectImmediately(menuModel.currentMenu, this::updateMenu)
}
binding.sortCancel.setOnClickListener { dismiss() }
override fun onDestroyBinding(binding: DialogMenuBinding) {
super.onDestroyBinding(binding)
binding.menuName.isSelected = false
binding.menuInfo.isSelected = false
binding.menuOptionRecycler.adapter = null
}
binding.sortSave.setOnClickListener {
val initial = getInitialSort()
// FIXME: This won't work for the playlist sort dialog.
val mode = modeAdapter.currentMode ?: initial.mode
val direction =
when (binding.sortDirectionGroup.checkedButtonId) {
R.id.sort_direction_asc -> Sort.Direction.ASCENDING
R.id.sort_direction_dsc -> Sort.Direction.DESCENDING
else -> initial.direction
}
applyChosenSort(Sort(mode, direction))
dismiss()
private fun updateMenu(menu: Menu?) {
if (menu == null) {
logD("No menu to show, navigating away")
findNavController().navigateUp()
return
}
// --- STATE SETUP ---
val initial = getInitialSort()
@Suppress("UNCHECKED_CAST") val casted = menu as? M
check(casted != null) { "Unexpected menu instance ${menu::class.simpleName}" }
modeAdapter.update(getModeChoices(), UpdateInstructions.Diff)
modeAdapter.setSelected(initial.mode)
// We need to inflate the menu on every menu update since it might have changed
// what options are available (ex. if an artist with no songs has had new songs added).
// Since we don't have (and don't want) a dummy view to inflate this menu, just
// depend on the AndroidX Toolbar internal API and hope for the best.
@SuppressLint("RestrictedApi") val builder = MenuBuilder(requireContext())
MenuInflater(requireContext()).inflate(casted.res, builder)
val directionId =
when (initial.direction) {
Sort.Direction.ASCENDING -> R.id.sort_direction_asc
Sort.Direction.DESCENDING -> R.id.sort_direction_dsc
// Disable any menu options as specified by the impl
val disabledIds = getDisabledItemIds(casted)
val visible =
builder.children.mapTo(mutableListOf()) {
it.isEnabled = !disabledIds.contains(it.itemId)
it
}
binding.sortDirectionGroup.check(directionId)
menuAdapter.update(visible, UpdateInstructions.Diff)
// Delegate to impl how to show music
updateMenu(requireBinding(), casted)
}
override fun onClick(item: Sort.Mode, viewHolder: RecyclerView.ViewHolder) {
modeAdapter.setSelected(item)
final override fun onClick(item: MenuItem, viewHolder: RecyclerView.ViewHolder) {
// All option selections close the dialog currently.
// TODO: This should change if the app is 100% migrated to menu dialogs
findNavController().navigateUp()
// Delegate to impl on how to handle items
@Suppress("UNCHECKED_CAST") onClick(item, menuModel.currentMenu.value as M)
}
}
}

View file

@ -210,6 +210,9 @@
<action
android:id="@+id/play_from_genre"
app:destination="@id/play_from_genre_dialog" />
<action
android:id="@+id/sort"
app:destination="@id/sort_dialog" />
</fragment>
<dialog
@ -460,4 +463,10 @@
android:name="parcel"
app:argType="org.oxycblt.auxio.list.Menu$ForPlaylist$Parcel" />
</dialog>
<dialog
android:id="@+id/sort_dialog"
android:name="org.oxycblt.auxio.list.sort.SortDialog"
android:label="sort_dialog"
tools:layout="@layout/dialog_sort" />
</navigation>

View file

@ -303,4 +303,5 @@
<string name="set_square_covers_desc">Recorta todas las portadas de los álbumes a una relación de aspecto 1:1</string>
<string name="lbl_song">Canción</string>
<string name="lbl_parent_detail">Vista</string>
<string name="set_play_song_by_itself">Reproducir la canción por tí mismo</string>
</resources>

View file

@ -271,4 +271,6 @@
<string name="set_reindex_desc">Lataa musiikkikirjasto uudelleen, käytä välimuistissa olevia tunnisteita kun mahdollista</string>
<string name="set_square_covers_desc">Rajaa kaikki albumikannet 1:1-suhteeseen</string>
<string name="set_rescan_desc">Tyhjennä tunnistevälimuisti ja lataa musiikkikirjasto kokonaan uudelleen (hitaampi mutta kattavampi)</string>
<string name="lbl_song">Kappale</string>
<string name="lbl_parent_detail">Näytä</string>
</resources>

View file

@ -187,7 +187,7 @@
<string name="set_separators_slash">स्लैश (/)</string>
<string name="fmt_db_neg">-%.1f dB</string>
<string name="fmt_editing">संपादन %s</string>
<string name="set_separators_plus">Plus (+)</string>
<string name="set_separators_plus">पलॅस (+)</string>
<string name="set_separators_and">ऐंपरसैंड (&amp;)</string>
<string name="set_dirs_mode">मोड</string>
<string name="desc_no_cover">एल्बम कवर</string>
@ -298,4 +298,5 @@
<string name="clr_pink">गुलाबी</string>
<string name="set_intelligent_sorting">बुद्धिमान छंटाई</string>
<string name="set_intelligent_sorting_desc">संख्याओं या \"the\" जैसे शब्दों से शुरू होने वाले नामों को सही ढंग से क्रमबद्ध करें (अंग्रेजी भाषा के संगीत के साथ सबसे अच्छा काम करता है)</string>
<string name="set_play_song_by_itself">इसी गीत को चलाएं</string>
</resources>

View file

@ -9,7 +9,7 @@
<string name="lbl_name">Pavadinimas</string>
<string name="lbl_date">Metai</string>
<string name="lbl_duration">Trukmė</string>
<string name="lbl_song_count">Dainų skaičius</string>
<string name="lbl_song_count">Dainos skaičius</string>
<string name="lbl_disc">Diskas</string>
<string name="lbl_date_added">Pridėta data</string>
<string name="lbl_sort_asc">Didėjantis</string>
@ -48,7 +48,7 @@
<string name="set_black_mode_desc">Naudoti grynai juodą tamsią temą</string>
<string name="info_app_desc">Paprastas, racionalus Android muzikos grotuvas.</string>
<string name="lbl_indexer">Muzika kraunama</string>
<string name="lng_widget">Peržiūrėti ir valdyti muzikos grojimą</string>
<string name="lng_widget">Peržiūrėk ir valdyk muzikos grojimą</string>
<string name="lbl_genres">Žanrai</string>
<string name="lbl_retry">Pakartoti</string>
<string name="lbl_grant">Suteikti</string>
@ -74,8 +74,8 @@
<string name="lbl_observing">Stebėjimas muzikos biblioteka</string>
<string name="lng_observing">Stebima tavo muzikos biblioteko dėl pakeitimų…</string>
<string name="lbl_shuffle_shortcut_short">Maišyti</string>
<string name="lbl_shuffle_shortcut_long">Išmaišyti viską</string>
<string name="lbl_state_restored">Būsena atkurta</string>
<string name="lbl_shuffle_shortcut_long">Maišyti viską</string>
<string name="lbl_state_restored">Atkurta būsena</string>
<string name="lbl_state_saved">Išsaugota būsena</string>
<string name="lbl_cancel">Atšaukti</string>
<string name="lbl_code">Šaltinio kodas</string>
@ -203,7 +203,7 @@
<string name="err_did_not_restore">Nepavyko atkurti būsenos</string>
<string name="set_pre_amp">ReplayGain išankstinis stiprintuvas</string>
<string name="set_save_state">Išsaugoti grojimo būseną</string>
<string name="set_dirs_desc">Tvarkyk, kur muzika turėtų būti įkeliama iš</string>
<string name="set_dirs_desc">Tvarkyti, kur muzika turėtų būti įkeliama iš</string>
<string name="desc_genre_image">Žanro vaizdas %s</string>
<string name="desc_shuffle">Įjungti maišymą arba išjungti</string>
<string name="desc_track_number">Takelis %d</string>
@ -257,10 +257,10 @@
<string name="lbl_reset">Nustatyti iš naujo</string>
<string name="set_library">Biblioteka</string>
<string name="set_behavior">Elgesys</string>
<string name="set_ui_desc">Pakeisti programos temą ir spalvas</string>
<string name="set_ui_desc">Pakeisk programos temą ir spalvas</string>
<string name="set_content_desc">Valdyk, kaip muzika ir vaizdai įkeliami</string>
<string name="set_audio_desc">Konfigūruok garso ir grojimo elgesį</string>
<string name="set_personalize_desc">Pritaikyti UI valdiklius ir elgseną</string>
<string name="set_personalize_desc">Pritaikyk UI valdiklius ir elgseną</string>
<string name="set_music">Muzika</string>
<string name="set_images">Vaizdai</string>
<string name="set_playback">Grojimas</string>
@ -275,10 +275,10 @@
<string name="desc_playlist_image">Grojaraščio vaizdas %s</string>
<string name="desc_new_playlist">Sukurti naują grojaraštį</string>
<string name="lbl_new_playlist">Naujas grojaraštis</string>
<string name="lbl_playlist_add">Įtraukti į grojaraštį</string>
<string name="lbl_playlist_add">Pridėti į grojaraštį</string>
<string name="lng_playlist_added">Pridėta į grojaraštį</string>
<string name="lbl_delete">Ištrinti</string>
<string name="fmt_deletion_info">Ištrinti %s\? To negalima atšaukti.</string>
<string name="fmt_deletion_info">Ištrinti %s\? To negalima atkurti.</string>
<string name="lbl_rename">Pervadinti</string>
<string name="lbl_rename_playlist">Pervadinti grojaraštį</string>
<string name="lbl_confirm_delete_playlist">Ištrinti grojaraštį\?</string>

View file

@ -291,4 +291,5 @@
<string name="set_square_covers_desc">ਸਾਰੇ ਐਲਬਮ ਕਵਰਾਂ ਨੂੰ 1:1 ਦੇ ਆਕਾਰ ਅਨੁਪਾਤ ਤੱਕ ਕਾਂਟ-ਛਾਂਟ ਕਰੋ</string>
<string name="lbl_song">ਗੀਤ</string>
<string name="lbl_parent_detail">ਵੇਖੋ</string>
<string name="set_play_song_by_itself">ਇਸੇ ਗੀਤ ਨੂੰ ਚਲਾਓ</string>
</resources>

View file

@ -302,4 +302,7 @@
<string name="fmt_editing">Edytowanie %s</string>
<string name="set_square_covers_desc">Przytnij okładki do formatu 1:1</string>
<string name="set_square_covers">Wymuś kwadratowe okładki</string>
<string name="lbl_song">Piosenka</string>
<string name="set_play_song_by_itself">Odtwarzanie utworu samodzielnie</string>
<string name="lbl_parent_detail">Widok</string>
</resources>

View file

@ -1,9 +1,9 @@
Auxio एक तेज़, विश्वसनीय UI/UX वाला एक स्थानीय संगीत प्लेयर है, जिसमें अन्य संगीत प्लेयर में मौजूद कई बेकार सुविधाएँ नहीं हैं। एक्सोप्लेयर से निर्मित, औक्सियो में पुराने एंड्रॉइड कार्यक्षमता का उपयोग करने वाले अन्य ऐप्स की तुलना में बेहतर पुस्तकालय समर्थन और सुनने की गुणवत्ता है। संक्षेप में,
Auxio एक तेज़, विश्वसनीय UI/UX वाला एक स्थानीय संगीत प्लेयर है, जिसमें अन्य संगीत प्लेयर में मौजूद कई बेकार सुविधाएँ नहीं हैं। आधुनिक मीडिया प्लेबैक लाइब्रेरीओं से निर्मित, औक्सियो में पुराने एंड्रॉइड कार्यक्षमता का उपयोग करने वाले अन्य ऐप्स की तुलना में बेहतर पुस्तकालय समर्थन और सुनने की गुणवत्ता है। संक्षेप में,
<b>यह संगीत बजाता है</b>.
<b>विशेषताएं</b>
- ExoPlayer-आधारित प्लेबैक
- मीडिया3 एक्सोप्लेयर आधारित प्लेबैक
- नवीनतम मटीरियल डिज़ाइन दिशानिर्देशों से प्राप्त स्नैपी UI
- ओपिनियनेटेड UX जो ओवर एज केस के उपयोग को प्राथमिकता देता है
- अनुकूलन योग्य व्यवहार
@ -13,7 +13,7 @@ Auxio एक तेज़, विश्वसनीय UI/UX वाला एक
- विश्वसनीय प्लेलिस्टिंग कार्यक्षमता
- प्लेबैक अवस्था दृढ़ता
- पूर्ण रीप्लेगैन समर्थन (MP3, FLAC, OGG, OPUS और MP4 फ़ाइलों पर)
- बाहरी तुल्यकारक समर्थन (उदा वेवलेट)
- बाहरी तुल्यकारक समर्थन (उदा: वेवलेट)
- एज-टू-एज
- एंबेडेड कवर समर्थन
- खोज कार्यक्षमता

View file

@ -1,22 +1,23 @@
Auxio ਇੱਕ ਤੇਜ਼, ਭਰੋਸੇਮੰਦ UI/UX ਵਾਲਾ ਇੱਕ ਸਥਾਨਕ ਸੰਗੀਤ ਪਲੇਅਰ ਹੈ ਜੋ ਦੂਜੇ ਸੰਗੀਤ ਪਲੇਅਰਾਂ ਵਿੱਚ ਮੌਜੂਦ ਬਹੁਤ ਸਾਰੀਆਂ ਬੇਕਾਰ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਤੋਂ ਬਿਨਾਂ ਹੈ। Exoplayer ਤੋਂ ਬਣਿਆ, Auxio ਕੋਲ ਪੁਰਾਣੀ ਐਂਡਰੌਇਡ ਕਾਰਜਕੁਸ਼ਲਤਾ ਦੀ ਵਰਤੋਂ ਕਰਨ ਵਾਲੀਆਂ ਹੋਰ ਐਪਾਂ ਦੇ ਮੁਕਾਬਲੇ ਵਧੀਆ ਲਾਇਬ੍ਰੇਰੀ ਸਹਾਇਤਾ ਅਤੇ ਸੁਣਨ ਦੀ ਗੁਣਵੱਤਾ ਹੈ। ਸੰਖੇਪ ਵਿੱਚ, <b>ਇਹ ਸੰਗੀਤ ਚਲਾਉਂਦਾ ਹੈ</b>.
Auxio ਇੱਕ ਤੇਜ਼, ਭਰੋਸੇਮੰਦ UI/UX ਵਾਲਾ ਇੱਕ ਸਥਾਨਕ ਸੰਗੀਤ ਪਲੇਅਰ ਹੈ ਜੋ ਦੂਜੇ ਸੰਗੀਤ ਪਲੇਅਰਾਂ ਵਿੱਚ ਮੌਜੂਦ ਬਹੁਤ ਸਾਰੀਆਂ ਬੇਕਾਰ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਤੋਂ ਬਿਨਾਂ ਹੈ। ਆਧੁਨਿਕ ਮੀਡੀਆ ਪਲੇਬੈਕ ਲਾਇਬ੍ਰੇਰੀਆਂ ਤੋਂ ਬਣਿਆ, Auxio ਕੋਲ ਪੁਰਾਣੀ ਐਂਡਰੌਇਡ ਕਾਰਜਕੁਸ਼ਲਤਾ ਦੀ ਵਰਤੋਂ ਕਰਨ ਵਾਲੀਆਂ ਹੋਰ ਐਪਾਂ ਦੇ ਮੁਕਾਬਲੇ ਵਧੀਆ ਲਾਇਬ੍ਰੇਰੀ ਸਹਾਇਤਾ ਅਤੇ ਸੁਣਨ ਦੀ ਗੁਣਵੱਤਾ ਹੈ। ਸੰਖੇਪ ਵਿੱਚ, <b>ਇਹ ਸੰਗੀਤ ਚਲਾਉਂਦਾ ਹੈ</b>.
<b>ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ</b>
- ExoPlayer-ਅਧਾਰਿਤ ਪਲੇਬੈਕ
- ਨਵੀਨਤਮ ਸਮੱਗਰੀ ਡਿਜ਼ਾਈਨ ਦਿਸ਼ਾ-ਨਿਰਦੇਸ਼ਾਂ ਤੋਂ ਲਿਆ ਗਿਆ Snappy UI
- ਮੀਡੀਆ 3 ਐਕਸੋਪਲੇਅਰ ਅਧਾਰਿਤ ਪਲੇਬੈਕ
- ਨਵੀਨਤਮ ਸਮੱਗਰੀ ਡਿਜ਼ਾਈਨ ਦਿਸ਼ਾ-ਨਿਰਦੇਸ਼ਾਂ ਤੋਂ ਲਿਆ ਗਿਆ ਚੁਸਤ-ਦਰੁਸਤ UI
- ਓਪੀਨੀਏਟਿਡ UX ਜੋ ਕਿ ਕਿਨਾਰੇ ਕੇਸਾਂ 'ਤੇ ਵਰਤੋਂ ਵਿੱਚ ਆਸਾਨੀ ਨੂੰ ਤਰਜੀਹ ਦਿੰਦਾ ਹੈ
- ਅਨੁਕੂਲਿਤ ਵਿਵਹਾਰ
- ਡਿਸਕ ਨੰਬਰਾਂ, ਮਲਟੀਪਲ ਕਲਾਕਾਰਾਂ, ਰੀਲੀਜ਼ ਕਿਸਮਾਂ, ਸਟੀਕ ਲਈ ਸਮਰਥਨ /ਮੂਲ ਤਾਰੀਖਾਂ, ਕ੍ਰਮਬੱਧ ਟੈਗਸ, ਅਤੇ ਹੋਰ
- ਉੱਨਤ ਕਲਾਕਾਰ ਪ੍ਰਣਾਲੀ ਜੋ ਕਲਾਕਾਰਾਂ ਅਤੇ ਐਲਬਮ ਕਲਾਕਾਰਾਂ ਨੂੰ ਇਕਜੁੱਟ ਕਰਦੀ ਹੈ
- SD ਕਾਰਡ-ਜਾਣੂ ਫੋਲਡਰ ਪ੍ਰਬੰਧਨ
- ਭਰੋਸੇਯੋਗ ਪਲੇਅਲਿਸਟਿੰਗ ਕਾਰਜਕੁਸ਼ਲਤਾ
- ਭਰੋਸੇਯੋਗ ਪਲੇਅਬੈਕ ਸਥਿਤੀ ਸਥਿਰਤਾ
- ਪੂਰਾ ਰੀਪਲੇਗੇਨ ਸਮਰਥਨ (MP3, FLAC, OGG, OPUS, ਅਤੇ MP4 ਫਾਈਲਾਂ 'ਤੇ)
- ਪੂਰਾ ਰੀਪਲੇਅ-ਗੇਨ ਸਮਰਥਨ (MP3, FLAC, OGG, OPUS, ਅਤੇ MP4 ਫਾਈਲਾਂ 'ਤੇ)
- ਬਾਹਰੀ ਈਕੋਲਾਈਜ਼ਰ ਦਾ ਸਮਰਥਨ (ਉਦਾਹਰਨ. ਵੇਵਲੇਟ)
- ਕਿਨਾਰੇ-ਤੋਂ-ਕਿਨਾਰੇ
- ਏਮਬੈਡਡ ਕਵਰ ਸਪੋਰਟ
- ਏਮਬੈਡਡ ਕਵਰ ਸਪੋਰਟ
- ਖੋਜ ਕਾਰਜਸ਼ੀਲਤਾ
- ਹੈੱਡਸੈੱਟ ਆਟੋਪਲੇ
- ਸਟਾਈਲਿਸ਼ ਵਿਜੇਟਸ ਜੋ ਆਪਣੇ ਆਪ ਉਹਨਾਂ ਦੇ ਆਕਾਰ ਦੇ ਅਨੁਕੂਲ ਬਣਦੇ ਹਨ
- ਪੂਰੀ ਤਰ੍ਹਾਂ ਨਿੱਜੀ ਅਤੇ ਫਲਾਈਨ
- ਕੋਈ ਗੋਲ ਐਲਬਮ ਕਵਰ ਨਹੀਂ (ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਉਹਨਾਂ ਨੂੰ ਨਹੀਂ ਚਾਹੁੰਦੇ ਹੋ। ਤੁਸੀਂ ਕਰ ਸਕਦੇ ਹੋ।)
- ਪੂਰੀ ਤਰ੍ਹਾਂ ਨਿੱਜੀ ਅਤੇ ਫਲਾਈਨ
- ਕੋਈ ਗੋਲ ਐਲਬਮ ਕਵਰ ਨਹੀਂ (ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਉਹਨਾਂ ਨੂੰ ਨਹੀਂ ਚਾਹੁੰਦੇ ਹੋ। ਤੁਸੀਂ ਕਰ ਸਕਦੇ ਹੋ।)