1 /*
2  * Copyright 2021 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  *      http://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 androidx.wear.watchface.complications.datasource.samples
18 
19 import androidx.wear.watchface.complications.data.ComplicationData
20 import androidx.wear.watchface.complications.data.ComplicationText
21 import androidx.wear.watchface.complications.data.ComplicationType
22 import androidx.wear.watchface.complications.data.LongTextComplicationData
23 import androidx.wear.watchface.complications.data.ShortTextComplicationData
24 import androidx.wear.watchface.complications.datasource.ComplicationDataSourceService
25 import androidx.wear.watchface.complications.datasource.ComplicationRequest
26 import java.time.ZonedDateTime
27 
28 /**
29  * A minimal immediate complication data source. Typically this would be used to surface sensor data
30  * rather than the time.
31  */
32 class SynchronousDataSourceService : ComplicationDataSourceService() {
33 
onComplicationRequestnull34     override fun onComplicationRequest(
35         request: ComplicationRequest,
36         listener: ComplicationRequestListener
37     ) {
38         val time = ZonedDateTime.now()
39         listener.onComplicationData(
40             if (request.immediateResponseRequired) {
41                 // Return different data to illustrate responseNeededSoon is true.
42                 when (request.complicationType) {
43                     ComplicationType.SHORT_TEXT ->
44                         ShortTextComplicationData.Builder(
45                                 plainText("S ${time.second}"),
46                                 ComplicationText.EMPTY
47                             )
48                             .build()
49                     ComplicationType.LONG_TEXT ->
50                         LongTextComplicationData.Builder(
51                                 plainText("Secs ${time.second}"),
52                                 ComplicationText.EMPTY
53                             )
54                             .build()
55                     else -> null
56                 }
57             } else {
58                 when (request.complicationType) {
59                     ComplicationType.SHORT_TEXT ->
60                         ShortTextComplicationData.Builder(
61                                 plainText("M ${time.minute}"),
62                                 ComplicationText.EMPTY
63                             )
64                             .build()
65                     ComplicationType.LONG_TEXT ->
66                         LongTextComplicationData.Builder(
67                                 plainText("Mins ${time.minute}"),
68                                 ComplicationText.EMPTY
69                             )
70                             .build()
71                     else -> null
72                 }
73             }
74         )
75     }
76 
getPreviewDatanull77     override fun getPreviewData(type: ComplicationType): ComplicationData? =
78         when (type) {
79             ComplicationType.SHORT_TEXT ->
80                 ShortTextComplicationData.Builder(plainText("S 10"), ComplicationText.EMPTY).build()
81             ComplicationType.LONG_TEXT ->
82                 LongTextComplicationData.Builder(plainText("Secs 10"), ComplicationText.EMPTY)
83                     .build()
84             else -> null
85         }
86 }
87