From 28773f9a95ca0698647bf667fdd3a91a0162bf70 Mon Sep 17 00:00:00 2001 From: Nicolas Pomepuy Date: Wed, 12 Nov 2025 14:21:43 +0100 Subject: [PATCH] Compose TV: create a DefaultTvActivity --- .../television/ui/DefaultTvActivity.kt | 61 +++++++++++++++++++ .../videolan/television/ui/MainActivity.kt | 29 +-------- 2 files changed, 62 insertions(+), 28 deletions(-) create mode 100644 application/television/src/main/java/org/videolan/television/ui/DefaultTvActivity.kt diff --git a/application/television/src/main/java/org/videolan/television/ui/DefaultTvActivity.kt b/application/television/src/main/java/org/videolan/television/ui/DefaultTvActivity.kt new file mode 100644 index 000000000..b630d61ab --- /dev/null +++ b/application/television/src/main/java/org/videolan/television/ui/DefaultTvActivity.kt @@ -0,0 +1,61 @@ +/* + * ************************************************************************ + * DefaultTvActivity.kt + * ************************************************************************* + * Copyright © 2025 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. + * ************************************************************************** + * + * + */ + +package org.videolan.television.ui + +import android.os.Bundle +import android.os.PersistableBundle +import android.view.KeyEvent +import androidx.appcompat.app.AppCompatActivity +import org.videolan.television.util.EventThrottler + +open class DefaultTvActivity : AppCompatActivity() { + private val horizontalThrottler = EventThrottler(75L) + private val verticalThrottler = EventThrottler(100L) + private val selectThrottler = EventThrottler(500L) + + override fun dispatchKeyEvent(event: KeyEvent): Boolean { + if (event.action != KeyEvent.ACTION_DOWN) return super.dispatchKeyEvent(event) + + val isThrottled = when (event.keyCode) { + KeyEvent.KEYCODE_DPAD_LEFT, + KeyEvent.KEYCODE_DPAD_RIGHT -> { + horizontalThrottler.throttleEvent() + } + + KeyEvent.KEYCODE_DPAD_UP, + KeyEvent.KEYCODE_DPAD_DOWN -> { + verticalThrottler.throttleEvent() + } + + KeyEvent.KEYCODE_DPAD_CENTER -> { + selectThrottler.throttleEvent() + } + + else -> false + } + + return isThrottled || super.dispatchKeyEvent(event) + } +} \ No newline at end of file diff --git a/application/television/src/main/java/org/videolan/television/ui/MainActivity.kt b/application/television/src/main/java/org/videolan/television/ui/MainActivity.kt index c77aa51ca..4bf1328d2 100644 --- a/application/television/src/main/java/org/videolan/television/ui/MainActivity.kt +++ b/application/television/src/main/java/org/videolan/television/ui/MainActivity.kt @@ -45,11 +45,7 @@ import org.videolan.vlc.gui.dialogs.UpdateDialog import org.videolan.vlc.util.AutoUpdate -class MainActivity : AppCompatActivity() { - - private val horizontalThrottler = EventThrottler(75L) - private val verticalThrottler = EventThrottler(100L) - private val selectThrottler = EventThrottler(500L) +class MainActivity : DefaultTvActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -74,27 +70,4 @@ class MainActivity : AppCompatActivity() { } } - override fun dispatchKeyEvent(event: KeyEvent): Boolean { - if (event.action != KeyEvent.ACTION_DOWN) return super.dispatchKeyEvent(event) - - val isThrottled = when (event.keyCode) { - KeyEvent.KEYCODE_DPAD_LEFT, - KeyEvent.KEYCODE_DPAD_RIGHT -> { - horizontalThrottler.throttleEvent() - } - - KeyEvent.KEYCODE_DPAD_UP, - KeyEvent.KEYCODE_DPAD_DOWN -> { - verticalThrottler.throttleEvent() - } - - KeyEvent.KEYCODE_DPAD_CENTER -> { - selectThrottler.throttleEvent() - } - - else -> false - } - - return isThrottled || super.dispatchKeyEvent(event) - } }