package Ġnet . gin i . pay . app Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . activity . result . contract . Activity Result Contracts Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġcom . google . android . material . tabs . Tab Layout Mediator Ċ import Ġjava . util .* Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġnet . gin i . pay . app . databinding . Activity Main Binding Ċ import Ġnet . gin i . pay . app . pager . Pager Adapter Ċ import Ġnet . gin i . pay . app . review . Review Activity Ċ import Ġnet . gin i . pay . app . upload . Upload Activity Ċ import Ġnet . gin i . pay . gin ipay business . requirement . Requirement Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠMain ViewModel Ġby ĠviewModel () ĊĠĠĠ Ġprivate Ġval Ġtake Picture Launcher Ġ= Ġregister For Activity Result ( Activity Result Contracts . Take Picture (), Ġ:: photo Result ) ĊĠĠĠ Ġprivate Ġval Ġimport Launcher Ġ= Ġregister For Activity Result ( Activity Result Contracts . Open Document (), Ġ:: import Result ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġbinding . take Photo . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtake Photo () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . import File . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport File () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . pager . adapter Ġ= ĠP ager Adapter (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Started Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . pages . collect Ġ{ Ġpages Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubmit List ( pages ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠTab Layout Mediator ( binding . indicator , Ġbinding . pager ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ}. attach () ĊĊĠĠĠĠĠĠĠ Ġbinding . upload . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequirements Ġ= ĠviewModel . check Requirements ( package Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( requirements . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Upload Activity . getStart Intent ( this , ĠviewModel . pages . value . map Ġ{ Ġit . uri Ġ})) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Missing Requirements ( requirements ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġimport File () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequirements Ġ= ĠviewModel . check Requirements ( package Manager ) ĊĠĠĠĠĠĠĠ Ġif Ġ( requirements . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Missing Requirements ( requirements ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠLet 's Ġignore Ġit Ġfor Ġimport Ġto Ġsee Ġwhat Ġhappens ĊĠĠĠĠĠĠĠ Ġimport Launcher . launch ( array Of (" image /* ", Ġ" application / pdf ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtake Photo () Ġ{ ĊĠĠĠĠĠĠĠ Ġtake Picture Launcher . launch ( viewModel . getNext Page Uri ( this @ MainActivity )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġphoto Result ( saved : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( saved ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Photo Saved () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġimport Result ( uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ ĠstartActivity ( Upload Activity . getStart Intent ( this , ĠlistOf ( uri ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Missing Requirements ( requirements : ĠList < Requirement >) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequirements . join ToString ( separator Ġ= Ġ"\ n ") Ġ{ Ġrequirement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( requirement ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequirement . No Bank Ġ-> ĠgetString ( R . string . no _ bank ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġit , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }