From a886baf907e2f9f84e9dbfc54f6ccbffa83b0c97 Mon Sep 17 00:00:00 2001 From: 004matteos <52109183+AstroTheAstronaut@users.noreply.github.com> Date: Thu, 25 May 2023 10:20:30 +0300 Subject: [PATCH] feat: lock player controls (#372) * feat: lock player controls Add Lock Player feature. This feature is similar to the feature found in the stock Jellyfin Android app and in the VLC app. When enabled, it disables the gestures (seek, volume and brightness control), disables the default player controls and leaves only two buttons: a back button and an "unlock" button. Pressing the unlock button reverts the player back to the initial state, e.g. gestures enabled and default buttons shown. Works with ExoPlayer and MPV Player. Let me know of any issues. * Update PlayerGestureHelper.kt * Fixed spacing issues * fixed bug + formatting * Simplified code * Fixed spacing * fixed trailing line? * refactor: set locked layout initial visibility in xml --------- Co-authored-by: jarnedemeulemeester --- .../dev/jdtech/jellyfin/PlayerActivity.kt | 33 +++ .../jellyfin/utils/PlayerGestureHelper.kt | 9 + .../main/res/layout/exo_locked_controls.xml | 64 +++++ .../src/main/res/layout/exo_main_controls.xml | 249 ++++++++++++++++++ .../res/layout/exo_player_control_view.xml | 234 +--------------- core/src/debug/res/drawable/ic_unlock.xml | 20 ++ .../src/debug/res/drawable/rounded_corner.xml | 16 ++ 7 files changed, 399 insertions(+), 226 deletions(-) create mode 100644 app/phone/src/main/res/layout/exo_locked_controls.xml create mode 100644 app/phone/src/main/res/layout/exo_main_controls.xml create mode 100644 core/src/debug/res/drawable/ic_unlock.xml create mode 100644 core/src/debug/res/drawable/rounded_corner.xml diff --git a/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt index 3962ce22..41dac23e 100644 --- a/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt +++ b/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt @@ -1,11 +1,13 @@ package dev.jdtech.jellyfin import android.content.Context +import android.content.pm.ActivityInfo import android.media.AudioManager import android.os.Bundle import android.view.View import android.view.WindowManager import android.widget.Button +import android.widget.FrameLayout import android.widget.ImageButton import android.widget.ImageView import android.widget.TextView @@ -29,6 +31,8 @@ import dev.jdtech.jellyfin.viewmodels.PlayerActivityViewModel import javax.inject.Inject import timber.log.Timber +var isControlsLocked: Boolean = false + @AndroidEntryPoint class PlayerActivity : BasePlayerActivity() { @@ -67,6 +71,11 @@ class PlayerActivity : BasePlayerActivity() { finish() } + binding.playerView.findViewById(R.id.back_button_alt).setOnClickListener { + finish() + isControlsLocked = false + } + val videoNameTextView = binding.playerView.findViewById(R.id.video_name) viewModel.currentItemTitle.observe(this) { title -> @@ -77,10 +86,15 @@ class PlayerActivity : BasePlayerActivity() { val subtitleButton = binding.playerView.findViewById(R.id.btn_subtitle) val speedButton = binding.playerView.findViewById(R.id.btn_speed) val skipIntroButton = binding.playerView.findViewById