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:
parent
e41645ee28
commit
217ced8ade
31 changed files with 151 additions and 91 deletions
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 |
5
app/src/main/res/drawable/ui_widget_bg.xml
Normal file
5
app/src/main/res/drawable/ui_widget_bg.xml
Normal 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>
|
6
app/src/main/res/drawable/ui_widget_bg_round.xml
Normal file
6
app/src/main/res/drawable/ui_widget_bg_round.xml
Normal 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>
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue