Skip to content

Commit

Permalink
[WEAR] Base for info screens
Browse files Browse the repository at this point in the history
  • Loading branch information
kamgurgul committed Jan 1, 2025
1 parent bb6efbb commit bc571c1
Showing 1 changed file with 33 additions and 112 deletions.
Original file line number Diff line number Diff line change
@@ -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

@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
)
)
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

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
) {
SampleDialogContent(onCancel, onDismiss, onOk)
}
}

@Composable
fun SampleDialogContent(
onCancel: () -> Unit,
onDismiss: () -> Unit,
onOk: () -> Unit
) {
AlertContent(
icon = {},
title = "Title",
onCancel = {
onCancel()
onDismiss()
},
onOk = {
onOk()
onDismiss()
}
fun WearInfoContainerScreen() {
val pagerState = rememberPagerState(pageCount = { INFO_PAGE_AMOUNT })
PagerScreen(
state = pagerState,
) {
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")
}
}
}

0 comments on commit bc571c1

Please sign in to comment.