Skip to content

Commit dd30aee

Browse files
authored
Wear complications (#598)
* Adds complications snippets * Fix snippet tag * Fix snippet tag * Apply Spotless * Updates complication snippets * Add missing copyright * Apply Spotless --------- Co-authored-by: garanj <[email protected]>
1 parent 97d93a1 commit dd30aee

File tree

3 files changed

+107
-0
lines changed

3 files changed

+107
-0
lines changed

wear/src/main/AndroidManifest.xml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,12 +212,22 @@
212212
<action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST" />
213213
</intent-filter>
214214

215+
<!-- Supported types should be comma-separated e.g. SHORT_TEXT,SMALL_IMAGE -->
215216
<meta-data
216217
android:name="android.support.wearable.complications.SUPPORTED_TYPES"
217218
android:value="SHORT_TEXT" />
218219
<meta-data
219220
android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
220221
android:value="300" />
222+
223+
<!--
224+
Optionally, the complication can be configured by the user by specifying a
225+
configuration activity.
226+
-->
227+
<meta-data
228+
android:name="android.support.wearable.complications.PROVIDER_CONFIG_ACTION"
229+
android:value="MY_CONFIG_ACTION" />
230+
221231
</service>
222232
<!-- [END android_wear_complication_manifest] -->
223233

@@ -241,6 +251,21 @@
241251
</service>
242252
<!-- [END android_wear_timeline_complication_manifest] -->
243253

254+
<activity
255+
android:name=".snippets.complication.ConfigurationActivity"
256+
android:label="@string/configuration_activity_label"
257+
android:exported="true"
258+
android:taskAffinity=""
259+
android:theme="@android:style/Theme.DeviceDefault">
260+
<!-- [START android_wear_complication_intent_filter] -->
261+
<intent-filter>
262+
<action android:name="MY_CONFIG_ACTION" />
263+
<category android:name="android.support.wearable.complications.category.PROVIDER_CONFIG" />
264+
<category android:name="android.intent.category.DEFAULT" />
265+
</intent-filter>
266+
<!-- [END android_wear_complication_intent_filter] -->
267+
</activity>
268+
244269
</application>
245270

246271
</manifest>
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/*
2+
* Copyright 2025 The Android Open Source Project
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.example.wear.snippets.complication
18+
19+
import android.os.Bundle
20+
import androidx.activity.ComponentActivity
21+
import androidx.activity.compose.setContent
22+
import androidx.compose.foundation.layout.Arrangement
23+
import androidx.compose.foundation.layout.Column
24+
import androidx.compose.foundation.layout.Spacer
25+
import androidx.compose.foundation.layout.fillMaxSize
26+
import androidx.compose.foundation.layout.height
27+
import androidx.compose.runtime.Composable
28+
import androidx.compose.ui.Alignment
29+
import androidx.compose.ui.Modifier
30+
import androidx.compose.ui.unit.dp
31+
import androidx.wear.compose.material3.Button
32+
import androidx.wear.compose.material3.Text
33+
import androidx.wear.watchface.complications.datasource.ComplicationDataSourceService.Companion.EXTRA_CONFIG_COMPLICATION_ID
34+
import androidx.wear.watchface.complications.datasource.ComplicationDataSourceService.Companion.EXTRA_CONFIG_COMPLICATION_TYPE
35+
import androidx.wear.watchface.complications.datasource.ComplicationDataSourceService.Companion.EXTRA_CONFIG_DATA_SOURCE_COMPONENT
36+
37+
class ConfigurationActivity : ComponentActivity() {
38+
override fun onCreate(savedInstanceState: Bundle?) {
39+
super.onCreate(savedInstanceState)
40+
// [START android_wear_complication_configuration_intent]
41+
// Keys defined on ComplicationDataSourceService
42+
val id = intent.getIntExtra(EXTRA_CONFIG_COMPLICATION_ID, -1)
43+
val type = intent.getIntExtra(EXTRA_CONFIG_COMPLICATION_TYPE, -1)
44+
val source = intent.getStringExtra(EXTRA_CONFIG_DATA_SOURCE_COMPONENT)
45+
// [END android_wear_complication_configuration_intent]
46+
setContent {
47+
ComplicationConfig(
48+
id = id,
49+
type = type,
50+
source = source
51+
)
52+
}
53+
}
54+
55+
@Composable
56+
fun ComplicationConfig(
57+
modifier: Modifier = Modifier,
58+
id: Int,
59+
type: Int,
60+
source: String?
61+
) {
62+
Column(
63+
modifier = Modifier.fillMaxSize(),
64+
verticalArrangement = Arrangement.SpaceEvenly,
65+
horizontalAlignment = Alignment.CenterHorizontally
66+
) {
67+
Text("ID: $id")
68+
Text("Type: $type")
69+
Text("Source: $source")
70+
Spacer(modifier = Modifier.height(4.dp))
71+
Button(onClick = {
72+
// [START android_wear_complication_configuration_finish]
73+
setResult(RESULT_OK) // Or RESULT_CANCELLED to cancel configuration
74+
finish()
75+
// [END android_wear_complication_configuration_finish]
76+
}) {
77+
Text("Done!")
78+
}
79+
}
80+
}
81+
}

wear/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@
88
<string name="tile_description">Hello Tile Description</string>
99
<string name="my_complication_service_label">My Complication</string>
1010
<string name="my_complication_timeline_service_label">My Timeline Complication</string>
11+
<string name="configuration_activity_label">Configuration activity</string>
1112
</resources>

0 commit comments

Comments
 (0)