/* Ċ Ġ* Ġ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 Ġcom . example . android . track r . ui . utils Ċ Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . lifecycle . repeat On Lifecycle Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* ĠConvenience Ġfor Ġthe Ġpattern Ġof Ġlaunch ing Ġcor outines Ġwhen Ġthe ĠView Ġlifecycle Ġis Ġin Ġa Ġcertain Ċ Ġ* Ġminimum Ġstate Ġand Ġcancel ing Ġthose Ġcor outines Ġwhen Ġoutside Ġof Ġthat Ġminimum Ġstate . ĠExample : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġrepeat With View Lifecycle Ġ{ Ċ Ġ* ĠĠ Ġlaunch Ġ{ Ċ Ġ* ĠĠĠĠ ĠviewModel . flow A . collect Ġ{ Ġ... Ġ} Ċ Ġ* ĠĠ Ġ} Ċ Ġ* ĠĠ Ġlaunch Ġ{ Ċ Ġ* ĠĠĠĠ ĠviewModel . flow B . collect Ġ{ Ġ... Ġ} Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ@ param Ġmin State ĠThe Ġminimum Ġlifecycle Ġstate . ĠDefaults Ġto Ġ[ Lifecycle . State . STARTED ]. Ċ Ġ* Ġ@ param Ġblock ĠThe Ġcode Ġblock Ġto Ġrun . Ċ Ġ*/ Ċ inline Ġfun ĠFragment . repeat With View Lifecycle ( ĊĠĠĠ Ġmin State : ĠLifecycle . State Ġ= ĠLifecycle . State . STARTED , ĊĠĠĠ Ġcross inline Ġblock : Ġsuspend ĠCor outine Scope . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( min State Ġ== ĠLifecycle . State . INITIAL IZED Ġ|| Ġmin State Ġ== ĠLifecycle . State . DESTROY ED ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" min State Ġmust Ġbe Ġbetween ĠINITIAL IZED Ġand ĠDEST ROY ED ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle . repeat On Lifecycle ( min State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠFragment . require Fragment ( id : ĠInt ): ĠFragment Ġ{ ĊĠĠĠ Ġreturn Ġchild FragmentManager . find Fragment ById ( id ) Ġ?: Ġthrow ĠIllegalArgumentException () Ċ } Ċ Ċ inline Ġval ĠView . is R tl : ĠBoolean ĊĠĠĠ Ġget () Ġ= ĠView Compat . get Layout Direction ( this ) Ġ== ĠView Compat . LAYOUT _ DIRECTION _ RTL Ċ