/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 - 2 0 2 1 ĠQu ent in ĠN ivel ais Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . n ivel ais . com bi planner . app . ui . modules . settings . category Ċ Ċ import Ġandroidx . compose . foundation . click able Ċ import Ġandroidx . compose . foundation . layout . Arrange ment Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Column Scope Ċ import Ġandroidx . compose . foundation . layout . Row Ċ import Ġandroidx . compose . foundation . layout . Spacer Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . material . AlertDialog Ċ import Ġandroidx . compose . material . Button Ċ import Ġandroidx . compose . material . Card Ċ import Ġandroidx . compose . material . Checkbox Ċ import Ġandroidx . compose . material . Icon Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Outlined Button Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled . Delete Fore ver Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . n ivel ais . com bi planner . R Ċ import Ġcom . n ivel ais . com bi planner . app . ui . modules . category . picker . State less Categories Picker Ċ import Ġcom . n ivel ais . com bi planner . app . ui . widgets . Color Indicator Ċ import Ġcom . n ivel ais . com bi planner . domain . entities . Category Ċ import Ġcom . n ivel ais . com bi planner . domain . use cases . category . Deletion Strategy Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġorg . k oin . android x . compose . get Ċ import Ġorg . k oin . core . parameter . parameters Of Ċ Ċ @ Opt In ( Experimental Cor outines Api :: class ) Ċ @ Composable Ċ fun ĠCategory Card ( ĊĠĠĠ Ġcategory : ĠCategory , ĊĠĠĠ Ġcategories : ĠList < Category >, ĊĠĠĠ ĠviewModel : ĠCategory ViewModel Ġ= Ġget Ġ{ Ġparameters Of ( category , Ġcategories ) Ġ} Ċ ) Ġ{ ĊĠĠĠ ĠCategory Box Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġbase Ġcontent Ġof Ġthe Ġcategory Ġcard ĊĠĠĠĠĠĠĠ ĠCategory Header ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġcategory . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcategory . color , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Category ( category Ġ= Ġcategory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġneed Ġto Ġspecify Ġa Ġmigration Ġstrategy Ġshow Ġthe Ġdialog ĊĠĠĠĠĠĠĠ Ġval Ġis Strategy To Specify Ġby Ġremember Ġ{ ĠviewModel . is Deletion Strategy Required State Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Strategy To Specify ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMigration Strategy Alert ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠviewModel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Clicked Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Category ( category ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠCategory Box ( ĊĠĠĠ Ġcontent : Ġ@ Composable ĠColumn Scope . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 8 . dp ), ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCard Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 8 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠCategory Header ( ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġcolor : ĠLong ?, ĊĠĠĠ ĠonDelete Click : Ġ() Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width (), ĊĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . body 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . weight ( 1 f ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcolor ?. let Ġ{ Ġcolor Code Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . padding ( 8 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor Indicator ( color Code Ġ= Ġcolor Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . padding ( 8 . dp )) ĊĠĠĠĠĠĠĠ Ġ// ĠDelete Ġbutton ĊĠĠĠĠĠĠĠ ĠOut lined Button ( onClick Ġ= ĠonDelete Click ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( Icons . Filled . Delete Fore ver , Ġ" Delete Ġ$ name Ġcategory ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAlert Ġbox Ġdisplayed Ġwhen Ġa Ġdeletion Ġstrategy Ġis Ġrequired Ċ Ġ*/ Ċ @ Composable Ċ private Ġfun ĠMigration Strategy Alert ( ĊĠĠĠ ĠviewModel : ĠCategory ViewModel , ĊĠĠĠ ĠonDelete Clicked : Ġ() Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ Ġval Ġerror Res Ġby Ġremember Ġ{ ĠviewModel . deletion Error Res State Ġ} ĊĠĠĠ Ġvar Ġdeletion Strategy Ġby Ġremember Ġ{ ĠviewModel . selected Deletion Strategy State Ġ} ĊĠĠĠ Ġvar Ġselected Category Ġby Ġremember Ġ{ ĠviewModel . selected Category State Ġ} ĊĊĠĠĠ ĠMigration Strategy Alert Box ( ĊĠĠĠĠĠĠĠ Ġon Dismiss Ġ= Ġ{ ĠviewModel . dismiss Deletion Strategy Dialog () Ġ}, ĊĠĠĠĠĠĠĠ ĠonDelete Clicked Ġ= ĠonDelete Clicked , ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( id Ġ= ĠR . string . category _ deletion _ strategy _ picker ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġgot Ġan Ġerror Ġdisplay Ġit ĊĠĠĠĠĠĠĠ Ġerror Res ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . padding ( 8 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( id Ġ= Ġit ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . body 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠMaterial Theme . colors . error ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . padding ( 8 . dp )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġneed Ġto Ġspecify Ġa Ġmigration Ġstrategy Ġdo Ġit ĊĠĠĠĠĠĠĠ ĠDelete Strategy Picker ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Strategy Ġ= Ġdeletion Strategy , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Strategy Pick ed Ġ= Ġ{ Ġdeletion Strategy Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġcurrent Ġstrategy Ġis Ġcategory Ġthen Ġshow Ġthe Ġcategory Ġpicker ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . is Category Required For Deletion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCategory Ġpicker ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . padding ( 8 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( id Ġ= ĠR . string . category _ categories _ picker ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . subtitle 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . padding ( 8 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStateless Categories Picker ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategories Ġ= ĠviewModel . categories Available For Migration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Selected Ġ= Ġselected Category , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Category Pick ed Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe Ġselected Ġcategory Ġand Ġthe Ġmigration Ġtarget ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Category Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( deletion Strategy Ġas ĠDe letion Strategy . Migrate ). new CategoryId Ġ= Ġit . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAlert Ġbox Ġdisplayed Ġwhen Ġa Ġdeletion Ġstrategy Ġis Ġrequired Ċ Ġ*/ Ċ @ Composable Ċ private Ġfun ĠMigration Strategy Alert Box ( ĊĠĠĠ Ġon Dismiss : Ġ() Ġ-> ĠUnit , ĊĠĠĠ ĠonDelete Clicked : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġtitle : Ġ@ Composable () Ġ(() Ġ-> ĠUnit ), ĊĠĠĠ Ġcontent : Ġ@ Composable () Ġ( Column Scope . () Ġ-> ĠUnit ) Ċ ) Ġ{ ĊĠĠĠ ĠAlertDialog ( ĊĠĠĠĠĠĠĠ Ġon Dismiss Request Ġ= Ġon Dismiss , ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠ Ġbuttons Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . End , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOut lined Button ( onClick Ġ= ĠonDelete Clicked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( id Ġ= ĠR . string . category _ deletion _ button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . padding ( 8 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġon Dismiss ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( id Ġ= ĠR . string . category _ cancel _ button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( content Ġ= Ġcontent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠThe Ġdelete Ġstrategy Ġpicker Ċ Ġ*/ Ċ @ Composable Ċ private Ġfun ĠDelete Strategy Picker ( ĊĠĠĠ Ġcurrent Strategy : ĠDe letion Strategy ?, ĊĠĠĠ Ġon Strategy Pick ed : Ġ( Deletion Strategy ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġ// ĠThe Ġflow Ġrow Ġof Ġour Ġcategories ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 8 . dp ), ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDe letion Strategy Checkbox ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Res Ġ= ĠR . string . category _ deletion _ strategy _ migrate _ to _ null , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Checked Ġ= Ġcurrent Strategy Ġis ĠDe letion Strategy . Migrate To Null , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Checked Change Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġon Strategy Pick ed ( Deletion Strategy . Migrate To Null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . padding ( 8 . dp )) ĊĠĠĠĠĠĠĠ ĠDe letion Strategy Checkbox ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Res Ġ= ĠR . string . category _ deletion _ strategy _ cascade , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Checked Ġ= Ġcurrent Strategy Ġis ĠDe letion Strategy . Cascade , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Checked Change Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġon Strategy Pick ed ( Deletion Strategy . Cascade ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . padding ( 8 . dp )) ĊĠĠĠĠĠĠĠ ĠDe letion Strategy Checkbox ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Res Ġ= ĠR . string . category _ deletion _ strategy _ migrate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Checked Ġ= Ġcurrent Strategy Ġis ĠDe letion Strategy . Migrate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Checked Change Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġon Strategy Pick ed ( Deletion Strategy . Migrate ( 0 L )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠDe letion Strategy Checkbox ( ĊĠĠĠ Ġtext Res : ĠInt , ĊĠĠĠ Ġis Checked : ĠBoolean , ĊĠĠĠ Ġon Checked Change : Ġ( Boolean ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . click able Ġ{ Ġon Checked Change (! isChecked ) Ġ} ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCheckbox ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Ġ= Ġis Checked , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Checked Change Ġ= Ġon Checked Change ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . padding ( 8 . dp )) ĊĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġstring Resource ( id Ġ= Ġtext Res )) ĊĠĠĠ Ġ} Ċ } Ċ