package Ġnl . loop lan . bat mate . ui . scan and record . fragments Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . constraint layout . widget . Constraint Set Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . transition . Transition Manager Ċ import Ġcom . facebook . draw ee . backends . pipeline . F resco Ċ import Ġcom . facebook . image pipeline . request . Image Request Ċ import Ġcom . facebook . image pipeline . request . Image RequestBuilder Ċ import Ġcom . google . firebase . storage . Firebase Storage Ċ import Ġcom . google . firebase . storage . Storage Exception Ċ import Ġkotlinx . android . synt hetic . main . fragment _ finish .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġnl . loop lan . bat mate . R Ċ import Ġnl . loop lan . bat mate . ui . scan and record . Main ViewModel Ċ Ċ class ĠFinish Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠD OL PH INS Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠF RO G Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMON STER Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDAN C ING Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSW AG Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠO BA MA Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTATE _ KEY Ġ= Ġ" STATE " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNONE Ġ= Ġ" NONE " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPROG RESS Ġ= Ġ" PROGRESS " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSUCCESS Ġ= Ġ" SUCCESS " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġjob Ġ= ĠJob () ĊĊĠĠĠ Ġval Ġscope Ġ= ĠCor outine Scope ( Dispatch ers . Main Ġ+ Ġjob ) ĊĊĠĠĠ Ġlateinit Ġvar Ġstate Ġ: ĠString ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠMain ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ finish , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġfinish _ again _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . again Toggle . call () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠsavedInstanceState ?. getString ( STATE _ KEY ) Ġ?: ĠNONE ĊĊĠĠĠĠĠĠĠ Ġwhen ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPROG RESS Ġ-> Ġshow Progress () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSUCCESS Ġ-> Ġshow Success () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNONE Ġ-> Ġ{ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĊĠĠĠĠĠĠĠ Ġout State . putString ( STATE _ KEY , Ġstate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġview Ġmodel . ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( require Activity ()). get ( Main ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . upload Toggle . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Progress () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupload () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Progress () Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠPROG RESS ĊĊĠĠĠĠĠĠĠ Ġval Ġrandom Number Ġ= Ġ( 0 .. 2 ). random () ĊĊĠĠĠĠĠĠĠ Ġload Progress Image ( random Number ) ĊĊĠĠĠĠĠĠĠ Ġset Loading Text ( random Number ) ĊĊĠĠĠĠĠĠĠ Ġanimate To Progress () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Progress Image ( number : ĠNumber ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġimage Request Ġ: ĠImage Request ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġwhen ( number ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD OL PH INS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoad Ġgif . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Request Ġ= ĠImage RequestBuilder . newBuilder With ResourceId ( R . drawable . dol ph ins ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF RO G Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoad Ġgif . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Request Ġ= ĠImage RequestBuilder . newBuilder With ResourceId ( R . drawable . f rog ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMON STER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoad Ġgif . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Request Ġ= ĠImage RequestBuilder . newBuilder With ResourceId ( R . drawable . monster ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcontroller Ġ= ĠF resco . new Draw ee Controller Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Play Animations ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Uri ( image Request !!. source Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġfinish _ card _ image . controller Ġ= Ġcontroller ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Loading Text ( number : ĠNumber ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ: ĠString ? Ġ= Ġwhen ( number ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD OL PH INS Ġ-> Ġ" Catch ing Ġdol ph ins " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF RO G Ġ-> Ġ" Break ing Ġf ingers " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMON STER Ġ-> Ġ" C runch ing Ġcookies " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" Wait Ġwho Ġis Ġworking ?" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfinish _ progress _ text . text Ġ= Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Success () Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠSUCCESS ĊĊĠĠĠĠĠĠĠ Ġval Ġrandom Number Ġ= Ġ( 3 .. 5 ). random () ĊĊĠĠĠĠĠĠĠ Ġload Done Image ( random Number ) ĊĠĠĠĠĠĠĠ Ġset Done Text ( random Number ) ĊĊĠĠĠĠĠĠĠ Ġanimate To Success () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Done Image ( number : ĠNumber ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġimage Request : ĠImage Request ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġwhen ( number ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ ĠDAN C ING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoad Ġgif . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Request Ġ= ĠImage RequestBuilder . newBuilder With ResourceId ( R . drawable . d ancing ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSW AG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoad Ġgif . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Request Ġ= ĠImage RequestBuilder . newBuilder With ResourceId ( R . drawable . sw ag ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠO BA MA Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoad Ġgif . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Request Ġ= ĠImage RequestBuilder . newBuilder With ResourceId ( R . drawable . ob ama ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcontroller Ġ= ĠF resco . new Draw ee Controller Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Play Animations ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Uri ( image Request !!. source Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġfinish _ card _ image . controller Ġ= Ġcontroller ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Done Text ( number : ĠNumber ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish _ progress _ text . text Ġ= Ġ" K la ar !" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Failure () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate To Success () Ġ{ ĊĠĠĠĠĠĠĠ ĠTransition Manager . begin Delayed Transition ( fragment _ finish _ layout ) ĊĊĠĠĠĠĠĠĠ ĠConstraint Set (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclone ( fragment _ finish _ layout ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( R . id . finish _ progress , ĠConstraint Set . BOTTOM ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Margin ( R . id . finish _ progress , ĠConstraint Set . BOTTOM , Ġ 3 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect ( R . id . finish _ progress , ĠConstraint Set . BOTTOM , ĠR . id . finish _ again _ button , ĠConstraint Set . TOP ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Visibility ( R . id . finish _ again _ button , ĠConstraint Set . VISIBLE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply To ( fragment _ finish _ layout ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠConstraint Set (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclone ( finish _ progress ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( R . id . finish _ progress _ text , ĠConstraint Set . TOP ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect ( R . id . finish _ progress _ text , ĠConstraint Set . TOP , ĠConstraint Set . PARENT _ ID , ĠConstraint Set . TOP ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Visibility ( R . id . finish _ progress _ bar , ĠConstraint Set . IN VISIBLE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply To ( finish _ progress ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate To Progress () Ġ{ ĊĠĠĠĠĠĠĠ ĠTransition Manager . begin Delayed Transition ( fragment _ finish _ layout ) ĊĊĠĠĠĠĠĠĠ ĠConstraint Set (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclone ( fragment _ finish _ layout ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( R . id . finish _ progress , ĠConstraint Set . BOTTOM ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Margin ( R . id . finish _ progress , ĠConstraint Set . BOTTOM , Ġ 1 5 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect ( R . id . finish _ progress , ĠConstraint Set . BOTTOM , ĠConstraint Set . PARENT _ ID , ĠConstraint Set . BOTTOM ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Visibility ( R . id . finish _ again _ button , ĠConstraint Set . IN VISIBLE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply To ( fragment _ finish _ layout ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠConstraint Set (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclone ( finish _ progress ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( R . id . finish _ progress _ text , ĠConstraint Set . TOP ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect ( R . id . finish _ progress _ text , ĠConstraint Set . TOP , ĠR . id . finish _ progress _ bar , ĠConstraint Set . BOTTOM ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Visibility ( R . id . finish _ progress _ bar , ĠConstraint Set . VISIBLE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply To ( finish _ progress ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġupload () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠviewModel . recognized Title . value ĊĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġ"$ name . jpg " ĊĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠviewModel . image File . value ĊĊĠĠĠĠĠĠĠ Ġval Ġfile Uri Ġ= ĠUri . from File ( file ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstorage Ġ= ĠFirebase Storage . getInstance () ĊĊĠĠĠĠĠĠĠ Ġval Ġfolder Reference Ġ= Ġstorage . reference . child (" reports ") ĊĊĠĠĠĠĠĠĠ Ġvar Ġfile Reference Ġ= Ġfolder Reference . child ( path ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġuri Ġ: ĠUri ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġwhile ( uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Reference . download Url . result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception Ġ: ĠStorage Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Reference Ġ= Ġfolder Reference . child ("$ name $ count ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġfile Reference . put File ( file Uri ) ĊĊĠĠĠĠĠĠĠ Ġtask . add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Success () ĊĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Failure () ĊĠĠĠĠĠĠĠ Ġ}. add On Progress Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . bytes Transfer red Ġ!= Ġ 0 . to Long ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġ( it . bytes Transfer red Ġ/ Ġit . total Byte Count ) Ġ* Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish _ progress _ bar . progress Ġ= Ġpercent . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }