From 9fc98e464e42b88703aa389b0ebe919934903b4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joris=20Pelgr=C3=B6m?= Date: Wed, 3 Aug 2022 23:59:00 +0200 Subject: [PATCH] Remove error message on null template (#2735) * Remove error message on null template - Null is a valid value for a template so the app should reflect that instead of suggesting there is an error, which may cause users to start looking in the wrong place. * Log.e instead of Log.i --- .../settings/wear/SettingsWearViewModel.kt | 10 ++++++---- .../android/widgets/template/TemplateWidget.kt | 17 ++++++----------- .../template/TemplateWidgetConfigureActivity.kt | 11 +++++++++-- .../companion/android/tiles/TemplateTile.kt | 11 +++++++---- 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/app/src/full/java/io/homeassistant/companion/android/settings/wear/SettingsWearViewModel.kt b/app/src/full/java/io/homeassistant/companion/android/settings/wear/SettingsWearViewModel.kt index 2fa2e0cc5..16df0837b 100644 --- a/app/src/full/java/io/homeassistant/companion/android/settings/wear/SettingsWearViewModel.kt +++ b/app/src/full/java/io/homeassistant/companion/android/settings/wear/SettingsWearViewModel.kt @@ -8,6 +8,7 @@ import androidx.compose.runtime.mutableStateMapOf import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.viewModelScope +import com.fasterxml.jackson.databind.JsonMappingException import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.readValue import com.google.android.gms.wearable.CapabilityClient @@ -112,12 +113,13 @@ class SettingsWearViewModel @Inject constructor( viewModelScope.launch { try { templateTileContentRendered.value = - integrationUseCase.renderTemplate(template, mapOf()) ?: getApplication().getString( - commonR.string.template_error - ) + integrationUseCase.renderTemplate(template, mapOf()).toString() } catch (e: Exception) { + Log.e(TAG, "Exception while rendering template", e) + // JsonMappingException suggests that template is not a String (= error) templateTileContentRendered.value = getApplication().getString( - commonR.string.template_render_error + if (e.cause is JsonMappingException) commonR.string.template_error + else commonR.string.template_render_error ) } } diff --git a/app/src/main/java/io/homeassistant/companion/android/widgets/template/TemplateWidget.kt b/app/src/main/java/io/homeassistant/companion/android/widgets/template/TemplateWidget.kt index 8654bd4e4..014e87646 100644 --- a/app/src/main/java/io/homeassistant/companion/android/widgets/template/TemplateWidget.kt +++ b/app/src/main/java/io/homeassistant/companion/android/widgets/template/TemplateWidget.kt @@ -91,17 +91,12 @@ class TemplateWidget : BaseWidgetProvider() { // Content var renderedTemplate: String? = templateWidgetDao.get(appWidgetId)?.lastUpdate ?: "Loading" try { - renderedTemplate = integrationUseCase.renderTemplate(widget.template, mapOf()) - if (renderedTemplate != null) { - templateWidgetDao.updateTemplateWidgetLastUpdate( - appWidgetId, - renderedTemplate - ) - setViewVisibility(R.id.widgetTemplateError, View.GONE) - } else { - Log.e(TAG, "Template returned null: ${widget.template}") - setViewVisibility(R.id.widgetTemplateError, View.VISIBLE) - } + renderedTemplate = integrationUseCase.renderTemplate(widget.template, mapOf()).toString() + templateWidgetDao.updateTemplateWidgetLastUpdate( + appWidgetId, + renderedTemplate + ) + setViewVisibility(R.id.widgetTemplateError, View.GONE) } catch (e: Exception) { Log.e(TAG, "Unable to render template: ${widget.template}", e) setViewVisibility(R.id.widgetTemplateError, View.VISIBLE) diff --git a/app/src/main/java/io/homeassistant/companion/android/widgets/template/TemplateWidgetConfigureActivity.kt b/app/src/main/java/io/homeassistant/companion/android/widgets/template/TemplateWidgetConfigureActivity.kt index 260a0587b..a9db52218 100644 --- a/app/src/main/java/io/homeassistant/companion/android/widgets/template/TemplateWidgetConfigureActivity.kt +++ b/app/src/main/java/io/homeassistant/companion/android/widgets/template/TemplateWidgetConfigureActivity.kt @@ -7,6 +7,7 @@ import android.content.Intent import android.os.Build import android.os.Bundle import android.text.Html.fromHtml +import android.util.Log import android.view.View import android.widget.AdapterView import android.widget.ArrayAdapter @@ -16,6 +17,7 @@ import androidx.core.graphics.toColorInt import androidx.core.view.isVisible import androidx.core.widget.doAfterTextChanged import androidx.lifecycle.lifecycleScope +import com.fasterxml.jackson.databind.JsonMappingException import com.google.android.material.color.DynamicColors import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.common.data.integration.IntegrationRepository @@ -213,10 +215,15 @@ class TemplateWidgetConfigureActivity : BaseWidgetConfigureActivity() { var enabled: Boolean withContext(Dispatchers.IO) { try { - templateText = integrationUseCase.renderTemplate(template, mapOf()) ?: getString(commonR.string.template_error) + templateText = integrationUseCase.renderTemplate(template, mapOf()).toString() enabled = true } catch (e: Exception) { - templateText = getString(commonR.string.template_render_error) + Log.e(TAG, "Exception while rendering template", e) + // JsonMappingException suggests that template is not a String (= error) + templateText = getString( + if (e.cause is JsonMappingException) commonR.string.template_error + else commonR.string.template_render_error + ) enabled = false } } diff --git a/wear/src/main/java/io/homeassistant/companion/android/tiles/TemplateTile.kt b/wear/src/main/java/io/homeassistant/companion/android/tiles/TemplateTile.kt index 3f33771df..c493455a8 100644 --- a/wear/src/main/java/io/homeassistant/companion/android/tiles/TemplateTile.kt +++ b/wear/src/main/java/io/homeassistant/companion/android/tiles/TemplateTile.kt @@ -11,6 +11,7 @@ import android.text.style.ForegroundColorSpan import android.text.style.RelativeSizeSpan import android.text.style.StyleSpan import android.text.style.UnderlineSpan +import android.util.Log import androidx.core.content.getSystemService import androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY import androidx.core.text.HtmlCompat.fromHtml @@ -32,6 +33,7 @@ import androidx.wear.tiles.TileBuilders.Tile import androidx.wear.tiles.TileService import androidx.wear.tiles.TimelineBuilders.Timeline import androidx.wear.tiles.TimelineBuilders.TimelineEntry +import com.fasterxml.jackson.databind.JsonMappingException import com.google.common.util.concurrent.ListenableFuture import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.R @@ -69,11 +71,12 @@ class TemplateTile : TileService() { val template = integrationUseCase.getTemplateTileContent() val renderedText = try { - integrationUseCase.renderTemplate(template, mapOf()) ?: getString( - commonR.string.template_error - ) + integrationUseCase.renderTemplate(template, mapOf()).toString() } catch (e: Exception) { - getString(commonR.string.template_render_error) + Log.e("TemplateTile", "Exception while rendering template", e) + // JsonMappingException suggests that template is not a String (= error) + if (e.cause is JsonMappingException) getString(commonR.string.template_error) + else getString(commonR.string.template_render_error) } Tile.Builder()