package Ġcom . github . sk g mn . start activity x Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . core . app . Component Activity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . channels . Buffer Overflow Ċ import Ġkotlinx . coroutines . flow .* Ċ Ċ internal Ġval Ġglobal Permission Result Signal Ġ= ĠMutable Shared Flow < Any >( ĊĠĠĠ Ġextra Buffer Capacity Ġ= Ġ 1 , ĊĠĠĠ Ġon Buffer Overflow Ġ= ĠBuffer Overflow . DROP _ OL DEST Ċ ) Ċ Ċ fun ĠComponent Activity . listen Permission Status ( var arg Ġpermissions : ĠString ): ĠFlow < Permission Status > Ġ{ ĊĠĠĠ Ġreturn Ġlisten Permission Status ( listOf (* permissions )) Ċ } Ċ Ċ fun ĠComponent Activity . listen Permission Status ( permissions : ĠCollection < String >): ĠFlow < Permission Status > Ġ{ ĊĠĠĠ Ġreturn Ġlisten Permission Status ( ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġthis , ĊĠĠĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġthis , ĊĠĠĠĠĠĠĠ Ġpermissions Ġ= Ġpermissions ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun ĠFragment . listen Permission Status ( var arg Ġpermissions : ĠString ): ĠFlow < Permission Status > Ġ{ ĊĠĠĠ Ġreturn Ġlisten Permission Status ( listOf (* permissions )) Ċ } Ċ Ċ fun ĠFragment . listen Permission Status ( permissions : ĠCollection < String >): ĠFlow < Permission Status > Ġ{ ĊĠĠĠ Ġreturn Ġlisten Permission Status ( ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġrequire Context (), ĊĠĠĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġthis , ĊĠĠĠĠĠĠĠ Ġpermissions Ġ= Ġpermissions ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Opt In ( Experimental Cor outines Api :: class ) Ċ private Ġfun Ġlisten Permission Status ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġlifecycle Owner : ĠLifecycle Owner , ĊĠĠĠ Ġpermissions : ĠCollection < String > Ċ ): ĠFlow < Permission Status > Ġ{ ĊĠĠĠ Ġreturn Ġlifecycle Owner . is Started () ĊĠĠĠĠĠĠĠ Ġ. flatMap Latest Ġ{ Ġstarted Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres umed After Paused Ġ= Ġlifecycle Owner . watch Lifecycle Event () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. drop While Ġ{ Ġit Ġ!= ĠLifecycle . Event . ON _ PAUSE Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ== ĠLifecycle . Event . ON _ RE SU ME Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmerge ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres umed After Paused , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglobal Permission Result Signal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission Storage . getInstance ( context ). do Not Ask Again Permissions Change (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflow Of ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Flow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġget Permission Status ( context , Ġpermissions ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. distinct Until Changed () Ċ }