From 3400dd92deb67cae9973038f7348b8c57d2a3dec Mon Sep 17 00:00:00 2001 From: Michael Stillwell Date: Thu, 20 Nov 2025 00:29:36 +0000 Subject: [PATCH 1/2] Add snippets for /training/wearables/tiles/versioning --- .../example/wear/snippets/tile/Versioning.kt | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 wear/src/main/java/com/example/wear/snippets/tile/Versioning.kt diff --git a/wear/src/main/java/com/example/wear/snippets/tile/Versioning.kt b/wear/src/main/java/com/example/wear/snippets/tile/Versioning.kt new file mode 100644 index 00000000..c3444683 --- /dev/null +++ b/wear/src/main/java/com/example/wear/snippets/tile/Versioning.kt @@ -0,0 +1,112 @@ +/* + * Copyright 2025 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.wear.snippets.tile + +import android.content.Context +import androidx.wear.protolayout.DeviceParametersBuilders +import androidx.wear.protolayout.DimensionBuilders.expand +import androidx.wear.protolayout.LayoutElementBuilders.Column +import androidx.wear.protolayout.ModifiersBuilders +import androidx.wear.protolayout.TypeBuilders +import androidx.wear.protolayout.material.Text +import androidx.wear.protolayout.material.Typography +import androidx.wear.protolayout.material.layouts.PrimaryLayout +import androidx.wear.protolayout.material3.MaterialScope +import androidx.wear.protolayout.material3.materialScope +import androidx.wear.protolayout.material3.primaryLayout +import androidx.wear.protolayout.material3.text +import androidx.wear.protolayout.modifiers.LayoutModifier +import androidx.wear.protolayout.modifiers.opacity +import androidx.wear.protolayout.types.layoutString + +class LayoutM2 { + // [START android_wear_tile_version_layoutm2] + fun myLayout( + context: Context, + deviceConfiguration: DeviceParametersBuilders.DeviceParameters + ) = + PrimaryLayout.Builder(deviceConfiguration) + .setResponsiveContentInsetEnabled(true) + .setContent( + Text.Builder(context, "Hello World!") + .setTypography(Typography.TYPOGRAPHY_BODY1) + .build() + ) + .build() + // [END android_wear_tile_version_layoutm2] + + // [START android_wear_tile_version_modifierm2] + // A Builder-style modifier to set the opacity of an element to 0.5 + fun myModifier(): ModifiersBuilders.Modifiers = + ModifiersBuilders.Modifiers.Builder() + .setOpacity(TypeBuilders.FloatProp.Builder(0.5F).build()) + .build() + // [END android_wear_tile_version_modifierm2] +} + +class LayoutM3 { + // [START android_wear_tile_version_layoutm3] + fun myLayout( + context: Context, + deviceConfiguration: DeviceParametersBuilders.DeviceParameters, + ) = + materialScope(context, deviceConfiguration) { + primaryLayout(mainSlot = { text("Hello, World!".layoutString) }) // HELPME + } + // [END android_wear_tile_version_layoutm3] + + // [START android_wear_tile_version_modifierm3] + // The equivalent Compose-like modifier is much simpler + fun myModifier(): LayoutModifier = LayoutModifier.opacity(0.5F) + // [END android_wear_tile_version_modifierm3] +} + +private fun MaterialScope.withoutHelpers() { + // [START android_wear_tile_version_layoutwithouthelpers] + primaryLayout( + mainSlot = { + Column.Builder() + .setWidth(expand()) + .setHeight(expand()) + .addContent(text("A".layoutString)) + .addContent(text("B".layoutString)) + .addContent(text("C".layoutString)) + .build() + } + ) + // [END android_wear_tile_version_layoutwithouthelpers] +} + +private fun MaterialScope.withHelpers() { + // [START android_wear_tile_version_layoutwithhelpers] + // Function literal with receiver helper function + fun column(builder: Column.Builder.() -> Unit) = + Column.Builder().apply(builder).build() + + primaryLayout( + mainSlot = { + column { + setWidth(expand()) + setHeight(expand()) + addContent(text("A".layoutString)) + addContent(text("B".layoutString)) + addContent(text("C".layoutString)) + } + } + ) + // [END android_wear_tile_version_layoutwithhelpers] +} From 73dd50395d7ab90a42607fd27fca5fc92fbb9bd6 Mon Sep 17 00:00:00 2001 From: Michael Stillwell Date: Thu, 20 Nov 2025 12:04:17 +0000 Subject: [PATCH 2/2] Adjust comments for greater longevity --- .../main/java/com/example/wear/snippets/tile/Versioning.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wear/src/main/java/com/example/wear/snippets/tile/Versioning.kt b/wear/src/main/java/com/example/wear/snippets/tile/Versioning.kt index c3444683..0bfdf6ec 100644 --- a/wear/src/main/java/com/example/wear/snippets/tile/Versioning.kt +++ b/wear/src/main/java/com/example/wear/snippets/tile/Versioning.kt @@ -50,7 +50,7 @@ class LayoutM2 { // [END android_wear_tile_version_layoutm2] // [START android_wear_tile_version_modifierm2] - // A Builder-style modifier to set the opacity of an element to 0.5 + // Uses Builder-style modifier to set opacity fun myModifier(): ModifiersBuilders.Modifiers = ModifiersBuilders.Modifiers.Builder() .setOpacity(TypeBuilders.FloatProp.Builder(0.5F).build()) @@ -70,7 +70,7 @@ class LayoutM3 { // [END android_wear_tile_version_layoutm3] // [START android_wear_tile_version_modifierm3] - // The equivalent Compose-like modifier is much simpler + // Uses Compose-like modifiers to set opacity fun myModifier(): LayoutModifier = LayoutModifier.opacity(0.5F) // [END android_wear_tile_version_modifierm3] }