From c354856f29fe219930aade007bb166c8e17d7464 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Tue, 16 Dec 2025 16:17:26 +0100 Subject: Enable Minimal UI in Android TV mode closes #1861 Signed-off-by: Arne Schwabe --- .../java/de/blinkt/openvpn/activities/MainActivity.kt | 5 +++-- .../ui/java/de/blinkt/openvpn/fragments/MinimalUI.kt | 18 ++++++++++++++++-- .../java/de/blinkt/openvpn/fragments/VPNProfileList.kt | 6 ++++-- 3 files changed, 23 insertions(+), 6 deletions(-) (limited to 'main/src/ui/java') diff --git a/main/src/ui/java/de/blinkt/openvpn/activities/MainActivity.kt b/main/src/ui/java/de/blinkt/openvpn/activities/MainActivity.kt index 8b18144a..d830278e 100644 --- a/main/src/ui/java/de/blinkt/openvpn/activities/MainActivity.kt +++ b/main/src/ui/java/de/blinkt/openvpn/activities/MainActivity.kt @@ -38,9 +38,10 @@ class MainActivity : BaseActivity() { disableToolbarElevation() val minimalUi = GlobalPreferences.getMinimalUi(); - if (minimalUi ) { + if (isAndroidTV || minimalUi) { mPagerAdapter.addTab(R.string.minimal_ui, MinimalUI::class.java) - } else { + } + if (!minimalUi) { mPagerAdapter.addTab(R.string.vpn_list_title, VPNProfileList::class.java) mPagerAdapter.addTab(R.string.graph, GraphFragment::class.java) diff --git a/main/src/ui/java/de/blinkt/openvpn/fragments/MinimalUI.kt b/main/src/ui/java/de/blinkt/openvpn/fragments/MinimalUI.kt index deaa0aeb..8b53270f 100644 --- a/main/src/ui/java/de/blinkt/openvpn/fragments/MinimalUI.kt +++ b/main/src/ui/java/de/blinkt/openvpn/fragments/MinimalUI.kt @@ -35,11 +35,13 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.core.app.ActivityCompat.invalidateOptionsMenu import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope +import androidx.webkit.Navigation import de.blinkt.openvpn.LaunchVPN import de.blinkt.openvpn.R import de.blinkt.openvpn.VpnProfile import de.blinkt.openvpn.VpnProfile.TYPE_KEYSTORE import de.blinkt.openvpn.VpnProfile.TYPE_USERPASS_KEYSTORE +import de.blinkt.openvpn.activities.BaseActivity import de.blinkt.openvpn.activities.ConfigConverter import de.blinkt.openvpn.core.ConnectionStatus import de.blinkt.openvpn.core.GlobalPreferences @@ -170,7 +172,7 @@ class MinimalUI: Fragment(), VpnStatus.StateListener { } private fun checkForNotificationPermission(v: View) { - val permissionView = v.findViewById(R.id.notification_permission) + val permissionView = v.findViewById(R.id.notification_permission) ?: return val permissionGranted = requireActivity().checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED @@ -185,7 +187,7 @@ class MinimalUI: Fragment(), VpnStatus.StateListener { } private suspend fun checkForKeychainPermission(v: View) { - val keychainView = v.findViewById(R.id.keychain_notification) + val keychainView = v.findViewById(R.id.keychain_notification) ?: return val profile = ProfileManager.getAlwaysOnVPN(context) @@ -255,6 +257,13 @@ class MinimalUI: Fragment(), VpnStatus.StateListener { vpntoggle.setOnClickListener { view -> toggleSwitchPressed(view as CompoundButton) } + if ((activity as BaseActivity).isAndroidTV) + { + with( view.findViewById(R.id.minimal_ui_title)) { + setOnClickListener { _ -> toggleSwitchPressed(vpntoggle) } + visibility = View.VISIBLE; + } + } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) checkForNotificationPermission(view) @@ -262,6 +271,11 @@ class MinimalUI: Fragment(), VpnStatus.StateListener { viewLifecycleOwner.lifecycleScope.launch { checkForKeychainPermission(view) } + view.setOnKeyListener { v, key, event -> + Toast.makeText(activity, "Got key event " + event + " key " + key + " view " + v, Toast.LENGTH_LONG).show(); + false; + } + return view } diff --git a/main/src/ui/java/de/blinkt/openvpn/fragments/VPNProfileList.kt b/main/src/ui/java/de/blinkt/openvpn/fragments/VPNProfileList.kt index a78c5c40..263d36b5 100644 --- a/main/src/ui/java/de/blinkt/openvpn/fragments/VPNProfileList.kt +++ b/main/src/ui/java/de/blinkt/openvpn/fragments/VPNProfileList.kt @@ -41,6 +41,7 @@ import androidx.fragment.app.ListFragment import de.blinkt.openvpn.LaunchVPN import de.blinkt.openvpn.R import de.blinkt.openvpn.VpnProfile +import de.blinkt.openvpn.activities.BaseActivity import de.blinkt.openvpn.activities.ConfigConverter import de.blinkt.openvpn.activities.DisconnectVPN import de.blinkt.openvpn.activities.FileSelect @@ -273,8 +274,9 @@ class VPNProfileList : ListFragment(), View.OnClickListener, StateListener { if (fab_import != null) fab_import.setOnClickListener(this) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) checkForNotificationPermission(v) - + // TV builds show the minimal UI that already have the notification + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && !((activity as BaseActivity).isAndroidTV)) + checkForNotificationPermission(v) return v } -- cgit v1.2.3