[WEAR] Base for info screens
This commit is contained in:
+33
-112
@@ -1,122 +1,43 @@
|
||||
@file:OptIn(ExperimentalHorologistApi::class)
|
||||
|
||||
package com.kgurgul.cpuinfo.wear.features.information
|
||||
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Build
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.wear.compose.material.Text
|
||||
import androidx.wear.compose.material.TitleCard
|
||||
import androidx.wear.compose.material.dialog.Dialog
|
||||
import com.google.android.horologist.annotations.ExperimentalHorologistApi
|
||||
import com.google.android.horologist.compose.layout.ScalingLazyColumn
|
||||
import com.google.android.horologist.compose.layout.ScalingLazyColumnDefaults
|
||||
import com.google.android.horologist.compose.layout.ScalingLazyColumnDefaults.ItemType
|
||||
import com.google.android.horologist.compose.layout.ScreenScaffold
|
||||
import com.google.android.horologist.compose.layout.rememberResponsiveColumnState
|
||||
import com.google.android.horologist.compose.material.AlertContent
|
||||
import com.google.android.horologist.compose.material.Button
|
||||
import com.google.android.horologist.compose.material.Chip
|
||||
import com.google.android.horologist.compose.material.ListHeaderDefaults.firstItemPadding
|
||||
import com.google.android.horologist.compose.material.ResponsiveListHeader
|
||||
import androidx.wear.compose.foundation.pager.rememberPagerState
|
||||
import com.google.android.horologist.compose.pager.PagerScreen
|
||||
import com.kgurgul.cpuinfo.features.information.InfoContainerViewModel.Companion.ANDROID_POS
|
||||
import com.kgurgul.cpuinfo.features.information.InfoContainerViewModel.Companion.CPU_POS
|
||||
import com.kgurgul.cpuinfo.features.information.InfoContainerViewModel.Companion.GPU_POS
|
||||
import com.kgurgul.cpuinfo.features.information.InfoContainerViewModel.Companion.HARDWARE_POS
|
||||
import com.kgurgul.cpuinfo.features.information.InfoContainerViewModel.Companion.INFO_PAGE_AMOUNT
|
||||
import com.kgurgul.cpuinfo.features.information.InfoContainerViewModel.Companion.RAM_POS
|
||||
import com.kgurgul.cpuinfo.features.information.InfoContainerViewModel.Companion.SCREEN_POS
|
||||
import com.kgurgul.cpuinfo.features.information.InfoContainerViewModel.Companion.SENSORS_POS
|
||||
import com.kgurgul.cpuinfo.features.information.InfoContainerViewModel.Companion.STORAGE_POS
|
||||
import com.kgurgul.cpuinfo.features.information.cpu.CpuInfoScreen
|
||||
import com.kgurgul.cpuinfo.features.information.gpu.GpuInfoScreen
|
||||
import com.kgurgul.cpuinfo.features.information.hardware.HardwareInfoScreen
|
||||
import com.kgurgul.cpuinfo.features.information.os.OsInfoScreen
|
||||
import com.kgurgul.cpuinfo.features.information.ram.RamInfoScreen
|
||||
import com.kgurgul.cpuinfo.features.information.screen.ScreenInfoScreen
|
||||
import com.kgurgul.cpuinfo.features.information.sensors.SensorsInfoScreen
|
||||
import com.kgurgul.cpuinfo.features.information.storage.StorageInfoScreen
|
||||
|
||||
|
||||
@Composable
|
||||
fun WearInfoContainerScreen() {
|
||||
var showDialog by remember { mutableStateOf(false) }
|
||||
|
||||
/*
|
||||
* Specifying the types of items that appear at the start and end of the list ensures that the
|
||||
* appropriate padding is used.
|
||||
*/
|
||||
val columnState = rememberResponsiveColumnState(
|
||||
contentPadding = ScalingLazyColumnDefaults.padding(
|
||||
first = ItemType.Text,
|
||||
last = ItemType.SingleButton
|
||||
)
|
||||
)
|
||||
|
||||
ScreenScaffold(scrollState = columnState) {
|
||||
/*
|
||||
* The Horologist [ScalingLazyColumn] takes care of the horizontal and vertical
|
||||
* padding for the list, so there is no need to specify it, as in the [GreetingScreen]
|
||||
* composable.
|
||||
*/
|
||||
ScalingLazyColumn(
|
||||
columnState = columnState
|
||||
) {
|
||||
item {
|
||||
ResponsiveListHeader(contentPadding = firstItemPadding()) {
|
||||
Text(text = "Header")
|
||||
}
|
||||
}
|
||||
item {
|
||||
TitleCard(title = { Text("Example Title") }, onClick = { }) {
|
||||
Text("Example Content\nMore Lines\nAnd More")
|
||||
}
|
||||
}
|
||||
item {
|
||||
Chip(label = "Example Chip", onClick = { })
|
||||
}
|
||||
item {
|
||||
Button(
|
||||
imageVector = Icons.Default.Build,
|
||||
contentDescription = "Example Button",
|
||||
onClick = { showDialog = true }
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SampleDialog(
|
||||
showDialog = showDialog,
|
||||
onDismiss = { showDialog = false },
|
||||
onCancel = {},
|
||||
onOk = {}
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun SampleDialog(
|
||||
showDialog: Boolean,
|
||||
onDismiss: () -> Unit,
|
||||
onCancel: () -> Unit,
|
||||
onOk: () -> Unit
|
||||
) {
|
||||
val state = rememberResponsiveColumnState()
|
||||
|
||||
Dialog(
|
||||
showDialog = showDialog,
|
||||
onDismissRequest = onDismiss,
|
||||
scrollState = state.state
|
||||
val pagerState = rememberPagerState(pageCount = { INFO_PAGE_AMOUNT })
|
||||
PagerScreen(
|
||||
state = pagerState,
|
||||
) {
|
||||
SampleDialogContent(onCancel, onDismiss, onOk)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun SampleDialogContent(
|
||||
onCancel: () -> Unit,
|
||||
onDismiss: () -> Unit,
|
||||
onOk: () -> Unit
|
||||
) {
|
||||
AlertContent(
|
||||
icon = {},
|
||||
title = "Title",
|
||||
onCancel = {
|
||||
onCancel()
|
||||
onDismiss()
|
||||
},
|
||||
onOk = {
|
||||
onOk()
|
||||
onDismiss()
|
||||
}
|
||||
) {
|
||||
item {
|
||||
Text(text = "An unknown error occurred during the request.")
|
||||
when (it) {
|
||||
CPU_POS -> CpuInfoScreen()
|
||||
GPU_POS -> GpuInfoScreen()
|
||||
RAM_POS -> RamInfoScreen()
|
||||
STORAGE_POS -> StorageInfoScreen()
|
||||
SCREEN_POS -> ScreenInfoScreen()
|
||||
ANDROID_POS -> OsInfoScreen()
|
||||
HARDWARE_POS -> HardwareInfoScreen()
|
||||
SENSORS_POS -> SensorsInfoScreen()
|
||||
else -> throw IllegalArgumentException("Unknown position")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user