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