From f561c7596f511cb39df0222f3b23e8ce4070d3ed Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 11 Sep 2026 15:19:03 +0200 Subject: [PATCH 1/7] fix top bar title Signed-off-by: alperozturk96 --- app/src/main/res/layout/player_top_bar.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/layout/player_top_bar.xml b/app/src/main/res/layout/player_top_bar.xml index 5aa851214be7..b35dc7901c51 100644 --- a/app/src/main/res/layout/player_top_bar.xml +++ b/app/src/main/res/layout/player_top_bar.xml @@ -31,6 +31,7 @@ android:ellipsize="end" android:gravity="center_vertical" android:singleLine="true" + android:textColor="@color/player_toolbar_text_color" android:textAppearance="@style/TextAppearance.App.Player.Toolbar" tools:text="Player title" /> From e694ff27862003ab815ce15bb621231e05d30a60 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 11 Sep 2026 15:19:13 +0200 Subject: [PATCH 2/7] theme player control buttons Signed-off-by: alperozturk96 --- .../player/ui/control/PlayerControlView.kt | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/client/player/ui/control/PlayerControlView.kt b/app/src/main/java/com/nextcloud/client/player/ui/control/PlayerControlView.kt index b80b01e3299b..195a8bb8bf8d 100644 --- a/app/src/main/java/com/nextcloud/client/player/ui/control/PlayerControlView.kt +++ b/app/src/main/java/com/nextcloud/client/player/ui/control/PlayerControlView.kt @@ -29,6 +29,7 @@ import com.nextcloud.client.player.model.state.RepeatMode import com.nextcloud.client.player.ui.MediaNavigator import com.owncloud.android.R import com.owncloud.android.databinding.PlayerControlViewBinding +import com.owncloud.android.utils.theme.ViewThemeUtils import dagger.android.HasAndroidInjector import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -40,6 +41,7 @@ import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import javax.inject.Inject +import kotlin.time.Duration.Companion.milliseconds private const val INDETERMINATE_TIME = "--:--" private const val TAG_CLICK_COMMAND_PLAY = "TAG_CLICK_COMMAND_PLAY" @@ -68,6 +70,9 @@ class PlayerControlView @JvmOverloads constructor( @Inject lateinit var playbackModel: PlaybackModel + @Inject + lateinit var viewThemeUtils: ViewThemeUtils + private val seekBarProgressChangeFlow = MutableSharedFlow(extraBufferCapacity = 1) private var viewScope: CoroutineScope? = null @@ -79,6 +84,7 @@ class PlayerControlView @JvmOverloads constructor( if (!isInEditMode) { (context.applicationContext as HasAndroidInjector).androidInjector().inject(this) setDefaultTags() + themeButton() setListeners() } } @@ -174,12 +180,24 @@ class PlayerControlView @JvmOverloads constructor( }) } + private fun themeButton() { + viewThemeUtils.material.run { + binding.run { + colorMaterialButtonContent(ivRepeat) + colorMaterialButtonContent(ivPrevious) + colorMaterialButtonContent(ivPlayPause) + colorMaterialButtonContent(ivNext) + colorMaterialButtonContent(ivRandom) + } + } + } + @OptIn(FlowPreview::class) private fun collectSeekBarChanges() { val viewScope = viewScope ?: return val lifecycleOwner = (context as? LifecycleOwner) ?: return seekBarProgressChangeFlow - .debounce(PROGRESS_CHANGE_DEBOUNCE_MS) + .debounce(PROGRESS_CHANGE_DEBOUNCE_MS.milliseconds) .flowWithLifecycle(lifecycleOwner.lifecycle, Lifecycle.State.STARTED) .onEach { playbackModel.seekToPosition(it.toLong()) } .launchIn(viewScope) From 1058c1b005ba80de09c9fbd3158ffcdd0f37d3ac Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 11 Sep 2026 15:21:54 +0200 Subject: [PATCH 3/7] fix foreground color of audio file Signed-off-by: alperozturk96 --- app/src/main/res/layout/player_audio_file_fragment.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/layout/player_audio_file_fragment.xml b/app/src/main/res/layout/player_audio_file_fragment.xml index 4a1430541ff0..cb3cac12268b 100644 --- a/app/src/main/res/layout/player_audio_file_fragment.xml +++ b/app/src/main/res/layout/player_audio_file_fragment.xml @@ -54,6 +54,7 @@ android:scrollHorizontally="true" android:singleLine="true" android:textAppearance="@style/TextAppearance.App.Player.AudioTitle" + android:textColor="@color/white" app:layout_constraintBottom_toTopOf="@id/file_details" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -67,6 +68,7 @@ android:ellipsize="end" android:singleLine="true" android:textAppearance="@style/TextAppearance.App.Player.AudioFileDetails" + android:textColor="@color/white" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" From 481ac737c0585a695f0bbb8444e198a0009adf01 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 11 Sep 2026 16:20:19 +0200 Subject: [PATCH 4/7] m3 expressive for control buttons Signed-off-by: alperozturk96 --- .../player/ui/control/PlayerControlView.kt | 173 ++++++++---------- .../client/player/ui/video/VideoPlayerView.kt | 3 +- .../res/color/player_control_icon_tint.xml | 16 ++ app/src/main/res/drawable/player_ic_pause.xml | 6 +- app/src/main/res/drawable/player_ic_play.xml | 6 +- ..._selector.xml => player_ic_play_pause.xml} | 6 +- .../res/drawable/player_progress_drawable.xml | 37 ---- .../res/drawable/player_progress_thumb.xml | 19 -- .../player_progress_thumb_pressed.xml | 29 --- .../main/res/layout/player_control_view.xml | 35 ++-- app/src/main/res/values-large/dims.xml | 1 - app/src/main/res/values/colors.xml | 4 - app/src/main/res/values/dims.xml | 8 - app/src/main/res/values/styles.xml | 45 ++--- 14 files changed, 150 insertions(+), 238 deletions(-) create mode 100644 app/src/main/res/color/player_control_icon_tint.xml rename app/src/main/res/drawable/{player_progress_thumb_selector.xml => player_ic_play_pause.xml} (63%) delete mode 100644 app/src/main/res/drawable/player_progress_drawable.xml delete mode 100644 app/src/main/res/drawable/player_progress_thumb.xml delete mode 100644 app/src/main/res/drawable/player_progress_thumb_pressed.xml diff --git a/app/src/main/java/com/nextcloud/client/player/ui/control/PlayerControlView.kt b/app/src/main/java/com/nextcloud/client/player/ui/control/PlayerControlView.kt index 195a8bb8bf8d..27be4ec1d34e 100644 --- a/app/src/main/java/com/nextcloud/client/player/ui/control/PlayerControlView.kt +++ b/app/src/main/java/com/nextcloud/client/player/ui/control/PlayerControlView.kt @@ -8,14 +8,12 @@ package com.nextcloud.client.player.ui.control import android.content.Context +import android.content.res.ColorStateList import android.os.Build import android.util.AttributeSet import android.view.LayoutInflater import android.view.WindowInsets import android.widget.LinearLayout -import android.widget.SeekBar -import android.widget.SeekBar.OnSeekBarChangeListener -import androidx.appcompat.content.res.AppCompatResources import androidx.core.content.ContextCompat import androidx.core.view.updateLayoutParams import androidx.lifecycle.Lifecycle @@ -31,6 +29,7 @@ import com.owncloud.android.R import com.owncloud.android.databinding.PlayerControlViewBinding import com.owncloud.android.utils.theme.ViewThemeUtils import dagger.android.HasAndroidInjector +import dynamiccolor.DynamicScheme import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.FlowPreview @@ -44,13 +43,6 @@ import javax.inject.Inject import kotlin.time.Duration.Companion.milliseconds private const val INDETERMINATE_TIME = "--:--" -private const val TAG_CLICK_COMMAND_PLAY = "TAG_CLICK_COMMAND_PLAY" -private const val TAG_CLICK_COMMAND_PAUSE = "TAG_CLICK_COMMAND_PAUSE" -private const val TAG_CLICK_COMMAND_REPEAT = "TAG_CLICK_COMMAND_REPEAT" -private const val TAG_CLICK_COMMAND_DO_NOT_REPEAT = "TAG_CLICK_COMMAND_DO_NOT_REPEAT" -private const val TAG_CLICK_COMMAND_SHUFFLE = "TAG_CLICK_COMMAND_SHUFFLE" -private const val TAG_CLICK_COMMAND_DO_NOT_SHUFFLE = "TAG_CLICK_COMMAND_DO_NOT_SHUFFLE" -private const val TAG_CLICK_COMMAND_UNKNOWN = "TAG_CLICK_COMMAND_UNKNOWN" private const val PROGRESS_CHANGE_DEBOUNCE_MS = 200L private const val DEFAULT_MIN_PROGRESS = 0 @@ -73,18 +65,39 @@ class PlayerControlView @JvmOverloads constructor( @Inject lateinit var viewThemeUtils: ViewThemeUtils - private val seekBarProgressChangeFlow = MutableSharedFlow(extraBufferCapacity = 1) + private val seekPositionFlow = MutableSharedFlow(extraBufferCapacity = 1) private var viewScope: CoroutineScope? = null val binding = PlayerControlViewBinding.inflate(LayoutInflater.from(context), this, true) + // The panel always sits on the dark player background, so the scheme has to be the dark one + // regardless of the system theme: the light scheme resolves the server color to a low tone + // that is unreadable here. + private val darkScheme: DynamicScheme by lazy { + DynamicScheme.from(viewThemeUtils.getScheme(context), true) + } + + private val accentTint: ColorStateList by lazy { ColorStateList.valueOf(darkScheme.primary) } + + private val onAccentTint: ColorStateList by lazy { ColorStateList.valueOf(darkScheme.onPrimary) } + + private val transportIconTint: ColorStateList? by lazy { + ContextCompat.getColorStateList(context, R.color.player_control_icon_tint) + } + + private val toggleIconTint: ColorStateList by lazy { + ColorStateList( + arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), + intArrayOf(darkScheme.primary, ContextCompat.getColor(context, R.color.player_default_icon_color)) + ) + } + var navigator: MediaNavigator? = null init { if (!isInEditMode) { (context.applicationContext as HasAndroidInjector).androidInjector().inject(this) - setDefaultTags() - themeButton() + themeControls() setListeners() } } @@ -93,7 +106,7 @@ class PlayerControlView @JvmOverloads constructor( super.onAttachedToWindow() if (!isInEditMode) { viewScope = CoroutineScope(SupervisorJob() + Dispatchers.Main.immediate) - collectSeekBarChanges() + collectSeekPositions() } } @@ -132,71 +145,66 @@ class PlayerControlView @JvmOverloads constructor( render(state) } - private fun setDefaultTags() { - binding.ivPlayPause.tag = TAG_CLICK_COMMAND_UNKNOWN - binding.ivRandom.tag = TAG_CLICK_COMMAND_UNKNOWN - binding.ivRepeat.tag = TAG_CLICK_COMMAND_UNKNOWN + private fun themeControls() { + binding.run { + ivPrevious.iconTint = transportIconTint + ivNext.iconTint = transportIconTint + ivRepeat.iconTint = toggleIconTint + ivRandom.iconTint = toggleIconTint + ivPlayPause.backgroundTintList = accentTint + ivPlayPause.iconTint = onAccentTint + + slider.trackActiveTintList = accentTint + slider.thumbTintList = accentTint + slider.setLabelFormatter { formatTime(it.toInt(), slider.valueTo.toInt()) } + } } private fun setListeners() { binding.ivPlayPause.setOnClickListener { - when (binding.ivPlayPause.tag) { - TAG_CLICK_COMMAND_PLAY -> playbackModel.play() - TAG_CLICK_COMMAND_PAUSE -> playbackModel.pause() + if (binding.ivPlayPause.isChecked) { + playbackModel.play() + } else { + playbackModel.pause() } } + // The model renders back synchronously, which resets the button that was just toggled, so the + // state the tap asked for has to be read before the first call into the model. binding.ivRepeat.setOnClickListener { + val repeatSingle = binding.ivRepeat.isChecked + // Repeat and Random are mutually exclusive playbackModel.setShuffle(false) - when (binding.ivRepeat.tag) { - TAG_CLICK_COMMAND_REPEAT -> playbackModel.setRepeatMode(RepeatMode.SINGLE) - TAG_CLICK_COMMAND_DO_NOT_REPEAT -> playbackModel.setRepeatMode(RepeatMode.ALL) - } + playbackModel.setRepeatMode(if (repeatSingle) RepeatMode.SINGLE else RepeatMode.ALL) } binding.ivRandom.setOnClickListener { + val shuffle = binding.ivRandom.isChecked + // Repeat and Random are mutually exclusive playbackModel.setRepeatMode(RepeatMode.OFF) - playbackModel.setShuffle(binding.ivRandom.tag == TAG_CLICK_COMMAND_SHUFFLE) + playbackModel.setShuffle(shuffle) } binding.ivNext.setOnClickListener { navigator?.showNext() } binding.ivPrevious.setOnClickListener { navigator?.showPrevious() } - binding.progressBar.setOnSeekBarChangeListener(object : OnSeekBarChangeListener { - override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { - if (fromUser) { - seekBarProgressChangeFlow.tryEmit(progress) - } - } - - override fun onStartTrackingTouch(seekBar: SeekBar?) = Unit - - override fun onStopTrackingTouch(seekBar: SeekBar?) = Unit - }) - } - - private fun themeButton() { - viewThemeUtils.material.run { - binding.run { - colorMaterialButtonContent(ivRepeat) - colorMaterialButtonContent(ivPrevious) - colorMaterialButtonContent(ivPlayPause) - colorMaterialButtonContent(ivNext) - colorMaterialButtonContent(ivRandom) + binding.slider.addOnChangeListener { _, value, fromUser -> + if (fromUser) { + seekPositionFlow.tryEmit(value.toInt()) } } } @OptIn(FlowPreview::class) - private fun collectSeekBarChanges() { + private fun collectSeekPositions() { val viewScope = viewScope ?: return val lifecycleOwner = (context as? LifecycleOwner) ?: return - seekBarProgressChangeFlow + seekPositionFlow .debounce(PROGRESS_CHANGE_DEBOUNCE_MS.milliseconds) .flowWithLifecycle(lifecycleOwner.lifecycle, Lifecycle.State.STARTED) .onEach { playbackModel.seekToPosition(it.toLong()) } @@ -204,65 +212,36 @@ class PlayerControlView @JvmOverloads constructor( } private fun render(playbackState: PlaybackState) { - renderRepeatButton(playbackState.repeatMode == RepeatMode.SINGLE) - renderShuffleButton(playbackState.shuffle) - renderPlayPauseButton(playbackState.currentItemState?.playerState == PlayerState.PLAYING) - renderNextPreviousButtons() - renderProgressBar(playbackState.currentItemState) - } - - private fun renderRepeatButton(repeatSingle: Boolean) { - binding.ivRepeat.iconTint = ContextCompat.getColorStateList( - binding.root.context, - if (repeatSingle) { - R.color.player_accent_color - } else { - R.color.player_default_icon_color - } - ) - binding.ivRepeat.tag = if (repeatSingle) TAG_CLICK_COMMAND_DO_NOT_REPEAT else TAG_CLICK_COMMAND_REPEAT - } - - private fun renderShuffleButton(shuffle: Boolean) { - binding.ivRandom.iconTint = ContextCompat.getColorStateList( - binding.root.context, - if (shuffle) { - R.color.player_accent_color - } else { - R.color.player_default_icon_color - } - ) - binding.ivRandom.tag = if (shuffle) TAG_CLICK_COMMAND_DO_NOT_SHUFFLE else TAG_CLICK_COMMAND_SHUFFLE - } - - private fun renderPlayPauseButton(isPlaying: Boolean) { - binding.ivPlayPause.icon = AppCompatResources.getDrawable( - binding.root.context, - if (isPlaying) { - R.drawable.player_ic_pause - } else { - R.drawable.player_ic_play - } - ) - binding.ivPlayPause.tag = if (isPlaying) TAG_CLICK_COMMAND_PAUSE else TAG_CLICK_COMMAND_PLAY - } - - private fun renderNextPreviousButtons() { + binding.ivRepeat.isChecked = playbackState.repeatMode == RepeatMode.SINGLE + binding.ivRandom.isChecked = playbackState.shuffle + binding.ivPlayPause.isChecked = playbackState.currentItemState?.playerState == PlayerState.PLAYING binding.ivNext.isEnabled = navigator?.hasNext == true binding.ivPrevious.isEnabled = navigator?.hasPrevious == true + renderProgress(playbackState.currentItemState) } - private fun renderProgressBar(playbackItemState: PlaybackItemState?) { + private fun renderProgress(playbackItemState: PlaybackItemState?) { val enabled = playbackItemState != null && playbackItemState.maxTimeInMilliseconds > DEFAULT_MIN_PROGRESS val max = if (enabled) playbackItemState.maxTimeInMilliseconds.toInt() else DEFAULT_MAX_PROGRESS val progress = if (enabled) playbackItemState.currentTimeInMilliseconds.toInt() else DEFAULT_MIN_PROGRESS - binding.progressBar.isEnabled = enabled - binding.progressBar.max = max - binding.progressBar.progress = progress + binding.slider.isEnabled = enabled + moveSliderTo(max.toFloat(), progress.toFloat()) binding.tvElapsed.text = if (enabled) formatTime(progress, max) else INDETERMINATE_TIME binding.tvTotalTime.text = if (enabled) formatTime(max, max) else INDETERMINATE_TIME } + // Slider rejects a value outside its range, so the value has to leave the old range before + // valueTo can shrink below it. + private fun moveSliderTo(valueTo: Float, value: Float) { + binding.slider.run { + if (this.valueTo != valueTo) { + this.value = valueFrom + this.valueTo = valueTo + } + this.value = value.coerceIn(valueFrom, this.valueTo) + } + } + private fun formatTime(current: Int, max: Int): String { val seconds = current / MILLISECONDS_IN_SECOND val minutes = seconds / SECONDS_IN_MINUTE diff --git a/app/src/main/java/com/nextcloud/client/player/ui/video/VideoPlayerView.kt b/app/src/main/java/com/nextcloud/client/player/ui/video/VideoPlayerView.kt index 652f2b204212..808a69194efe 100644 --- a/app/src/main/java/com/nextcloud/client/player/ui/video/VideoPlayerView.kt +++ b/app/src/main/java/com/nextcloud/client/player/ui/video/VideoPlayerView.kt @@ -21,6 +21,7 @@ import com.owncloud.android.R import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import kotlin.time.Duration.Companion.milliseconds class VideoPlayerView(context: Context) : PlayerView(context) { @@ -98,7 +99,7 @@ class VideoPlayerView(context: Context) : PlayerView(context) { } hideControlsTimerJob = activity.lifecycleScope.launch { - delay(HIDE_CONTROLS_DELAY) + delay(HIDE_CONTROLS_DELAY.milliseconds) hideControls() } } diff --git a/app/src/main/res/color/player_control_icon_tint.xml b/app/src/main/res/color/player_control_icon_tint.xml new file mode 100644 index 000000000000..fa19cdbade74 --- /dev/null +++ b/app/src/main/res/color/player_control_icon_tint.xml @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/player_ic_pause.xml b/app/src/main/res/drawable/player_ic_pause.xml index c756bb9e0f11..cbc0027a8895 100644 --- a/app/src/main/res/drawable/player_ic_pause.xml +++ b/app/src/main/res/drawable/player_ic_pause.xml @@ -7,11 +7,11 @@ + android:viewportWidth="24" + android:viewportHeight="24"> + android:pathData="M6,19h4V5H6v14zM14,5v14h4V5h-4z" /> diff --git a/app/src/main/res/drawable/player_ic_play.xml b/app/src/main/res/drawable/player_ic_play.xml index 075c21089ef0..eaf659d28052 100644 --- a/app/src/main/res/drawable/player_ic_play.xml +++ b/app/src/main/res/drawable/player_ic_play.xml @@ -7,11 +7,11 @@ + android:viewportWidth="24" + android:viewportHeight="24"> + android:pathData="M8,5v14l11,-7z" /> diff --git a/app/src/main/res/drawable/player_progress_thumb_selector.xml b/app/src/main/res/drawable/player_ic_play_pause.xml similarity index 63% rename from app/src/main/res/drawable/player_progress_thumb_selector.xml rename to app/src/main/res/drawable/player_ic_play_pause.xml index dc274c5987b4..5be14e39a400 100644 --- a/app/src/main/res/drawable/player_progress_thumb_selector.xml +++ b/app/src/main/res/drawable/player_ic_play_pause.xml @@ -7,9 +7,9 @@ + android:drawable="@drawable/player_ic_pause" + android:state_checked="true" /> - + diff --git a/app/src/main/res/drawable/player_progress_drawable.xml b/app/src/main/res/drawable/player_progress_drawable.xml deleted file mode 100644 index e5be77b41f13..000000000000 --- a/app/src/main/res/drawable/player_progress_drawable.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/player_progress_thumb.xml b/app/src/main/res/drawable/player_progress_thumb.xml deleted file mode 100644 index 59b7d9087570..000000000000 --- a/app/src/main/res/drawable/player_progress_thumb.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/player_progress_thumb_pressed.xml b/app/src/main/res/drawable/player_progress_thumb_pressed.xml deleted file mode 100644 index 034ea94b38bf..000000000000 --- a/app/src/main/res/drawable/player_progress_thumb_pressed.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/player_control_view.xml b/app/src/main/res/layout/player_control_view.xml index fc1b850c0e46..d76a9c1b5118 100644 --- a/app/src/main/res/layout/player_control_view.xml +++ b/app/src/main/res/layout/player_control_view.xml @@ -26,13 +26,12 @@ android:id="@+id/tvElapsed" style="@style/PlayerTimeTextViewStyle" /> - + android:layout_height="wrap_content" + android:layout_weight="1" /> + + + + + + + app:icon="@drawable/player_ic_play_pause" /> + + + + + + diff --git a/app/src/main/res/values-large/dims.xml b/app/src/main/res/values-large/dims.xml index b7f1e53ab405..b57fcf9474c3 100644 --- a/app/src/main/res/values-large/dims.xml +++ b/app/src/main/res/values-large/dims.xml @@ -10,5 +10,4 @@ 24dp 24dp 48dp - 40dp \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index afad3b71b8d4..1ee30472ae83 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -91,7 +91,6 @@ #EFEFEF - @color/color_accent #111111 @color/white @color/white @@ -100,7 +99,4 @@ #21000000 #21000000 #979797 - #33000000 - #40FFFFFF - #CFCFCF diff --git a/app/src/main/res/values/dims.xml b/app/src/main/res/values/dims.xml index e24be6d7d9be..b35b334e99cb 100644 --- a/app/src/main/res/values/dims.xml +++ b/app/src/main/res/values/dims.xml @@ -179,16 +179,8 @@ 32dp 350dp 96dp - 24dp @dimen/standard_padding @dimen/standard_padding - 2dp - 4dp - 12dp - 24dp - 1dp - 12dp 15sp - 16dp 8dp diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 218a002a027b..f50464fdb0cd 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -552,33 +552,36 @@ - - @dimen/minimum_size_for_touchable_area - @dimen/minimum_size_for_touchable_area + - 0dp - 0dp - 0dp - 0dp - 0dp + - @dimen/player_button_margin_horizontal - @dimen/player_button_margin_horizontal + From c09a1eadddcca2b3d9628729153cf0929c70e485 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 11 Sep 2026 16:37:01 +0200 Subject: [PATCH 5/7] handle paddings Signed-off-by: alperozturk96 --- .../client/player/ui/PlayerProgressIndicator.kt | 2 -- .../res/layout/player_audio_file_fragment.xml | 6 +++--- app/src/main/res/layout/player_top_bar.xml | 8 +++++--- app/src/main/res/values-large/dims.xml | 2 +- app/src/main/res/values/dims.xml | 9 ++------- app/src/main/res/values/styles.xml | 17 ++++++++--------- 6 files changed, 19 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/nextcloud/client/player/ui/PlayerProgressIndicator.kt b/app/src/main/java/com/nextcloud/client/player/ui/PlayerProgressIndicator.kt index 947e9b04c46a..d605e7277876 100644 --- a/app/src/main/java/com/nextcloud/client/player/ui/PlayerProgressIndicator.kt +++ b/app/src/main/java/com/nextcloud/client/player/ui/PlayerProgressIndicator.kt @@ -34,8 +34,6 @@ class PlayerProgressIndicator @JvmOverloads constructor( private var playbackFile: PlaybackFile? = null init { - indicatorTrackGapSize = 0 - trackStopIndicatorSize = 0 if (!isInEditMode) { (context.applicationContext as HasAndroidInjector).androidInjector().inject(this) } diff --git a/app/src/main/res/layout/player_audio_file_fragment.xml b/app/src/main/res/layout/player_audio_file_fragment.xml index cb3cac12268b..02e5603116cc 100644 --- a/app/src/main/res/layout/player_audio_file_fragment.xml +++ b/app/src/main/res/layout/player_audio_file_fragment.xml @@ -42,7 +42,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintWidth_max="@dimen/player_album_cover_size" - app:shapeAppearance="@style/ShapeAppearance.App.Player.Media" /> + app:shapeAppearance="@style/ShapeAppearance.App.Player.AlbumCover" /> @@ -31,13 +31,15 @@ android:ellipsize="end" android:gravity="center_vertical" android:singleLine="true" - android:textColor="@color/player_toolbar_text_color" android:textAppearance="@style/TextAppearance.App.Player.Toolbar" + android:textColor="@color/player_toolbar_text_color" tools:text="Player title" /> diff --git a/app/src/main/res/values-large/dims.xml b/app/src/main/res/values-large/dims.xml index b57fcf9474c3..b1b86cc3d881 100644 --- a/app/src/main/res/values-large/dims.xml +++ b/app/src/main/res/values-large/dims.xml @@ -6,7 +6,7 @@ --> 64dp - 12dp + 12dp 24dp 24dp 48dp diff --git a/app/src/main/res/values/dims.xml b/app/src/main/res/values/dims.xml index b35b334e99cb..0bf97b5df1e8 100644 --- a/app/src/main/res/values/dims.xml +++ b/app/src/main/res/values/dims.xml @@ -167,20 +167,15 @@ 56dp - 21sp - 24dp - 4dp - 12dp + 4dp + 12dp 16dp 16dp - 16sp 8dp - 12sp 32dp 350dp 96dp @dimen/standard_padding @dimen/standard_padding - 15sp 8dp diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index f50464fdb0cd..8f0ebd159ea8 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -519,39 +519,38 @@ true end center - @color/player_default_text_color @style/TextAppearance.App.Player.ProgressTime + @color/player_default_text_color - - - - + +