Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sort entities, add time and headers in wear settings #1912

Merged
merged 2 commits into from Nov 14, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -64,11 +64,11 @@ 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 scenes = entities.filter { it.key.split(".")[0] == "scene" }.values.toList().sortedBy { it.entityId }
val scripts = entities.filter { it.key.split(".")[0] == "script" }.values.toList().sortedBy { it.entityId }
val lights = entities.filter { it.key.split(".")[0] == "light" }.values.toList().sortedBy { it.entityId }
val inputBooleans = entities.filter { it.key.split(".")[0] == "input_boolean" }.values.toList().sortedBy { it.entityId }
val switches = entities.filter { it.key.split(".")[0] == "switch" }.values.toList().sortedBy { it.entityId }
dshokouhi marked this conversation as resolved.
Show resolved Hide resolved

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>