package Ġcom . mt g . gallery app . modules . main Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . GONE Ċ import Ġandroid . view . View . VISIBLE Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . app . Activity Options Compat Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . mt g . gallery app . R Ċ import Ġcom . mt g . gallery app . databinding . Activity Main Binding Ċ import Ġcom . mt g . gallery app . modules . detail . Detail Activity Ċ import Ġcom . mt g . gallery app . net . P ictures Response ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠMain ViewModel . Main Model Callback , ĠImage Adapter . Image ClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Main Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠMain ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . set ContentView ( this , ĠR . layout . activity _ main ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this ). get ( Main ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ ĠviewModel . listener Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġinit Views () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠManage Ġorientation Ġcounters Ġfor Ġadapter Ġ*/ ĊĠĠĠĠĠĠĠ Ġbinding . rcv Images . layout Manager Ġ= Ġif Ġ( resources . configuration . orientation Ġ== ĠConfiguration . OR IENTATION _ POR TRA IT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGrid LayoutManager ( this , Ġ 2 , ĠRecyclerView . VERTICAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGrid LayoutManager ( this , Ġ 3 , ĠRecyclerView . VERTICAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠOb serve Ġimages Ġobtained Ġby Ġnetwork Ġrequest ĊĠĠĠĠĠĠĠ Ġbinding . rcv Images . adapter Ġ= ĠImage Adapter ( viewModel . images , Ġthis ) ĊĠĠĠĠĠĠĠ Ġbinding . ly t Refresh . setOn Refresh Listener Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load Images () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠObtain Ġauthorization Ġto Ġget Ġimages Ġfrom Ġserver ĊĠĠĠĠĠĠĠ Ġbinding . ly t Loader . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠ ĠviewModel . validate Authorization () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Configuration Changed ( new Config : ĠConfiguration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Configuration Changed ( new Config ) ĊĠĠĠĠĠĠĠ Ġbinding . rcv Images . layout Manager Ġ= Ġif Ġ( new Config . orientation Ġ== ĠConfiguration . OR IENTATION _ POR TRA IT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGrid LayoutManager ( this , Ġ 2 , ĠRecyclerView . VERTICAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGrid LayoutManager ( this , Ġ 3 , ĠRecyclerView . VERTICAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Image Click ( view : ĠView , Ġpicture : ĠP ictures Response ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠDetail Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Detail Activity . ARG _ PI CTURE , Ġpicture ) ĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġtransition Ġname Ġfrom Ġthe Ġstring ĊĠĠĠĠĠĠĠ Ġval Ġtransition Name Ġ= ĠgetString ( R . string . t _ detail ) ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠActivity Options Compat . make Scene Transition Animation ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview , Ġtransition Name ) ĊĠĠĠĠĠĠĠ ĠActivity Compat . startActivity ( this , Ġintent , Ġoptions . to Bundle ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError ( msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . ly t Loader . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( binding . root , Ġmsg , ĠSn ackbar . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Authorization Ob t ained () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . ly t Loader . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠ ĠviewModel . load Images () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Images Ob t ained () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . ly t Loader . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠ Ġbinding . rcv Images . adapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġbinding . ly t Refresh . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . page Ob tain Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . rcv Images . scrollTo Position (- 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }