Skip to content
Snippets Groups Projects
Commit 67a069ab authored by Nicolas Pomepuy's avatar Nicolas Pomepuy
Browse files

Add quick actions for video advanced options

Fixes #1646
parent 149b5f41
No related branches found
No related tags found
1 merge request!906Add quick actions for video advanced options
Pipeline #71664 passed with stage
in 2 minutes and 24 seconds
<!--
~ *************************************************************************
~ ic_audiodelay_o.xml
~ **************************************************************************
~ Copyright © 2020 VLC authors and VideoLAN
~ Author: Nicolas POMEPUY
~ 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 2 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, write to the Free Software
~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
~ ***************************************************************************
~
~
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="45dp"
android:height="45dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="m8,5c-1.108,0 -2,0.892 -2,2v2L4,9v-2l-3,3 3,3v-2h2v3c0,1.108 0.892,2 2,2h3l-0.4844,3.3789c-0.1212,0.4908 0.4793,0.8309 0.8379,0.4746L15,16h1c1.108,0 2,-0.892 2,-2v-3h2v2l3,-3 -3,-3v2h-2v-2c0,-1.108 -0.892,-2 -2,-2zM8,7h1.6504v1.5L8,8.5ZM11,7h5v1.5h-5zM8,9.5h4.5v1.5L8,11ZM14,9.5h2v1.5h-2zM8,12h3.5v1.5L8,13.5ZM13,12h3v1.5h-3z"
android:strokeAlpha="1"
android:strokeLineJoin="round"
android:strokeWidth="1"
android:fillColor="@color/standard_selection_orange500"
android:strokeColor="#00000000"
android:fillType="nonZero"
android:fillAlpha="1"
android:strokeLineCap="round" />
</vector>
......@@ -106,6 +106,70 @@
app:srcCompat="@drawable/ic_player_renderer"
tools:visibility="visible" />
<HorizontalScrollView
android:id="@+id/quick_actions_container"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:scrollbars="none"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/player_overlay_title">
<com.google.android.material.chip.ChipGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:paddingLeft="16dp"
android:paddingRight="16dp"
app:chipSpacing="16dp">
<com.google.android.material.chip.Chip
android:id="@+id/playback_speed_quick_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
app:chipBackgroundColor="@color/playerbackground"
app:chipIcon="@drawable/ic_speed_on"
app:chipIconTint="@color/white"
app:iconStartPadding="8dp"
tools:text="1.25x" />
<com.google.android.material.chip.Chip
android:id="@+id/sleep_quick_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
app:chipBackgroundColor="@color/playerbackground"
app:chipIcon="@drawable/ic_sleep_w"
app:chipIconTint="@color/white"
app:iconStartPadding="8dp"
tools:text="12h55AM" />
<com.google.android.material.chip.Chip
android:id="@+id/spu_delay_quick_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
app:chipBackgroundColor="@color/playerbackground"
app:chipIcon="@drawable/ic_browser_subtitle_normal"
app:chipIconTint="@color/white"
app:iconStartPadding="8dp"
tools:text="+3000ms" />
<com.google.android.material.chip.Chip
android:id="@+id/audio_delay_quick_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
app:chipBackgroundColor="@color/playerbackground"
app:chipIcon="@drawable/ic_player_volume"
app:chipIconTint="@color/white"
app:iconStartPadding="8dp"
tools:text="-2000ms" />
</com.google.android.material.chip.ChipGroup>
</HorizontalScrollView>
<androidx.constraintlayout.widget.Barrier
android:id="@+id/icon_barrier"
android:layout_width="wrap_content"
......
......@@ -92,7 +92,9 @@ import org.videolan.vlc.gui.DialogActivity
import org.videolan.vlc.gui.audio.EqualizerFragment
import org.videolan.vlc.gui.audio.PlaylistAdapter
import org.videolan.vlc.gui.browser.EXTRA_MRL
import org.videolan.vlc.gui.dialogs.PlaybackSpeedDialog
import org.videolan.vlc.gui.dialogs.RenderersDialog
import org.videolan.vlc.gui.dialogs.SleepTimerDialog
import org.videolan.vlc.gui.helpers.PlayerOptionsDelegate
import org.videolan.vlc.gui.helpers.UiTools
import org.videolan.vlc.gui.helpers.hf.StoragePermissionsDelegate
......@@ -1501,6 +1503,26 @@ open class VideoPlayerActivity : AppCompatActivity(), PlaybackService.Callback,
clone = displayManager.isSecondary
recreate()
}
R.id.playback_speed_quick_action -> {
val newFragment = PlaybackSpeedDialog.newInstance()
newFragment.onDismissListener = DialogInterface.OnDismissListener { overlayDelegate.dimStatusBar(true) }
newFragment.show(supportFragmentManager, "playback_speed")
overlayDelegate.hideOverlay(false)
}
R.id.sleep_quick_action -> {
val newFragment = SleepTimerDialog.newInstance()
newFragment.onDismissListener = DialogInterface.OnDismissListener { overlayDelegate.dimStatusBar(true) }
newFragment.show(supportFragmentManager, "time")
overlayDelegate.hideOverlay(false)
}
R.id.audio_delay_quick_action -> {
delayDelegate.showAudioDelaySetting()
overlayDelegate.hideOverlay(false)
}
R.id.spu_delay_quick_action -> {
delayDelegate.showSubsDelaySetting()
overlayDelegate.hideOverlay(false)
}
}
}
......
......@@ -65,10 +65,7 @@ import org.videolan.vlc.gui.audio.PlaylistAdapter
import org.videolan.vlc.gui.browser.FilePickerActivity
import org.videolan.vlc.gui.browser.KEY_MEDIA
import org.videolan.vlc.gui.dialogs.VideoTracksDialog
import org.videolan.vlc.gui.helpers.OnRepeatListenerKey
import org.videolan.vlc.gui.helpers.OnRepeatListenerTouch
import org.videolan.vlc.gui.helpers.SwipeDragItemTouchHelperCallback
import org.videolan.vlc.gui.helpers.UiTools
import org.videolan.vlc.gui.helpers.*
import org.videolan.vlc.gui.helpers.UiTools.showVideoTrack
import org.videolan.vlc.gui.view.PlayerProgress
import org.videolan.vlc.media.MediaUtils
......@@ -76,6 +73,8 @@ import org.videolan.vlc.util.FileUtils
import org.videolan.vlc.util.isSchemeFile
import org.videolan.vlc.util.isSchemeNetwork
import org.videolan.vlc.viewmodels.PlaylistModel
import java.text.DateFormat
import java.util.*
@ExperimentalCoroutinesApi
@ObsoleteCoroutinesApi
......@@ -477,6 +476,30 @@ class VideoPlayerOverlayDelegate (private val player: VideoPlayerActivity) {
if (::hudRightBinding.isInitialized){
hudRightBinding.playerOverlayNavmenu.setOnClickListener(if (enabled) player else null)
UiTools.setViewOnClickListener(hudRightBinding.videoRenderer, if (enabled) player else null)
hudRightBinding.playbackSpeedQuickAction.setOnLongClickListener {
player.service?.setRate(1F, true)
showControls(true)
true
}
hudRightBinding.sleepQuickAction.setOnLongClickListener {
player.setSleep(null)
showControls(true)
true
}
hudRightBinding.audioDelayQuickAction.setOnLongClickListener {
player.service?.setAudioDelay(0L)
showControls(true)
true
}
hudRightBinding.spuDelayQuickAction.setOnLongClickListener {
player.service?.setSpuDelay(0L)
showControls(true)
true
}
hudRightBinding.quickActionsContainer.setOnTouchListener { v, event ->
showOverlay()
false
}
}
}
......@@ -655,6 +678,19 @@ class VideoPlayerOverlayDelegate (private val player: VideoPlayerActivity) {
hudRightBinding.videoSecondaryDisplay.contentDescription = player.resources.getString(if (secondary) R.string.video_remote_disable else R.string.video_remote_enable)
hudRightBinding.playlistToggle.visibility = if (show && player.service?.hasPlaylist() == true) View.VISIBLE else View.GONE
hudRightBinding.sleepQuickAction.visibility = if (PlayerOptionsDelegate.playerSleepTime != null) View.VISIBLE else View.GONE
hudRightBinding.playbackSpeedQuickAction.visibility = if (player.service?.rate != 1.0F) View.VISIBLE else View.GONE
hudRightBinding.spuDelayQuickAction.visibility = if (player.service?.spuDelay != 0L) View.VISIBLE else View.GONE
hudRightBinding.audioDelayQuickAction.visibility = if (player.service?.audioDelay != 0L) View.VISIBLE else View.GONE
hudRightBinding.playbackSpeedQuickAction.text = player.service?.rate?.formatRateString()
val format = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault())
PlayerOptionsDelegate.playerSleepTime?.let {
hudRightBinding.sleepQuickAction.text = format.format(it.time)
}
hudRightBinding.spuDelayQuickAction.text = "${(player.service?.spuDelay ?: 0L) / 1000L} ms"
hudRightBinding.audioDelayQuickAction.text = "${(player.service?.audioDelay ?: 0L) / 1000L} ms"
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment