package Ġcom . her mes jun ior . image search er . ui Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġcom . her mes jun ior . image search er . R Ċ import Ġcom . her mes jun ior . image search er . image uploader . Image Uploader Ċ import Ġcom . her mes jun ior . image search er . image uploader . Img 1 0 Uploader Ċ import Ġcom . her mes jun ior . image search er . model . SearchResult Ċ import Ġjava . io . File Ċ Ċ class ĠMain ViewModel ( private Ġval Ġcontext : ĠApplication ) Ġ: ĠAndroid ViewModel ( context ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġprefs : ĠSharedPreferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠ Ġprivate Ġval Ġimage Uploader : ĠImage Uploader Ġ= ĠImg 1 0 Uploader () ĊĠĠĠ Ġprivate Ġval Ġuploaded Url Ġ= ĠMutable LiveData ("") ĊĠĠĠ Ġprivate Ġval Ġimg Path Ġ= ĠMutable LiveData ("") ĊĠĠĠ Ġprivate Ġval Ġapp bar Title Ġ= ĠMutable LiveData ( context . getString ( R . string . app _ name )) ĊĠĠĠ Ġprivate Ġval Ġallow Go Back Ġ= ĠMutable LiveData ( false ) ĊĠĠĠ Ġprivate Ġval Ġshow Settings Icon Ġ= ĠMutable LiveData ( true ) ĊĠĠĠ Ġprivate Ġval Ġsearch Results Ġ= ĠMutable LiveData < List < SearchResult >>( emptyList ()) ĊĠĠĠ Ġvar Ġc ropped Img Path Ġ= Ġ"" ĊĊĠĠĠ Ġfun ĠsetShow Settings Icon ( allow : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Settings Icon . value Ġ= Ġallow ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Show Settings Icon (): ĠLive Data < Boolean > Ġ= Ġshow Settings Icon ĊĊĠĠĠ Ġfun Ġset Allow Go Back ( allow : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġallow Go Back . value Ġ= Ġallow ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Allow Go Back (): ĠLive Data < Boolean > Ġ= Ġallow Go Back ĊĊĠĠĠ Ġfun Ġset App bar Title ( title : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( title . isBlank ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp bar Title . value Ġ= Ġcontext . getString ( R . string . app _ name ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp bar Title . value Ġ= Ġtitle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget App bar Title (): ĠLive Data < String > Ġ= Ġapp bar Title ĊĊĠĠĠ Ġfun Ġupload Image () Ġ{ ĊĠĠĠĠĠĠĠ Ġimage Uploader . upload ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( c ropped Img Path ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠImage Uploader . Upload Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Result ( response Str : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp loaded ImageUrl ( response Str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget SearchResults (): ĠLive Data < List < SearchResult >> Ġ= Ġsearch Results ĊĊĠĠĠ Ġfun ĠsetUp loaded ImageUrl ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuploaded Url . post Value ( url ) ĊĊĠĠĠĠĠĠĠ Ġval Ġengines : ĠSet < String > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . getString Set (" engines ", Ġset Of (" google ", Ġ" yandex ", Ġ" bing ")) !! ĊĠĠĠĠĠĠĠ Ġval Ġresult Keys Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" google " Ġto ĠSearch Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Google ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// images . google . com / search by image ? image _ url =$ url ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( context , ĠR . drawable . ic _ google ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" yandex " Ġto ĠSearch Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Y an dex ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// yandex . com / images / search ? rpt = image view & url =$ url ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( context , ĠR . drawable . ic _ yandex ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" bing " Ġto ĠSearch Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" B ing ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// bing . com / images / search ? view = detail v 2 & iss = sb i & FORM = SB IH MP & q = img url :$ url ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( context , ĠR . drawable . ic _ bing ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġmutable ListOf < SearchResult >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( engine Ġin Ġengines ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Keys [ engine ]?. let Ġ{ Ġresults . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsearch Results . post Value ( results ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Uploaded ImageUrl (): ĠLive Data < String > Ġ= Ġuploaded Url ĊĊĠĠĠ Ġfun Ġset Image FilePath ( path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġimg Path . value Ġ= Ġpath ĊĠĠĠĠĠĠĠ Ġc ropped Img Path Ġ= Ġpath Ġ// Ġwhile Ġthere Ġis Ġno Ġediting ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetImage FilePath (): ĠLive Data < String > Ġ= Ġimg Path Ċ } Ċ