Wear: calculate square tile button size

This commit is contained in:
Andries Smit 2022-01-15 11:23:54 +01:00
parent 77b4330911
commit b5e338423a

View file

@ -7,6 +7,7 @@ import androidx.core.content.ContextCompat
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.wear.tiles.ActionBuilders import androidx.wear.tiles.ActionBuilders
import androidx.wear.tiles.ColorBuilders.argb import androidx.wear.tiles.ColorBuilders.argb
import androidx.wear.tiles.DeviceParametersBuilders.SCREEN_SHAPE_ROUND
import androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters import androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters
import androidx.wear.tiles.DimensionBuilders.SpProp import androidx.wear.tiles.DimensionBuilders.SpProp
import androidx.wear.tiles.DimensionBuilders.dp import androidx.wear.tiles.DimensionBuilders.dp
@ -121,21 +122,22 @@ abstract class TileBase : TileService() {
.build() .build()
} }
if (actions.isNotEmpty()) { if (actions.isNotEmpty()) {
val b = Column.Builder() with(Column.Builder()) {
if (actions.size == 1 || actions.size == 3) { if (actions.size == 1 || actions.size == 3) {
b.addContent(addRowSingle(actions[0], deviceParameters)) addContent(addRowSingle(actions[0], deviceParameters))
} }
if (actions.size == 4 || actions.size == 2) { if (actions.size == 4 || actions.size == 2) {
b.addContent(addRowDouble(actions[0], actions[1], deviceParameters)) addContent(addRowDouble(actions[0], actions[1], deviceParameters))
} }
if (actions.size == 3) { if (actions.size == 3) {
b.addContent(addRowDouble(actions[1], actions[2], deviceParameters)) addContent(addRowDouble(actions[1], actions[2], deviceParameters))
} }
if (actions.size == 4) { if (actions.size == 4) {
b.addContent(Spacer.Builder().setHeight(dp(SPACING_ACTIONS)).build()) addContent(Spacer.Builder().setHeight(dp(SPACING_ACTIONS)).build())
.addContent(addRowDouble(actions[2], actions[3], deviceParameters)) addContent(addRowDouble(actions[2], actions[3], deviceParameters))
}
return build()
} }
return b.build()
} }
return Text.Builder() return Text.Builder()
.setText(resources.getString(R.string.tile_no_config)) .setText(resources.getString(R.string.tile_no_config))
@ -171,7 +173,7 @@ abstract class TileBase : TileService() {
} }
private fun action(action: Action, deviceParameters: DeviceParameters): LayoutElement { private fun action(action: Action, deviceParameters: DeviceParameters): LayoutElement {
val circleDiameter = ((sqrt(2f) - 1) * deviceParameters.screenHeightDp) - (2 * SPACING_ACTIONS) val circleDiameter = circleDiameter(deviceParameters)
val iconSize = dp(circleDiameter * ICON_SIZE_FRACTION) val iconSize = dp(circleDiameter * ICON_SIZE_FRACTION)
val text = resources.getString(action.nameRes) val text = resources.getString(action.nameRes)
return Box.Builder() return Box.Builder()
@ -227,6 +229,11 @@ abstract class TileBase : TileService() {
.build() .build()
} }
private fun circleDiameter(deviceParameters: DeviceParameters) = when (deviceParameters.screenShape) {
SCREEN_SHAPE_ROUND -> ((sqrt(2f) - 1) * deviceParameters.screenHeightDp) - (2 * SPACING_ACTIONS)
else -> 0.5f * deviceParameters.screenHeightDp - SPACING_ACTIONS
}
private fun buttonTextSize(deviceParameters: DeviceParameters, text: String): SpProp { private fun buttonTextSize(deviceParameters: DeviceParameters, text: String): SpProp {
if (text.length > 6) { if (text.length > 6) {
return sp(if (isLargeScreen(deviceParameters)) 14f else 12f) return sp(if (isLargeScreen(deviceParameters)) 14f else 12f)
@ -283,5 +290,4 @@ abstract class TileBase : TileService() {
editor.apply() editor.apply()
} }
} }
} }