Fix "Always show first view" option with HA > 2023.04

This commit is contained in:
chriss158 2023-04-06 14:29:12 +02:00
parent 75c7c08b2b
commit bb1421e3f7
3 changed files with 32 additions and 4 deletions

View file

@ -1523,15 +1523,36 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi
// /config/* as these are the settings of HA but NOT /config/dashboard. This is just the overview of the HA settings
// /hassio/* as these are the addons section of HA settings.
if (webView.url?.matches(".*://.*/(config/(?!\\bdashboard\\b)|hassio)/*.*".toRegex()) == false) {
Log.d(TAG, "Show first view of default dashboard.")
val currentHomeAssistantVersion = presenter.getActiveServerVersion()
Log.d(TAG, "Show first view of default dashboard (Current Server Home Assistant version: ${currentHomeAssistantVersion?.year}.${currentHomeAssistantVersion?.month})")
var clickElement = """
document.querySelector('body > home-assistant')
.shadowRoot.querySelector('home-assistant-main')
.shadowRoot.querySelector('ha-drawer > ha-sidebar')
.shadowRoot.querySelector('paper-listbox > ' + anchor)
"""
if (currentHomeAssistantVersion != null) {
if (currentHomeAssistantVersion.month < 4 || currentHomeAssistantVersion.year < 2023) {
// For HA < 2023.04 we nee a different selector
clickElement = """
document.querySelector('body > home-assistant')
.shadowRoot.querySelector('home-assistant-main')
.shadowRoot.querySelector('#drawer > ha-sidebar')
.shadowRoot.querySelector('paper-listbox > ' + anchor)
"""
}
}
webView.evaluateJavascript(
"""
var anchor = 'a:nth-child(1)';
var defaultPanel = window.localStorage.getItem('defaultPanel')?.replaceAll('"',"");
if(defaultPanel) anchor = 'a[href="/' + defaultPanel + '"]';
document.querySelector('body > home-assistant').shadowRoot.querySelector('home-assistant-main')
.shadowRoot.querySelector('#drawer > ha-sidebar')
.shadowRoot.querySelector('paper-listbox > ' + anchor).click();
var clickElement = $clickElement;
clickElement.click();
window.scrollTo(0, 0);
""",
null

View file

@ -3,6 +3,7 @@ package io.homeassistant.companion.android.webview
import android.content.Context
import android.content.IntentSender
import androidx.activity.result.ActivityResult
import io.homeassistant.companion.android.common.data.HomeAssistantVersion
import io.homeassistant.companion.android.matter.MatterFrontendCommissioningStatus
import kotlinx.coroutines.flow.Flow
@ -17,6 +18,8 @@ interface WebViewPresenter {
fun nextServer()
fun previousServer()
fun getActiveServerVersion(): HomeAssistantVersion?
fun onGetExternalAuth(context: Context, callback: String, force: Boolean)
fun checkSecurityVersion()

View file

@ -8,6 +8,7 @@ import android.net.Uri
import android.util.Log
import androidx.activity.result.ActivityResult
import dagger.hilt.android.qualifiers.ActivityContext
import io.homeassistant.companion.android.common.data.HomeAssistantVersion
import io.homeassistant.companion.android.common.data.authentication.SessionState
import io.homeassistant.companion.android.common.data.prefs.PrefsRepository
import io.homeassistant.companion.android.common.data.servers.ServerManager
@ -142,6 +143,9 @@ class WebViewPresenterImpl @Inject constructor(
override fun nextServer() = moveToServer(next = true)
override fun previousServer() = moveToServer(next = false)
override fun getActiveServerVersion(): HomeAssistantVersion? {
return serverManager.getServer(getActiveServer())?.version
}
private fun moveToServer(next: Boolean) {
val servers = serverManager.defaultServers