/* ĠCopyright Ġ 2 0 2 0 . ĠExplo re Ġin ĠH MS . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 ĊĊ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" DEPRECATED _ IDENTITY _ EQUAL S ") Ċ Ċ package Ġcom . h ms . reference app . h if ood . view Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Content Values . TAG Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Sender . Send Intent Exception Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . util . Pair Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget .* Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġcom . h ms . reference app . h if ood . R Ċ import Ġcom . h ms . reference app . h if ood . utils . Recipe Image Getter Ċ import Ġcom . h ms . reference app . h if ood . view model . Recipe Detail ViewModel Ċ import Ġcom . hu awei . ag connect . auth . AG Connect Auth Ċ import Ġcom . hu awei . h mf . tasks . Task Ċ import Ġcom . hu awei . h ms . i ap . I ap Ċ import Ġcom . hu awei . h ms . i ap . I ap ApiException Ċ import Ġcom . hu awei . h ms . i ap . I ap Client Ċ import Ġcom . hu awei . h ms . i ap . entity .* Ċ import Ġcom . hu awei . h ms . ml sdk . common . ML Application Ċ import Ġcom . hu awei . h ms . ml sdk . tts .* Ċ import Ġcom . hu awei . h ms . support . api . client . Status Ċ import Ġkotlinx . android . synt hetic . main . recipe _ detail _ fragment .* Ċ import Ġorg . json . JSONException ĊĊ Ċ class ĠRecipe Detail Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġval Ġargs : ĠRecipe Detail Fragment Args Ġby Ġnav Args () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġml T ts Engine : ĠM LT ts Engine ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġml T ts Config : ĠM LT ts Config ĊĠĠĠ Ġvar Ġproportion Value : ĠDouble Ġ= Ġ 1 . 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠRecipe Detail ViewModel ĊĊĠĠĠ Ġ// ĠText Ġto Ġspeech ĊĠĠĠ Ġprivate Ġval Ġcallback : ĠM LT ts Callback Ġ= Ġobject Ġ: ĠM LT ts Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Audio Available ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp 0 : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 : ĠM LT ts Audio Fragment ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp 2 : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp 3 : ĠPair < Int , ĠInt > ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp 4 : ĠBundle ? ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Event ( taskId : ĠString ?, ĠeventName : ĠInt , Ġbundle : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( eventName Ġ== ĠM LT ts Constants . EVENT _ PLAY _ STOP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" Service Ġstopped ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Warn ( p 0 : ĠString ?, Ġp 1 : ĠM LT ts Warn ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Warn ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( p 0 : ĠString ?, Ġp 1 : ĠM LT ts Error ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" onError ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Range Start ( p 0 : ĠString ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Range Start ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . recipe _ detail _ fragment , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠML Application . getInstance (). apiKey Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cg B 6 e 3 x 9 o 7 AU Fo 2 h hi T / FS gY 9 Iy WM XV mf Z 3 4 9 8 y N hn H / Zy X / o Vp I 1 2 7 Y p zx vo Jd wr Gh 6 MK 0 v Pg kr 6 vx JI cv 6 D be C " ĊĊĠĠĠĠĠĠĠ Ġ// text Ġto Ġspeech ĊĠĠĠĠĠĠĠ Ġml T ts Config Ġ= ĠM LT ts Config () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Language ( ML T ts Constants . TT S _ EN _ US ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Person ( ML T ts Constants . TT S _ SPE AK ER _ F EM ALE _ EN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Speed ( 1 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Volume ( 1 . 0 f ) ĊĊĠĠĠĠĠĠĠ Ġml T ts Engine Ġ= ĠM LT ts Engine ( ml T ts Config ) ĊĠĠĠĠĠĠĠ Ġml T ts Engine . update Config ( ml T ts Config ) ĊĊĠĠĠĠĠĠĠ Ġspeak Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġml T ts Engine Ġ= ĠM LT ts Engine ( ml T ts Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġml T ts Engine . set T ts Callback ( callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext : ĠString Ġ= Ġspeak Txt . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġml T ts Engine . speak ( text , ĠM LT ts Engine . QUEUE _ APPEND ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfind Map . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRecipe Detail Fragment Directions . action Recipe Detail Fragment To Near To Buy Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġnav - component Ġargs ĊĠĠĠĠĠĠĠ Ġval Ġrec Id Ġ= Ġargs . recipe Id ĊĊĠĠĠĠĠĠĠ Ġval Ġactivity : ĠActivity ? Ġ= Ġactivity ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= ĠI ap . get I ap Client ( activity ). is Env Ready ĊĠĠĠĠĠĠĠ Ġtask . add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġis ĠI ap ApiException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus : ĠStatus Ġ= Ġe . status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status . statusCode Ġ=== ĠOrder StatusCode . ORDER _ HW ID _ NOT _ LOGIN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status . has Resolution ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus . start Resolution For Result ( getActivity (), Ġ 6 6 6 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exp : ĠSend Intent Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( status . statusCode Ġ=== ĠOrder StatusCode . ORDER _ ACCOUNT _ AREA _ NOT _ SUPPORTED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġcurrent Ġregion Ġdoes Ġnot Ġsupport ĠH UA WE I ĠI AP . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġget Product List () ĊĊĠĠĠĠĠĠĠ Ġi ap Click . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Purchase () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd List Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Pro portion Of Me al () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Pro portion Of Me al () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġproportion Options Ġ= Ġmutable ListOf < Double >( 0 . 5 , Ġ 1 . 0 , Ġ 1 . 5 , Ġ 2 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġalert Dialog Builder Ġ= ĠAlertDialog . Builder ( require Context ()) ĊĊĠĠĠĠĠĠĠ Ġalert Dialog Builder . setTitle ( getString ( R . string . pro portion _ title )) ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠAG Connect Auth . getInstance (). currentUser ĊĊĠĠĠĠĠĠĠ Ġalert Dialog Builder . set Positive Button ( R . string . add ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . record Me al ( user . uid , Ġproportion Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġalert Dialog Builder . set Negative Button ( R . string . cancel ) Ġ{ Ġdialog , Ġ_ Ġ-> Ġdialog ?. dismiss () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsp : ĠSp inner Ġ= ĠSp inner ( require Context ()) ĊĊĠĠĠĠĠĠĠ Ġsp . layout Params Ġ= ĠLinearLayout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . WRAP _ CONTENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġsp . adapter Ġ= ĠArray Adapter < Double >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . layout . simple _ list _ item _ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf < Double >( 0 . 5 , Ġ 1 . 0 , Ġ 1 . 5 , Ġ 2 . 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġsp . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠAdapter View < *> ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠView ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproportion Value Ġ= Ġproportion Options [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Nothing Ġselected Ġin Ġproportion Ġspinner ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġalert Dialog Builder . setView ( sp ) ĊĊĠĠĠĠĠĠĠ Ġalert Dialog Builder . create (). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Product List () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct IdList : ĠMutable List < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġproduct IdList . add (" 0 0 2 ") ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= ĠProduct Info Req () ĊĠĠĠĠĠĠĠ Ġ// Ġprice Type : Ġ 0 : Ġconsum able ; Ġ 1 : Ġnon - consum able ; Ġ 2 : Ġauto - renew able Ġsubscription ĊĠĠĠĠĠĠĠ Ġreq . price Type Ġ= ĠI ap Client . Price Type . IN _ APP _ CON SUM ABLE ĊĠĠĠĠĠĠĠ Ġreq . product Ids Ġ= Ġproduct IdList ĊĠĠĠĠĠĠĠ Ġval Ġtask Product Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠI ap . get I ap Client ( activity ). obtain Product Info ( req ) ĊĠĠĠĠĠĠĠ Ġtask Product . add On Success Listener Ġ{ Ġ// ĠObtain Ġthe Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproduct List Ġ= Ġreq . product Ids ĊĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġis ĠI ap ApiException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreturn Code Ġ= Ġe . statusCode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOther Ġexternal Ġerrors ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Purchase () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= ĠPurchase Intent Req () ĊĠĠĠĠĠĠĠ Ġreq . productId Ġ= Ġ" 0 0 2 "; ĊĠĠĠĠĠĠĠ Ġreq . price Type Ġ= Ġ 0 ; ĊĠĠĠĠĠĠĠ Ġreq . developer Payload Ġ= Ġ" test "; ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠI ap . get I ap Client ( activity ). create Purchase Intent ( req ) ĊĠĠĠĠĠĠĠ Ġtask . add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġit . status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status . has Resolution ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 6 6 6 6 Ġis Ġan Ġint Ġconstant Ġdefined Ġby Ġthe Ġdeveloper . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus . start Resolution For Result ( activity , Ġ 6 6 6 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exp : ĠSend Intent Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġis ĠI ap ApiException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġe . status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreturn Code Ġ= Ġe . statusCode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconsume Owned Purchase ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġin App Purchase Data : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" call Ġconsume Owned Purchase ") ĊĠĠĠĠĠĠĠ Ġval Ġm Client Ġ= ĠI ap . get I ap Client ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Client . consume Owned Purchase ( create Consume Owned Purchase Req ( in App Purchase Data )) ĊĠĠĠĠĠĠĠ Ġtask . add On Success Listener Ġ{ Ġ// ĠCons ume Ġsuccess ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" consume Owned Purchase Ġsuccess ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Pay Ġsuccess , Ġand Ġthe Ġproduct Ġhas Ġbeen Ġdelivered ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġe . message !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġe . message , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġis ĠI ap ApiException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreturn Code Ġ= Ġe . statusCode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" consume Owned Purchase Ġfail , return Code : Ġ$ return Code ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOther Ġexternal Ġerrors ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Consume Owned Purchase Req ( purchase Data : ĠString ): ĠCons ume Owned Purchase Req ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= ĠCons ume Owned Purchase Req () ĊĠĠĠĠĠĠĠ Ġ// ĠParse Ġpurchase Token Ġfrom ĠIn App Purchase Data Ġin ĠJSON Ġformat . ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin App Purchase Data Ġ= ĠIn App Purchase Data ( purchase Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq . purchase Token Ġ= Ġin App Purchase Data . purchase Token ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" create Consume Owned Purchase Req ĠJSON Exe ption ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġreq ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ ĠresultCode : ĠInt , ĊĠĠĠĠĠĠĠ Ġdata : ĠIntent ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== Ġ 6 6 6 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" on Activity Result ", Ġ" data Ġis Ġnull "); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpurchase Result Info : ĠPurchase Result Info Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI ap . get I ap Client ( activity ). parse Purchase Result Info From Intent ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( purchase Result Info . return Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOrder StatusCode . ORDER _ STATE _ CANCEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" order Ġcancelled ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRecipe Detail Fragment Directions . action Recipe Detail Fragment To Video Fragment 2 () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOrder StatusCode . ORDER _ STATE _ FAILED , ĠOrder StatusCode . ORDER _ PRODUCT _ OWN ED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOrder StatusCode . ORDER _ STATE _ SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpay Ġsuccess . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpurchase Token Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin App Purchase Data : ĠString Ġ= Ġpurchase Result Info . in App Purchase Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin App Purchase Data Signature : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpurchase Result Info . in AppData Signature ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin App Purchase Data Bean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIn App Purchase Data ( in App Purchase Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpurchase Token Ġ= Ġin App Purchase Data Bean . purchase Token ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreq Ġ= ĠCons ume Owned Purchase Req () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreq . purchase Token Ġ= Ġpurchase Token ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity : ĠActivity ? Ġ= Ġactivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask : ĠTask < Consume Owned Purchase Result > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI ap . get I ap Client ( activity ). consume Owned Purchase ( req ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRecipe Detail Fragment Directions . action Recipe Detail Fragment To Video Fragment 2 () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġis ĠI ap ApiException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreturn Code Ġ= Ġe . statusCode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" payment Ġfailed ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" payment Ġfailed ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this ). get ( Recipe Detail ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġobserve ViewModel () ĊĊĠĠĠĠĠĠĠ Ġval Ġrec Id Ġ= Ġargs . recipe Id ĊĊĠĠĠĠĠĠĠ ĠviewModel . get Recipe Details ( rec Id !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve ViewModel () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠviewModel . recipe . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe Name . text Ġ= Ġit . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstruction TV . text Ġ= Ġit . instruction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . recipe Ingredient List . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . ingredient List . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . is Me al Re corded . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Me al Ġis Ġadded Ġto Ġyour Ġdi ary .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . base Food List . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġbase Food List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Food List ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġingredients LV . adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArray Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . layout . simple _ list _ item _ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Food List . map Ġ{ Ġit . name Ġ}. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe Img . setImage Resource ( Recipe Image Getter . getImage Source ( viewModel . recipe . value !!. name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( food Ġin Ġbase Food List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġml T ts Engine . speak ( food . name , ĠM LT ts Engine . QUEUE _ APPEND ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġml T ts Engine . shutdown () ĊĠĠĠ Ġ} Ċ }