/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 - 2 0 2 0 ĠOpen ĠFood ĠF acts Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ package Ġopen food facts . github . scr ach x . open food . features . product . view . ingredients Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Sp ann able StringBuilder Ċ import Ġandroid . text . Sp anned Ċ import Ġandroid . text . method . Link Movement Method Ċ import Ġandroid . text . style . Clickable Span Ċ import Ġandroid . text . style . Style Span Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . browser . custom tabs . Custom Tabs Intent Ċ import Ġandroidx . core . text . bold Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 Ċ import Ġcom . af ol le st ad . material dialogs . Material Dialog Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġio . reactivex . rx kotlin . addTo Ċ import Ġopen food facts . github . scr ach x . open food . App Fl avors Ċ import Ġopen food facts . github . scr ach x . open food . App Fl avors . OB F Ċ import Ġopen food facts . github . scr ach x . open food . App Fl avors . OP F Ċ import Ġopen food facts . github . scr ach x . open food . App Fl avors . OP FF Ċ import Ġopen food facts . github . scr ach x . open food . App Fl avors . is Fl avors Ċ import Ġopen food facts . github . scr ach x . open food . R Ċ import Ġopen food facts . github . scr ach x . open food . custom tabs . Custom Tab Activity Helper Ċ import Ġopen food facts . github . scr ach x . open food . custom tabs . Custom Tabs Helper Ċ import Ġopen food facts . github . scr ach x . open food . custom tabs . WebView Fallback Ċ import Ġopen food facts . github . scr ach x . open food . databinding . Fragment Ing redients Product Binding Ċ import Ġopen food facts . github . scr ach x . open food . features . FullScreen Activity Op ener Ċ import Ġopen food facts . github . scr ach x . open food . features . Images Manage Activity Ċ import Ġopen food facts . github . scr ach x . open food . features . add it ives . Add itive Fragment Helper . show Add it ives Ċ import Ġopen food facts . github . scr ach x . open food . features . login . Login Activity . Companion . Login Contract Ċ import Ġopen food facts . github . scr ach x . open food . features . product . edit . Product Edit Activity Ċ import Ġopen food facts . github . scr ach x . open food . features . product . edit . Product Edit Activity . Companion . KEY _ STATE Ċ import Ġopen food facts . github . scr ach x . open food . features . product . edit . Product Edit Activity . Perform OCR Contract Ċ import Ġopen food facts . github . scr ach x . open food . features . product . edit . Product Edit Activity . Send Updated Img Contract Ċ import Ġopen food facts . github . scr ach x . open food . features . search . Product Search Activity . Companion . start Ċ import Ġopen food facts . github . scr ach x . open food . features . shared . Base Fragment Ċ import Ġopen food facts . github . scr ach x . open food . images . Product Image Ċ import Ġopen food facts . github . scr ach x . open food . models . Dao Session Ċ import Ġopen food facts . github . scr ach x . open food . models . Product Image Field Ċ import Ġopen food facts . github . scr ach x . open food . models . Product State Ċ import Ġopen food facts . github . scr ach x . open food . models . entities . Send Product Ċ import Ġopen food facts . github . scr ach x . open food . models . entities . add itive . Add itive Name Ċ import Ġopen food facts . github . scr ach x . open food . models . entities . aller gen . All er gen Name Ċ import Ġopen food facts . github . scr ach x . open food . models . entities . aller gen . All er gen Name Dao Ċ import Ġopen food facts . github . scr ach x . open food . network . Open Food APIClient Ċ import Ġopen food facts . github . scr ach x . open food . network . Wiki Data ApiClient Ċ import Ġopen food facts . github . scr ach x . open food . repositories . Product Repository Ċ import Ġopen food facts . github . scr ach x . open food . utils .* Ċ import Ġopen food facts . github . scr ach x . open food . utils . Product Info State . EMPTY Ċ import Ġopen food facts . github . scr ach x . open food . utils . Product Info State . LOADING Ċ import Ġjava . io . File Ċ import Ġjavax . inject . Inject Ċ Ċ @ Android EntryPoint Ċ class ĠIng redients Product Fragment Ġ: ĠBase Fragment () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Ing redients Product Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġclient : ĠOpen Food APIClient ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġproduct Repository : ĠProduct Repository ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġdao Session : ĠDao Session ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġw ik idata Client : ĠWiki Data ApiClient ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġpic asso : ĠPic asso ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġshared Preferences : ĠSharedPreferences ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġlocale Manager : ĠLocale Manager ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠProduct Ing redients ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġprivate Ġval Ġlogin Pref Ġby Ġlazy Ġ{ Ġrequire Activity (). get Login Preferences () Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġperform OC RL a unch er Ġ= Ġregister For Activity Result ( Perform OCR Contract ()) ĊĠĠĠ Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġingredient Extract ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Refresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġupdate Images Launcher Ġ= Ġregister For Activity Result ( Send Updated Img Contract ()) ĊĠĠĠ Ġ{ Ġresult Ġ-> Ġif Ġ( result ) Ġon Refresh () Ġ} ĊĠĠĠ Ġprivate Ġval Ġlogin Launcher Ġ= Ġregister For Activity Result ( Login Contract ()) ĊĠĠĠ Ġ{ ĠProduct Edit Activity . start ( require Context (), Ġproduct State . product !! , Ġsend Updated Ing redients Image , Ġingredient Extract ed ) Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġproduct State : ĠProduct State ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcustom Tab Activity Helper : ĠCustom Tab Activity Helper ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcustom Tabs Intent : ĠCustom Tabs Intent ĊĠĠĠ Ġprivate Ġval Ġphoto Receiver Handler Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠPhoto Receiver Handler ( shared Preferences ) Ġ{ Ġon Photo Returned ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġingredient Extract ed Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġm Send Product : ĠSend Product ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġingredients Img Url : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġvar Ġsend Updated Ing redients Image Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġproduct State Ġ= Ġrequire Product State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Ing redients Product Binding . inflate ( in flater ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding . extract Ing redients Prompt . set Compound Draw ables With Intr insic Bounds ( R . drawable . ic _ add _ box _ blue _ 1 8 dp , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġbinding . change Ing Img . set Compound Draw ables With Intr insic Bounds ( R . drawable . ic _ add _ a _ photo _ blue _ 1 8 dp , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġbinding . change Ing Img . setOnClickListener Ġ{ Ġchange Ing Image () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . nova Method Link . setOnClickListener Ġ{ Ġnova Method Link Display () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . extract Ing redients Prompt . setOnClickListener Ġ{ Ġextract Ing redients () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . imageView Ing redients . setOnClickListener Ġ{ Ġopen FullScreen () Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĊĠĠĠĠĠĠĠ ĠviewModel . vit am ins Tags . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cv V it am ins Tags Text . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . vit am ins Tags Text . text Ġ= ĠSp ann able StringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. bold Ġ{ Ġappend ( getString ( R . string . vit amin _ tags _ text )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( tag List ToString ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġbinding . cv V it am ins Tags Text . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . am ino Ac id Tags List . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cv A mino Ac id Tags Text . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . am ino Ac id Tags Text . text Ġ= ĠSp ann able StringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. bold Ġ{ Ġappend ( getString ( R . string . am ino _ ac id _ tags _ text )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( tag List ToString ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġbinding . cv A mino Ac id Tags Text . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . min eral Tags . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cv Min eral Tags Text . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . min eral Tags Text . text Ġ= ĠSp ann able StringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. bold Ġ{ Ġappend ( getString ( R . string . min eral _ tags _ text )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( tag List ToString ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġbinding . cv Min eral Tags Text . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . min eral Tags . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . other N utr ition Tags . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . other N utr ition Tags . text Ġ= ĠSp ann able StringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. bold Ġ{ Ġappend ( getString ( R . string . other _ tags _ text )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( tag List ToString ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrefresh View ( product State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġcustom Tab Activity Helper Ġ= ĠCustom Tab Activity Helper () ĊĠĠĠĠĠĠĠ Ġcustom Tabs Intent Ġ= ĠCustom Tabs Helper . get Custom Tabs Intent ( require Context (), Ġcustom Tab Activity Helper . session ) ĊĠĠĠĠĠĠĠ Ġproduct State Ġ= Ġrequire Product State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrefresh View ( product State : ĠProduct State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . refresh View ( product State ) ĊĠĠĠĠĠĠĠ Ġthis . product State Ġ= Ġproduct State ĊĠĠĠĠĠĠĠ Ġval Ġlang Code Ġ= Ġlocale Manager . get Language () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( arguments Ġ!= Ġnull ) Ġm Send Product Ġ= Ġget Send Product () ĊĊĠĠĠĠĠĠĠ Ġval Ġproduct Ġ= Ġthis . product State . product !! ĊĠĠĠĠĠĠĠ ĠviewModel . product . value Ġ= Ġproduct ĊĊĊĠĠĠĠĠĠĠ Ġbinding . text Add itive Product . text Ġ= ĠSp ann able StringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bold Ġ{ Ġappend ( getString ( R . string . txt Add it ives )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Add it ives State ( LOADING ) ĊĠĠĠĠĠĠĠ ĠviewModel . add it ives . observe ( view Lifecycle Owner ) Ġ{ Ġadd it ives Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( add it ives . isEmpty ()) Ġset Add it ives State ( EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġshow Add it ives ( add it ives ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ(! product . getImage Ing redients Url ( lang Code ). isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ingredient I ma get ip Box . set Tip Message ( getString ( R . string . on boarding _ hint _ msg , ĠgetString ( R . string . image _ edit _ tip ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ingredient I ma get ip Box . load ToolTip () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . add Photo Label . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . change Ing Img . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoad ĠImage Ġif Ġis Low Battery Mode Ġis Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! require Context (). is Battery Level Low ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpic asso . load ( product . getImage Ing redients Url ( lang Code )). into ( binding . imageView Ing redients ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . imageView Ing redients . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġingredients Img Url Ġ= Ġproduct . getImage Ing redients Url ( lang Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// useful Ġwhen Ġthis Ġfragment Ġis Ġused Ġin Ġoffline Ġsaving ĊĠĠĠĠĠĠĠ Ġif Ġ( m Send Product Ġ!= Ġnull Ġ&& Ġ! m Send Product !!. img Upload Ing redients . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . add Photo Label . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġingredients Img Url Ġ= Ġm Send Product !!. img Upload Ing redients ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpic asso . load ( LOCAL E _ FILE _ SCHEME Ġ+ Ġingredients Img Url ). config ( Bitmap . Config . RGB _ 5 6 5 ). into ( binding . imageView Ing redients ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġall erg ens Ġ= ĠgetAll erg ens () ĊĠĠĠĠĠĠĠ Ġif Ġ(! product . get Ing redients Text ( lang Code ). isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cv Text Ingredient Product . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtxt Ing redients Ġ= ĠSp ann able StringBuilder ( product . get Ing redients Text ( lang Code ) !!. replace ("_ ", Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxt Ing redients Ġ= Ġbold All erg ens ( txt Ing redients , Ġall erg ens ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( product . get Ing redients Text ( lang Code ). isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . extract Ing redients Prompt . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġingredients List At Ġ= Ġtxt Ing redients . toString (). indexOf (": "). coerce At Least ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( txt Ing redients . toString (). substring ( ingredients List At ). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ}. isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Ingredient Product . text Ġ= Ġtxt Ing redients ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cv Text Ingredient Product . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! product . getImage Ing redients Url ( lang Code ). isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . extract Ing redients Prompt . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset All erg ens State ( LOADING ) ĊĠĠĠĠĠĠĠ ĠviewModel . all erg ens . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isEmpty ()) Ġset All erg ens State ( EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġshow All erg ens ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! product . traces . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlanguage Ġ= Ġlocale Manager . get Language () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cv Text Trace Product . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Trace Product . movement Method Ġ= ĠLink Movement Method . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Trace Product . text Ġ= ĠSp ann able StringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. bold Ġ{ Ġappend ( getString ( R . string . txt Tr aces )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Trace Product . append (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtraces Ġ= Ġproduct . traces . split (",") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Trace Product . append ( traces . join ToString (", Ġ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Search Link Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Tr aces Name ( language , Ġit ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Type . TRACE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cv Text Trace Product . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnova Groups Ġ= Ġproduct . nova Groups ĊĠĠĠĠĠĠĠ Ġif Ġ( nova Groups Ġ!= Ġnull Ġ&& Ġ! is Fl avors ( OB F )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . nova Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . nova Explanation . text Ġ= ĠUtils . get Nova Group Explanation ( nova Groups , Ġrequire Context ()) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . nova Group . setImage Resource ( product . get Nova Group Resource ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . nova Group . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse ( getString ( R . string . url _ nova _ groups )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtabs Intent Ġ= ĠCustom Tabs Helper . get Custom Tabs Intent ( require Context (), Ġcustom Tab Activity Helper . session ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCustom Tab Activity Helper . open Custom Tab ( require Activity (), Ġtabs Intent , Ġuri , ĠWebView Fallback ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . nova Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Tr aces Name ( language Code : ĠString , Ġtag : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġall er gen Name Ġ= Ġdao Session . aller gen Name Dao . query Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( All er gen Name Dao . Properties . All er gen Tag . eq ( tag ), ĠAll er gen Name Dao . Properties . Language Code . eq ( language Code )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. unique () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( aller gen Name Ġ!= Ġnull ) Ġall er gen Name . name Ġelse Ġtag ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtag List ToString ( tag List : ĠList < String >) Ġ= ĊĠĠĠĠĠĠĠ Ġtag List . join ToString (", Ġ", Ġ" Ġ") Ġ{ Ġit . substring ( 3 ) Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠgetAll erg ens Tag ( aller gen : ĠAll er gen Name ): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs sb Ġ= ĠSp ann able StringBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġclick able Span : ĠClick able Span Ġ= Ġobject Ġ: ĠClick able Span () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( aller gen . is Wiki Data Id Present ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw ik idata Client . do Some Thing ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall er gen . wiki Data Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). subscribe Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity ?. is Finish ing Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Bottom Sheet ( result , Ġall er gen , Ġactivity . support FragmentManager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. addTo ( disp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart ( require Context (), ĠSearch Type . ALL ER GEN , Ġall er gen . aller gen Tag , Ġall er gen . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġs sb . append ( aller gen . name ) ĊĠĠĠĠĠĠĠ Ġs sb . set Span ( click able Span , Ġ 0 , Ġs sb . length , ĠSp anned . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġall er gen Ġis Ġnot Ġin Ġthe Ġtaxonomy Ġlist Ġthen Ġitalic ize Ġit ĊĠĠĠĠĠĠĠ Ġif Ġ(! aller gen . isNotNull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs sb . set Span ( Style Span ( Type face . ITAL IC ), Ġ 0 , Ġs sb . length , ĠSp anned . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġs sb ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbold All erg ens ( ingredients Text : ĠCharSequence , Ġall er gen Tags : ĠList < String >): ĠSp ann able StringBuilder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSp ann able StringBuilder ( ingredients Text ). also Ġ{ Ġs sb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIN GRE DI ENT _ REGEX . findAll ( ingredients Text ). forEach Ġ{ Ġmatch Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall er gen Txt Ġ= Ġmatch . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("[ () ]+ ". to Regex (), Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("[ ,. - ] ". to Regex (), Ġ" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall er gen Tags . find Ġ{ Ġtag Ġ-> Ġtag . contains ( aller gen Txt , Ġtrue ) Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstart Ġ= Ġmatch . range . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġend Ġ= Ġmatch . range . last Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" (" Ġin Ġmatch . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ")" Ġin Ġmatch . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ-= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs sb . set Span ( Style Span ( Type face . BOLD ), Ġstart , Ġend , ĠSp anned . SPAN _ INCL USIVE _ INCL USIVE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs sb . insert ( 0 , ĠSp ann able StringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. bold Ġ{ Ġappend ( getString ( R . string . txt Ing redients ) Ġ+ Ġ' Ġ') Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Add it ives ( add it ives : ĠList < Add itive Name >) Ġ= ĊĠĠĠĠĠĠĠ Ġshow Add it ives ( add it ives , Ġbinding . text Add itive Product , Ġw ik idata Client , Ġthis ) ĊĊĠĠĠ Ġprivate Ġfun Ġset Add it ives State ( state : ĠProduct Info State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLO ADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cv Text Add itive Product . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Add itive Product . append ( getString ( R . string . txt Loading )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEMPTY Ġ-> Ġbinding . cv Text Add itive Product . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow All erg ens ( all erg ens : ĠList < All er gen Name >) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . text Sub stance Product . movement Method Ġ= ĠLink Movement Method . getInstance () ĊĠĠĠĠĠĠĠ Ġbinding . text Sub stance Product . text Ġ= ĠSp ann able StringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bold Ġ{ Ġappend ( getString ( R . string . txt Subst ances )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( all erg ens . join ToString (", Ġ") Ġ{ ĠgetAll erg ens Tag ( it ) Ġ}) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġchange Ing Image () Ġ{ ĊĠĠĠĠĠĠĠ Ġsend Updated Ing redients Image Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġview Pager Ġ= Ġrequire Activity (). findViewById < ViewPager 2 >( R . id . pager ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Fl avors ( App Fl avors . OFF )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( login Pref . getString (" user ", Ġ""). isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow SignIn Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct State Ġ= Ġrequire Product State () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Images Launcher . launch ( product State . product ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Fl avors ( OP FF ) Ġ-> Ġview Pager . currentItem Ġ= Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Fl avors ( OB F ) Ġ-> Ġview Pager . currentItem Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Fl avors ( OP F ) Ġ-> Ġview Pager . currentItem Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset All erg ens State ( state : ĠProduct Info State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLO ADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Sub stance Product . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Sub stance Product . append ( getString ( R . string . txt Loading )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEMPTY Ġ-> Ġbinding . text Sub stance Product . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetAll erg ens (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġall erg ens Ġ= Ġproduct State . product !!. all erg ens Tags ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( product State . product Ġ!= Ġnull Ġ&& Ġall erg ens . isNotEmpty ()) Ġall erg ens Ġelse Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnova Method Link Display () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( product State . product Ġ!= Ġnull Ġ&& Ġproduct State . product !!. nova Groups Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse ( getString ( R . string . url _ nova _ groups )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtabs Intent Ġ= ĠCustom Tabs Helper . get Custom Tabs Intent ( require Context (), Ġcustom Tab Activity Helper . session ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCustom Tab Activity Helper . open Custom Tab ( require Activity (), Ġtabs Intent , Ġuri , ĠWebView Fallback ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġextract Ing redients () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Added ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= Ġrequire Context (). get Login Preferences () ĊĠĠĠĠĠĠĠ Ġif Ġ( settings . getString (" user ", Ġ"") !!. isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow SignIn Dialog () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct State Ġ= Ġrequire Product State () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperform OC RL a unch er . launch ( product State . product ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow SignIn Dialog () Ġ{ ĊĠĠĠĠĠĠĠ ĠMaterial Dialog . Builder ( require Context ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle ( R . string . sign _ in _ to _ edit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpositive Text ( R . string . txt SignIn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnegative Text ( R . string . dialog _ cancel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Positive Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Launcher . launch ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Negative Ġ{ Ġdialog , Ġ_ Ġ-> Ġdialog . dismiss () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen FullScreen () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ingredients Img Url Ġ!= Ġnull Ġ&& Ġproduct State . product Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFull Screen Activity Op ener . open For Url ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct State . product !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProduct Image Field . ING RE DI ENTS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġingredients Img Url !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . imageView Ing redients , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocale Manager . get Language () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Ingredient Image () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnew Ingredient Image () Ġ= Ġdo Choose Or Take Photos () ĊĊĠĠĠ Ġoverride Ġfun Ġdo On Photos Permission Granted () Ġ= Ġnew Ingredient Image () ĊĊĠĠĠ Ġprivate Ġfun Ġon Photo Returned ( new Photo File : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠProduct Image ( product State . code !! , ĠProduct Image Field . ING RE DI ENTS , Ġnew Photo File , Ġlocale Manager . get Language ()) ĊĠĠĠĠĠĠĠ Ġimage . filePath Ġ= Ġnew Photo File . absolute Path ĊĠĠĠĠĠĠĠ Ġclient . post Img ( image ). subscribe (). addTo ( disp ) ĊĠĠĠĠĠĠĠ Ġbinding . add Photo Label . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġingredients Img Url Ġ= Ġnew Photo File . absolute Path ĊĠĠĠĠĠĠĠ ĠPic asso . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( new Photo File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( binding . imageView Ing redients ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Images Manage Activity . is Image Modified ( request Code , ĠresultCode )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Refresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġphoto Receiver Handler . on Activity Result ( this , Ġrequest Code , ĠresultCode , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠIN GRE DI ENT _ REGEX Ġ= ĠRegex ("[ \\ p { L }\\ p { Nd } (), .- ]+ ") ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( product State : ĠProduct State ) Ġ= ĠIng redients Product Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Serializable ( KEY _ STATE , Ġproduct State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ