반응형
- 안드로이드 Glance에서 특정 화면을 열거나 로직을 수행하기 위해서는 GlanceModifier.onClick()에 Action을 명시해주어야 한다.
- Glance의 Action은 UI 요소에 "동작"을 연결하는 역할을 하는 개념이다.
위젯에서 특정 Activity 열기
- 먼저 Glance에서 특정 화면을 열기 위해 ActionIntent는 아래와 같이 사용한다.
modifier = GlanceModifier
.size(20.dp)
.clickable(onClick = actionStartActivity(
Intent(context, WidgetSettingsActivity::class.java).apply {
data = Uri.parse(KEY_WIDGET)
flags = Intent.FLAG_ACTIVITY_NEW_TASK
}
))
- Glance에서는 이때 반드시 람다 {} 안에 구성하는 것이 아니라 명시적으로 actionIntent를 onClick과 연결해주어야 한다.
위젯에서 특정 onClick 동작 수행하기
- 다음으로 로컬 DB 데이터 저장 및 데이터 동기화 같이 특정한 동작을 수행하기 위해서 ActionCallBack을 구성해 준다.
object ToggleBlockDoneAction : ActionCallback {
override suspend fun onAction(
context: Context,
glanceId: GlanceId,
parameters: ActionParameters
) {
val id = parameters[ActionParameters.Key<Long>("block_id")] ?: return
//TODO anything
}
}
- Glance는 onClick 이벤트에서 해당 ActionCallback을 비동기적으로 수행하게 된다.
- ActionParameters를 통해 해당 Action에서 필요한 값들을 넘겨받을 수도 있다.
val PARAM_BLOCK_ID = ActionParameters.Key<Long>("block_id")
- 위처럼 파라미터 키 값을 선언해 주고, onClick에서 그에 알맞은 Value를 넣어준다.
modifier = GlanceModifier.size(20.dp).clickable(
onClick = actionRunCallback<ToggleBlockDoneAction>(
parameters = actionParametersOf(PARAM_BLOCK_ID to block.id)
)
)
반응형