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