package Ġcom . id orm y . sms . for warder . fragment Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget .* Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġcom . id orm y . sms . for warder . App Ċ import Ġcom . id orm y . sms . for warder . R Ċ import Ġcom . id orm y . sms . for warder . adapter . spinner . App ListAdapter Item Ċ import Ġcom . id orm y . sms . for warder . adapter . spinner . App List Spinner Adapter Ċ import Ġcom . id orm y . sms . for warder . adapter . spinner . Sender Adapter Item Ċ import Ġcom . id orm y . sms . for warder . adapter . spinner . Sender Spinner Adapter Ċ import Ġcom . id orm y . sms . for warder . core . Base Fragment Ċ import Ġcom . id orm y . sms . for warder . database . App Database Ċ import Ġcom . id orm y . sms . for warder . database . entity . Rule Ċ import Ġcom . id orm y . sms . for warder . database . entity . Sender Ċ import Ġcom . id orm y . sms . for warder . database . view model . Base ViewModel Factory Ċ import Ġcom . id orm y . sms . for warder . database . view model . Rule ViewModel Ċ import Ġcom . id orm y . sms . for warder . databinding . Fragment Rules Edit Binding Ċ import Ġcom . id orm y . sms . for warder . entity . Msg Info Ċ import Ġcom . id orm y . sms . for warder . utils .* Ċ import Ġcom . xu ex iang . xa op . annotation . Single Click Ċ import Ġcom . xu ex iang . x page . annotation . Page Ċ import Ġcom . xu ex iang . x router . annotation . Auto W ired Ċ import Ġcom . xu ex iang . x router . launcher . X Router Ċ import Ġcom . xu ex iang . x router . utils . TextUtils Ċ import Ġcom . xu ex iang . x ui . utils . Res Utils Ċ import Ġcom . xu ex iang . x ui . widget . action bar . Title Bar Ċ import Ġcom . xu ex iang . x ui . widget . dialog . material dialog . Dialog Action Ċ import Ġcom . xu ex iang . x ui . widget . dialog . material dialog . Material Dialog Ċ import Ġcom . xu ex iang . x util . app . App Utils Ċ import Ġio . reactivex . Single Observer Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . util .* Ċ Ċ @ Page ( name Ġ= Ġ" è½¬ åıĳ è§ĦåĪĻ Â· ç¼ĸè¾ĳ åĻ¨ ") Ċ @ Suppress (" Private PropertyName ", Ġ" CAST _ NE VER _ SU CCE ED S ") Ċ class ĠRules Edit Fragment Ġ: ĠBase Fragment < Fragment Rules Edit Binding ?> (), ĠView . OnClickListener , ĠCompound Button . On Checked ChangeListener Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG : ĠString Ġ= ĠRules Edit Fragment :: class . java . simple Name ĊĠĠĠ Ġvar Ġtitle Bar : ĠTitle Bar ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < Rule ViewModel > Ġ{ ĠBase ViewModel Factory ( context ) Ġ} ĊĊĠĠĠ Ġ// å½ĵåīį åıĳéĢģ éĢļ éģĵ ĊĠĠĠ Ġvar Ġsender Id Ġ= Ġ 0 L ĊĊĠĠĠ Ġ// åıĳéĢģ éĢļ éģĵ åĪĹè¡¨ ĊĠĠĠ Ġprivate Ġval Ġsender Spinner List Ġ= ĠArrayList < Sender Adapter Item >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsender Spinner Adapter : ĠSender Spinner Adapter < *> ĊĊĠĠĠ Ġ// å·² å®īè£ħ App ä¿¡æģ¯ åĪĹè¡¨ ĊĠĠĠ Ġprivate Ġval Ġapp List Spinner List Ġ= ĠArrayList < App ListAdapter Item >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapp List Spinner Adapter : ĠApp List Spinner Adapter < *> ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġ@ Auto W ired ( name Ġ= ĠKEY _ RULE _ ID ) ĊĠĠĠ Ġvar Ġrule Id : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġ@ Auto W ired ( name Ġ= ĠKEY _ RULE _ TYPE ) ĊĠĠĠ Ġvar Ġrule Type : ĠString Ġ= Ġ" sms " ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġ@ Auto W ired ( name Ġ= ĠKEY _ RULE _ CL ONE ) ĊĠĠĠ Ġvar Ġis Clone : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġinit Args () Ġ{ ĊĠĠĠĠĠĠĠ ĠX Router . getInstance (). inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġview Binding Inf late ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup , ĊĠĠĠ Ġ): ĠFragment Rules Edit Binding Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFragment Rules Edit Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Title (): ĠTitle Bar ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtitle Bar Ġ= Ġsuper . init Title () !!. set Imm ers ive ( false ) ĊĠĠĠĠĠĠĠ Ġtitle Bar !!. setTitle ( R . string . menu _ rules ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtitle Bar ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ æİ§ä»¶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġinit Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( rule Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" app " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Bar ?. setTitle ( R . string . app _ rule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. layout Sim Slot . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. rb Phone . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. rb Content . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. tv Mu Rule Tips . setText ( R . string . mu _ rule _ app _ tips ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. bt Insert Sender . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. bt Insert Content . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" call " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Bar ?. setTitle ( R . string . call _ rule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. rb Content . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. rb PackageName . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. rb Inform Content . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. rb Multi Match . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. bt Insert Content . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. bt Insert Sender App . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. bt Insert Content App . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Bar ?. setTitle ( R . string . sms _ rule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. rb PackageName . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. rb Inform Content . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. bt Insert Sender App . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. bt Insert Content App . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( rule Id Ġ<= Ġ 0 ) Ġ{ Ġ// æĸ°å¢ŀ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Bar ?. set Sub Title ( getString ( R . string . add _ rule )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. btn Del . setText ( R . string . discard ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Sender Spinner () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// ç¼ĸè¾ĳ Ġ& Ġ åħĭ éļ Ĩ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. btn Del . setText ( R . string . del ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Form () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// åĪĿå§ĭåĮĸ APP ä¸ĭ æĭī åĪĹè¡¨ ĊĠĠĠĠĠĠĠ Ġinit App Spinner () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding !!. bt Insert Sender . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding !!. bt Insert Content . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding !!. bt Insert Sender App . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding !!. bt Insert Content App . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding !!. bt Insert Extra . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding !!. bt Insert Time . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding !!. bt Insert Device Name . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding !!. btn Test . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding !!. btn Del . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding !!. btn Save . setOnClickListener ( this ) ĊĊĠĠĠĠĠĠĠ Ġbinding !!. sb Sms Template . setOn Checked ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding !!. sb Regex Replace . setOn Checked ChangeListener ( this ) ĊĊĠĠĠĠĠĠĠ Ġbinding !!. rg File d . setOn Checked ChangeListener Ġ{ Ġ_: ĠRadio Group ?, Ġchecked Id : ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rule Type Ġ== Ġ" app " Ġ&& Ġapp List Spinner List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. layout App List . visibility Ġ= Ġif Ġ( checked Id Ġ== ĠR . id . rb _ inform _ content ) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( checked Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ transp ond _ all Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. rg Check . check ( R . id . rb _ is ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. tv Mu Rule Tips . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. layout Match Type . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. layout Match Value . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ multi _ match Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. rg Check . check ( R . id . rb _ is ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. tv Mu Rule Tips . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. layout Match Type . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. layout Match Value . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. tv Mu Rule Tips . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. layout Match Type . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. layout Match Value . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding !!. rg Check . setOn Checked ChangeListener Ġ{ Ġgroup : ĠRadio Group ?, Ġchecked Id : ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( group Ġ!= Ġnull Ġ&& Ġchecked Id Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. rg Check 2 . clear Check () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup . check ( checked Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding !!. rg Check 2 . setOn Checked ChangeListener Ġ{ Ġgroup : ĠRadio Group ?, Ġchecked Id : ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( group Ġ!= Ġnull Ġ&& Ġchecked Id Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. rg Check . clear Check () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup . check ( checked Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon CheckedChanged ( button View : ĠCompound Button ?, Ġis Checked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( button View ?. id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sb _ sms _ template Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. layout Sms Template . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. layout Sms Template . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. et Sms Template . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sb _ regex _ replace Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. layout Regex Replace . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. layout Regex Replace . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. et Regex Replace . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Single Click ĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġet Sms Template : ĠEditText Ġ= Ġbinding !!. et Sms Template ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( v . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bt _ insert _ sender Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Utils . insert Or Replace Text 2 Cursor ( et Sms Template , ĠgetString ( R . string . tag _ from )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bt _ insert _ content Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Utils . insert Or Replace Text 2 Cursor ( et Sms Template , ĠgetString ( R . string . tag _ sms )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bt _ insert _ sender _ app Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Utils . insert Or Replace Text 2 Cursor ( et Sms Template , ĠgetString ( R . string . tag _ package _ name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bt _ insert _ content _ app Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Utils . insert Or Replace Text 2 Cursor ( et Sms Template , ĠgetString ( R . string . tag _ msg )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bt _ insert _ extra Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Utils . insert Or Replace Text 2 Cursor ( et Sms Template , ĠgetString ( R . string . tag _ card _ slot )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bt _ insert _ time Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Utils . insert Or Replace Text 2 Cursor ( et Sms Template , ĠgetString ( R . string . tag _ receive _ time )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bt _ insert _ device _ name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Utils . insert Or Replace Text 2 Cursor ( et Sms Template , ĠgetString ( R . string . tag _ device _ name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . btn _ test Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrule New Ġ= Ġcheck Form () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Rule ( rule New ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . btn _ del Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rule Id Ġ<= Ġ 0 Ġ|| Ġis Clone ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop To Back () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Dialog . Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( R . string . delete _ rule _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( R . string . delete _ rule _ tips ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. positive Text ( R . string . lab _ yes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. negative Text ( R . string . lab _ no ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Positive Ġ{ Ġ_: ĠMaterial Dialog ?, Ġ_: ĠDialog Action ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete ( rule Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠX Toast Utils . success ( R . string . delete _ rule _ toast ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop To Back () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . btn _ save Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrule New Ġ= Ġcheck Form () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Clone ) Ġrule New . id Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġrule New . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . insert OrUpdate ( rule New ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠX Toast Utils . success ( R . string . tip Save Success ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop To Back () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠX Toast Utils . error ( e . message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// åĪĿå§ĭåĮĸ åıĳéĢģ éĢļ éģĵ ä¸ĭ æĭī æ¡Ĩ ĊĠĠĠ Ġprivate Ġfun Ġinit Sender Spinner () Ġ{ ĊĠĠĠĠĠĠĠ ĠApp Database . getInstance ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sender Dao () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getAll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( object Ġ: ĠSingle Observer < List < Sender >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Subscribe ( d : ĠDis posable ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( sender List : ĠList < Sender >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sender List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠX Toast Utils . error ( R . string . add _ sender _ first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( sender Ġin Ġsender List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender Spinner List . add ( Sender Adapter Item ( sender . name , Ġsender . image Id , Ġsender . id , Ġsender . status )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender Spinner Adapter Ġ= ĠSender Spinner Adapter ( sender Spinner List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// . setTextColor ( Res Utils . getColor ( R . color . green )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// . setText Size ( 1 2 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIs Filter Key ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Filter Color ("# EF 5 3 6 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setBackground Selector ( R . drawable . selector _ custom _ spinner _ bg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. sp Sender . setAdapter ( sender Spinner Adapter ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sender Id Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( sender Ġin Ġsender Spinner List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sender . id Ġ== Ġsender Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. iv Sender Image . setImage Drawable ( sender . icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. iv Sender Status . setImage Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRes Utils . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( sender . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATUS _ OFF Ġ-> ĠR . drawable . icon _ off ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . drawable . icon _ on ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. tv Sender Name . text Ġ= Ġsender . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġbinding !!. sp Sender . setOn ItemClickListener Ġ{ Ġ_: ĠAdapter View <* >, Ġ_: ĠView , Ġposition : ĠInt , Ġ_: ĠLong Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġsender Ġ= Ġsender Spinner List [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsender Ġ= Ġsender Spinner Adapter . getItem Source ( position ) Ġas ĠSender Adapter Item ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender . id . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender Id Ġ= Ġit Ġ?: Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. iv Sender Image . setImage Drawable ( sender . icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. iv Sender Status . setImage Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRes Utils . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( sender . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATUS _ OFF Ġ-> ĠR . drawable . icon _ off ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . drawable . icon _ on ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. tv Sender Name . text Ġ= Ġsender . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( STATUS _ OFF Ġ== Ġsender . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠX Toast Utils . warning ( getString ( R . string . sender _ disabled _ tips )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠX Toast Utils . error ( e . message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// åĪĿå§ĭåĮĸ APP ä¸ĭ æĭī åĪĹè¡¨ ĊĠĠĠ Ġprivate Ġfun Ġinit App Spinner () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( rule Type Ġ!= Ġ" app ") Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġget Ġ= ĠGlobal Scope . async ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( Setting Utils . enable Load User App List Ġ&& ĠApp . User App List . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠSetting Utils . enable Load System App List Ġ&& ĠApp . System App List . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp . User App List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp . System App List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp InfoList Ġ= ĠApp Utils . get Apps Info () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( app Info Ġin Ġapp InfoList ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( app Info . is System ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp . System App List . add ( app Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp . User App List . add ( app Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp . User App List . sortBy Ġ{ Ġapp Info Ġ-> Ġapp Info . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp . System App List . sortBy Ġ{ Ġapp Info Ġ-> Ġapp Info . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget . await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( App . User App List . isEmpty () Ġ&& ĠApp . System App List . isEmpty ()) Ġreturn @ run Catch ing ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp List Spinner List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Setting Utils . enable Load User App List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( app Info Ġin ĠApp . User App List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp List Spinner List . add ( App ListAdapter Item ( app Info . name , Ġapp Info . icon , Ġapp Info . packageName )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Setting Utils . enable Load System App List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( app Info Ġin ĠApp . System App List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp List Spinner List . add ( App ListAdapter Item ( app Info . name , Ġapp Info . icon , Ġapp Info . packageName )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp List Spinner Adapter Ġ= ĠApp List Spinner Adapter ( app List Spinner List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// . setTextColor ( Res Utils . getColor ( R . color . green )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// . setText Size ( 1 2 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIs Filter Key ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Filter Color ("# EF 5 3 6 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setBackground Selector ( R . drawable . selector _ custom _ spinner _ bg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. sp App . setAdapter ( app List Spinner Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. sp App . setOn ItemClickListener Ġ{ Ġ_: ĠAdapter View <* >, Ġ_: ĠView , Ġposition : ĠInt , Ġ_: ĠLong Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġapp Info Ġ= Ġapp List Spinner List [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Info Ġ= Ġapp List Spinner Adapter . getItem Source ( position ) Ġas ĠApp ListAdapter Item ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Utils . insert Or Replace Text 2 Cursor ( binding !!. et Value , Ġapp Info . packageName . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠX Toast Utils . error ( e . message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. layout App List . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Global Scope ", Ġit . message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// åĪĿå§ĭåĮĸ è¡¨åįķ ĊĠĠĠ Ġprivate Ġfun Ġinit Form () Ġ{ ĊĠĠĠĠĠĠĠ ĠApp Database . getInstance ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. rule Dao () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( rule Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( object Ġ: ĠSingle Observer < Rule > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Subscribe ( d : ĠDis posable ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( rule : ĠRule ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender Id Ġ= Ġrule . sender Id ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Clone ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Bar ?. set Sub Title ( getString ( R . string . clone _ rule )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. btn Del . setText ( R . string . discard ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Bar ?. set Sub Title ( getString ( R . string . edit _ rule )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġrule . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. rg Sim Slot . check ( rule . get Sim Slot Check Id ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. rg File d . check ( rule . getFile d Check Id ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck Id Ġ= Ġrule . get Check Check Id () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Id Ġ== ĠR . id . rb _ is Ġ|| Ġcheck Id Ġ== ĠR . id . rb _ contain Ġ|| Ġcheck Id Ġ== ĠR . id . rb _ not _ contain ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. rg Check . check ( check Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. rg Check 2 . check ( check Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. et Value . setText ( rule . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. sb Sms Template . isChecked Ġ= Ġ! TextUtils . isEmpty ( rule . sms Template . trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. et Sms Template . setText ( rule . sms Template . trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. sb Regex Replace . isChecked Ġ= Ġ! TextUtils . isEmpty ( rule . regex Replace . trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. et Regex Replace . setText ( rule . regex Replace . trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. sb Status . isChecked Ġ= Ġrule . status Checked ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪĿå§ĭåĮĸ åıĳéĢģ éĢļ éģĵ ä¸ĭ æĭī æ¡Ĩ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Sender Spinner () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// æıĲäº¤ åīį æ£ĢæŁ¥ è¡¨åįķ ĊĠĠĠ Ġprivate Ġfun Ġcheck Form (): ĠRule Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( sender Id Ġ<= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException ( getString ( R . string . new _ sender _ first )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfiled Ġ= Ġwhen Ġ( binding !!. rg File d . checked RadioButton Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ content Ġ-> ĠF ILED _ MSG _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ phone Ġ-> ĠF ILED _ PHONE _ NUM ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ package _ name Ġ-> ĠF ILED _ PACKAGE _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ inform _ content Ġ-> ĠF ILED _ IN FORM _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ multi _ match Ġ-> ĠF ILED _ MULTI _ MATCH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠF ILED _ TRANSP OND _ ALL ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcheck Ġ= Ġwhen Ġ( kotlin . math . max ( binding !!. rg Check . checked RadioButton Id , Ġbinding !!. rg Check 2 . checked RadioButton Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ contain Ġ-> ĠCHECK _ CONTAIN ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ not _ contain Ġ-> ĠCHECK _ NOT _ CONTAIN ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ start _ with Ġ-> ĠCHECK _ START _ WITH ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ end _ with Ġ-> ĠCHECK _ END _ WITH ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ regex Ġ-> ĠCHECK _ REGEX ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠCHECK _ IS ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġbinding !!. et Value . text . toString (). trim () ĊĠĠĠĠĠĠĠ Ġif Ġ( FILE D _ TRANSP OND _ ALL Ġ!= Ġfiled Ġ&& ĠText Utils . isEmpty ( value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException ( getString ( R . string . invalid _ match _ value )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( FILE D _ MULTI _ MATCH Ġ== Ġfiled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Error Ġ= Ġcheck Multi Match ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Error Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException ( String . format ( getString ( R . string . invalid _ multi _ match ), Ġline Error )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsms Template Ġ= Ġbinding !!. et Sms Template . text . toString (). trim () ĊĠĠĠĠĠĠĠ Ġval Ġregex Replace Ġ= Ġbinding !!. et Regex Replace . text . toString (). trim () ĊĠĠĠĠĠĠĠ Ġval Ġline Num Ġ= Ġcheck Regex Replace ( regex Replace ) ĊĠĠĠĠĠĠĠ Ġif Ġ( lineNum Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException ( String . format ( getString ( R . string . invalid _ regex _ replace ), Ġline Num )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsim Slot Ġ= Ġwhen Ġ( binding !!. rg Sim Slot . checked RadioButton Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ sim _ slot _ 1 Ġ-> ĠCHECK _ SIM _ SLOT _ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ sim _ slot _ 2 Ġ-> ĠCHECK _ SIM _ SLOT _ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠCHECK _ SIM _ SLOT _ ALL ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġif Ġ( binding !!. sb Status . isChecked ) ĠSTATUS _ ON Ġelse ĠSTATUS _ OFF ĊĠĠĠĠĠĠĠ Ġ// if Ġ( status Ġ== ĠSTATUS _ OFF ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġthrow ĠException ( getString ( R . string . invalid _ rule _ status )) ĊĠĠĠĠĠĠĠ Ġ//} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRule ( rule Id , Ġrule Type , Ġfiled , Ġcheck , Ġvalue , Ġsender Id , Ġsms Template , Ġregex Replace , Ġsim Slot , Ġstatus ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// æ£ĢæŁ¥ å¤ļ éĩį åĮ¹éħį è§ĦåĪĻ æĺ¯åĲ¦ æŃ£ç¡® ĊĠĠĠ Ġprivate Ġfun Ġcheck Multi Match ( rule Str : ĠString ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( rule Str )) Ġreturn Ġ 0 ĊĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , ĠgetString ( R . string . regex _ multi _ match )) ĊĠĠĠĠĠĠĠ Ġval Ġregex Ġ= ĠRegex ( pattern Ġ= ĠgetString ( R . string . regex _ multi _ match )) ĊĠĠĠĠĠĠĠ Ġvar Ġline Num Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġline Array Ġ= Ġrule Str ?. split ("\\ n ". to Regex ()) ?. to Typed Array () ĊĠĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġline Array !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġline ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! line . matches ( regex )) Ġreturn Ġline Num ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Num ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// æ£ĢæŁ¥ æŃ£ åĪĻ æĽ¿æį¢ å¡«åĨĻ æĺ¯åĲ¦ æŃ£ç¡® ĊĠĠĠ Ġprivate Ġfun Ġcheck Regex Replace ( regex Replace : ĠString ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( regex Replace )) Ġreturn Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġvar Ġline Num Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġline Array Ġ= Ġregex Replace ?. split ("\\ n ". to Regex ()) ?. to Typed Array () ĊĠĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġline Array !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġline . indexOf (" == =") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ< Ġ 1 ) Ġreturn Ġline Num ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Num ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtest Rule ( rule : ĠRule ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Test Ġ= ĠView . inflate ( require Context (), ĠR . layout . dialog _ rule _ test , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġtv Sim Slot Ġ= Ġdialog Test . findViewById < TextView >( R . id . tv _ sim _ slot ) ĊĠĠĠĠĠĠĠ Ġval Ġrg Sim Slot Ġ= Ġdialog Test . findViewById < Radio Group >( R . id . rg _ sim _ slot ) ĊĠĠĠĠĠĠĠ Ġval Ġtv From Ġ= Ġdialog Test . findViewById < TextView >( R . id . tv _ from ) ĊĠĠĠĠĠĠĠ Ġval Ġet From Ġ= Ġdialog Test . findViewById < EditText >( R . id . et _ from ) ĊĠĠĠĠĠĠĠ Ġval Ġtv Content Ġ= Ġdialog Test . findViewById < TextView >( R . id . tv _ content ) ĊĠĠĠĠĠĠĠ Ġval Ġet Content Ġ= Ġdialog Test . findViewById < EditText >( R . id . et _ content ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(" app " Ġ== Ġrule Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Sim Slot . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrg Sim Slot . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv From . setText ( R . string . test _ package _ name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Content . setText ( R . string . test _ inform _ content ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(" call " Ġ== Ġrule Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Content . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Content . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠMaterial Dialog . Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. icon Res ( android . R . drawable . ic _ dialog _ email ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( R . string . rule _ tester ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. custom View ( dialog Test , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. auto Dismiss ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. neutral Text ( R . string . action _ back ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. neutral Color ( Res Utils . get Colors ( R . color . dark Grey )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Neutral Ġ{ Ġdialog : ĠMaterial Dialog ?, Ġ_: ĠDialog Action ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog ?. dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. positive Text ( R . string . action _ test ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Positive Ġ{ Ġ_: ĠMaterial Dialog ?, Ġ_: ĠDialog Action ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsim Slot Ġ= Ġwhen Ġ( rg Sim Slot . checked RadioButton Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ sim _ slot _ 1 Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ sim _ slot _ 2 Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest Sim Ġ= Ġ" SIM " Ġ+ Ġ( sim Slot Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrule Sim : ĠString Ġ= Ġrule . sim Slot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rule Sim Ġ!= Ġ" ALL " Ġ&& Ġrule Sim Ġ!= Ġtest Sim ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġjava . lang . Exception ( getString ( R . string . card _ slot _ does _ not _ match )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// èİ·åıĸ åį¡ æ§ ½ ä¿¡æģ¯ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsim Info Ġ= Ġwhen Ġ( sim Slot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ" SIM 1 _" Ġ+ ĠSetting Utils . extra Sim 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ" SIM 2 _" Ġ+ ĠSetting Utils . extra Sim 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Info Ġ= ĠMsg Info ( rule Type , Ġet From . text . toString (), Ġet Content . text . toString (), ĠDate (), Ġsim Info , Ġsim Slot ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! rule . check Msg ( msg Info )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġjava . lang . Exception ( getString ( R . string . un matched _ rule )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Database . getInstance ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sender Dao () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( sender Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( object Ġ: ĠSingle Observer < Sender > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Subscribe ( d : ĠDis posable ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( sender : ĠSender ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSend Utils . send Msg Sender ( msg Info , Ġrule , Ġsender , Ġ 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠX Toast Utils . error ( e . message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠ Ġ} Ċ }