package Ġcom . hoc . weather app . ui . main Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . media . MediaPlayer Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager . LayoutParams . FLAG _ DR AWS _ SYSTEM _ BAR _ BACK GRO UN DS Ċ import Ġandroid . view . WindowManager . LayoutParams . FLAG _ TRANSL UC ENT _ STATUS Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . Worker Thread Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġandroidx . fragment . app . Fragment Pager Adapter Ċ import Ġandroidx . palette . graphics . Palette Ċ import Ġandroidx . palette . graphics . Target Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . load . resource . bitmap . Bitmap Transition Options Ċ import Ġcom . bump tech . glide . load . resource . drawable . Drawable Transition Options Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . bump tech . glide . request . target . Custom View Target Ċ import Ġcom . bump tech . glide . request . transition . Transition Ċ import Ġcom . hoc . weather app . R Ċ import Ġcom . hoc . weather app . data . models . entity . City Ċ import Ġcom . hoc . weather app . data . models . entity . Current Weather Ċ import Ġcom . hoc . weather app . ui . Base M vi Activity Ċ import Ġcom . hoc . weather app . ui . cities . C ities Activity Ċ import Ġcom . hoc . weather app . ui . main . chart . Chart Fragment Ċ import Ġcom . hoc . weather app . ui . main . current weather . Current Weather Fragment Ċ import Ġcom . hoc . weather app . ui . main . f ived ay forecast . Daily Weather Fragment Ċ import Ġcom . hoc . weather app . ui . map . Map Activity Ċ import Ġcom . hoc . weather app . ui . setting . Settings Activity Ċ import Ġcom . hoc . weather app . utils .* Ċ import Ġcom . hoc . weather app . utils . blur . G lide Blur Transformation Ċ import Ġcom . hoc . weather app . utils . ui . Zoom Out Page Transformer Ċ import Ġcom . hoc . weather app . utils . ui . get Background Drawable From Weather Ċ import Ġcom . hoc . weather app . utils . ui . get Sound Uri From Current Weather Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ Ċ @ Experimental Std lib Api Ċ class ĠMainActivity Ġ: ĠBase M vi Activity < Main Contract . View , ĠMain Presenter >( create Scope Ġ= Ġtrue ), ĠMain Contract . View Ġ{ ĊĠ Ġprivate Ġvar Ġmedia Player : ĠMedia Player ? Ġ= Ġnull ĊĠ Ġprivate Ġval Ġchange Background Ġ= ĠPublish Subject . create < Optional < Bitmap >>() ĊĊĠ Ġprivate Ġvar Ġtarget 1 : ĠCustom View Target < *, Ġ* >? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġtarget 2 : ĠCustom View Target < *, Ġ* >? Ġ= Ġnull ĊĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠ Ġwindow . add Flags ( FLAG _ DR AWS _ SYSTEM _ BAR _ BACK GRO UN DS ) ĊĠĠĠ Ġwindow . clear Flags ( FLAG _ TRANSL UC ENT _ STATUS ) ĊĊĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠ Ġsupport ActionBar ?. run Ġ{ ĊĠĠĠĠĠ Ġset Display Show Title Enabled ( false ) ĊĠĠĠĠĠ Ġset Display Home As Up Enabled ( true ) ĊĠĠĠĠĠ Ġset Home As Up Indicator ( R . drawable . ic _ playlist _ add _ white _ 2 4 dp ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsetup ViewPager () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠ Ġsuper . on Stop () ĊĊĠĠĠ Ġstop Sound () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠ Ġsuper . on Destroy () ĊĊĠĠĠ Ġstop Sound () ĊĊĠĠĠ Ġ// Ġfree Ġmemory ĊĠĠĠ Ġmedia Player ?. release () ĊĠĠĠ Ġmedia Player Ġ= Ġnull ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsetup ViewPager () Ġ{ ĊĠĠĠ Ġview _ pager . run Ġ{ ĊĠĠĠĠĠ Ġval Ġfragments : ĠList < Fragment > Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠ ĠCurrent Weather Fragment (), ĊĠĠĠĠĠĠĠĠĠ ĠDaily Weather Fragment (), ĊĠĠĠĠĠĠĠĠĠ ĠChart Fragment () ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġadapter Ġ= ĠSe ctions Pager Adapter ( ĊĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager , ĊĠĠĠĠĠĠĠĠĠ Ġfragments ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġoff screen Page Limit Ġ= Ġfragments . size ĊĊĠĠĠĠĠ Ġset Page Transformer ( true , ĠZoom Out Page Transformer ()) ĊĊĠĠĠĠĠ Ġdots _ indicator . set ViewPager ( view _ pager ) ĊĠĠĠĠĠ Ġdots _ indicator . dots Clickable Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġenable Indicator AndView Pager ( is Enable : ĠBoolean ) Ġ{ ĊĠĠĠ Ġif Ġ( is Enable ) Ġ{ ĊĠĠĠĠĠ Ġdots _ indicator . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠ Ġview _ pager . paging Enable Ġ= Ġtrue ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġdots _ indicator . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠ Ġview _ pager . setCurrent Item ( 0 , Ġtrue ) ĊĠĠĠĠĠ Ġview _ pager . paging Enable Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġclass ĠSe ctions Pager Adapter ( ĊĠĠĠĠĠ Ġfm : ĠFragment Manager , ĊĠĠĠĠĠ Ġprivate Ġval Ġfragments : ĠList < Fragment > ĊĠ Ġ) Ġ: ĠFragment Pager Adapter ( fm , ĠBE HAV IOR _ RE SU ME _ ONLY _ CURRENT _ FRAGMENT ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠgetItem ( position : ĠInt ) Ġ= Ġfragments [ position ] ĊĠĠĠ Ġoverride Ġfun Ġget Count () Ġ= Ġfragments . size ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ main , Ġmenu ) ĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġtrue . also Ġ{ ĠstartActivity < C ities Activity >() Ġ} ĊĠĠĠĠĠ ĠR . id . action _ settings Ġ-> Ġtrue . also Ġ{ ĠstartActivity < Settings Activity >() Ġ} ĊĠĠĠĠĠ ĠR . id . action _ map Ġ-> Ġtrue . also Ġ{ ĠstartActivity < Map Activity >() Ġ} ĊĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĊĠ Ġprivate Ġfun Ġupdate Background ( ĊĠĠĠĠĠ Ġweather : ĠCurrent Weather , ĊĠĠĠĠĠ Ġcity : ĠCity ĊĠ Ġ) Ġ{ ĊĠĠĠ ĠG lide ĊĠĠĠĠĠĠĠ Ġ. with ( this ) ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġclear ( target 1 ) ĊĠĠĠĠĠĠĠĠĠ Ġclear ( target 2 ) ĊĠĠĠĠĠĠĠĠĠ Ġchange Background . onNext ( None ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. as Bitmap () ĊĠĠĠĠĠĠĠ Ġ. load ( get Background Drawable From Weather ( weather , Ġcity )) ĊĠĠĠĠĠĠĠ Ġ. apply ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. bitmap Transform ( G lide Blur Transformation ( this , Ġ 2 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fit Center () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. center Crop () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ. transition ( Bitmap Transition Options . with Cross Fade ()) ĊĠĠĠĠĠĠĠ Ġ. into ( object Ġ: ĠCustom View Target < ImageView , ĠBitmap >( image _ background ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Failed ( error Drawable : ĠDrawable ?) Ġ= ĠUnit ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Cle ared ( placeholder : ĠDrawable ?) Ġ= ĠUnit ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( resource : ĠBitmap , Ġtransition : ĠTransition < in ĠBitmap > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setImage Bitmap ( resource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Background . onNext ( Some ( resource )) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġtarget 1 Ġ= Ġit Ġ} ĊĠ Ġ} ĊĊĊĠ Ġprivate Ġfun Ġstop Sound () Ġ{ ĊĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠ Ġmedia Player ?. take If Ġ{ Ġit . is Playing Ġ} ?. stop () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġplay Sound ( weather : ĠCurrent Weather ) Ġ{ ĊĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠ Ġmedia Player ?. take If Ġ{ Ġit . is Playing Ġ} ?. stop () ĊĠĠĠ Ġ} ĊĠĠĠ Ġmedia Player Ġ= ĊĠĠĠĠĠĠĠ ĠMedia Player . create ( this , Ġget Sound Uri From Current Weather ( weather )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Volume ( 0 . 3 f , Ġ 0 . 3 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ Ġstart () Ġ}. on Success Ġ{ Ġdebug (" MediaPlayer :: start ", Ġ"__ main __ ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġrender ( state : ĠMain Contract . ViewState ) Ġ{ ĊĠĠĠ Ġwindow . status Bar Color Ġ= Ġstate . vi br ant Color ĊĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠ Ġis ĠMain Contract . ViewState . No Selected City Ġ-> Ġrender No Selected City () ĊĠĠĠĠĠ Ġis ĠMain Contract . ViewState . City And Weather Ġ-> Ġrender City And Weather ( state ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġchange Color Intent (): ĠObservable < Pair < Int , ĠInt >> Ġ{ ĊĠĠĠ Ġreturn Ġchange Background ĊĠĠĠĠĠĠĠ Ġ. switch Map Ġ{ Ġoptional Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( optional ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSome Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from Callable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget V ibr ant Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource Ġ= Ġoptional . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Primary Variant Ġ= Ġtheme Color ( R . attr . color Primary Variant ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Secondary Ġ= Ġtheme Color ( R . attr . color Secondary ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . computation ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNone Ġ-> ĠObservable . empty () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrender City And Weather ( state : ĠMain Contract . ViewState . City And Weather ) Ġ{ ĊĠĠĠ Ġupdate Background ( state . weather , Ġstate . city ) ĊĊĠĠĠ Ġtoolbar _ title . text Ġ= ĠgetString ( ĊĠĠĠĠĠĠĠ ĠR . string . city _ name _ and _ country , ĊĠĠĠĠĠĠĠ Ġstate . city . name , ĊĠĠĠĠĠĠĠ Ġstate . city . country ĊĠĠĠ Ġ) ĊĠĠĠ Ġplay Sound ( state . weather ) ĊĠĠĠ Ġenable Indicator AndView Pager ( true ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrender No Selected City () Ġ{ ĊĠĠĠ ĠG lide . with ( this ) ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġclear ( target 1 ) ĊĠĠĠĠĠĠĠĠĠ Ġclear ( target 2 ) ĊĠĠĠĠĠĠĠĠĠ Ġchange Background . onNext ( None ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. load ( R . drawable . default _ bg ) ĊĠĠĠĠĠĠĠ Ġ. transition ( Drawable Transition Options . with Cross Fade ()) ĊĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions . fit Center Transform (). center Crop ()) ĊĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions . bitmap Transform ( G lide Blur Transformation ( this , Ġ 2 5 f ))) ĊĠĠĠĠĠĠĠ Ġ. into ( object Ġ: ĠCustom View Target < ImageView , ĠDrawable >( image _ background ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Failed ( error Drawable : ĠDrawable ?) Ġ= ĠUnit ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Cle ared ( placeholder : ĠDrawable ?) Ġ= ĠUnit ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( resource : ĠDrawable , Ġtransition : ĠTransition < in ĠDrawable > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setImage Drawable ( resource ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġtarget 2 Ġ= Ġit Ġ} ĊĊĠĠĠ Ġtoolbar _ title . text Ġ= ĠgetString ( R . string . no _ selected _ city ) ĊĠĠĠ Ġstop Sound () ĊĠĠĠ Ġenable Indicator AndView Pager ( false ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Presenter () Ġ= Ġlifecycle Scope . get < Main Presenter >() Ċ } Ċ Ċ @ Worker Thread Ċ private Ġfun Ġget V ibr ant Color ( ĊĠĠĠ Ġresource : ĠBitmap , ĊĠĠĠ Ġ@ Color Int Ġcolor Primary Variant : ĠInt , ĊĠĠĠ Ġ@ Color Int Ġcolor Secondary : ĠInt , Ċ ): ĠPair < Int , ĠInt > Ġ{ ĊĠ Ġreturn ĠPalette ĊĠĠĠĠĠ Ġ. from ( resource ) ĊĠĠĠĠĠ Ġ. generate () ĊĠĠĠĠĠ Ġ. let Ġ{ Ġpalette Ġ-> ĊĠĠĠĠĠĠĠ Ġ@ Color Int Ġval Ġdark Color Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpalette . get Sw atch For Target ( Target . DARK _ V IB RAN T )?. rgb , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpalette . get Sw atch For Target ( Target . V IB RAN T )?. rgb , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpalette . get Sw atch For Target ( Target . LIGHT _ V IB RAN T )?. rgb , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpalette . get Sw atch For Target ( Target . DARK _ MUT ED )?. rgb , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpalette . get Sw atch For Target ( Target . MUT ED )?. rgb , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpalette . get Sw atch For Target ( Target . DARK _ MUT ED )?. rgb ĊĠĠĠĠĠĠĠ Ġ). find Ġ{ Ġit Ġ!== Ġnull Ġ} Ġ?: Ġcolor Primary Variant ĊĊĠĠĠĠĠĠĠ Ġ@ Color Int Ġval Ġlight Color Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpalette . get Sw atch For Target ( Target . LIGHT _ V IB RAN T )?. rgb , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpalette . get Sw atch For Target ( Target . LIGHT _ MUT ED )?. rgb ĊĠĠĠĠĠĠĠ Ġ). find Ġ{ Ġit Ġ!== Ġnull Ġ} Ġ?: Ġcolor Secondary ĊĊĠĠĠĠĠĠĠ Ġdark Color Ġto Ġlight Color ĊĠĠĠĠĠ Ġ} Ċ } Ċ