mirror of
https://github.com/home-assistant/android
synced 2024-10-15 20:43:06 +00:00
Add a dynamic color sensor for accent color (#2884)
* Add a dynamic color sensor for accent color * Update colors to color to match material design label
This commit is contained in:
parent
80816df6f5
commit
763819746a
|
@ -0,0 +1,73 @@
|
|||
package io.homeassistant.companion.android.sensors
|
||||
|
||||
import android.content.Context
|
||||
import androidx.core.graphics.blue
|
||||
import androidx.core.graphics.green
|
||||
import androidx.core.graphics.red
|
||||
import com.google.android.material.color.DynamicColors
|
||||
import io.homeassistant.companion.android.common.sensors.SensorManager
|
||||
import io.homeassistant.companion.android.common.R as commonR
|
||||
|
||||
class DynamicColorSensorManager : SensorManager {
|
||||
companion object {
|
||||
private const val TAG = "DynamicColor"
|
||||
|
||||
val accentColorSensor = SensorManager.BasicSensor(
|
||||
"accent_color",
|
||||
"sensor",
|
||||
commonR.string.sensor_name_accent_color_sensor,
|
||||
commonR.string.sensor_description_accent_color_sensor,
|
||||
"mdi:palette",
|
||||
entityCategory = SensorManager.ENTITY_CATEGORY_DIAGNOSTIC
|
||||
)
|
||||
}
|
||||
|
||||
override fun docsLink(): String {
|
||||
return "https://companion.home-assistant.io/docs/core/sensors#dynamic-color-sensor"
|
||||
}
|
||||
override val enabledByDefault: Boolean
|
||||
get() = false
|
||||
override val name: Int
|
||||
get() = commonR.string.sensor_name_dynamic_color
|
||||
|
||||
override fun getAvailableSensors(context: Context): List<SensorManager.BasicSensor> {
|
||||
return listOf(accentColorSensor)
|
||||
}
|
||||
|
||||
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||
return emptyArray()
|
||||
}
|
||||
|
||||
override fun requestSensorUpdate(context: Context) {
|
||||
updateAccentColor(context)
|
||||
}
|
||||
|
||||
override fun hasSensor(context: Context): Boolean {
|
||||
return DynamicColors.isDynamicColorAvailable()
|
||||
}
|
||||
|
||||
private fun updateAccentColor(context: Context) {
|
||||
|
||||
if (!isEnabled(context, accentColorSensor.id))
|
||||
return
|
||||
|
||||
val dynamicColorContext = DynamicColors.wrapContextIfAvailable(context)
|
||||
val attrsToResolve = intArrayOf(
|
||||
android.R.attr.colorAccent, // 0
|
||||
)
|
||||
val test = dynamicColorContext.obtainStyledAttributes(attrsToResolve)
|
||||
val accent = test.getColor(0, 0)
|
||||
val accentHex = java.lang.String.format("#%06X", 0xFFFFFF and accent)
|
||||
test.recycle()
|
||||
|
||||
onSensorUpdated(
|
||||
context,
|
||||
accentColorSensor,
|
||||
accentHex,
|
||||
accentColorSensor.statelessIcon,
|
||||
mapOf(
|
||||
"rgb_color" to listOf(accent.red, accent.green, accent.blue)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
|
@ -38,6 +38,7 @@ class SensorReceiver : SensorReceiverBase() {
|
|||
BatterySensorManager(),
|
||||
BluetoothSensorManager(),
|
||||
DNDSensorManager(),
|
||||
DynamicColorSensorManager(),
|
||||
DevicePolicyManager(),
|
||||
GeocodeSensorManager(),
|
||||
KeyguardSensorManager(),
|
||||
|
|
|
@ -922,4 +922,7 @@
|
|||
<string name="widget_checkbox_require_authentication">Require Authentication</string>
|
||||
<string name="widget_error_authenticating">Error authenticating - is an authentication method configured?</string>
|
||||
<string name="sensor_description_battery_power">The current wattage of the device. To get the most out of this sensor consider using the \"Fast while charging\" sensor update frequency setting. If your values are not as expected you may need to adjust the \"Battery Current Divisor\" setting to get a proper unit of amperes for the \"current\" attribute. Android is supposed to report microamperes however, some devices may report a different unit. The default will convert microamperes to amperes.</string>
|
||||
<string name="sensor_name_accent_color_sensor">Accent Color</string>
|
||||
<string name="sensor_description_accent_color_sensor">A hexadecimal color value for the dynamic accent color used in the device theme</string>
|
||||
<string name="sensor_name_dynamic_color">Dynamic Color</string>
|
||||
</resources>
|
||||
|
|
Loading…
Reference in a new issue