package Ġcom . mov soft . ap tracker . services Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . android . vol ley . Request Ċ import Ġcom . android . vol ley . Response Ċ import Ġcom . android . vol ley . toolbox . String Request Ċ import Ġcom . android . vol ley . toolbox . Vol ley Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . mov soft . ap tracker . models . Track Item Result Ċ import Ġcom . mov soft . ap tracker . models . Tracked Item Ċ import Ġorg . json . JSONObject Ċ Ċ type alias ĠTrack Item Completion Ġ= Ġ( result : ĠResult < Track Item Result >) Ġ-> ĠUnit Ċ Ċ /** Ċ Ġ* ĠServices Ġthat Ġprovide Ġtracking Ġfunctionality . Ċ Ġ*/ Ċ interface ĠTracking Services Ġ{ ĊĠĠĠ Ġfun Ġtrack ( item : ĠTrack ed Item , Ġcompletion : ĠTrack Item Completion ) ĊĠĠĠ Ġfun Ġtrack Average ( item : ĠTrack ed Item , Ġcompletion : ĠTrack Item Completion ) Ċ } Ċ Ċ /** Ċ Ġ* ĠImplementation Ġof ĠTracking Services Ġthat Ġdoes Ġnothing . Ċ Ġ*/ Ċ class ĠDummy Tracking Services : ĠTracking Services Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġtrack ( item : ĠTrack ed Item , Ġcompletion : ĠTrack Item Completion ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompletion ( Result . success ( Track Item Result ( Track Item Result . Status . STARTED ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtrack Average ( item : ĠTrack ed Item , Ġcompletion : ĠTrack Item Completion ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompletion ( Result . success ( Track Item Result ( Track Item Result . Status . STARTED ))) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠImplementation Ġof ĠTracking Services Ġthat Ġtracks Ġitems Ġwith ĠR af i Bot . Ċ Ġ*/ Ċ class ĠR af i Tracking Services ( context : ĠContext , Ġprivate Ġval Ġsettings Services : ĠSettings Services ): ĠTracking Services Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġqueue Ġ= ĠVol ley . new Request Queue ( context ) ĊĊĠĠĠ Ġoverride Ġfun Ġtrack ( item : ĠTrack ed Item , Ġcompletion : ĠTrack Item Completion ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= Ġsettings Services . get Settings () ĊĠĠĠĠĠĠĠ Ġval Ġtracking Channel Ġ= Ġitem . settings . tracking Channel Ġ?: Ġsettings . tracking Channel ĊĠĠĠĠĠĠĠ Ġval Ġtracking Mode Ġ= Ġitem . settings . tracking Mode . value ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġ"/ hub ot / ap tracker /$ tracking Channel " ĊĠĠĠĠĠĠĠ Ġval Ġjson Body Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠ Ġjson Body . put (" user ", Ġsettings . userName ) ĊĠĠĠĠĠĠĠ Ġjson Body . put (" tracked item ", Ġitem . name ) ĊĠĠĠĠĠĠĠ Ġjson Body . put (" action ", Ġtracking Mode ) ĊĠĠĠĠĠĠĠ Ġmake Request ( path , Ġjson Body , ĠTrack Item Result :: class . java , Ġcompletion ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtrack Average ( item : ĠTrack ed Item , Ġcompletion : ĠTrack Item Completion ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= Ġsettings Services . get Settings () ĊĠĠĠĠĠĠĠ Ġval Ġtracking Channel Ġ= Ġitem . settings . tracking Channel Ġ?: Ġsettings . tracking Channel ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġ"/ hub ot / ap tracker /$ tracking Channel " ĊĠĠĠĠĠĠĠ Ġval Ġjson Body Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠ Ġjson Body . put (" user ", Ġsettings . userName ) ĊĠĠĠĠĠĠĠ Ġjson Body . put (" tracked item ", Ġitem . name ) ĊĠĠĠĠĠĠĠ Ġjson Body . put (" action ", Ġ" A VER AGE ") ĊĠĠĠĠĠĠĠ Ġmake Request ( path , Ġjson Body , ĠTrack Item Result :: class . java , Ġcompletion ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġmake Request ( path : ĠString , Ġpost Body : ĠJSONObject , Ġresult Class : ĠClass < T >, Ġcompletion : Ġ( result : ĠResult < T >) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= Ġsettings Services . get Settings () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! settings . isValid ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠError (" Settings Ġnot Ġvalid ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion ( Result . failure ( error )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ"${ settings . server }${ path }" ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġobject Ġ: ĠString Request ( Request . Method . POST , Ġurl , ĠResponse . Listener < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠGson Builder (). create (). fromJson ( it , Ġresult Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion ( Result . success ( result )) ĊĠĠĠĠĠĠĠ Ġ}, ĠResponse . Error Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion ( Result . failure ( it )) ĊĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Body ContentType (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" application / json " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Body (): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpost Body . toString (). toByteArray ( Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġqueue . add ( request ) ĊĠĠĠ Ġ} Ċ }