/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* Ġ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 Ġandroidx . health . services . client . impl Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . health . services . client . Exercise Client Ċ import Ġandroidx . health . services . client . Exercise Update Listener Ċ import Ġandroidx . health . services . client . data . Exercise Capabilities Ċ import Ġandroidx . health . services . client . data . Exercise Config Ċ import Ġandroidx . health . services . client . data . Exercise Goal Ċ import Ġandroidx . health . services . client . data . Exercise Info Ċ import Ġandroidx . health . services . client . data . W arm Up Config Ċ import Ġandroidx . health . services . client . impl . I pc Constants . EX ER CI SE _ API _ BIND _ ACTION Ċ import Ġandroidx . health . services . client . impl . I pc Constants . SERVICE _ PACKAGE _ NAME Ċ import Ġandroidx . health . services . client . impl . internal . Exercise Info Callback Ċ import Ġandroidx . health . services . client . impl . internal . Hs ConnectionManager Ċ import Ġandroidx . health . services . client . impl . internal . Status Callback Ċ import Ġandroidx . health . services . client . impl . ipc . Client Ċ import Ġandroidx . health . services . client . impl . ipc . Client Configuration Ċ import Ġandroidx . health . services . client . impl . ipc . internal . ConnectionManager Ċ import Ġandroidx . health . services . client . impl . request . Auto Pause And Resume Config Request Ċ import Ġandroidx . health . services . client . impl . request . Capabilities Request Ċ import Ġandroidx . health . services . client . impl . request . Exercise Goal Request Ċ import Ġandroidx . health . services . client . impl . request . Flush Request Ċ import Ġandroidx . health . services . client . impl . request . Prepare Exercise Request Ċ import Ġandroidx . health . services . client . impl . request . Start Exercise Request Ċ import Ġcom . google . common . util . concurrent . F utures Ċ import Ġcom . google . common . util . concurrent . List enable Future Ċ import Ġjava . util . concurrent . Executor Ċ Ċ /** Ċ Ġ* Ġ[ Exercise Client ] Ġimplementation Ġthat Ġis Ġbacked Ġby ĠHealth ĠServices . Ċ Ġ* Ċ Ġ* Ġ@ hide Ċ Ġ*/ Ċ internal Ġclass ĠService Back ed Exercise Client Ċ private Ġconstructor ( private Ġval Ġcontext : ĠContext , Ġconnection Manager : ĠConnection Manager ) Ġ: ĊĠĠĠ ĠExercise Client , ĊĠĠĠ ĠClient < I Exercise ApiService >( ĊĠĠĠĠĠĠĠ ĠCLIENT _ CONFIGURATION , ĊĠĠĠĠĠĠĠ Ġconnection Manager , ĊĠĠĠĠĠĠĠ Ġ{ Ġbinder Ġ-> ĠI Exercise ApiService . Stub . as Interface ( binder ) Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ Ġservice Ġ-> Ġservice . apiVersion Ġ} ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠpackageName Ġ= Ġcontext . packageName ĊĊĠĠĠ Ġoverride Ġfun Ġprepare Exercise ( configuration : ĠW arm Up Config ): ĠList enable Future < Void > Ġ= ĊĠĠĠĠĠĠĠ Ġexecute Ġ{ Ġservice , Ġresult Future Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . prepare Exercise ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrepare Exercise Request ( packageName , Ġconfiguration ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus Callback ( result Future ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Exercise ( configuration : ĠExercise Config ): ĠList enable Future < Void > Ġ= ĊĠĠĠĠĠĠĠ Ġexecute Ġ{ Ġservice , Ġresult Future Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . start Exercise ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStart Exercise Request ( packageName , Ġconfiguration ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus Callback ( result Future ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpause Exercise (): ĠList enable Future < Void > Ġ= Ġexecute Ġ{ Ġservice , Ġresult Future Ġ-> ĊĠĠĠĠĠĠĠ Ġservice . pause Exercise ( packageName , ĠStatus Callback ( result Future )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresume Exercise (): ĠList enable Future < Void > Ġ= Ġexecute Ġ{ Ġservice , Ġresult Future Ġ-> ĊĠĠĠĠĠĠĠ Ġservice . resume Exercise ( packageName , ĠStatus Callback ( result Future )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġend Exercise (): ĠList enable Future < Void > Ġ= Ġexecute Ġ{ Ġservice , Ġresult Future Ġ-> ĊĠĠĠĠĠĠĠ Ġservice . end Exercise ( packageName , ĠStatus Callback ( result Future )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġflush Exercise (): ĠList enable Future < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠFlush Request ( packageName ) ĊĠĠĠĠĠĠĠ Ġreturn Ġexecute Ġ{ Ġservice , Ġresult Future Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . flush Exercise ( request , ĠStatus Callback ( result Future )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmark Lap (): ĠList enable Future < Void > Ġ= Ġexecute Ġ{ Ġservice , Ġresult Future Ġ-> ĊĠĠĠĠĠĠĠ Ġservice . mark Lap ( packageName , ĠStatus Callback ( result Future )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġcurrent Exercise Info : ĠList enable Future < Exercise Info > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġexecute Ġ{ Ġservice , Ġresult Future Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . getCurrent Exercise Info ( packageName , ĠExercise Info Callback ( result Future )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Update Listener ( listener : ĠExercise Update Listener ): ĠList enable Future < Void > Ġ= ĊĠĠĠĠĠĠĠ Ġset Update Listener ( listener , ĠContext Compat . get Main Executor ( context )) ĊĊĠĠĠ Ġoverride Ġfun Ġset Update Listener ( ĊĠĠĠĠĠĠĠ Ġlistener : ĠExercise Update Listener , ĊĠĠĠĠĠĠĠ Ġexecutor : ĠExecutor ĊĠĠĠ Ġ): ĠList enable Future < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlistener Stub Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠExercise Update Listener Stub . Exercise Update Listener Cache . INSTANCE . get OrCreate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġregister Listener ( listener Stub . listener Key ) Ġ{ Ġservice , Ġresult Future Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . set Update Listener ( packageName , Ġlistener Stub , ĠStatus Callback ( result Future )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear Update Listener ( listener : ĠExercise Update Listener ): ĠList enable Future < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlistener Stub Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠExercise Update Listener Stub . Exercise Update Listener Cache . INSTANCE . remove ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĠF utures . immediate Failed Future ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIllegalArgumentException (" Given Ġlistener Ġwas Ġnot Ġadded .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġunregister Listener ( listener Stub . listener Key ) Ġ{ Ġservice , Ġresult Future Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . clear Update Listener ( packageName , Ġlistener Stub , ĠStatus Callback ( result Future )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Goal To Active Exercise ( exercise Goal : ĠExercise Goal ): ĠList enable Future < Void > Ġ= ĊĠĠĠĠĠĠĠ Ġexecute Ġ{ Ġservice , Ġresult Future Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . add Goal To Active Exercise ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExercise Goal Request ( packageName , Ġexercise Goal ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus Callback ( result Future ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Goal From Active Exercise ( exercise Goal : ĠExercise Goal ): ĠList enable Future < Void > Ġ= ĊĠĠĠĠĠĠĠ Ġexecute Ġ{ Ġservice , Ġresult Future Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . remove Goal From Active Exercise ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExercise Goal Request ( packageName , Ġexercise Goal ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus Callback ( result Future ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġoverride Auto Pause And Resume For Active Exercise ( ĊĠĠĠĠĠĠĠ Ġenabled : ĠBoolean ĊĠĠĠ Ġ): ĠList enable Future < Void > Ġ= Ġexecute Ġ{ Ġservice , Ġresult Future Ġ-> ĊĠĠĠĠĠĠĠ Ġservice . override Auto Pause And Resume For Active Exercise ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuto Pause And Resume Config Request ( packageName , Ġenabled ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatus Callback ( result Future ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġcapabilities : ĠList enable Future < Exercise Capabilities > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF utures . transform ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Ġ{ Ġservice Ġ-> Ġservice . get Capabilities ( Capabilities Request ( packageName )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġresponse Ġ-> Ġresponse ?. exercise Capabilities Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Main Executor ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġinternal Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCLIENT Ġ= Ġ" Health Services Exercise Client " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCLIENT _ CONFIGURATION Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClient Configuration ( CLIENT , ĠSERVICE _ PACKAGE _ NAME , ĠEX ER CI SE _ API _ BIND _ ACTION ) ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun ĠgetClient ( context : ĠContext ): ĠService Back ed Exercise Client Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠService Back ed Exercise Client ( context , ĠH s ConnectionManager . getInstance ( context )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ