Material3TileService


abstract class Material3TileService : TileService


Base class for a service providing data for an app's tile that includes ProtoLayoutScope for automatic resource registration and opinionated MaterialScope for Material3 styling of components and layout.

A provider service must implement tileResponse to respond to requests for updates from the system. Tile response should contain layout and resources in the same response.

The manifest declaration of this service must include an intent filter for TileService.ACTION_BIND_TILE_PROVIDER.

The manifest entry should also include android:permission="com.google.android.wearable.permission.BIND_TILE_PROVIDER" to ensure that only the system can bind to it.

import androidx.wear.protolayout.TimelineBuilders.Timeline
import androidx.wear.protolayout.layout.imageResource
import androidx.wear.protolayout.layout.lottieResource
import androidx.wear.protolayout.material3.ColorScheme
import androidx.wear.protolayout.material3.MaterialScope
import androidx.wear.protolayout.material3.backgroundImage
import androidx.wear.protolayout.material3.imageButton
import androidx.wear.protolayout.material3.primaryLayout
import androidx.wear.protolayout.modifiers.clickable
import androidx.wear.tiles.Material3TileService
import androidx.wear.tiles.RequestBuilders.TileRequest
import androidx.wear.tiles.TileBuilders.Tile

object : Material3TileService(defaultColorScheme = myColorScheme) {
        override suspend fun MaterialScope.tileResponse(requestParams: TileRequest): Tile =
            Tile.Builder()
                .setTileTimeline(
                    Timeline.fromLayoutElement(
                        primaryLayout(
                            mainSlot = {
                                imageButton(
                                    onClick = clickable(),
                                    backgroundContent = {
                                        backgroundImage(
                                            resource =
                                                imageResource(
                                                    lottie =
                                                        lottieResource(rawResourceId = lottieResId)
                                                )
                                        )
                                    },
                                )
                            }
                        )
                    )
                )
                .build()
    }

Summary

Public constructors

Material3TileService(
    allowDynamicTheme: Boolean,
    defaultColorScheme: ColorScheme,
    serviceScope: CoroutineScope?
)

Public functions

open Unit
open Unit

Protected functions

abstract suspend TileBuilders.Tile

Called when the system is requesting a new timeline from this Tile Provider.

Inherited functions

From android.content.Context
Boolean
bindIsolatedService(
    service: Intent,
    flags: Context.BindServiceFlags,
    instanceName: String,
    executor: Executor,
    conn: ServiceConnection
)
Int
ColorStateList
Drawable?
String
getString(resId: Int)
String
getString(resId: Int, vararg formatArgs: Any)
T
<T : Any> getSystemService(serviceClass: Class<T>)
CharSequence
getText(resId: Int)
TypedArray
TypedArray
TypedArray
TypedArray
obtainStyledAttributes(
    set: AttributeSet?,
    attrs: IntArray,
    defStyleAttr: Int,
    defStyleRes: Int
)
Unit
Unit
sendBroadcastWithMultiplePermissions(
    intent: Intent,
    receiverPermissions: Array<String>
)
From android.content.ContextWrapper
Boolean
bindIsolatedService(
    service: Intent,
    flags: Int,
    instanceName: String,
    executor: Executor,
    conn: ServiceConnection
)
Boolean
bindService(
    service: Intent,
    conn: ServiceConnection,
    flags: Context.BindServiceFlags
)
Boolean
bindService(service: Intent, conn: ServiceConnection, flags: Int)
Boolean
bindService(
    service: Intent,
    flags: Context.BindServiceFlags,
    executor: Executor,
    conn: ServiceConnection
)
Boolean
bindService(
    service: Intent,
    flags: Int,
    executor: Executor,
    conn: ServiceConnection
)
Boolean
bindServiceAsUser(
    service: Intent,
    conn: ServiceConnection,
    flags: Context.BindServiceFlags,
    user: UserHandle
)
Boolean
bindServiceAsUser(
    service: Intent,
    conn: ServiceConnection,
    flags: Int,
    user: UserHandle
)
Int
Int
IntArray
Int
Int
checkCallingUriPermission(uri: Uri, modeFlags: Int)
IntArray
Int
checkContentUriPermissionFull(uri: Uri, pid: Int, uid: Int, modeFlags: Int)
Int
checkPermission(permission: String, pid: Int, uid: Int)
Int
Int
checkUriPermission(uri: Uri, pid: Int, uid: Int, modeFlags: Int)
Int
checkUriPermission(
    uri: Uri?,
    readPermission: String?,
    writePermission: String?,
    pid: Int,
    uid: Int,
    modeFlags: Int
)
IntArray
checkUriPermissions(
    uris: MutableList<Uri>,
    pid: Int,
    uid: Int,
    modeFlags: Int
)
Unit
Context
createAttributionContext(attributionTag: String?)
Context
createConfigurationContext(overrideConfiguration: Configuration)
Context
createContext(contextParams: ContextParams)
Context
Context
Context
Context
Context
createPackageContext(packageName: String, flags: Int)
Context
createWindowContext(type: Int, options: Bundle?)
Context
createWindowContext(display: Display, type: Int, options: Bundle?)
Array<String>
Boolean
Boolean
Boolean
Unit
enforceCallingOrSelfPermission(permission: String, message: String?)
Unit
enforceCallingOrSelfUriPermission(
    uri: Uri,
    modeFlags: Int,
    message: String
)
Unit
enforceCallingPermission(permission: String, message: String?)
Unit
enforceCallingUriPermission(uri: Uri, modeFlags: Int, message: String)
Unit
enforcePermission(permission: String, pid: Int, uid: Int, message: String?)
Unit
enforceUriPermission(
    uri: Uri,
    pid: Int,
    uid: Int,
    modeFlags: Int,
    message: String
)
Unit
enforceUriPermission(
    uri: Uri?,
    readPermission: String?,
    writePermission: String?,
    pid: Int,
    uid: Int,
    modeFlags: Int,
    message: String?
)
Array<String>
File
File
getDir(name: String, mode: Int)
File?
Array<File>
File
SharedPreferences
Any
String?
getSystemServiceName(serviceClass: Class<*>)
Unit
grantUriPermission(toPackage: String, uri: Uri, modeFlags: Int)
Boolean
moveDatabaseFrom(sourceContext: Context, name: String)
Boolean
moveSharedPreferencesFrom(sourceContext: Context, name: String)
FileInputStream
FileOutputStream
openFileOutput(name: String, mode: Int)
SQLiteDatabase
openOrCreateDatabase(
    name: String,
    mode: Int,
    factory: SQLiteDatabase.CursorFactory
)
SQLiteDatabase
openOrCreateDatabase(
    name: String,
    mode: Int,
    factory: SQLiteDatabase.CursorFactory,
    errorHandler: DatabaseErrorHandler?
)
Drawable
Unit
Unit
Unit
Intent?
Intent?
registerReceiver(
    receiver: BroadcastReceiver?,
    filter: IntentFilter,
    flags: Int
)
Intent?
registerReceiver(
    receiver: BroadcastReceiver?,
    filter: IntentFilter,
    broadcastPermission: String?,
    scheduler: Handler?
)
Intent?
registerReceiver(
    receiver: BroadcastReceiver?,
    filter: IntentFilter,
    broadcastPermission: String?,
    scheduler: Handler?,
    flags: Int
)
Unit
Unit
Unit
Unit
revokeUriPermission(uri: Uri, modeFlags: Int)
Unit
revokeUriPermission(targetPackage: String, uri: Uri, modeFlags: Int)
Unit
Unit
sendBroadcast(intent: Intent, receiverPermission: String?)
Unit
sendBroadcast(intent: Intent, receiverPermission: String?, options: Bundle?)
Unit
Unit
sendBroadcastAsUser(
    intent: Intent,
    user: UserHandle,
    receiverPermission: String?
)
Unit
sendOrderedBroadcast(intent: Intent, receiverPermission: String?)
Unit
sendOrderedBroadcast(
    intent: Intent,
    receiverPermission: String?,
    options: Bundle?
)
Unit
sendOrderedBroadcast(
    intent: Intent,
    receiverPermission: String?,
    resultReceiver: BroadcastReceiver?,
    scheduler: Handler?,
    initialCode: Int,
    initialData: String?,
    initialExtras: Bundle?
)
Unit
sendOrderedBroadcast(
    intent: Intent,
    receiverPermission: String?,
    options: Bundle?,
    resultReceiver: BroadcastReceiver?,
    scheduler: Handler?,
    initialCode: Int,
    initialData: String?,
    initialExtras: Bundle?
)
Unit
sendOrderedBroadcast(
    intent: Intent,
    receiverPermission: String?,
    receiverAppOp: String?,
    resultReceiver: BroadcastReceiver?,
    scheduler: Handler?,
    initialCode: Int,
    initialData: String?,
    initialExtras: Bundle?
)
Unit
sendOrderedBroadcast(
    intent: Intent,
    initialCode: Int,
    receiverPermission: String?,
    receiverAppOp: String?,
    resultReceiver: BroadcastReceiver?,
    scheduler: Handler?,
    initialData: String?,
    initialExtras: Bundle?,
    options: Bundle?
)
Unit
sendOrderedBroadcastAsUser(
    intent: Intent,
    user: UserHandle,
    receiverPermission: String?,
    resultReceiver: BroadcastReceiver?,
    scheduler: Handler?,
    initialCode: Int,
    initialData: String?,
    initialExtras: Bundle?
)
Unit
Unit
sendStickyBroadcast(intent: Intent, options: Bundle?)
Unit
Unit
sendStickyOrderedBroadcast(
    intent: Intent,
    resultReceiver: BroadcastReceiver?,
    scheduler: Handler?,
    initialCode: Int,
    initialData: String?,
    initialExtras: Bundle?
)
Unit
sendStickyOrderedBroadcastAsUser(
    intent: Intent,
    user: UserHandle,
    resultReceiver: BroadcastReceiver?,
    scheduler: Handler?,
    initialCode: Int,
    initialData: String?,
    initialExtras: Bundle?
)
Unit
setTheme(resid: Int)
Unit
Unit
Unit
Unit
startActivities(intents: Array<Intent>, options: Bundle?)
Unit
Unit
startActivity(intent: Intent, options: Bundle?)
ComponentName?
Boolean
startInstrumentation(
    className: ComponentName,
    profileFile: String?,
    arguments: Bundle?
)
Unit
startIntentSender(
    intent: IntentSender,
    fillInIntent: Intent?,
    flagsMask: Int,
    flagsValues: Int,
    extraFlags: Int
)
Unit
startIntentSender(
    intent: IntentSender,
    fillInIntent: Intent?,
    flagsMask: Int,
    flagsValues: Int,
    extraFlags: Int,
    options: Bundle?
)
ComponentName?
startService(service: Intent)
Boolean
Unit
Unit
Unit
Unit
Unit
Unit
updateServiceGroup(conn: ServiceConnection, group: Int, importance: Int)
From android.app.Service
Unit
Unit
dump(fd: FileDescriptor, writer: PrintWriter, args: Array<String>)
Unit
Unit
Unit
onRebind(intent: Intent)
Unit
onStart(intent: Intent, startId: Int)
Int
onStartCommand(intent: Intent, flags: Int, startId: Int)
Unit
onTaskRemoved(rootIntent: Intent)
Unit
onTimeout(startId: Int)
Unit
onTimeout(startId: Int, fgsType: Int)
Unit
onTrimMemory(level: Int)
Boolean
onUnbind(intent: Intent)
Unit
startForeground(id: Int, notification: Notification)
Unit
startForeground(
    id: Int,
    notification: Notification,
    foregroundServiceType: Int
)
Unit
stopForeground(notificationBehavior: Int)
Unit
stopForeground(removeNotification: Boolean)
Unit
Unit
stopSelf(startId: Int)
Boolean
stopSelfResult(startId: Int)
From androidx.wear.tiles.TileService
IBinder?
onBind(intent: Intent)
ListenableFuture<Void>

Called when the system sends a batch of Tile interaction events that happened since the last time this method was called.

ListenableFuture<ResourceBuilders.Resources>

This function is deprecated.

Use onTileResourcesRequest instead.

Unit

Called when a tile provided by this Tile Provider is added to the carousel.

Unit

Called when a tile provided by this Tile Provider is removed from the carousel.

Public constructors

Material3TileService

Added in 1.6.2
Material3TileService(
    allowDynamicTheme: Boolean = true,
    defaultColorScheme: ColorScheme = ColorScheme(),
    serviceScope: CoroutineScope? = null
)
Parameters
allowDynamicTheme: Boolean = true

if dynamic colors theme should be used on Material3 components, meaning that colors will follow the system theme if enabled on the device. If not overridden, defaults to using the system theme.

defaultColorScheme: ColorScheme = ColorScheme()

the default static color theme to be used, when allowDynamicTheme is false, or when dynamic theming is disabled by the system or user. If not overridden, defaults to default theme.

serviceScope: CoroutineScope? = null

the scope to be used for tileResponse call, otherwise the scope running on a main thread will be used.

Public functions

onCreate

@CallSuper
open fun onCreate(): Unit

onDestroy

@CallSuper
open fun onDestroy(): Unit

Protected functions

MaterialScope.tileResponse

protected abstract suspend fun MaterialScope.tileResponse(requestParams: RequestBuilders.TileRequest): TileBuilders.Tile

Called when the system is requesting a new timeline from this Tile Provider.

Resulting Tile can be created within the receiver MaterialScope which is used by all ProtoLayout Material3 components and layout to support opinionated defaults and to provide the global information for styling Material3 components. Additionally, the MaterialScope contains ProtoLayoutScope for automatic resource registration for any Image elements used within a Tile.

Note that, all resources used within the tile layout should be directly embedded as ResourceBuilders.ImageResource in layout using the corresponding API (such as androidx.wear.protolayout.layout.basicImage or Material3 counterparts (for example androidx.wear.protolayout.material3.backgroundImage).

This runs a suspending function on the Main thread, unless serviceScope is overridden.

Parameters
requestParams: RequestBuilders.TileRequest

Parameters about the request. See TileRequest for more info. Note that handle to some of them exists in the MaterialScope (for example deviceConfiguration for DeviceParameters.