package Ġcom . element ary . tasks . birth days . preview Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . element ary . tasks . Build Config Ċ import Ġcom . element ary . tasks . R Ċ import Ġcom . element ary . tasks . core . arch . Binding Activity Ċ import Ġcom . element ary . tasks . core . data . models . Birth day Ċ import Ġcom . element ary . tasks . core . services . Event Operation al Service Ċ import Ġcom . element ary . tasks . core . utils .* Ċ import Ġcom . element ary . tasks . core . view _ models . Commands Ċ import Ġcom . element ary . tasks . core . view _ models . birth days . Birth day ViewModel Ċ import Ġcom . element ary . tasks . databinding . Activity Show Birth day Binding Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ import Ġorg . k oin . core . parameter . parameters Of Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util .* Ċ Ċ class ĠShow Birth day 2 9 Activity Ġ: ĠBinding Activity < Activity Show Birth day Binding >() Ġ{ ĊĊĠ Ġprivate Ġval ĠviewModel Ġby ĠviewModel < Birth day ViewModel > Ġ{ Ġparameters Of ( getId ()) Ġ} ĊĊĠ Ġprivate Ġvar Ġm Birth day : ĠB irth day ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġis Event Show ed Ġ= Ġfalse ĊĊĠ Ġprivate Ġval Ġuu Id : ĠString ĊĠĠĠ Ġget () Ġ= Ġm Birth day ?. uu Id Ġ?: Ġ"" ĊĊĠ Ġprivate Ġval Ġid : ĠInt ĊĠĠĠ Ġget () Ġ= Ġm Birth day ?. unique Id Ġ?: Ġ 2 1 2 3 ĊĊĠ Ġprivate Ġval Ġm Birth day Observer : ĠObserver < in ĠB irth day > Ġ= ĠObserver Ġ{ Ġbirthday Ġ-> ĊĠĠĠ Ġif Ġ( birthday Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġshow Birth day ( birthday ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġinf late Binding () Ġ= ĠActivity Show Birth day Binding . inflate ( layout Inflater ) ĊĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠ Ġbinding . button Ok . setOnClickListener Ġ{ Ġok () Ġ} ĊĠĠĠ Ġbinding . button Call . setOnClickListener Ġ{ Ġmake Call () Ġ} ĊĠĠĠ Ġbinding . button Sms . setOnClickListener Ġ{ Ġsend SMS () Ġ} ĊĊĠĠĠ Ġbinding . contact Photo . border Color Ġ= ĠTheme Provider . get Theme Secondary Color ( this ) ĊĠĠĠ Ġbinding . contact Photo . visibility Ġ= ĠView . GONE ĊĊĠĠĠ Ġinit ViewModel () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠgetId () Ġ= Ġintent . getString Extra ( Constants . INT ENT _ ID ) Ġ?: Ġ"" ĊĊĠ Ġprivate Ġfun Ġinit ViewModel () Ġ{ ĊĠĠĠ ĠviewModel . birthday . observe Fore ver ( m Birth day Observer ) ĊĠĠĠ ĠviewModel . result . observe ( this , Ġ{ Ġcommands Ġ-> ĊĠĠĠĠĠ Ġif Ġ( commands Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( commands ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠCommands . SA VED Ġ-> Ġfinish () ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġlifecycle . add Observer ( viewModel ) ĊĠĠĠ Ġif Ġ( getId (). isEmpty () Ġ&& ĠBuild Config . DEBUG ) Ġ{ ĊĠĠĠĠĠ Ġload Test () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġload Test () Ġ{ ĊĠĠĠ Ġval Ġis Mock ed Ġ= Ġintent . getBoolean Extra ( ARG _ TEST , Ġfalse ) ĊĠĠĠ Ġif Ġ( is Mock ed ) Ġ{ ĊĠĠĠĠĠ Ġval Ġbirthday Ġ= Ġintent . get Serializable Extra ( ARG _ TEST _ ITEM ) Ġas ĠB irth day ? ĊĠĠĠĠĠ Ġif Ġ( birthday Ġ!= Ġnull ) Ġshow Birth day ( birthday ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshow Birth day ( birthday : ĠB irth day ) Ġ{ ĊĠĠĠ Ġif Ġ( is Event Show ed ) Ġreturn ĊĊĠĠĠ Ġthis . m Birth day Ġ= Ġbirthday ĊĊĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( birthday . number ) Ġ&& ĠPermissions . check Permission ( this , ĠPermissions . READ _ CONTACT S )) Ġ{ ĊĠĠĠĠĠ Ġbirthday . number Ġ= ĠContact s . getNumber ( birthday . name , Ġthis ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( birthday . contact Id Ġ== Ġ 0 L Ġ&& Ġ! TextUtils . isEmpty ( birthday . number ) Ġ&& ĠPermissions . check Permission ( this , ĠPermissions . READ _ CONTACT S )) Ġ{ ĊĠĠĠĠĠ Ġbirthday . contact Id Ġ= ĠContact s . getId From Number ( birthday . number , Ġthis ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġphoto Ġ= ĠContact s . get Photo ( birthday . contact Id ) ĊĠĠĠ Ġif Ġ( photo Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ ĠPic asso . get (). load ( photo ). into ( binding . contact Photo ) ĊĠĠĠĠĠ Ġbinding . contact Photo . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġbinding . contact Photo . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġyears Ġ= ĠTime Util . get Age Formatted ( this , Ġbirthday . date , Ġprefs . app Language ) ĊĠĠĠ Ġbinding . userName . text Ġ= Ġbirthday . name ĊĠĠĠ Ġbinding . userName . content Description Ġ= Ġbirthday . name ĊĠĠĠ Ġbinding . user Years . text Ġ= Ġyears ĊĠĠĠ Ġbinding . user Years . content Description Ġ= Ġyears ĊĠĠĠ Ġif Ġ( TextUtils . isEmpty ( birthday . number )) Ġ{ ĊĠĠĠĠĠ Ġbinding . button Call . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠ Ġbinding . button Sms . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠ Ġbinding . user Number . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġbinding . user Number . text Ġ= Ġbirthday . number ĊĠĠĠĠĠ Ġbinding . user Number . content Description Ġ= Ġbirthday . number ĊĠĠĠĠĠ Ġbinding . user Number . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠ Ġif Ġ( prefs . is Tele phony Allowed ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . button Call . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . button Sms . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . button Call . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . button Sms . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ ĠviewModel . birthday . remove Observer ( m Birth day Observer ) ĊĠĠĠ Ġlifecycle . remove Observer ( viewModel ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdiscard Media () Ġ{ ĊĠĠĠ ĠContext Compat . start Foreground Service ( this , ĊĠĠĠĠĠ ĠEvent Operation al Service . get Intent ( this , Ġuu Id , ĊĠĠĠĠĠĠĠ ĠEvent Operation al Service . TYPE _ B IR TH DAY , ĊĠĠĠĠĠĠĠ ĠEvent Operation al Service . ACTION _ STOP , ĊĠĠĠĠĠĠĠ Ġid )) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdiscard Notification ( id : ĠInt ) Ġ{ ĊĠĠĠ ĠTim ber . d (" discard Notification : Ġ$ id ") ĊĠĠĠ Ġdiscard Media () ĊĠĠĠ ĠNot ifier . getManager ( this )?. cancel ( id ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠ Ġdiscard Media () ĊĠĠĠ ĠToast . makeText ( this , ĠgetString ( R . string . select _ one _ of _ item ), ĠToast . LENGTH _ SHORT ). show () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġmake Call () Ġ{ ĊĠĠĠ Ġif Ġ( Permissions . check Permission ( this , ĠCALL _ PERM , ĠPermissions . CALL _ PHONE ) Ġ&& Ġm Birth day Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ ĠTele phony Util . make Call ( m Birth day ?. number Ġ?: Ġ"", Ġthis ) ĊĠĠĠĠĠ Ġupdate Birth day ( m Birth day ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsend SMS () Ġ{ ĊĠĠĠ Ġif Ġ( m Birth day Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ ĠTele phony Util . send Sms ( m Birth day ?. number Ġ?: Ġ"", Ġthis ) ĊĠĠĠĠĠ Ġupdate Birth day ( m Birth day ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġok () Ġ{ ĊĠĠĠ Ġupdate Birth day ( m Birth day ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate Birth day ( birthday : ĠB irth day ?) Ġ{ ĊĠĠĠ Ġdiscard Notification ( id ) ĊĠĠĠ Ġis Event Show ed Ġ= Ġtrue ĊĠĠĠ ĠviewModel . birthday . remove Observer ( m Birth day Observer ) ĊĠĠĠ Ġif Ġ( birthday Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠ Ġcalendar . time In Millis Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠ Ġval Ġyear Ġ= Ġcalendar . get ( Calendar . YEAR ) ĊĠĠĠĠĠ Ġbirthday . show ed Year Ġ= Ġyear ĊĠĠĠĠĠ ĠviewModel . save Birth day ( birthday ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠ Ġif Ġ( Permissions . check Permission ( grant Results )) Ġ{ ĊĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCALL _ PERM Ġ-> Ġmake Call () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠCALL _ PERM Ġ= Ġ 6 1 2 ĊĠĠĠ Ġprivate Ġconst Ġval ĠARG _ TEST Ġ= Ġ" arg _ test " ĊĠĠĠ Ġprivate Ġconst Ġval ĠARG _ TEST _ ITEM Ġ= Ġ" arg _ test _ item " ĊĊĠĠĠ Ġfun Ġmock Test ( context : ĠContext , Ġbirthday : ĠB irth day ) Ġ{ ĊĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠShow Birth day 2 9 Activity :: class . java ) ĊĠĠĠĠĠ Ġintent . putExtra ( ARG _ TEST , Ġtrue ) ĊĠĠĠĠĠ Ġintent . putExtra ( ARG _ TEST _ ITEM , Ġbirthday ) ĊĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Launch Intent ( context : ĠContext , Ġid : ĠString ): ĠIntent Ġ{ ĊĠĠĠĠĠ Ġval Ġresult Intent Ġ= ĠIntent ( context , ĠShow Birth day 2 9 Activity :: class . java ) ĊĠĠĠĠĠ Ġresult Intent . putExtra ( Constants . INT ENT _ ID , Ġid ) ĊĠĠĠĠĠ Ġresult Intent . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK Ġor ĠIntent . FLAG _ ACTIVITY _ MULTIPLE _ TASK ĊĠĠĠĠĠ Ġreturn Ġresult Intent ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ