@ file : Suppress (" unused ", Ġ" Member Visibility Can Be Private ") Ċ Ċ package Ġnet . sam yst udio . permission launcher Ċ Ċ import Ġandroidx . activity . result . contract . Activity Result Contracts Ċ import Ġnet . sam yst udio . permission launcher . Multiple Permissions Launcher . Contract Ċ Ċ /** Ċ Ġ* ĠA Ġpermission Ġlauncher Ġfor Ġmultip les Ġpermissions . Ċ Ġ* Ċ Ġ* Ġ@ see ĠActivity Result Contracts . Request Multiple Permissions Ċ Ġ*/ Ċ abstract Ġclass ĠMultiple Permissions Launcher ( ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPermissions Ġyou Ġwant Ġto Ġrequest . ĊĠĠĠĠ Ġ* Ġ@ see ĠContract ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġcontract : ĠContract , Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġdenied Callback : Ġ(( permissions : ĠSet < String >, Ġnever Ask Again : ĠBoolean ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġgranted Callback : Ġ(( permissions : ĠSet < String >) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġr ationale Permission Launcher : ĠR ationale Permission Launcher ? Ġ= Ġnull ĊĠĠĠ Ġval Ġpermissions Ġ= Ġcontract . permissions ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStart Ġpermission Ġrequest Ġwith Ġoptional Ġspecified Ġcallbacks . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġr ationale Callback ĠA Ġoptional Ġr ationale Ġcallback Ġcalled Ġfor Ġthis Ġspecific Ġlaunch Ġwhen ĊĠĠĠĠ Ġ* Ġthis Ġlauncher Ġis Ġlaunched Ġand Ġa Ġr ationale Ġshould Ġbe Ġpresent Ġto Ġuser . ĊĠĠĠĠ Ġ* Ġ@ param Ġdenied Callback ĠA Ġoptional Ġdenied Ġcallback Ġcalled Ġfor Ġthis Ġspecific Ġlaunch Ġwhen Ġthis ĊĠĠĠĠ Ġ* Ġlauncher Ġfailed . ĊĠĠĠĠ Ġ* Ġ@ param Ġgranted Callback ĠA Ġsuccess Ġcallback Ġcalled Ġfor Ġthis Ġspecific Ġlaunch Ġwhen Ġthis Ġlauncher ĊĠĠĠĠ Ġ* Ġsucceeded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġlaunch ( ĊĠĠĠĠĠĠĠ Ġr ationale Callback : Ġ(( permissions : ĠSet < String >, ĠR ationale Permission Launcher ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdenied Callback : Ġ(( permissions : ĠSet < String >, Ġnever Ask Again : ĠBoolean ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġgranted Callback : Ġ( permissions : ĠSet < String >) Ġ-> ĠUnit , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . den ied Callback Ġ= Ġdenied Callback ĊĠĠĠĠĠĠĠ Ġthis . gr anted Callback Ġ= Ġgranted Callback ĊĊĠĠĠĠĠĠĠ Ġval Ġhas Permissions Ġ= Ġwhen Ġ( contract ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠContract . All Of Ġ-> Ġhas All Permissions () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠContract . Any Of Ġ-> Ġhas Any Permissions () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġr ation ales Ġ= Ġshould Show Request Permission R ation ales () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Permissions Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Granted ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontract . raw Permissions . filter Ġ{ Ġhas Permission ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . normalize Permission () Ġ}. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr ation ales . isNotEmpty () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ationale Permission Launcher Ġ= ĠR ationale Permission Launcher ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: internal Cancelled , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġinternal Denied ( ration ales , Ġfalse ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġinternal Launch () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ationale Callback ?. invoke ( ration ales , Ġr ationale Permission Launcher !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Launch () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġhas Permission ( permission : ĠString ): ĠBoolean ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġhas All Permissions (): ĠBoolean ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġhas Any Permissions (): ĠBoolean ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġshould Show Request Permission R ation ales (): ĠSet < String > ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġlaunch () ĊĊĠĠĠ Ġprotected Ġfun Ġhandle Result ( map : ĠMap < String , ĠBoolean >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( contract ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠContract . All Of Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has All Permissions ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Granted ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontract . raw Permissions . filter Ġ{ Ġhas Permission ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . normalize Permission () Ġ}. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Denied ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . filter Ġ{ Ġ! it . value Ġ}. keys . toSet (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Show Request Permission R ation ales (). isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠContract . Any Of Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Any Permissions ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Granted ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontract . raw Permissions . filter Ġ{ Ġhas Permission ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . normalize Permission () Ġ}. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Denied ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontract . permissions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Show Request Permission R ation ales (). isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinternal Launch () Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinternal Cancelled () Ġ{ ĊĠĠĠĠĠĠĠ Ġdenied Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġgranted Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġr ationale Permission Launcher Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinternal Denied ( permissions : ĠSet < String >, Ġnever Ask Again : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdenied Callback ?. invoke ( permissions , Ġnever Ask Again ) ĊĠĠĠĠĠĠĠ Ġdenied Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġgranted Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġr ationale Permission Launcher Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinternal Granted ( permissions : ĠSet < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġgranted Callback ?. invoke ( permissions ) ĊĠĠĠĠĠĠĠ Ġdenied Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġgranted Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġr ationale Permission Launcher Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInternal Ġusage Ġor Ġfor ĠJava Ġusers . ĠKotlin Ġusers Ġshould Ġalways Ġuse Ġ[ all Of ] Ġor Ġ[ any Of ] Ġinstead . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsealed Ġclass ĠContract ( val Ġraw Permissions : ĠSet < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpermissions Ġ= Ġraw Permissions . map Ġ{ Ġit . normalize Permission () Ġ}. toSet () ĊĊĠĠĠĠĠĠĠ Ġclass ĠAll Of ( permissions : ĠCollection < String >) Ġ: ĠContract ( permissions . toSet ()) ĊĠĠĠĠĠĠĠ Ġclass ĠAny Of ( permissions : ĠCollection < String >) Ġ: ĠContract ( permissions . toSet ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠLaunch er Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġlaunch ( permissions : ĠSet < String >) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBuild Ġa Ġ[ Contract ] Ġwith Ġall Ġof Ġthe Ġspecified Ġpermissions Ġrequired . Ċ Ġ* Ġ@ param Ġpermissions ĠPermissions Ġyou Ġwant Ġto Ġrequest . Ċ Ġ* ĠYou Ġmay Ġspecified Ġdirectly Ġ[ max Sdk Version ] Ġfor Ġthese Ġpermissions Ġusing Ġthe Ġfollowing Ġ: Ċ Ġ* Ġ< code > Manifest . Permission . WRITE _ EXTERNAL _ STORAGE Ġmax Sdk Version ĠBuild . VERSION _ CODES . P </ code > Ċ Ġ* ĠFor Ġuser Ġrunning ĠP Ġor Ġlater Ġlaunch ing Ġpermission Ġrequest Ġwill Ġalways Ġreturn Ġpermission Ġas Ċ Ġ* Ġgranted . Ċ Ġ*/ Ċ fun Ġall Of ( permissions : ĠCollection < String >): ĠContract Ġ= ĠContract . All Of ( permissions ) Ċ Ċ /** Ċ Ġ* ĠBuild Ġa Ġ[ Contract ] Ġwith Ġall Ġof Ġthe Ġspecified Ġpermissions Ġrequired . Ċ Ġ* Ġ@ param Ġpermissions ĠPermissions Ġyou Ġwant Ġto Ġrequest . Ċ Ġ* ĠYou Ġmay Ġspecified Ġdirectly Ġ[ max Sdk Version ] Ġfor Ġthese Ġpermissions Ġusing Ġthe Ġfollowing Ġ: Ċ Ġ* Ġ< code > Manifest . Permission . WRITE _ EXTERNAL _ STORAGE Ġmax Sdk Version ĠBuild . VERSION _ CODES . P </ code > Ċ Ġ* ĠFor Ġuser Ġrunning ĠP Ġor Ġlater Ġlaunch ing Ġpermission Ġrequest Ġwill Ġalways Ġreturn Ġpermission Ġas Ċ Ġ* Ġgranted . Ċ Ġ*/ Ċ fun Ġall Of ( var arg Ġpermissions : ĠString ): ĠContract Ġ= ĠContract . All Of ( permissions . toSet ()) Ċ Ċ /** Ċ Ġ* ĠBuild Ġa Ġ[ Contract ] Ġwith Ġat Ġleast Ġone Ġof Ġthe Ġspecified Ġpermissions Ġrequired . Ċ Ġ* Ġ@ param Ġpermissions ĠPermissions Ġyou Ġwant Ġto Ġrequest . Ċ Ġ* ĠYou Ġmay Ġspecified Ġdirectly Ġ[ max Sdk Version ] Ġfor Ġthese Ġpermissions Ġusing Ġthe Ġfollowing Ġ: Ċ Ġ* Ġ< code > Manifest . Permission . WRITE _ EXTERNAL _ STORAGE Ġmax Sdk Version ĠBuild . VERSION _ CODES . P </ code > Ċ Ġ* ĠFor Ġuser Ġrunning ĠP Ġor Ġlater Ġlaunch ing Ġpermission Ġrequest Ġwill Ġalways Ġreturn Ġpermission Ġas Ċ Ġ* Ġgranted . Ċ Ġ*/ Ċ fun Ġany Of ( permissions : ĠCollection < String >): ĠContract Ġ= ĠContract . Any Of ( permissions ) Ċ Ċ /** Ċ Ġ* ĠBuild Ġa Ġ[ Contract ] Ġwith Ġat Ġleast Ġone Ġof Ġthe Ġspecified Ġpermissions Ġrequired . Ċ Ġ* Ġ@ param Ġpermissions ĠPermissions Ġyou Ġwant Ġto Ġrequest . Ċ Ġ* ĠYou Ġmay Ġspecified Ġdirectly Ġ[ max Sdk Version ] Ġfor Ġthese Ġpermissions Ġusing Ġthe Ġfollowing Ġ: Ċ Ġ* Ġ< code > Manifest . Permission . WRITE _ EXTERNAL _ STORAGE Ġmax Sdk Version ĠBuild . VERSION _ CODES . P </ code > Ċ Ġ* ĠFor Ġuser Ġrunning ĠP Ġor Ġlater Ġlaunch ing Ġpermission Ġrequest Ġwill Ġalways Ġreturn Ġpermission Ġas Ċ Ġ* Ġgranted . Ċ Ġ*/ Ċ fun Ġany Of ( var arg Ġpermissions : ĠString ): ĠContract Ġ= ĠContract . Any Of ( permissions . toSet ()) Ċ