package Ġcom . o jh dt app . action . logic . detector Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . hardware . lights . Light State Ċ import Ġandroid . util . Log Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġandroidx . room . Room Ċ import Ġcom . o jh dt app . action . Base Application Ċ import Ġcom . o jh dt app . action . R Ċ import Ġcom . o jh dt app . action . logic . AppData Base Ċ import Ġcom . o jh dt app . action . logic . Repository Ċ import Ġcom . o jh dt app . action . logic . model . Action Ċ import Ġcom . o jh dt app . action . logic . model . Action History Ċ import Ġcom . o jh dt app . action . util . Notification Util Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠAction Push er Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠACT IVITY _ IN _ VE H IC LE Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval ĠACT IVITY _ ON _ B ICY CLE Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval ĠACT IVITY _ ON _ FO OT Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġval ĠLIGHT _ FULL _ MO ON Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval ĠLIGHT _ SUN RI SE Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval ĠLIGHT _ SHA DE Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval ĠLIGHT _ SUN LIGHT Ġ= Ġ 3 ĊĊĠĠĠĠĠĠĠ Ġval ĠTIME _ MID N IGHT Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval ĠTIME _ EAR LY _ MOR NING Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval ĠTIME _ MOR NING Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval ĠTIME _ NO ON Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġval ĠTIME _ AFTER NO ON Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġval ĠTIME _ D US K Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġval ĠTIME _ E VEN ING Ġ= Ġ 6 ĊĊĠĠĠĠĠĠĠ Ġval ĠSTATE _ ACTIVITY Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval ĠSTATE _ LIGHT Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval ĠSTATE _ LOCATION Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval ĠSTATE _ TIME Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġval ĠSTATE _ WE ATHER Ġ= Ġ 4 ĊĊĠĠĠĠĠĠĠ Ġval Ġstate List Ġ= ĠlistOf < Mutable List < Boolean >>( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġtrue , Ġtrue , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġtrue , Ġtrue , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġtrue , Ġfalse , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġfalse , Ġtrue , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġtrue , Ġtrue , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġtrue , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġfalse , Ġtrue , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġtrue , Ġtrue , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġfalse , Ġfalse , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġtrue , Ġfalse , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġfalse , Ġtrue , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġfalse , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġtrue , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġfalse , Ġtrue , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġfalse , Ġfalse , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġfalse , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfull State List Ġ= ĠlistOf < Mutable List < Boolean >>( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġtrue , Ġtrue , Ġtrue , Ġtrue ), ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġtrue , Ġtrue , Ġtrue , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġtrue , Ġtrue , Ġfalse , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġtrue , Ġfalse , Ġtrue , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġfalse , Ġtrue , Ġtrue , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġtrue , Ġtrue , Ġtrue , Ġtrue ), ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġtrue , Ġtrue , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġtrue , Ġfalse , Ġtrue , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġfalse , Ġtrue , Ġtrue , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġtrue , Ġtrue , Ġtrue , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġtrue , Ġfalse , Ġfalse , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġfalse , Ġtrue , Ġfalse , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġtrue , Ġtrue , Ġfalse , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġfalse , Ġfalse , Ġtrue , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġtrue , Ġfalse , Ġtrue , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġfalse , Ġtrue , Ġtrue , Ġtrue ), ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġtrue , Ġfalse , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġfalse , Ġtrue , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġtrue , Ġtrue , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġfalse , Ġfalse , Ġtrue , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġtrue , Ġfalse , Ġtrue , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġfalse , Ġtrue , Ġtrue , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġfalse , Ġfalse , Ġfalse , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġtrue , Ġfalse , Ġfalse , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġfalse , Ġtrue , Ġfalse , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġfalse , Ġfalse , Ġtrue , Ġtrue ), ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( true , Ġfalse , Ġfalse , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġtrue , Ġfalse , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġfalse , Ġtrue , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġfalse , Ġfalse , Ġtrue , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġfalse , Ġfalse , Ġfalse , Ġtrue ), ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( false , Ġfalse , Ġfalse , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġinstance Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAction Push er () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Push er (): ĠAction Push er Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcontext Ġ= ĠBase Application . context ĊĠĠĠ Ġprivate Ġval Ġdatabase Ġ= ĠApp Data Base . getData Base (). action Dao () ĊĠĠĠ Ġprivate Ġval Ġshared Preference : ĠSharedPreferences Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġactivity State : ĠInt Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġlight State : ĠInt Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġlocation State : ĠInt Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġtime State : ĠInt Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġweather State : ĠInt Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġtrigger Time : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġfun Ġsubmit State ( activity State : ĠInt ? Ġ= Ġnull , Ġlight State : ĠInt ? Ġ= Ġnull , Ġtime State : ĠInt ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity State ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . activity State Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlight State ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . light State Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtime State ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . time State Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sensor ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . activity State . toString () Ġ+ Ġ" Ġ" Ġ+ Ġthis . light State . toString () Ġ+ Ġ" Ġ" Ġ+ Ġthis . time State . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtry Push ing New Action ( ĊĠĠĠĠĠĠĠ Ġmain Trigger : ĠString , Ċ // ĠĠĠĠĠĠĠ Ġshould Notice Activity : ĠBoolean ? Ġ= Ġfalse , Ċ // ĠĠĠĠĠĠĠ Ġshould Notice Light : ĠBoolean ? Ġ= Ġfalse , Ċ // ĠĠĠĠĠĠĠ Ġshould Notice Location : ĠBoolean ? Ġ= Ġfalse ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" sensor ", Ġ( System . currentTimeMillis () Ġ- Ġtrigger Time ). toString ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( System . currentTimeMillis () Ġ- Ġtrigger Time Ġ> Ġ 6 0 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger Time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠJob () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope ( job ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtemp List : ĠList < Action > Ġ= ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( main Trigger ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" activity " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpossible Fore ach ( 0 , Ġmain Trigger ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" light " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpossible Fore ach ( 1 , Ġmain Trigger ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" location " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpossible Fore ach ( 2 , Ġmain Trigger ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" time " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpossible Fore ach ( 3 , Ġmain Trigger ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" weather " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpossible Fore ach ( 4 , Ġmain Trigger ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpossible Fore ach (- 1 , Ġmain Trigger ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob . complete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpossible Fore ach ( target : ĠInt , Ġmain Trigger : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtemp List : ĠList < Action > ĊĠĠĠĠĠĠĠ Ġif Ġ( target Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfull State List . forEach Indexed Ġ{ Ġindex , Ġb ooleans Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" aaa ", Ġindex . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp List Ġ= Ġdatabase . load Available Action By Conditions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b ooleans [ 0 ]) Ġactivity State Ġelse Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b ooleans [ 1 ]) Ġlight State Ġelse Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b ooleans [ 2 ]) Ġlocation State Ġelse Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b ooleans [ 3 ]) Ġtime State Ġelse Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b ooleans [ 4 ]) Ġweather State Ġelse Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( temp List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit And Push Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Action Random ly By Weight ( temp List ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb ooleans [ 0 ], Ġb ooleans [ 1 ], Ġb ooleans [ 2 ], Ġb ooleans [ 3 ], Ġb ooleans [ 4 ], Ġmain Trigger ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" aaa ", Ġ" done ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" aaa ", Ġ" not Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate List . forEach Indexed Ġ{ Ġindex , Ġb ooleans Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb ooleans . add ( target , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp List Ġ= Ġdatabase . load Available Action By Conditions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b ooleans [ 0 ]) Ġactivity State Ġelse Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b ooleans [ 1 ]) Ġlight State Ġelse Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b ooleans [ 2 ]) Ġlocation State Ġelse Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b ooleans [ 3 ]) Ġtime State Ġelse Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b ooleans [ 4 ]) Ġweather State Ġelse Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( temp List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit And Push Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Action Random ly By Weight ( temp List ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb ooleans [ 0 ], Ġb ooleans [ 1 ], Ġb ooleans [ 2 ], Ġb ooleans [ 3 ], Ġb ooleans [ 4 ], Ġmain Trigger ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . d (" aaa ", Ġ" Nothing Ġcan Ġbe Ġpush ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Action Random ly By Weight ( list : ĠList < Action >): ĠAction Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsum Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġs sum Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġit . weight ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġran Num Ġ= Ġ( 0 .. sum ). random () ĊĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs sum Ġ+= Ġit . weight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ss um Ġ>= Ġran Num ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . d (" aaa ", Ġ" Random ĠFailed ") ĊĠĠĠĠĠĠĠ Ġreturn Ġlist . random () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġedit And Push Action ( ĊĠĠĠĠĠĠĠ Ġitem : ĠAction , ĊĠĠĠĠĠĠĠ Ġis Activity State Used : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġis Light State Used : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġis Location State Used : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġis Time State Used : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġis Weather State Used : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġmain Trigger : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠA ch ievement Push er . get Push er (). try Push ing New Ach ievement (" sensor ") ĊĠĠĠĠĠĠĠ ĠLog . d (" aaa ", Ġis Activity State Used . toString () Ġ+ Ġ" Ġ" Ġ+ Ġis Light State Used . toString () Ġ+ Ġ" Ġ" Ġ+ Ġis Location State Used . toString () Ġ+ Ġ" Ġ" Ġ+ Ġis Time State Used . toString () Ġ+ Ġ" Ġ" Ġ+ Ġis Weather State Used . toString ()) ĊĠĠĠĠĠĠĠ Ġval Ġcause Str Ġ= ĠStringBuilder ( main Trigger Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( if Ġ( is Activity State Used Ġ&& Ġactivity State Ġ!= Ġ- 1 ) Ġ" Ġ" Ġ+ Ġcontext . getString ( R . string . action _ push er _ cause _ activity ) Ġelse Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( if Ġ( is Light State Used Ġ&& Ġlight State Ġ!= Ġ- 1 ) Ġ" Ġ" Ġ+ Ġcontext . getString ( R . string . action _ push er _ cause _ light ) Ġelse Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( if Ġ( is Location State Used Ġ&& Ġlocation State Ġ!= Ġ- 1 ) Ġ" Ġ" Ġ+ Ġcontext . getString ( R . string . action _ push er _ cause _ location ) Ġelse Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( if Ġ( is Time State Used Ġ&& Ġtime State Ġ!= Ġ- 1 ) Ġ" Ġ" Ġ+ Ġcontext . getString ( R . string . action _ push er _ cause _ time ) Ġelse Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( if Ġ( is Weather State Used Ġ&& Ġweather State Ġ!= Ġ- 1 ) Ġ" Ġ" Ġ+ Ġcontext . getString ( R . string . action _ push er _ cause _ weather ) Ġelse Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString () ĊĊĠĠĠĠĠĠĠ Ġval Ġnew History Ġ= Ġitem . history . to Mutable List (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Action History ( cause Ġ= Ġcause Str )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Item Ġ= Ġitem . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Activ ating Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Triggered Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhistory Ġ= Ġnew History ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdatabase . update Action ( new Item ) ĊĠĠĠĠĠĠĠ ĠNotification Util . send Action ( new Item ) ĊĠĠĠ Ġ} Ċ }