/* Ċ Ġ* ĠCopyright Ġ 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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ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 Ġcom . example . exercise Ċ Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Service Connection Ċ import Ġandroid . os . IB inder Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . Lifecycle Registry Ċ import Ġandroidx . lifecycle . repeat On Lifecycle Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ Ċ /** Ċ Ġ* ĠService Connection Ġimplementation . ĠThis Ġis Ġimplemented Ġas Ġa ĠLifecycle Owner Ġso Ġwe Ġcan Ġlaunch Ċ Ġ* Ġcor outines Ġbound Ġto Ġits Ġlifecycle . ĠWhen Ġthe Ġservice Ġis Ġconnected , Ġthe Ġlifecycle Ġwill Ġbe Ċ Ġ* Ġ[ Lifecycle . State . STARTED ]; Ġotherwise Ġit Ġwill Ġbe Ġ[ Lifecycle . State . INITIAL IZED ]. Ċ Ġ*/ Ċ class ĠExercise Service Connection Ġ: ĠService Connection , ĠLifecycle Owner Ġ{ ĊĊĠĠĠ Ġvar Ġexercise Service : ĠExercise Service ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġlifecycle Registry Ġ= ĠLifecycle Registry ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent State Ġ= ĠLifecycle . State . INITIAL IZED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Lifecycle (): ĠLifecycle Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlifecycle Registry ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Service Connected ( name : ĠComponent Name , Ġservice : ĠI Binder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexercise Service Ġ= Ġ( service Ġas ĠExercise Service . Local Binder ). getService () ĊĠĠĠĠĠĠĠ Ġlifecycle Registry . currentState Ġ= ĠLifecycle . State . STARTED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( name : ĠComponent Name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Registry . currentState Ġ= ĠLifecycle . State . INITIAL IZED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRuns Ġthe Ġgiven Ġ[ block ] Ġin Ġa Ġnew Ġcoroutine Ġwhen Ġthe Ġservice Ġis Ġconnected Ġand Ġsus p ends Ġthe ĊĠĠĠĠ Ġ* Ġexecution Ġuntil Ġthis ĠLifecycle Ġis Ġ[ Lifecycle . State . DESTROY ED ]. ĠThe Ġ[ block ] Ġwill Ġcancel Ġand ĊĠĠĠĠ Ġ* Ġre - launch Ġas Ġthe Ġservice Ġbecomes Ġconnected Ġor Ġdisconnected . ĠThe Ġconnected Ġservice Ġis Ġpassed ĊĠĠĠĠ Ġ* Ġto Ġthe Ġ[ block ] Ġso Ġthat Ġclients Ġcan Ġinteract Ġwith Ġit . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġrepeat When Connected ( block : Ġsuspend ĠCor outine Scope .( Exercise Service ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle . repeat On Lifecycle ( Lifecycle . State . STARTED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( exercise Service Ġas ĠExercise Service ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ