diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 99244322..d3769635 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -21,6 +21,7 @@ composeAdaptive = "1.0.1"
composeUiTest = "1.7.6"
composeMultiplatform = "1.7.3"
dependencyUpdate = "0.51.0"
+horologist = "0.7.8-alpha"
kermit = "2.0.5"
koin = "4.0.1"
kotlin = "2.1.0"
@@ -56,11 +57,13 @@ androidx-test-uiautomator = { group = "androidx.test.uiautomator", name = "uiaut
androidx-tv = { module = "androidx.tv:tv-material", version.ref = "androidxTv" }
androidx-wear-foundation = { module = "androidx.wear.compose:compose-foundation", version.ref = "androidxWear" }
androidx-wear-material = { module = "androidx.wear.compose:compose-material", version.ref = "androidxWear" }
-androidx-wear-navigation = { module = "androidx.wear.compose:compose-navigation ń ", version.ref = "androidxWear" }
+androidx-wear-navigation = { module = "androidx.wear.compose:compose-navigation", version.ref = "androidxWear" }
coil = { group = "io.coil-kt.coil3", name = "coil-compose", version.ref = "coil" }
compose-adaptive = { module = "org.jetbrains.compose.material3.adaptive:adaptive", version.ref = "composeAdaptive" }
compose-ui-test = { module = "androidx.compose.ui:ui-test-junit4", version.ref = "composeUiTest" }
compose-ui-testManifest = { module = "androidx.compose.ui:ui-test-manifest", version.ref = "composeUiTest" }
+horologist-compose-layout = { module = "com.google.android.horologist:horologist-compose-layout", version.ref = "horologist" }
+horologist-compose-material = { module = "com.google.android.horologist:horologist-compose-material", version.ref = "horologist" }
kermit-kermit = { module = "co.touchlab:kermit", version.ref = "kermit" }
koin-android = { module = "io.insert-koin:koin-android", version.ref = "koin" }
koin-compose-viewodel = { module = "io.insert-koin:koin-compose-viewmodel", version.ref = "koin" }
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 30cc24f3..79d8e2dc 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -20,4 +20,5 @@ include(":androidApp")
include(":androidApp:baselineprofile")
include(":desktopApp")
include(":shared")
+include(":wearOsApp")
include(":webApp")
diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts
index feb1ace6..7af764ac 100644
--- a/shared/build.gradle.kts
+++ b/shared/build.gradle.kts
@@ -193,8 +193,6 @@ composeCompiler {
android {
compileSdk = AndroidVersions.COMPILE_SDK
namespace = "com.kgurgul.cpuinfo.shared"
- sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
- sourceSets["main"].res.srcDirs("src/androidMain/res")
defaultConfig {
minSdk = AndroidVersions.MIN_SDK
diff --git a/wearOsApp/.gitignore b/wearOsApp/.gitignore
new file mode 100644
index 00000000..796b96d1
--- /dev/null
+++ b/wearOsApp/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/wearOsApp/build.gradle.kts b/wearOsApp/build.gradle.kts
new file mode 100644
index 00000000..298bc380
--- /dev/null
+++ b/wearOsApp/build.gradle.kts
@@ -0,0 +1,101 @@
+plugins {
+ alias(libs.plugins.kotlin.multiplatform)
+ alias(libs.plugins.android.application)
+ alias(libs.plugins.compose.compiler)
+ id("kotlin-parcelize")
+}
+
+kotlin {
+ androidTarget()
+ sourceSets {
+ val androidMain by getting {
+ dependencies {
+ implementation(project(":shared"))
+ }
+ }
+ }
+}
+
+android {
+ compileSdk = AndroidVersions.COMPILE_SDK
+
+ defaultConfig {
+ applicationId = "com.kgurgul.cpuinfo.wear"
+
+ minSdk = 26
+ targetSdk = AndroidVersions.TARGET_SDK
+ versionCode = AndroidVersions.VERSION_CODE
+ versionName = AndroidVersions.VERSION_NAME
+
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ namespace = "com.kgurgul.cpuinfo.wear"
+
+ signingConfigs {
+ getByName("debug") {
+ val debugSigningConfig = AndroidSigningConfig.getDebugProperties(rootProject.rootDir)
+ storeFile = file(debugSigningConfig.getProperty(AndroidSigningConfig.KEY_PATH))
+ keyAlias = debugSigningConfig.getProperty(AndroidSigningConfig.KEY_ALIAS)
+ keyPassword = debugSigningConfig.getProperty(AndroidSigningConfig.KEY_PASS)
+ storePassword = debugSigningConfig.getProperty(AndroidSigningConfig.KEY_PASS)
+ }
+ /* create("release") {
+ val releaseSigningConfig =
+ AndroidSigningConfig.getReleaseProperties(rootProject.rootDir)
+ storeFile = file(releaseSigningConfig.getProperty(AndroidSigningConfig.KEY_PATH))
+ keyAlias = releaseSigningConfig.getProperty(AndroidSigningConfig.KEY_ALIAS)
+ keyPassword = releaseSigningConfig.getProperty(AndroidSigningConfig.KEY_PASS)
+ storePassword = releaseSigningConfig.getProperty(AndroidSigningConfig.KEY_PASS)
+ }*/
+ }
+
+ buildTypes {
+/* release {
+ signingConfig = signingConfigs.getByName("release")
+ isMinifyEnabled = true
+ proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
+ }*/
+ debug {
+ signingConfig = signingConfigs.getByName("debug")
+ isMinifyEnabled = false
+ enableUnitTestCoverage = true
+ applicationIdSuffix = ".debug"
+ }
+ }
+
+ buildFeatures {
+ compose = true
+ buildConfig = true
+ }
+
+ testOptions {
+ unitTests {
+ isReturnDefaultValues = true
+ isIncludeAndroidResources = true
+ }
+ animationsDisabled = true
+ execution = "ANDROIDX_TEST_ORCHESTRATOR"
+ }
+
+ lint {
+ abortOnError = false
+ }
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
+ }
+}
+
+dependencies {
+ implementation(libs.androidx.activity.compose)
+ implementation(libs.androidx.core.splashscreen)
+ implementation(libs.androidx.wear.foundation)
+ implementation(libs.androidx.wear.material)
+ implementation(libs.androidx.wear.navigation)
+ implementation(libs.horologist.compose.layout)
+ implementation(libs.horologist.compose.material)
+
+ implementation(libs.koin.android)
+}
diff --git a/wearOsApp/debug.keystore b/wearOsApp/debug.keystore
new file mode 100644
index 00000000..5669769b
Binary files /dev/null and b/wearOsApp/debug.keystore differ
diff --git a/wearOsApp/proguard-rules.pro b/wearOsApp/proguard-rules.pro
new file mode 100644
index 00000000..ab85d58d
--- /dev/null
+++ b/wearOsApp/proguard-rules.pro
@@ -0,0 +1,7 @@
+# Remove logs
+-assumenosideeffects class co.touchlab.kermit.Logger {
+ public *** v(...);
+ public *** d(...);
+ public *** i(...);
+ public *** e(...);
+}
diff --git a/wearOsApp/src/androidMain/AndroidManifest.xml b/wearOsApp/src/androidMain/AndroidManifest.xml
new file mode 100644
index 00000000..73905adb
--- /dev/null
+++ b/wearOsApp/src/androidMain/AndroidManifest.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wearOsApp/src/androidMain/kotlin/com/kgurgul/cpuinfo/wear/MainActivity.kt b/wearOsApp/src/androidMain/kotlin/com/kgurgul/cpuinfo/wear/MainActivity.kt
new file mode 100644
index 00000000..8c797a09
--- /dev/null
+++ b/wearOsApp/src/androidMain/kotlin/com/kgurgul/cpuinfo/wear/MainActivity.kt
@@ -0,0 +1,229 @@
+@file:OptIn(ExperimentalWearFoundationApi::class, ExperimentalHorologistApi::class)
+
+package com.kgurgul.cpuinfo.wear
+
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
+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.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.style.TextAlign
+import androidx.wear.compose.foundation.ExperimentalWearFoundationApi
+import androidx.wear.compose.foundation.rememberActiveFocusRequester
+import androidx.wear.compose.foundation.rotary.RotaryScrollableDefaults.behavior
+import androidx.wear.compose.foundation.rotary.rotaryScrollable
+import androidx.wear.compose.material.MaterialTheme
+import androidx.wear.compose.material.Text
+import androidx.wear.compose.material.TitleCard
+import androidx.wear.compose.material.dialog.Dialog
+import androidx.wear.compose.navigation.SwipeDismissableNavHost
+import androidx.wear.compose.navigation.composable
+import androidx.wear.compose.navigation.rememberSwipeDismissableNavController
+import com.google.android.horologist.annotations.ExperimentalHorologistApi
+import com.google.android.horologist.compose.layout.AppScaffold
+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 com.kgurgul.cpuinfo.wear.theme.WearAppTheme
+
+/**
+ * Simple "Hello, World" app meant as a starting point for a new project using Compose for Wear OS.
+ *
+ * Displays a centered [Text] composable and a list built with [Horologist]
+ * (https://github.com/google/horologist).
+ *
+ * Use the Wear version of Compose Navigation. You can carry
+ * over your knowledge from mobile and it supports the swipe-to-dismiss gesture (Wear OS's
+ * back action). For more information, go here:
+ * https://developer.android.com/reference/kotlin/androidx/wear/compose/navigation/package-summary
+ */
+class MainActivity : ComponentActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ setContent {
+ WearApp()
+ }
+ }
+}
+
+@Composable
+fun WearApp() {
+ val navController = rememberSwipeDismissableNavController()
+
+ WearAppTheme {
+ AppScaffold {
+ SwipeDismissableNavHost(navController = navController, startDestination = "menu") {
+ composable("menu") {
+ GreetingScreen(
+ "Android",
+ onShowList = { navController.navigate("list") }
+ )
+ }
+ composable("list") {
+ ListScreen()
+ }
+ }
+ }
+ }
+}
+
+@Composable
+fun GreetingScreen(greetingName: String, onShowList: () -> Unit) {
+ val scrollState = rememberScrollState()
+
+ /* If you have enough items in your list, use [ScalingLazyColumn] which is an optimized
+ * version of LazyColumn for wear devices with some added features. For more information,
+ * see d.android.com/wear/compose.
+ */
+ ScreenScaffold(scrollState = scrollState) {
+ val padding = ScalingLazyColumnDefaults.padding(
+ first = ItemType.Text,
+ last = ItemType.Chip
+ )()
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .verticalScroll(scrollState)
+ .rotaryScrollable(
+ behavior(scrollableState = scrollState),
+ focusRequester = rememberActiveFocusRequester()
+ )
+ .padding(padding),
+ verticalArrangement = Arrangement.Center
+ ) {
+ Greeting(greetingName = greetingName)
+ Chip(label = "Show List", onClick = onShowList)
+ }
+ }
+}
+
+@Composable
+fun ListScreen() {
+ 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 Greeting(greetingName: String) {
+ ResponsiveListHeader(contentPadding = firstItemPadding()) {
+ Text(
+ modifier = Modifier.fillMaxWidth(),
+ textAlign = TextAlign.Center,
+ color = MaterialTheme.colors.primary,
+ text = stringResource(R.string.app_name, greetingName)
+ )
+ }
+}
+
+@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()
+ }
+ ) {
+ item {
+ Text(text = "An unknown error occurred during the request.")
+ }
+ }
+}
diff --git a/wearOsApp/src/androidMain/kotlin/com/kgurgul/cpuinfo/wear/WearCpuInfoApp.kt b/wearOsApp/src/androidMain/kotlin/com/kgurgul/cpuinfo/wear/WearCpuInfoApp.kt
new file mode 100644
index 00000000..896ddc1d
--- /dev/null
+++ b/wearOsApp/src/androidMain/kotlin/com/kgurgul/cpuinfo/wear/WearCpuInfoApp.kt
@@ -0,0 +1,23 @@
+package com.kgurgul.cpuinfo.wear
+
+import android.app.Application
+import com.kgurgul.cpuinfo.appinitializers.AppInitializerComponent
+import com.kgurgul.cpuinfo.di.androidModule
+import com.kgurgul.cpuinfo.di.sharedModule
+import org.koin.android.ext.koin.androidContext
+import org.koin.core.context.startKoin
+
+class WearCpuInfoApp : Application() {
+
+ override fun onCreate() {
+ super.onCreate()
+ startKoin {
+ androidContext(this@WearCpuInfoApp)
+ modules(
+ androidModule,
+ sharedModule,
+ )
+ }
+ AppInitializerComponent().init(this)
+ }
+}
diff --git a/wearOsApp/src/androidMain/kotlin/com/kgurgul/cpuinfo/wear/theme/Color.kt b/wearOsApp/src/androidMain/kotlin/com/kgurgul/cpuinfo/wear/theme/Color.kt
new file mode 100644
index 00000000..37d18dbb
--- /dev/null
+++ b/wearOsApp/src/androidMain/kotlin/com/kgurgul/cpuinfo/wear/theme/Color.kt
@@ -0,0 +1,21 @@
+package com.kgurgul.cpuinfo.wear.theme
+
+import androidx.compose.ui.graphics.Color
+import androidx.wear.compose.material.Colors
+
+val Purple200 = Color(0xFFBB86FC)
+val Purple500 = Color(0xFF6200EE)
+val Purple700 = Color(0xFF3700B3)
+val Teal200 = Color(0xFF03DAC5)
+val Red400 = Color(0xFFCF6679)
+
+internal val wearColorPalette: Colors = Colors(
+ primary = Purple200,
+ primaryVariant = Purple700,
+ secondary = Teal200,
+ secondaryVariant = Teal200,
+ error = Red400,
+ onPrimary = Color.Black,
+ onSecondary = Color.Black,
+ onError = Color.Black
+)
diff --git a/wearOsApp/src/androidMain/kotlin/com/kgurgul/cpuinfo/wear/theme/Type.kt b/wearOsApp/src/androidMain/kotlin/com/kgurgul/cpuinfo/wear/theme/Type.kt
new file mode 100644
index 00000000..b78d9b2a
--- /dev/null
+++ b/wearOsApp/src/androidMain/kotlin/com/kgurgul/cpuinfo/wear/theme/Type.kt
@@ -0,0 +1,28 @@
+package com.kgurgul.cpuinfo.wear.theme
+
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.sp
+import androidx.wear.compose.material.Typography
+
+// Set of Material typography styles to start with
+val Typography = Typography(
+ body1 = TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.Normal,
+ fontSize = 16.sp
+ )
+ /* Other default text styles to override
+ button = TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.W500,
+ fontSize = 14.sp
+ ),
+ caption = TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.Normal,
+ fontSize = 12.sp
+ )
+ */
+)
diff --git a/wearOsApp/src/androidMain/kotlin/com/kgurgul/cpuinfo/wear/theme/WearAppTheme.kt b/wearOsApp/src/androidMain/kotlin/com/kgurgul/cpuinfo/wear/theme/WearAppTheme.kt
new file mode 100644
index 00000000..474e2d8e
--- /dev/null
+++ b/wearOsApp/src/androidMain/kotlin/com/kgurgul/cpuinfo/wear/theme/WearAppTheme.kt
@@ -0,0 +1,17 @@
+package com.kgurgul.cpuinfo.wear.theme
+
+import androidx.compose.runtime.Composable
+import androidx.wear.compose.material.MaterialTheme
+
+@Composable
+fun WearAppTheme(
+ content: @Composable () -> Unit
+) {
+ MaterialTheme(
+ colors = wearColorPalette,
+ typography = Typography,
+ // For shapes, we generally recommend using the default Material Wear shapes which are
+ // optimized for round and non-round devices.
+ content = content
+ )
+}
diff --git a/wearOsApp/src/androidMain/res/drawable/ic_banner_foreground.xml b/wearOsApp/src/androidMain/res/drawable/ic_banner_foreground.xml
new file mode 100644
index 00000000..0d1e82bd
--- /dev/null
+++ b/wearOsApp/src/androidMain/res/drawable/ic_banner_foreground.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
diff --git a/wearOsApp/src/androidMain/res/drawable/ic_icon.xml b/wearOsApp/src/androidMain/res/drawable/ic_icon.xml
new file mode 100644
index 00000000..84accafc
--- /dev/null
+++ b/wearOsApp/src/androidMain/res/drawable/ic_icon.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/wearOsApp/src/androidMain/res/drawable/ic_splash.xml b/wearOsApp/src/androidMain/res/drawable/ic_splash.xml
new file mode 100644
index 00000000..ebd207a6
--- /dev/null
+++ b/wearOsApp/src/androidMain/res/drawable/ic_splash.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/wearOsApp/src/androidMain/res/mipmap-anydpi-v26/ic_banner.xml b/wearOsApp/src/androidMain/res/mipmap-anydpi-v26/ic_banner.xml
new file mode 100644
index 00000000..a1e6bad8
--- /dev/null
+++ b/wearOsApp/src/androidMain/res/mipmap-anydpi-v26/ic_banner.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/wearOsApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml b/wearOsApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 00000000..38abeedf
--- /dev/null
+++ b/wearOsApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wearOsApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml b/wearOsApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 00000000..38abeedf
--- /dev/null
+++ b/wearOsApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wearOsApp/src/androidMain/res/mipmap-hdpi/ic_launcher.png b/wearOsApp/src/androidMain/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..262b71fb
Binary files /dev/null and b/wearOsApp/src/androidMain/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/wearOsApp/src/androidMain/res/mipmap-hdpi/ic_launcher_round.png b/wearOsApp/src/androidMain/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 00000000..820b8ce2
Binary files /dev/null and b/wearOsApp/src/androidMain/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/wearOsApp/src/androidMain/res/mipmap-mdpi/ic_launcher.png b/wearOsApp/src/androidMain/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..6c59793a
Binary files /dev/null and b/wearOsApp/src/androidMain/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/wearOsApp/src/androidMain/res/mipmap-mdpi/ic_launcher_round.png b/wearOsApp/src/androidMain/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 00000000..d3b4e97a
Binary files /dev/null and b/wearOsApp/src/androidMain/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/wearOsApp/src/androidMain/res/mipmap-xhdpi/ic_banner.png b/wearOsApp/src/androidMain/res/mipmap-xhdpi/ic_banner.png
new file mode 100644
index 00000000..42b8b250
Binary files /dev/null and b/wearOsApp/src/androidMain/res/mipmap-xhdpi/ic_banner.png differ
diff --git a/wearOsApp/src/androidMain/res/mipmap-xhdpi/ic_launcher.png b/wearOsApp/src/androidMain/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..73ecb804
Binary files /dev/null and b/wearOsApp/src/androidMain/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/wearOsApp/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.png b/wearOsApp/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..2d4fdb42
Binary files /dev/null and b/wearOsApp/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/wearOsApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png b/wearOsApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..db50b490
Binary files /dev/null and b/wearOsApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/wearOsApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.png b/wearOsApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..d37cd5d7
Binary files /dev/null and b/wearOsApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/wearOsApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png b/wearOsApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..c94e72df
Binary files /dev/null and b/wearOsApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/wearOsApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.png b/wearOsApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..51ee6c8a
Binary files /dev/null and b/wearOsApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/wearOsApp/src/androidMain/res/values/ic_banner_background.xml b/wearOsApp/src/androidMain/res/values/ic_banner_background.xml
new file mode 100644
index 00000000..15db34b8
--- /dev/null
+++ b/wearOsApp/src/androidMain/res/values/ic_banner_background.xml
@@ -0,0 +1,4 @@
+
+
+ #FFFFFF
+
\ No newline at end of file
diff --git a/wearOsApp/src/androidMain/res/values/ic_launcher_background.xml b/wearOsApp/src/androidMain/res/values/ic_launcher_background.xml
new file mode 100644
index 00000000..cdfe4f31
--- /dev/null
+++ b/wearOsApp/src/androidMain/res/values/ic_launcher_background.xml
@@ -0,0 +1,19 @@
+
+
+
+ #FFFFFF
+
\ No newline at end of file
diff --git a/wearOsApp/src/androidMain/res/values/strings.xml b/wearOsApp/src/androidMain/res/values/strings.xml
new file mode 100644
index 00000000..90e584b4
--- /dev/null
+++ b/wearOsApp/src/androidMain/res/values/strings.xml
@@ -0,0 +1,21 @@
+
+
+
+
+ CPU Info
+
+
diff --git a/wearOsApp/src/androidMain/res/values/styles.xml b/wearOsApp/src/androidMain/res/values/styles.xml
new file mode 100644
index 00000000..e72f69ed
--- /dev/null
+++ b/wearOsApp/src/androidMain/res/values/styles.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+