package Ġcom . alex styl . special dates . person Ċ Ċ import Ġandroid . content . Activity NotFoundException Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . design . widget . AppBar Layout Ċ import Ġandroid . support . design . widget . Tab Layout Ċ import Ġandroid . support . v 4 . view . ViewPager Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġcom . alex styl . android . Version Ċ import Ġcom . alex styl . special dates . Crash And Error Tracker Ċ import Ġcom . alex styl . special dates . External Navigator Ċ import Ġcom . alex styl . special dates . Mem ento Application Ċ import Ġcom . alex styl . special dates . Optional Ċ import Ġcom . alex styl . special dates . R Ċ import Ġcom . alex styl . special dates . analytics . Analytics Ċ import Ġcom . alex styl . special dates . analytics . Screen Ċ import Ġcom . alex styl . special dates . contact . Contact Ċ import Ġcom . alex styl . special dates . contact . Contact NotFoundException Ċ import Ġcom . alex styl . special dates . contact . Contact Source Ċ import Ġcom . alex styl . special dates . contact . Contact Source . SOURCE _ DEVICE Ċ import Ġcom . alex styl . special dates . contact . Contacts Provider Ċ import Ġcom . alex styl . special dates . images . Image Loader Ċ import Ġcom . alex styl . special dates . ui . Dummy Hide StatusBar Listener Ċ import Ġcom . alex styl . special dates . ui . L ol ip op Hide StatusBar Listener Ċ import Ġcom . alex styl . special dates . ui . base . The med Mem ento Activity Ċ import Ġcom . alex styl . special dates . ui . widget . Mem ento Toolbar Ċ import Ġcom . nov oda . not ils . caster . Views Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠPerson Activity Ġ: ĠThe med Mem ento Activity (), ĠBottom Sheet Intent Listener Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġanalytics : ĠAnalytics ĊĠĠĠĠĠĠĠ Ġ@ Inject Ġset ĊĠĠĠ Ġlateinit Ġvar Ġimage Loader : ĠImage Loader ĊĠĠĠĠĠĠĠ Ġ@ Inject Ġset ĊĠĠĠ Ġlateinit Ġvar Ġcontacts Provider : ĠContact s Provider ĊĠĠĠĠĠĠĠ Ġ@ Inject Ġset ĊĠĠĠ Ġlateinit Ġvar Ġtracker : ĠCrash And Error Tracker ĊĠĠĠĠĠĠĠ Ġ@ Inject Ġset ĊĠĠĠ Ġlateinit Ġvar Ġpresenter : ĠPerson Presenter ĊĠĠĠĠĠĠĠ Ġ@ Inject Ġset ĊĊĠĠĠ Ġprivate Ġvar Ġnavigator : ĠPerson Details Navigator ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdisplaying Contact Ġ= ĠOptional . abs ent < Contact >() ĊĠĠĠ Ġprivate Ġvar Ġadapter : ĠContact Items Adapter ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġis Visible Contact Optional Ġ= ĠOptional . abs ent < Boolean >() ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġperson View : ĠAndroid Person View ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ person ) ĊĊĠĠĠĠĠĠĠ Ġval Ġapplication Module Ġ= Ġ( application Ġas ĠM ement o Application ). application Module ĊĠĠĠĠĠĠĠ Ġapplication Module . inject ( this ) ĊĠĠĠĠĠĠĠ Ġanalytics . track Screen ( Screen . PERSON ) ĊĠĠĠĠĠĠĠ Ġnavigator Ġ= ĠPerson Details Navigator ( External Navigator ( this , Ġanalytics , Ġtracker )) ĊĠĠĠĠĠĠĠ Ġval Ġtoolbar Ġ= ĠViews . findById < Mem ento Toolbar >( this , ĠR . id . person _ toolbar ) ĊĠĠĠĠĠĠĠ Ġif Ġ( was Called From Mem ento ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . display Navigation Icon As Up () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . display Navigation Icon As Close () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠContact Items Adapter ( LayoutInflater . from ( this Activity ()), ĠEvent Pressed Listener Ġ{ Ġ( action ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction . run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠActivity NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this Activity (), ĠR . string . no _ app _ found , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtracker . track ( ex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġapp Bar Layout Ġ= ĠfindViewById < AppBar Layout >( R . id . person _ app bar ) ĊĠĠĠĠĠĠĠ Ġval Ġavatar View Ġ= ĠfindViewById < ImageView >( R . id . person _ avatar ) ĊĠĠĠĠĠĠĠ Ġval Ġperson Name View Ġ= ĠfindViewById < TextView >( R . id . person _ name ) ĊĠĠĠĠĠĠĠ Ġval Ġage And Sign View Ġ= ĠfindViewById < TextView >( R . id . person _ age _ and _ sign ) ĊĠĠĠĠĠĠĠ Ġval Ġview Pager Ġ= ĠfindViewById < ViewPager >( R . id . person _ view pager ) ĊĠĠĠĠĠĠĠ Ġval Ġtoolbar Gradient Ġ= ĠfindViewById < ImageView >( R . id . person _ toolbar _ gradient ) ĊĠĠĠĠĠĠĠ Ġval Ġtab Layout Ġ= ĠfindViewById < Tab Layout >( R . id . person _ tabs ) ĊĊĠĠĠĠĠĠĠ Ġview Pager . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġview Pager . off screen Page Limit Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġtab Layout . setup With ViewPager ( view Pager , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġon Offset Changed Listener Ġ= Ġif Ġ( Version . has L ol lip op ()) ĠL ol ip op Hide StatusBar Listener ( window ) Ġelse ĠDummy Hide StatusBar Listener () ĊĊĠĠĠĠĠĠĠ Ġperson View Ġ= ĠAndroid Person View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperson Name View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġage And Sign View , Ġimage Loader , Ġavatar View , Ġadapter !! , Ġtab Layout , Ġapp Bar Layout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Gradient , Ġresources , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Offset Changed Listener , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe mer ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġdisplaying Contact Ġ= Ġextract Contact From ( intent ) ĊĠĠĠĠĠĠĠ Ġif Ġ( display ing Contact . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . start Present ing Into ( person View , Ġdisplaying Contact . get (), ĠAndroid Contact Actions ( this )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracker . track ( IllegalArgumentException (" No Ġcontact Ġto Ġdisplay ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwas Called From Mem ento (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġextras Ġ= Ġintent . extras ĊĠĠĠĠĠĠĠ Ġreturn Ġextras Ġ!= Ġnull Ġ&& Ġintent . extras . containsKey ( EXTRA _ CONTACT _ ID ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract Contact From ( intent : ĠIntent ): ĠOptional < Contact > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġintent . data ĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontact Id Ġ= Ġdata . last Path Segment . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontact For ( contact Id , ĠSOURCE _ DEVICE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcontact ID Ġ= Ġintent . getLong Extra ( EXTRA _ CONTACT _ ID , Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( contact ID Ġ== Ġ- 1 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠOptional . abs ent () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Contact Source Ġval Ġcontact Source Ġ= Ġintent . getInt Extra ( EXTRA _ CONTACT _ SOURCE , Ġ- 1 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( contact Source Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . abs ent () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġcontact For ( contact ID , Ġcontact Source ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcontact For ( contact ID : ĠLong , Ġcontact Source : ĠInt ): ĠOptional < Contact > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional ( contacts Provider . get Contact ( contact ID , Ġcontact Source )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠContact NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracker . track ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . abs ent () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ person _ details , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠitemId Ġ= Ġitem . itemId ĊĠĠĠĠĠĠĠ Ġif Ġ( itemId Ġ== Ġandroid . R . id . home Ġ&& Ġ! was Called From Mem ento ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( itemId Ġ== ĠR . id . menu _ view _ contact ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator !!. to View Contact ( display ing Contact ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( itemId Ġ== ĠID _ TO GGLE _ VIS IBILITY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Visible Ġ= Ġis Visible Contact Optional . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isVisible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . hide Contact ( person View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . show Contact ( person View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġpresenter . stop Present ing () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Selected ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠActivity NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠR . string . no _ app _ found , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEX TRA _ CONTACT _ SOURCE Ġ= Ġ" extra : source " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEX TRA _ CONTACT _ ID Ġ= Ġ" extra : id " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠID _ TO GGLE _ VIS IBILITY Ġ= Ġ 1 0 2 3 ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild Intent For ( context : ĠContext , Ġcontact : ĠContact ): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠPerson Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ CONTACT _ ID , Ġcontact . contact ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ CONTACT _ SOURCE , Ġcontact . source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġintent ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ