ui: rework rounded covers into round mode

Rework the rounded covers option into a new "Round Mode" option.

This commit extends the rounded corners configuration to now the
widget, thus making the setting apply now to covers, the bar, and
the widget configuration. This makes a naming change useful.
This commit is contained in:
OxygenCobalt 2022-07-01 20:06:54 -06:00
parent e41645ee28
commit 217ced8ade
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
31 changed files with 151 additions and 91 deletions

View file

@ -4,6 +4,7 @@
#### What's New
- Added a shuffle shortcut
- Reworked the button appearance on widgets
- You can now customize what occurs when a song is played from an album/artist/genre [#164]
#### What's Improved

View file

@ -61,7 +61,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
set(value) {
field = value
(background as? MaterialShapeDrawable)?.let { bg ->
if (settings.roundCovers) {
if (settings.roundMode) {
bg.setCornerSize(value)
} else {
bg.setCornerSize(0f)

View file

@ -160,7 +160,7 @@ private class IndexerNotification(private val context: Context) :
notificationManager.createNotificationChannel(channel)
}
setSmallIcon(R.drawable.ic_indexer_32)
setSmallIcon(R.drawable.ic_indexer_24)
setCategory(NotificationCompat.CATEGORY_PROGRESS)
setShowWhen(false)
setSilent(true)

View file

@ -27,6 +27,7 @@ import android.support.v4.media.session.MediaSessionCompat
import androidx.annotation.DrawableRes
import androidx.core.app.NotificationCompat
import androidx.media.app.NotificationCompat.MediaStyle
import okhttp3.internal.notify
import org.oxycblt.auxio.BuildConfig
import org.oxycblt.auxio.IntegerTable
import org.oxycblt.auxio.R
@ -35,6 +36,7 @@ import org.oxycblt.auxio.music.MusicParent
import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.playback.state.RepeatMode
import org.oxycblt.auxio.util.getSystemServiceSafe
import org.oxycblt.auxio.util.logD
import org.oxycblt.auxio.util.newBroadcastPendingIntent
import org.oxycblt.auxio.util.newMainPendingIntent
@ -94,24 +96,26 @@ class NotificationComponent(
/** Set the metadata of the notification using [song]. */
fun updateMetadata(song: Song, parent: MusicParent?) {
setContentTitle(song.resolveName(context))
setContentText(song.resolveIndividualArtistName(context))
// Starting in API 24, the subtext field changed semantics from being below the content
// text to being above the title.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
setSubText(parent?.resolveName(context) ?: context.getString(R.string.lbl_all_songs))
} else {
setSubText(song.album.resolveName(context))
}
provider.load(
song,
object : BitmapProvider.Target {
override fun onCompleted(bitmap: Bitmap?) {
logD("writing ${song.rawName} to notif")
setLargeIcon(bitmap)
build()
callback.onNotificationChanged(this@NotificationComponent)
setContentTitle(song.resolveName(context))
setContentText(song.resolveIndividualArtistName(context))
// Starting in API 24, the subtext field changed semantics from being below the
// content text to being above the title.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
setSubText(
parent?.resolveName(context)
?: context.getString(R.string.lbl_all_songs))
} else {
setSubText(song.album.resolveName(context))
}
callback.onNotificationChanged(song, this@NotificationComponent)
}
})
}
@ -120,7 +124,7 @@ class NotificationComponent(
fun updatePlaying(isPlaying: Boolean) {
mActions[2] = buildPlayPauseAction(context, isPlaying)
if (!provider.isBusy) {
callback.onNotificationChanged(this)
callback.onNotificationChanged(null, this)
}
}
@ -128,7 +132,7 @@ class NotificationComponent(
fun updateRepeatMode(repeatMode: RepeatMode) {
mActions[0] = buildRepeatAction(context, repeatMode)
if (!provider.isBusy) {
callback.onNotificationChanged(this)
callback.onNotificationChanged(null, this)
}
}
@ -136,7 +140,7 @@ class NotificationComponent(
fun updateShuffled(isShuffled: Boolean) {
mActions[0] = buildShuffleAction(context, isShuffled)
if (!provider.isBusy) {
callback.onNotificationChanged(this)
callback.onNotificationChanged(null, this)
}
}
@ -188,7 +192,7 @@ class NotificationComponent(
}
interface Callback {
fun onNotificationChanged(component: NotificationComponent)
fun onNotificationChanged(song: Song?, component: NotificationComponent)
}
companion object {

View file

@ -24,6 +24,7 @@ import android.content.Intent
import android.content.IntentFilter
import android.media.AudioManager
import android.os.IBinder
import androidx.core.app.NotificationCompat
import androidx.core.app.ServiceCompat
import com.google.android.exoplayer2.C
import com.google.android.exoplayer2.ExoPlayer
@ -310,9 +311,10 @@ class PlaybackService :
// --- NOTIFICATION CALLBACKS ---
override fun onNotificationChanged(component: NotificationComponent) {
override fun onNotificationChanged(song: Song?, component: NotificationComponent) {
if (hasPlayed && playbackManager.song != null) {
logD("Starting foreground/notifying")
logD("Starting foreground/notifying: ${song?.rawName}")
logD(NotificationCompat.getContentTitle(component.build()))
if (!isForeground) {
startForeground(IntegerTable.PLAYBACK_NOTIFICATION_CODE, component.build())

View file

@ -123,9 +123,9 @@ class Settings(private val context: Context, private val callback: Callback? = n
val useQualityCovers: Boolean
get() = inner.getBoolean(context.getString(R.string.set_key_quality_covers), false)
/** Whether to round album covers */
val roundCovers: Boolean
get() = inner.getBoolean(context.getString(R.string.set_key_round_covers), false)
/** Whether to round additional UI elements (including album covers) */
val roundMode: Boolean
get() = inner.getBoolean(context.getString(R.string.set_key_round_mode), false)
/** Whether to resume playback when a headset is connected (may not work well in all cases) */
val headsetAutoplay: Boolean

View file

@ -102,7 +102,7 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0) :
private val elevationNormal = context.getDimenSafe(R.dimen.elevation_normal)
private val cornersLarge =
if (Settings(context).roundCovers) {
if (Settings(context).roundMode) {
// Since album covers are rounded, we can also round the bar too.
context.getDimenSizeSafe(R.dimen.size_corners_large)
} else {

View file

@ -18,12 +18,14 @@
package org.oxycblt.auxio.widgets
import android.content.Context
import android.os.Build
import android.view.View
import android.widget.RemoteViews
import androidx.annotation.LayoutRes
import org.oxycblt.auxio.R
import org.oxycblt.auxio.playback.state.RepeatMode
import org.oxycblt.auxio.playback.system.PlaybackService
import org.oxycblt.auxio.settings.Settings
import org.oxycblt.auxio.util.newBroadcastPendingIntent
import org.oxycblt.auxio.util.newMainPendingIntent
@ -39,6 +41,7 @@ fun createDefaultWidget(context: Context) = createViews(context, R.layout.widget
*/
fun createThinWidget(context: Context, state: WidgetComponent.WidgetState) =
createViews(context, R.layout.widget_thin)
.applyRoundingToBackground(context)
.applyMeta(context, state)
.applyBasicControls(context, state)
/**
@ -48,6 +51,7 @@ fun createThinWidget(context: Context, state: WidgetComponent.WidgetState) =
*/
fun createSmallWidget(context: Context, state: WidgetComponent.WidgetState) =
createViews(context, R.layout.widget_small)
.applyRoundingToBar(context)
.applyCover(context, state)
.applyBasicControls(context, state)
@ -57,18 +61,21 @@ fun createSmallWidget(context: Context, state: WidgetComponent.WidgetState) =
*/
fun createMediumWidget(context: Context, state: WidgetComponent.WidgetState) =
createViews(context, R.layout.widget_medium)
.applyRoundingToBackground(context)
.applyMeta(context, state)
.applyBasicControls(context, state)
/** The wide widget is for Nx2 widgets and is like the small widget but with more controls. */
fun createWideWidget(context: Context, state: WidgetComponent.WidgetState) =
createViews(context, R.layout.widget_wide)
.applyRoundingToBar(context)
.applyCover(context, state)
.applyFullControls(context, state)
/** The large widget is for 3x4 widgets and shows all metadata and controls. */
fun createLargeWidget(context: Context, state: WidgetComponent.WidgetState): RemoteViews =
createViews(context, R.layout.widget_large)
.applyRoundingToBackground(context)
.applyMeta(context, state)
.applyFullControls(context, state)
@ -78,6 +85,26 @@ private fun createViews(context: Context, @LayoutRes layout: Int): RemoteViews {
return views
}
private fun RemoteViews.applyRoundingToBackground(context: Context): RemoteViews {
if (Settings(context).roundMode && Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
setInt(android.R.id.background, "setBackgroundResource", R.drawable.ui_widget_bg_round)
} else {
setInt(android.R.id.background, "setBackgroundResource", R.drawable.ui_widget_bg)
}
return this
}
private fun RemoteViews.applyRoundingToBar(context: Context): RemoteViews {
if (Settings(context).roundMode && Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
setInt(R.id.widget_controls, "setBackgroundResource", R.drawable.ui_widget_bg_round)
} else {
setInt(R.id.widget_controls, "setBackgroundResource", R.drawable.ui_widget_bar)
}
return this
}
private fun RemoteViews.applyMeta(
context: Context,
state: WidgetComponent.WidgetState

View file

@ -84,14 +84,23 @@ class WidgetComponent(private val context: Context) :
song,
object : BitmapProvider.Target {
override fun onConfigRequest(builder: ImageRequest.Builder): ImageRequest.Builder {
val cornerRadius =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
context.getDimenSizeSafe(android.R.dimen.system_app_widget_inner_radius)
} else if (settings.roundMode) {
context.getDimenSizeSafe(R.dimen.size_corners_large)
} else {
0
}
// The widget has two distinct styles that we must transform the album art to
// accommodate:
// - Before Android 12, the widget has hard edges, so we don't need to round
// out the album art.
// - After Android 12, the widget has round edges, so we need to round out
// the album art. I dislike this, but it's mainly for stylistic cohesion.
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
this@WidgetComponent.logD("Doing API 31 cover load")
return if (cornerRadius > 0) {
this@WidgetComponent.logD("Loading round covers: $cornerRadius")
val metrics = context.resources.displayMetrics
@ -101,11 +110,7 @@ class WidgetComponent(private val context: Context) :
builder
.transformations(
SquareFrameTransform.INSTANCE,
RoundedCornersTransformation(
context
.getDimenSizeSafe(
android.R.dimen.system_app_widget_inner_radius)
.toFloat()))
RoundedCornersTransformation(cornerRadius.toFloat()))
// The output of RoundedCornersTransformation is dimension-dependent,
// so scale up the image to the screen size to ensure consistent radii.
// Make sure we stop at 1024, so we don't accidentally make a massive
@ -145,7 +150,8 @@ class WidgetComponent(private val context: Context) :
override fun onRepeatChanged(repeatMode: RepeatMode) = update()
override fun onSettingChanged(key: String) {
if (key == context.getString(R.string.set_key_show_covers) ||
key == context.getString(R.string.set_key_quality_covers)) {
key == context.getString(R.string.set_key_quality_covers) ||
key == context.getString(R.string.set_key_round_mode)) {
update()
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 283 KiB

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@android:color/white" />
</shape>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@android:color/white" />
<corners android:radius="@dimen/spacing_medium" />
</shape>

View file

@ -4,7 +4,8 @@
android:id="@android:id/background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorSurface"
android:backgroundTint="?attr/colorSurface"
android:background="@drawable/ui_widget_bg"
android:theme="@style/Theme.Widget">
<!--
@ -72,11 +73,11 @@
android:id="@+id/widget_controls"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="@dimen/spacing_mid_small"
android:paddingTop="@dimen/spacing_medium"
android:paddingEnd="@dimen/spacing_mid_small"
android:paddingTop="@dimen/spacing_mid_small"
android:paddingBottom="@dimen/spacing_medium"
android:orientation="horizontal">
android:paddingBottom="@dimen/spacing_medium">
<android.widget.ImageButton
android:id="@+id/widget_repeat"
@ -104,13 +105,15 @@
android:layout_height="match_parent"
android:layout_weight="1" />
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
style="@style/Widget.Auxio.FloatingActionButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/sel_playing_state_24" />
android:src="@drawable/ic_pause_24" />
<android.widget.ImageView
android:layout_width="0dp"

View file

@ -4,7 +4,8 @@
android:id="@android:id/background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorSurface"
android:backgroundTint="?attr/colorSurface"
android:background="@drawable/ui_widget_bg"
android:theme="@style/Theme.Widget">
<!--
@ -70,11 +71,11 @@
android:id="@+id/widget_controls"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="@dimen/spacing_mid_small"
android:paddingTop="@dimen/spacing_medium"
android:paddingEnd="@dimen/spacing_mid_small"
android:paddingTop="@dimen/spacing_mid_small"
android:paddingBottom="@dimen/spacing_medium"
android:orientation="horizontal">
android:paddingBottom="@dimen/spacing_medium">
<android.widget.ImageButton
android:id="@+id/widget_skip_prev"
@ -89,13 +90,15 @@
android:layout_height="match_parent"
android:layout_weight="1" />
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
style="@style/Widget.Auxio.FloatingActionButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/sel_playing_state_24" />
android:src="@drawable/ic_pause_24" />
<android.widget.ImageView
android:layout_width="0dp"

View file

@ -61,7 +61,7 @@
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="center"
android:background="@drawable/ui_widget_panel"
android:background="@drawable/ui_widget_bar"
android:backgroundTint="?attr/colorSurface"
android:orientation="horizontal"
android:padding="@dimen/spacing_mid_small">
@ -79,14 +79,13 @@
android:layout_height="match_parent"
android:layout_weight="1" />
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
style="@style/Widget.Auxio.FloatingActionButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/sel_playing_state_24" />
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
style="@style/Widget.Auxio.FloatingActionButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/ic_pause_24" />
<android.widget.ImageView
android:layout_width="0dp"

View file

@ -4,7 +4,8 @@
android:id="@android:id/background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorSurface"
android:backgroundTint="?attr/colorSurface"
android:background="@drawable/ui_widget_bg"
android:baselineAligned="false"
android:orientation="horizontal"
android:theme="@style/Theme.Widget">
@ -89,13 +90,15 @@
</android.widget.LinearLayout>
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
style="@style/Widget.Auxio.FloatingActionButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/sel_playing_state_24" />
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
style="@style/Widget.Auxio.FloatingActionButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/ic_pause_24" />
</android.widget.LinearLayout>
</LinearLayout>

View file

@ -40,7 +40,7 @@
android:src="@drawable/ic_remote_default_cover_24"
tools:ignore="ContentDescription" />
<!-- See widget_small.xml for an explanation of the view layout -->
<!-- See widget_small.xml for an explanation of the view layout -->
<android.widget.LinearLayout
android:id="@+id/widget_controls"
@ -48,7 +48,7 @@
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="center"
android:background="@drawable/ui_widget_panel"
android:background="@drawable/ui_widget_bar"
android:backgroundTint="?attr/colorSurface"
android:orientation="horizontal"
android:padding="@dimen/spacing_mid_small">
@ -79,13 +79,14 @@
android:layout_height="match_parent"
android:layout_weight="1" />
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
style="@style/Widget.Auxio.FloatingActionButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/sel_playing_state_24" />
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
style="@style/Widget.Auxio.FloatingActionButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/ic_pause_24" />
<android.widget.ImageView
android:layout_width="0dp"

View file

@ -74,8 +74,8 @@
<string name="set_show_covers_desc">أطفاء لتقليل استخدام الذاكرة</string>
<string name="set_quality_covers">تجاهل اغلفة وسائط التخزين</string>
<string name="set_quality_covers_desc">يزيد من جودة غلاف الالبوم، لكن يؤذي إلى زيادة وقت التحميل واستخدام اعلى للذاكرة</string>
<string name="set_round_covers">اغلفة البوم مدورة</string>
<string name="set_round_covers_desc">جعل اغلفة الابومات ذات زوايا مدورة</string>
<string name="set_round_mode">اغلفة البوم مدورة</string>
<string name="set_round_mode_desc">جعل اغلفة الابومات ذات زوايا مدورة</string>
<string name="set_alt_action">استخدام نشاط بديل للإشعار</string>
<string name="set_alt_repeat">تفضيل نشاط وضع التكرار</string>
<string name="set_alt_shuffle">تفضيل نشاط الخلط</string>

View file

@ -84,8 +84,8 @@
<string name="set_show_covers_desc">Vypněte pro ušetření paměti</string>
<string name="set_quality_covers">Ignorovat obaly MediaStore</string>
<string name="set_quality_covers_desc">Zvýší kvalitu obalů alb, ale znamená také delší časy načítání a vyšší využití paměti</string>
<string name="set_round_covers">Zakulacené obaly alb</string>
<string name="set_round_covers_desc">Použít obaly alb se zakulacenými rohy</string>
<string name="set_round_mode">Zakulacené obaly alb</string>
<string name="set_round_mode_desc">Použít obaly alb se zakulacenými rohy</string>
<string name="set_alt_action">Použít alternativní akci oznámení</string>
<string name="set_alt_repeat">Preferovat akci režimu opakování</string>
<string name="set_alt_shuffle">Preferovat akci náhodného přehrávání</string>

View file

@ -66,8 +66,8 @@
<string name="set_show_covers_desc">Ausschalten um Speicherplatz zu sparen</string>
<string name="set_quality_covers">MediaStore Cover ignorieren</string>
<string name="set_quality_covers_desc">Verbesst die Albumcoverqualität, führt jedoch zu längeren Ladezeiten und höherem Speicherverbrauch</string>
<string name="set_round_covers">Abgerundete Cover</string>
<string name="set_round_covers_desc">Rundet Ecken der Cover ab</string>
<string name="set_round_mode">Abgerundete Cover</string>
<string name="set_round_mode_desc">Rundet Ecken der Cover ab</string>
<string name="set_alt_action">Alternative Aktionstaste verwenden</string>
<string name="set_alt_repeat">Wiederholen-Aktionstaste bevorzugen</string>
<string name="set_alt_shuffle">Zufällig-Aktionstaste bevorzugen</string>

View file

@ -74,8 +74,8 @@
<string name="set_show_covers_desc">Desactive para ahorrar memoria</string>
<string name="set_quality_covers">Ignorar carátulas de MediaStore</string>
<string name="set_quality_covers_desc">Incrementa la calidad de las carátulas, pero deriva en mayores tiempos de carga y uso de memoria</string>
<string name="set_round_covers">Carátulas redondeadas</string>
<string name="set_round_covers_desc">Usar carátulas redondeadas para los álbumes</string>
<string name="set_round_mode">Carátulas redondeadas</string>
<string name="set_round_mode_desc">Usar carátulas redondeadas para los álbumes</string>
<string name="set_alt_action">Usar acciones de notificación alternativas</string>
<string name="set_alt_repeat">Preferir acción de bucle</string>
<string name="set_alt_shuffle">Preferir acción de mezcla</string>

View file

@ -74,8 +74,8 @@
<string name="set_show_covers_desc">Disattiva per ridurre il consumo di memoria</string>
<string name="set_quality_covers">Ignora copertine MediaStore</string>
<string name="set_quality_covers_desc">Migliora la qualità delle copertine, ma comporta maggiori tempi di caricamento e consumo di memoria</string>
<string name="set_round_covers">Copertine dischi arrotondate</string>
<string name="set_round_covers_desc">Usa copertine dischi con angoli arrotondati</string>
<string name="set_round_mode">Copertine dischi arrotondate</string>
<string name="set_round_mode_desc">Usa copertine dischi con angoli arrotondati</string>
<string name="set_alt_action">Usa azioni notifica alternative</string>
<string name="set_alt_repeat">Preferisci azione modalità ripetizione</string>
<string name="set_alt_shuffle">Preferisci azione mescola</string>

View file

@ -82,8 +82,8 @@
<string name="set_show_covers_desc">이 옵션을 끄면 메모리 사용량을 줄일 수 있습니다.</string>
<string name="set_quality_covers">MediaStore 커버 무시</string>
<string name="set_quality_covers_desc">앨범 커버의 품질을 높일 수 있지만 메모리 사용량이 늘어나고 불러오는 시간이 더 오래 걸립니다.</string>
<string name="set_round_covers">둥근 앨범 커버 사용</string>
<string name="set_round_covers_desc">앨범 커버의 가장자리를 둥글게 표시</string>
<string name="set_round_mode">둥근 앨범 커버 사용</string>
<string name="set_round_mode_desc">앨범 커버의 가장자리를 둥글게 표시</string>
<string name="set_alt_action">다른 방식의 알림 동작 사용</string>
<string name="set_alt_repeat">반복 모드 동작 선호</string>
<string name="set_alt_shuffle">무작위 동작 선호</string>

View file

@ -74,8 +74,8 @@
<string name="set_show_covers_desc">Отключите для экономии памяти</string>
<string name="set_quality_covers">Игнорировать хранилище обложек</string>
<string name="set_quality_covers_desc">Улучшает качество обложек, но увеличивает время загрузки и использование памяти</string>
<string name="set_round_covers">Скруглённые обложки</string>
<string name="set_round_covers_desc">Показывать обложки со скруглёнными краями</string>
<string name="set_round_mode">Скруглённые обложки</string>
<string name="set_round_mode_desc">Показывать обложки со скруглёнными краями</string>
<string name="set_alt_action">Кнопка в уведомлении</string>
<string name="set_alt_repeat">Режим повтора</string>
<string name="set_alt_shuffle">Режим перемешивания</string>

View file

@ -73,8 +73,8 @@
<string name="set_show_covers_desc">关闭以节省内存使用</string>
<string name="set_quality_covers">忽略 MediaStore 封面</string>
<string name="set_quality_covers_desc">提升专辑封面质量,但需要更长的加载时间并消耗更多内存</string>
<string name="set_round_covers">专辑封面圆角</string>
<string name="set_round_covers_desc">使用圆角设计的专辑封面</string>
<string name="set_round_mode">专辑封面圆角</string>
<string name="set_round_mode_desc">使用圆角设计的专辑封面</string>
<string name="set_alt_action">使用替代通知操作方案</string>
<string name="set_alt_repeat">偏好重复播放操作</string>
<string name="set_alt_shuffle">偏好随机播放操作</string>

View file

@ -8,7 +8,7 @@
<string name="set_key_lib_tabs" translatable="false">auxio_lib_tabs</string>
<string name="set_key_show_covers" translatable="false">KEY_SHOW_COVERS</string>
<string name="set_key_quality_covers" translatable="false">KEY_QUALITY_COVERS</string>
<string name="set_key_round_covers" translatable="false">auxio_round_covers</string>
<string name="set_key_round_mode" translatable="false">auxio_round_covers</string>
<string name="set_key_alt_notif_action" translatable="false">KEY_ALT_NOTIF_ACTION</string>
<string name="set_key_headset_autoplay" translatable="false">auxio_headset_autoplay</string>

View file

@ -94,8 +94,8 @@
<string name="set_show_covers_desc">Turn off to save memory usage</string>
<string name="set_quality_covers">Ignore MediaStore covers</string>
<string name="set_quality_covers_desc">Increases album cover quality, but results in longer loading times and higher memory usage</string>
<string name="set_round_covers">Rounded album covers</string>
<string name="set_round_covers_desc">Use album covers with rounded corners</string>
<string name="set_round_mode">Round mode</string>
<string name="set_round_mode_desc">Enable rounded corners on additional UI elements (Requires album covers to be rounded)</string>
<string name="set_alt_action">Use alternate notification action</string>
<string name="set_alt_repeat">Prefer repeat mode action</string>
<string name="set_alt_shuffle">Prefer shuffle action</string>

View file

@ -58,9 +58,9 @@
<org.oxycblt.auxio.settings.ui.M3SwitchPreference
app:defaultValue="false"
app:iconSpaceReserved="false"
app:key="@string/set_key_round_covers"
app:summary="@string/set_round_covers_desc"
app:title="@string/set_round_covers" />
app:key="@string/set_key_round_mode"
app:summary="@string/set_round_mode_desc"
app:title="@string/set_round_mode" />
<org.oxycblt.auxio.settings.ui.M3SwitchPreference
app:allowDividerBelow="false"