package Ġcom . ak ex orc ist . im ager es ize . ui Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . ak ex orc ist . im ager es ize .* Ċ import Ġcom . ak ex orc ist . im ager es ize . databinding . Activity Main Binding Ċ import Ġcom . ak ex orc ist . im ager es ize . ui . adapter . TestResult Adapter Ċ import Ġcom . ak ex orc ist . im ager es ize . ui . adapter . TestResult Diff Util Ċ import Ġcom . ak ex orc ist . im ager es ize . vo . Main Event Ċ import Ġcom . ak ex orc ist . im ager es ize . vo . Main Ui Model Ċ import Ġcom . ak ex orc ist . im ager es ize . vo . TestResult Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbinding : ĠActivity Main Binding Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠMain ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( this ). get ( Main ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġadapter : ĠTest Result Adapter Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠTest Result Adapter () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġbinding . button Start . setOnClickListener Ġ{ ĠviewModel . start Image Resize () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . button Cancel . setOnClickListener Ġ{ ĠviewModel . cancel Image Resize () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . button Try Again . setOnClickListener Ġ{ ĠviewModel . retry Image Resize () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ ĠviewModel . ui Model . observe ( this ) Ġ{ Ġupdate Ui Model ( it ) Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . init Sample File () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Ui Model ( ui Model : ĠMain Ui Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( ui Model . event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMain Event . On Idle Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Start . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Cancel . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Try Again . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . indicator Resize Progress . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textView Resize Progress . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMain Event . On Cancel Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Start . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Cancel . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Try Again . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . indicator Resize Progress . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textView Resize Progress . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMain Event . On Image Resize Started Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Start . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Cancel . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Try Again . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textView Instruction . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . indicator Resize Progress . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textView Resize Progress . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMain Event . On Image Resize Next Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Test Results ( ui Model . results ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . indicator Resize Progress . max Ġ= Ġui Model . total Image Resize Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . indicator Resize Progress . progress Ġ= Ġui Model . results . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textView Resize Progress . text Ġ= ĠgetString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . image _ resize _ count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Model . results . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Model . total Image Resize Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMain Event . On Image Resize Status Updated Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Test Results ( ui Model . results ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . indicator Resize Progress . max Ġ= Ġui Model . total Image Resize Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . indicator Resize Progress . progress Ġ= Ġui Model . results . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textView Resize Progress . text Ġ= ĠgetString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . image _ resize _ count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Model . results . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Model . total Image Resize Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMain Event . On Image Resize Completed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Test Results ( ui Model . results ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Start . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Cancel . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Try Again . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMain Event . On Image Resize Retry Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Test Results ( ui Model . results ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Start . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Cancel . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Try Again . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Test Results ( new Results : ĠList < TestResult >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold Results Ġ= Ġadapter . getTest Results () ĊĠĠĠĠĠĠĠ Ġval Ġdiff Result Ġ= ĠDiff Util . calculate Diff ( TestResult Diff Util ( old Results , Ġnew Results )) ĊĠĠĠĠĠĠĠ Ġadapter . update Test Results ( new Results ) ĊĠĠĠĠĠĠĠ Ġdiff Result . dispatch Updates To ( adapter ) ĊĠĠĠĠĠĠĠ Ġif Ġ( adapter . item Count Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . smooth Scroll To Position ( adapter . item Count Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ