Skip to content

Commit

Permalink
Sort entities, add time and headers in wear settings (#1912)
Browse files Browse the repository at this point in the history
* Sort entities, add time and headers in wear settings

* Review comment
  • Loading branch information
dshokouhi committed Nov 14, 2021
1 parent 1e5534d commit fe3bbdf
Show file tree
Hide file tree
Showing 3 changed files with 169 additions and 144 deletions.
Expand Up @@ -64,11 +64,12 @@ fun MainView(
var expandedScripts: Boolean by rememberSaveable { mutableStateOf(true) }
var expandedSwitches: Boolean by rememberSaveable { mutableStateOf(true) }

val scenes = entities.filter { it.key.split(".")[0] == "scene" }.values.toList()
val scripts = entities.filter { it.key.split(".")[0] == "script" }.values.toList()
val lights = entities.filter { it.key.split(".")[0] == "light" }.values.toList()
val inputBooleans = entities.filter { it.key.split(".")[0] == "input_boolean" }.values.toList()
val switches = entities.filter { it.key.split(".")[0] == "switch" }.values.toList()
val entitiesList = entities.values.toList().sortedBy { it.entityId }
val scenes = entitiesList.filter { it.entityId.split(".")[0] == "scene" }
val scripts = entitiesList.filter { it.entityId.split(".")[0] == "script" }
val lights = entitiesList.filter { it.entityId.split(".")[0] == "light" }
val inputBooleans = entitiesList.filter { it.entityId.split(".")[0] == "input_boolean" }
val switches = entitiesList.filter { it.entityId.split(".")[0] == "switch" }

val haptic = LocalHapticFeedback.current
val context = LocalContext.current
Expand Down
Expand Up @@ -17,9 +17,13 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.wear.compose.material.Chip
import androidx.wear.compose.material.ChipDefaults
import androidx.wear.compose.material.ExperimentalWearMaterialApi
import androidx.wear.compose.material.PositionIndicator
import androidx.wear.compose.material.Scaffold
import androidx.wear.compose.material.ScalingLazyColumn
import androidx.wear.compose.material.ScalingLazyListState
import androidx.wear.compose.material.Text
import androidx.wear.compose.material.TimeText
import androidx.wear.compose.material.ToggleChip
import androidx.wear.compose.material.ToggleChipDefaults
import androidx.wear.compose.material.rememberScalingLazyListState
Expand All @@ -31,6 +35,7 @@ import io.homeassistant.companion.android.util.RotaryEventDispatcher
import io.homeassistant.companion.android.util.RotaryEventState
import io.homeassistant.companion.android.util.previewFavoritesList

@ExperimentalWearMaterialApi
@Composable
fun SettingsView(
favorites: List<String>,
Expand All @@ -44,159 +49,176 @@ fun SettingsView(
) {
val scalingLazyListState: ScalingLazyListState = rememberScalingLazyListState()
RotaryEventState(scrollState = scalingLazyListState)

ScalingLazyColumn(
modifier = Modifier
.fillMaxSize(),
contentPadding = PaddingValues(
top = 40.dp,
start = 8.dp,
end = 8.dp,
bottom = 40.dp
),
verticalArrangement = Arrangement.spacedBy(4.dp),
horizontalAlignment = Alignment.CenterHorizontally,
state = scalingLazyListState
) {
item {
ListHeader(id = R.string.settings)
Scaffold(
positionIndicator = {
if (scalingLazyListState.isScrollInProgress)
PositionIndicator(scalingLazyListState = scalingLazyListState)
},
timeText = {
if (!scalingLazyListState.isScrollInProgress)
TimeText()
}
item {
Chip(
modifier = Modifier
.fillMaxWidth(),
icon = {
Image(asset = CommunityMaterial.Icon3.cmd_star)
},
label = {
Text(
text = stringResource(id = R.string.favorite)
) {
ScalingLazyColumn(
modifier = Modifier
.fillMaxSize(),
contentPadding = PaddingValues(
top = 20.dp,
start = 8.dp,
end = 8.dp,
bottom = 40.dp
),
verticalArrangement = Arrangement.spacedBy(4.dp),
horizontalAlignment = Alignment.CenterHorizontally,
state = scalingLazyListState
) {
item {
ListHeader(id = R.string.favorite_settings)
}
item {
Chip(
modifier = Modifier
.fillMaxWidth(),
icon = {
Image(asset = CommunityMaterial.Icon3.cmd_star)
},
label = {
Text(
text = stringResource(id = R.string.favorite)
)
},
onClick = onClickSetFavorites,
colors = ChipDefaults.primaryChipColors(
contentColor = Color.Black
)
},
onClick = onClickSetFavorites,
colors = ChipDefaults.primaryChipColors(
contentColor = Color.Black
)
)
}
item {
Chip(
modifier = Modifier
.fillMaxWidth(),
icon = {
Image(asset = CommunityMaterial.Icon.cmd_delete)
},
label = {
Text(
text = stringResource(id = R.string.clear_favorites),
)
},
onClick = onClearFavorites,
colors = ChipDefaults.primaryChipColors(
contentColor = Color.Black
),
secondaryLabel = {
Text(
text = stringResource(id = R.string.irreverisble)
)
},
enabled = favorites.isNotEmpty()
)
}

item {
val haptic = LocalHapticFeedback.current
ToggleChip(
modifier = Modifier
.fillMaxWidth()
.padding(top = 10.dp),
checked = isHapticEnabled,
onCheckedChange = {
onHapticEnabled(it)
haptic.performHapticFeedback(HapticFeedbackType.LongPress)
},
label = {
Text(stringResource(R.string.setting_haptic_label))
},
appIcon = {
Image(
asset =
if (isHapticEnabled)
CommunityMaterial.Icon3.cmd_watch_vibrate
else
CommunityMaterial.Icon3.cmd_watch_vibrate_off
}
item {
Chip(
modifier = Modifier
.fillMaxWidth()
.padding(top = 10.dp),
icon = {
Image(asset = CommunityMaterial.Icon.cmd_delete)
},
label = {
Text(
text = stringResource(id = R.string.clear_favorites),
)
},
onClick = onClearFavorites,
colors = ChipDefaults.primaryChipColors(
contentColor = Color.Black
),
secondaryLabel = {
Text(
text = stringResource(id = R.string.irreverisble)
)
},
enabled = favorites.isNotEmpty()
)
}
item {
ListHeader(
id = R.string.feedback_settings,
modifier = Modifier.padding(top = 16.dp)
)
}
item {
val haptic = LocalHapticFeedback.current
ToggleChip(
modifier = Modifier
.fillMaxWidth()
.padding(top = 10.dp),
checked = isHapticEnabled,
onCheckedChange = {
onHapticEnabled(it)
haptic.performHapticFeedback(HapticFeedbackType.LongPress)
},
label = {
Text(stringResource(R.string.setting_haptic_label))
},
appIcon = {
Image(
asset =
if (isHapticEnabled)
CommunityMaterial.Icon3.cmd_watch_vibrate
else
CommunityMaterial.Icon3.cmd_watch_vibrate_off
)
},
colors = ToggleChipDefaults.toggleChipColors(
checkedStartBackgroundColor = Color(0xFFAECBFA),
checkedEndBackgroundColor = Color(0xFFAECBFA),
uncheckedStartBackgroundColor = Color(0xFFAECBFA),
uncheckedEndBackgroundColor = Color(0xFFAECBFA),
checkedContentColor = Color.Black,
uncheckedContentColor = Color.Black,
)
},
colors = ToggleChipDefaults.toggleChipColors(
checkedStartBackgroundColor = Color(0xFFAECBFA),
checkedEndBackgroundColor = Color(0xFFAECBFA),
uncheckedStartBackgroundColor = Color(0xFFAECBFA),
uncheckedEndBackgroundColor = Color(0xFFAECBFA),
checkedContentColor = Color.Black,
uncheckedContentColor = Color.Black,
)
)
}
item {
ToggleChip(
modifier = Modifier
.fillMaxWidth()
.padding(top = 10.dp),
checked = isToastEnabled,
onCheckedChange = {
onToastEnabled(it)
},
label = {
Text(stringResource(R.string.setting_toast_label))
},
appIcon = {
Image(
asset =
if (isToastEnabled)
CommunityMaterial.Icon3.cmd_message
else
CommunityMaterial.Icon3.cmd_message_off
}
item {
ToggleChip(
modifier = Modifier
.fillMaxWidth()
.padding(top = 10.dp),
checked = isToastEnabled,
onCheckedChange = {
onToastEnabled(it)
},
label = {
Text(stringResource(R.string.setting_toast_label))
},
appIcon = {
Image(
asset =
if (isToastEnabled)
CommunityMaterial.Icon3.cmd_message
else
CommunityMaterial.Icon3.cmd_message_off
)
},
colors = ToggleChipDefaults.toggleChipColors(
checkedStartBackgroundColor = Color(0xFFAECBFA),
checkedEndBackgroundColor = Color(0xFFAECBFA),
uncheckedStartBackgroundColor = Color(0xFFAECBFA),
uncheckedEndBackgroundColor = Color(0xFFAECBFA),
checkedContentColor = Color.Black,
uncheckedContentColor = Color.Black,
)
},
colors = ToggleChipDefaults.toggleChipColors(
checkedStartBackgroundColor = Color(0xFFAECBFA),
checkedEndBackgroundColor = Color(0xFFAECBFA),
uncheckedStartBackgroundColor = Color(0xFFAECBFA),
uncheckedEndBackgroundColor = Color(0xFFAECBFA),
checkedContentColor = Color.Black,
uncheckedContentColor = Color.Black,
)
)
}
}

item {
ListHeader(
id = R.string.tile_settings,
modifier = Modifier.padding(top = 16.dp)
)
}
item {
Chip(
modifier = Modifier
.fillMaxWidth(),
icon = {
Image(asset = CommunityMaterial.Icon3.cmd_star_circle_outline)
},
label = {
Text(
text = stringResource(id = R.string.shortcuts)
)
},
onClick = onClickSetShortcuts,
colors = ChipDefaults.primaryChipColors(
contentColor = Color.Black
item {
ListHeader(
id = R.string.tile_settings,
modifier = Modifier.padding(top = 16.dp)
)
}
item {
Chip(
modifier = Modifier
.fillMaxWidth(),
icon = {
Image(asset = CommunityMaterial.Icon3.cmd_star_circle_outline)
},
label = {
Text(
text = stringResource(id = R.string.shortcuts)
)
},
onClick = onClickSetShortcuts,
colors = ChipDefaults.primaryChipColors(
contentColor = Color.Black

)
)
)
}
}
}
}

@ExperimentalWearMaterialApi
@Preview
@Composable
private fun PreviewSettingsView() {
Expand Down
2 changes: 2 additions & 0 deletions wear/src/main/res/values/strings.xml
Expand Up @@ -49,4 +49,6 @@
<string name="toast_message">%1$s was selected</string>
<string name="setting_toast_label">Enable Toast Confirmation</string>
<string name="setting_haptic_label">Enable Haptic Feeback</string>
<string name="feedback_settings">Feedback Settings</string>
<string name="favorite_settings">Favorite Settings</string>
</resources>

0 comments on commit fe3bbdf

Please sign in to comment.