/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 Ġ- S ri h ari ĠV ish nu Ġ- ĠAll ĠRights ĠReserved Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , Ċ Ġ* ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF Ċ Ġ* ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND Ċ Ġ* ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT Ċ Ġ* ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER Ċ Ġ* ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF Ċ Ġ* ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . magnitude stud ios . Game Face . ui Ċ Ċ import Ġandroid . animation . Argb Evaluator Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . view . do On Pre Draw Ċ import Ġandroidx . core . view . update LayoutParams Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . ui . Navigation UI Ċ import Ġandroidx . navigation . ui . setup With Nav Controller Ċ import Ġcom . magnitude stud ios . Game Face . Constants Ċ import Ġcom . magnitude stud ios . Game Face . R Ċ import Ġcom . magnitude stud ios . Game Face . databinding . Fragment Bottom Nav Binding Ċ import Ġcom . magnitude stud ios . Game Face . pojo . Enum Classes . Status Ċ import Ġcom . magnitude stud ios . Game Face . pojo . Helper . Resource Ċ import Ġcom . magnitude stud ios . Game Face . pojo . UserInfo . Profile Ċ import Ġcom . magnitude stud ios . Game Face . repository . UserRepository Ċ import Ġcom . magnitude stud ios . Game Face . ui . main . Main ViewModel Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch ĊĊ Ċ /** Ċ Ġ* ĠBottom Ġcontainer Ġfragment Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠBottom Ġcontainer Ġfragment Ċ Ġ*/ Ċ class ĠBottom Container Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbind : ĠFragment Bottom Nav Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmain ViewModel : ĠMain ViewModel ĊĠĠĠ Ġprivate Ġvar Ġcolor Animation : ĠValue Animator ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbind Ġ= ĠFragment Bottom Nav Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġmain ViewModel Ġ= Ġactivity ?. run Ġ{ ĠViewModel Provider ( this ). get ( Main ViewModel :: class . java ) Ġ} !! ĊĠĠĠĠĠĠĠ Ġreturn Ġbind . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġpost p one Enter Transition () ĊĠĠĠĠĠĠĠ Ġview . do On Pre Draw Ġ{ Ġstart Post p oned Enter Transition () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnav Host Ġ= Ġrequire Activity (). find Nav Controller ( R . id . container Nav Host ) ĊĠĠĠĠĠĠĠ Ġbind . bottom Nav . setup With Nav Controller ( nav Host ) ĊĠĠĠĠĠĠĠ Ġbind . bottom Nav . setOn Navigation ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimated Selected ( it . itemId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Navigation ItemSelected Listener ĠNavigation UI . on Nav Destination Selected ( it , Ġnav Host ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Handle ĠProfile ĠPic Ġchanges ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). current Back Stack Entry ?. saved State Handle ?. get LiveData < String >( Constants . G OT _ PH OTO _ KEY )?. observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Get Ġthe Ġuri Ġfrom Ġc ropped Ġphoto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Uri Ġafter Ġsaving Ġto Ġfirebase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremote Uri Ġ= ĠUser Repository . set Profile Pic ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Successful Ġsave ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( remote Uri . status Ġ== ĠStatus . SUCCESS ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . profile . post Value ( Resource . success ( main ViewModel . profile . value ?. data ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Pic Ġ= Ġremote Uri . data . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Repository . update UserProfile ( mutable Map Of ( Profile :: profile Pic . name Ġto Ġremote Uri . data . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" SA VED ", Ġ" Saved Ġnew Ġp fp ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ Ġ Ġ// Error Ġoccurred Ġwhile Ġuploading ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Bottom ĠContainer ", Ġremote Uri . message Ġ?: Ġ" ERROR ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), Ġ" Something Ġunexpected Ġhappened !", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). current Back Stack Entry ?. saved State Handle ?. set ( Constants . G OT _ PH OTO _ KEY , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimated Selected ( itemId : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( itemId Ġ== ĠR . id . home Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Background ( R . color . color Accent , ĠR . color . color Primary ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Background ( R . color . color Primary , ĠR . color . color Accent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate Background Ġ( from Color Res : ĠInt , Ġto Colour Res : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcolor Animation ?. cancel () ĊĠĠĠĠĠĠĠ Ġval Ġcolor From Ġ= ĠContext Compat . getColor ( require Context (), Ġfrom Color Res ) ĊĠĠĠĠĠĠĠ Ġval Ġcolor To Ġ= ĠContext Compat . getColor ( require Context (), Ġto Colour Res ) ĊĠĠĠĠĠĠĠ Ġcolor Animation Ġ= ĠValue Animator . of Object ( Argb Evaluator (), Ġcolor From , Ġcolor To ) ĊĠĠĠĠĠĠĠ Ġcolor Animation ?. duration Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġcolor Animation ?. add Update Listener Ġ{ Ġanim ator Ġ-> Ġbind . bottom Nav . set BackgroundColor ( anim ator . animated Value Ġas ĠInt ) Ġ} ĊĠĠĠĠĠĠĠ Ġcolor Animation ?. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġanimated Selected ( bind . bottom Nav . selected ItemId ) ĊĠĠĠ Ġ} Ċ }