package Ġcom . wil low tree . voc able . custom views Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġkotlinx . coroutines .* Ċ Ċ /** Ċ Ġ* ĠA Ġsubclass Ġof ĠAppCompat RadioButton Ġthat Ġrepresents Ġa Ġcategory Ġon Ġthe Ġmain Ġscreen Ċ Ġ*/ Ċ class ĠCategory Button Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠAction Button ( context , Ġattrs , Ġdef Style ), ĊĠĠĠ ĠPointer Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġbutton Job : ĠJob ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbackground Scope Ġ= ĠCor outine Scope ( Dispatch ers . IO ) ĊĠĠĠ Ġprivate Ġval Ġui Scope Ġ= ĠCor outine Scope ( Dispatch ers . Main ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Selected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsay Text ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperform Action () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pointer Enter () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbutton Job Ġ= Ġbackground Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( dw ell Time ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġui Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Selected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsay Text ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Action () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pointer Exit () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbutton Job ?. cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsay Text ( text : ĠCharSequence ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNo - op ĊĠĠĠ Ġ} Ċ }