Don't use a hardcoded list of apps for Wear OS detection (#2958)

This commit is contained in:
Joris Pelgröm 2022-10-19 20:49:12 +02:00 committed by GitHub
parent 7c792c4d4b
commit 51f9a3fe68
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 12 deletions

View file

@ -0,0 +1,25 @@
package io.homeassistant.companion.android.settings.wear
import android.content.Context
import android.util.Log
import com.google.android.gms.wearable.Wearable
import kotlinx.coroutines.tasks.await
object SettingsWearDetection {
private const val TAG = "SettingsWearDetection"
/**
* Returns if there are any Wear OS devices connected to this device. It does **not** indicate
* if they have the Home Assistant app installed.
*/
suspend fun hasAnyNodes(context: Context): Boolean {
return try {
val nodeClient = Wearable.getNodeClient(context)
nodeClient.connectedNodes.await().any()
} catch (e: Exception) {
Log.e(TAG, "Exception while discovering nodes", e)
false
}
}
}

View file

@ -45,6 +45,7 @@ import io.homeassistant.companion.android.settings.sensor.SensorUpdateFrequencyF
import io.homeassistant.companion.android.settings.shortcuts.ManageShortcutsSettingsFragment
import io.homeassistant.companion.android.settings.ssid.SsidFragment
import io.homeassistant.companion.android.settings.wear.SettingsWearActivity
import io.homeassistant.companion.android.settings.wear.SettingsWearDetection
import io.homeassistant.companion.android.settings.websocket.WebsocketSettingFragment
import io.homeassistant.companion.android.settings.widgets.ManageWidgetsSettingsFragment
import kotlinx.coroutines.Dispatchers
@ -317,18 +318,13 @@ class SettingsFragment constructor(
}
}
val pm = requireContext().packageManager
val wearCompanionApps = listOf(
"com.google.android.wearable.app",
"com.google.android.apps.wear.companion",
"com.samsung.android.app.watchmanager",
"com.montblanc.summit.companion.android"
)
findPreference<PreferenceCategory>("wear_category")?.isVisible =
BuildConfig.FLAVOR == "full" && wearCompanionApps.any { pm.getLaunchIntentForPackage(it) != null }
findPreference<Preference>("wear_settings")?.setOnPreferenceClickListener {
startActivity(SettingsWearActivity.newInstance(requireContext()))
return@setOnPreferenceClickListener true
lifecycleScope.launch {
findPreference<PreferenceCategory>("wear_category")?.isVisible =
SettingsWearDetection.hasAnyNodes(requireContext())
findPreference<Preference>("wear_settings")?.setOnPreferenceClickListener {
startActivity(SettingsWearActivity.newInstance(requireContext()))
return@setOnPreferenceClickListener true
}
}
findPreference<Preference>("changelog_github")?.let {

View file

@ -0,0 +1,15 @@
package io.homeassistant.companion.android.settings.wear
import android.content.Context
object SettingsWearDetection {
/**
* Returns if there are any Wear OS devices connected to this device. It does **not** indicate
* if they have the Home Assistant app installed.
*/
suspend fun hasAnyNodes(context: Context): Boolean {
// The minimal version of the app doesn't support Wear OS, so always return false
return false
}
}