diff --git a/app/src/full/java/io/homeassistant/companion/android/settings/wear/views/SettingsWearMainView.kt b/app/src/full/java/io/homeassistant/companion/android/settings/wear/views/SettingsWearMainView.kt index b948a5884..0e2203cf5 100644 --- a/app/src/full/java/io/homeassistant/companion/android/settings/wear/views/SettingsWearMainView.kt +++ b/app/src/full/java/io/homeassistant/companion/android/settings/wear/views/SettingsWearMainView.kt @@ -52,9 +52,8 @@ class SettingsWearMainView : AppCompatActivity() { LoadSettingsHomeView( settingsWearViewModel, currentNodes.firstOrNull()?.displayName ?: "unknown", - this::loginWearOs, - this::onBackPressed - ) + this::loginWearOs + ) { onBackPressedDispatcher.onBackPressed() } } if (registerUrl != null) { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 461a64945..074047718 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -65,6 +65,7 @@ android:supportsRtl="true" android:theme="@style/Theme.HomeAssistant" android:networkSecurityConfig="@xml/network_security_config" + android:enableOnBackInvokedCallback="true" tools:ignore="GoogleAppIndexingWarning"> diff --git a/app/src/main/java/io/homeassistant/companion/android/onboarding/OnboardingActivity.kt b/app/src/main/java/io/homeassistant/companion/android/onboarding/OnboardingActivity.kt index e55965bf4..bdeeea097 100644 --- a/app/src/main/java/io/homeassistant/companion/android/onboarding/OnboardingActivity.kt +++ b/app/src/main/java/io/homeassistant/companion/android/onboarding/OnboardingActivity.kt @@ -3,6 +3,7 @@ package io.homeassistant.companion.android.onboarding import android.os.Build import android.os.Bundle import android.view.KeyEvent +import androidx.activity.OnBackPressedCallback import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.core.app.NotificationManagerCompat @@ -68,13 +69,15 @@ class OnboardingActivity : AppCompatActivity() { } } } - } - override fun onBackPressed() { - if (supportFragmentManager.backStackEntryCount > 0) { - supportFragmentManager.popBackStack() - } else { - super.onBackPressed() + val onBackPressed = object : OnBackPressedCallback(supportFragmentManager.backStackEntryCount > 0) { + override fun handleOnBackPressed() { + supportFragmentManager.popBackStack() + } + } + onBackPressedDispatcher.addCallback(this, onBackPressed) + supportFragmentManager.addOnBackStackChangedListener { + onBackPressed.isEnabled = supportFragmentManager.backStackEntryCount > 0 } } diff --git a/app/src/main/java/io/homeassistant/companion/android/settings/SettingsActivity.kt b/app/src/main/java/io/homeassistant/companion/android/settings/SettingsActivity.kt index 96dbffb7f..c951f8c9b 100644 --- a/app/src/main/java/io/homeassistant/companion/android/settings/SettingsActivity.kt +++ b/app/src/main/java/io/homeassistant/companion/android/settings/SettingsActivity.kt @@ -80,7 +80,7 @@ class SettingsActivity : BaseActivity() { if (supportFragmentManager.backStackEntryCount > 0) { supportFragmentManager.popBackStack() } else { - onBackPressed() + onBackPressedDispatcher.onBackPressed() } true } diff --git a/app/src/main/java/io/homeassistant/companion/android/webview/WebViewActivity.kt b/app/src/main/java/io/homeassistant/companion/android/webview/WebViewActivity.kt index 46a0674e2..e0d372e6e 100644 --- a/app/src/main/java/io/homeassistant/companion/android/webview/WebViewActivity.kt +++ b/app/src/main/java/io/homeassistant/companion/android/webview/WebViewActivity.kt @@ -42,6 +42,7 @@ import android.webkit.WebView import android.widget.FrameLayout import android.widget.ImageView import android.widget.Toast +import androidx.activity.OnBackPressedCallback import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AlertDialog import androidx.core.app.ActivityCompat @@ -247,6 +248,14 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi decor = window.decorView as FrameLayout webView = binding.webview + + val onBackPressed = object : OnBackPressedCallback(webView.canGoBack()) { + override fun handleOnBackPressed() { + if (webView.canGoBack()) webView.goBack() + } + } + onBackPressedDispatcher.addCallback(this, onBackPressed) + webView.apply { // TODO This quick bar workaround only works on Home Assistant core versions <2022.7 // If not 'fixed' or officially supported: should be removed in Android 2023.1 (GitHub: #2690) @@ -406,6 +415,15 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi } return false } + + override fun doUpdateVisitedHistory( + view: WebView?, + url: String?, + isReload: Boolean + ) { + super.doUpdateVisitedHistory(view, url, isReload) + onBackPressed.isEnabled = canGoBack() + } } setDownloadListener { url, _, contentDisposition, mimetype, _ -> @@ -1009,14 +1027,6 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi finish() } - override fun onBackPressed() { - if (webView.canGoBack()) { - webView.goBack() - } else { - super.onBackPressed() - } - } - override fun loadUrl(url: String) { loadedUrl = url webView.loadUrl(url)