package Ġpas . com . mm . sh oop ing cart . user profile čĊč Ċ import Ġandroid . util . Log č Ċ import Ġcom . google . android . gms . tasks . Continuation č Ċ import Ġcom . google . android . gms . tasks . Task č Ċ import Ġcom . google . firebase . auth . Firebase Auth č Ċ import Ġcom . google . firebase . functions . Firebase Functions č Ċ import Ġcom . google . firebase . functions . Firebase Functions Exception č Ċ import Ġcom . google . firebase . functions . Https Callable Result č Ċ import Ġpas . com . mm . sh oop ing cart . database . model . UserProfile č Ċ import Ġpas . com . mm . shopping cart . order . Basket Data Presenter č Ċ import Ġjava . util . HashMap č Ċ import Ġcom . google . firebase . database . Database Reference č Ċ import Ġcom . google . firebase . database . Firebase Database č Ċ import Ġandroid . widget . Toast č Ċ import Ġcom . google . firebase . database . Database Error č Ċ import Ġpas . com . mm . sh oop ing cart . util . Font Util . setText č Ċ import Ġandroid . R . attr . author č Ċ import Ġcom . google . firebase . database . Data Snapshot č Ċ import Ġcom . google . firebase . database . Value EventListener čĊčĊčĊčĊč Ċ class ĠUser Profile Presenter { čĊčĊčĊĠĠĠ Ġvar Ġ Ġview : ĠUser Profile View ? Ġ= Ġnull ; čĊĠĠĠ Ġinternal Ġvar Ġm Functions Ġ= ĠFirebase Functions . getInstance () čĊĠĠĠ Ġinternal Ġvar Ġm Database : ĠDatabase Reference ? Ġ= Ġnull čĊĠĠĠ Ġvar ĠTAG =" UserProfile Presenter " čĊĠĠĠ Ġpublic Ġfun Ġretrieve UserProfile () čĊĠĠĠ Ġ{ čĊĠĠĠĠĠĠ Ġvar Ġuser = ĠFirebase Auth . getInstance (). currentUser !!. uid čĊĠĠĠĠĠĠĠ Ġm Database Ġ= ĠFirebase Database . getInstance (). getReference (). child (" users "). child ( user ); čĊčĊčĊĠĠĠĠĠĠĠ Ġval Ġpost Listener Ġ= Ġobject Ġ: ĠValue EventListener Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Data Change ( data Snapshot : ĠData Snapshot ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠPost Ġobject Ġand Ġuse Ġthe Ġvalues Ġto Ġupdate Ġthe ĠUI čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpost Ġ= Ġdata Snapshot . getValue ( UserProfile :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġp : UserProfile = UserProfile () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . address = Ġpost ?. address Ġ?: "" čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview !!. set UserInfo ( post Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ[ START _ EXCL UDE ] čĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠ Ġm Author View . setText ( post . author ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġm Title View . setText ( post . title ) čĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠ Ġm Body View . setText ( post . body ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ[ END _ EXCL UDE ] čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( database Error : ĠDatabase Error ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGetting ĠPost Ġfailed , Ġlog Ġa Ġmessage čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" load Post : on Cancelled ", Ġdatabase Error . to Exception ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ[ START _ EXCL UDE ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠToast . makeText ( this @ Post Detail Activity , Ġ" Failed Ġto Ġload Ġpost .", čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ). show () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ[ END _ EXCL UDE ] čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġm Database !!. add Value EventListener ( post Listener ) čĊĠĠĠ Ġ} čĊĠĠĠ Ġpublic Ġfun Ġsave Profile ( profile : ĠUser Profile ) čĊĠĠĠ Ġ{ čĊčĊčĊĠĠĠĠĠĠĠ Ġcall Save Profile Api ( profile . address , profile . phone ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener ( Ġ Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . is Successful ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġe = Ġit . exception čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġis ĠFirebase Functions Exception ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġf fe : ĠFirebase Functions Exception Ġ= Ġ Ġe Ġas ĠFirebase Functions Exception čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġ Ġcode : ĠFirebase Functions Exception . Code Ġ Ġ= Ġf fe . code čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdetails : Any ? Ġ= Ġf fe . details čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ[ START _ EXCL UDE ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLog . w ( Basket Data Presenter . TAG , Ġ" addMessage : on Failure ", Ġe ); čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add On Complete Listener ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ[ END _ EXCL UDE ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ[ START _ EXCL UDE ] čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult : String Ġ= Ġit . getResult (); čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview !!. success Create User () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// m Message Output Field . setText ( result ); čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ[ END _ EXCL UDE ] čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}); čĊĠĠĠĠĠĠĠ Ġ// Ġ[ END Ġcall _ add _ message ] čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġpublic Ġfun Ġcall Save Profile Api ( address : ĠString , phone : String ): ĠTask < String > Ġ{ čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe Ġarguments Ġto Ġthe Ġcallable Ġfunction . čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠHashMap < Any , Any >() čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . put (" address ", Ġaddress ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . put (" phone ", Ġphone ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . put (" push ", Ġtrue ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Functions čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Https Callable (" createUser ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. call ( data ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. continue With ( object Ġ: ĠContinu ation < Https Callable Result , ĠString > Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( Exception :: class ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġthen ( task : ĠTask < Https Callable Result >): ĠString Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġcontinuation Ġruns Ġon Ġeither Ġsuccess Ġor Ġfailure , Ġbut Ġif Ġthe Ġtask čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhas Ġfailed Ġthen Ġget Result () Ġwill Ġthrow Ġan ĠException Ġwhich Ġwill Ġbe čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpropag ated Ġdown . čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtask . getResult (). data . toString () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊčĊĠĠĠ Ġ} čĊĠĠĠĠč Ċ }