From 395a3f7474564645b97fb7f03044ee6a66a0a370 Mon Sep 17 00:00:00 2001 From: mueller-ma Date: Tue, 16 Jul 2024 19:59:44 +0200 Subject: [PATCH] Enforce auth for some tiles in device controls (#3752) Enforce authentication when the tile only opens MainActivity, which cannot be displayed on a locked screen. Signed-off-by: mueller-ma --- .../background/ItemsControlsProviderService.kt | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/mobile/src/main/java/org/openhab/habdroid/background/ItemsControlsProviderService.kt b/mobile/src/main/java/org/openhab/habdroid/background/ItemsControlsProviderService.kt index f14b1278e8..134a86e9c1 100644 --- a/mobile/src/main/java/org/openhab/habdroid/background/ItemsControlsProviderService.kt +++ b/mobile/src/main/java/org/openhab/habdroid/background/ItemsControlsProviderService.kt @@ -14,6 +14,7 @@ package org.openhab.habdroid.background import android.app.PendingIntent +import android.content.ComponentName import android.content.Context import android.content.Intent import android.os.Build @@ -155,7 +156,7 @@ class ItemsControlsProviderService : ControlsProviderService() { private val serverName: String private val primaryServerId: Int private val subtitleMode: DeviceControlSubtitleMode - private val authRequired: Boolean + private val prefsAuthRequired: Boolean init { val prefs = context.getPrefs() @@ -164,7 +165,7 @@ class ItemsControlsProviderService : ControlsProviderService() { ?.name .orDefaultIfEmpty(context.getString(R.string.app_name)) subtitleMode = prefs.getDeviceControlSubtitle(context) - authRequired = prefs.getBoolean(PrefKeys.DEVICE_CONTROL_AUTH_REQUIRED, true) + prefsAuthRequired = prefs.getBoolean(PrefKeys.DEVICE_CONTROL_AUTH_REQUIRED, true) } fun maybeCreateControl(item: Item): Control? { @@ -209,6 +210,16 @@ class ItemsControlsProviderService : ControlsProviderService() { } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + // Enforce authentication when the tile only opens MainActivity, + // which cannot be displayed on a locked screen. + val authRequired = if ( + controlTemplate.templateType == ControlTemplate.TYPE_NO_TEMPLATE && + intent.component == ComponentName(context, MainActivity::class.java) + ) { + true + } else { + prefsAuthRequired + } statefulControl.setAuthRequired(authRequired) }