package Ġcom . ak sh ay . h ars oda . permission . helper Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . provider . Settings Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġcom . ak sh ay . h ars oda . permission . helper . request . Permission Request Ċ import Ġcom . ak sh ay . h ars oda . permission . helper . ut iles . m Result Listener Ċ Ċ /** Ċ Ġ* Ġ@ author ĠAk sh ay ĠH ars oda Ċ Ġ* Ġ@ since Ġ 1 8 ĠMar Ġ 2 0 2 1 Ċ Ġ*/ Ċ @ Suppress (" unused ") Ċ object ĠA ks Permission Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġif Ġruntime Ġpermissions Ġare Ġneeded Ġor Ġnot ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġandroid Ġversion Ġis ĠM Ġor Ġlater ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġis Mar shm allow Or Later () Ġ= ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ĊĊĠĠĠ Ġ// < editor - fold Ġdesc =" Checks Ġif Ġthe Ġpermission Ġis Ġalready Ġgranted "> ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Checks Ġif Ġthe Ġpermission Ġis Ġalready Ġgranted ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġpermission Ġis Ġgranted ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġis Granted ( ĊĠĠĠĠĠĠĠ Ġf Context : ĠContext , ĊĠĠĠĠĠĠĠ Ġf Permission : ĠString ĊĠĠĠ Ġ) Ġ= ĠActivity Compat . check Self Permission ( f Context , Ġf Permission ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Checks Ġif Ġthe Ġpermission Ġis Ġalready Ġgranted ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġpermission Ġis Ġgranted ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġis Granted ( ĊĠĠĠĠĠĠĠ Ġf Context : ĠContext , ĊĠĠĠĠĠĠĠ Ġvar arg Ġf Permissions : ĠString ĊĠĠĠ Ġ) Ġ= Ġf Permissions . none Ġ{ Ġpermission Ġ-> Ġ! is Granted ( f Context , Ġpermission ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Checks Ġif Ġthe Ġpermission Ġis Ġalready Ġgranted ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġpermission Ġis Ġgranted ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġis Granted ( ĊĠĠĠĠĠĠĠ Ġf Context : ĠContext , ĊĠĠĠĠĠĠĠ Ġf Permissions : ĠCollection < String > ĊĠĠĠ Ġ) Ġ= Ġf Permissions . none Ġ{ Ġpermission Ġ-> Ġ! is Granted ( f Context , Ġpermission ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Checks Ġif Ġthe Ġpermission Ġis Ġalready Ġgranted ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġpermission Ġis Ġgranted ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġis Granted ( ĊĠĠĠĠĠĠĠ Ġf Context : ĠContext , ĊĠĠĠĠĠĠĠ Ġf Permissions : ĠMutable Set < String > ĊĠĠĠ Ġ) Ġ= Ġf Permissions . none Ġ{ Ġpermission Ġ-> Ġ! is Granted ( f Context , Ġpermission ) Ġ} ĊĠĠĠ Ġ// </ editor - fold > ĊĊĠĠĠ Ġ// < editor - fold Ġdesc =" Check Ġshould Show R ationale Ġ& ĠPer manently Denied "> ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġwhether Ġyou Ġshould Ġshow ĠUI Ġwith Ġr ationale Ġfor Ġrequesting Ġa Ġpermission ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġneed Ġa Ġr ationale Ġfor Ġrequest ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġshould Show R ationale ( ĊĠĠĠĠĠĠĠ Ġf Activity : ĠActivity , ĊĠĠĠĠĠĠĠ Ġf Permission : ĠString ĊĠĠĠ Ġ) Ġ= ĠActivity Compat . should Show Request Permission R ationale ( f Activity , Ġf Permission ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Checks Ġif Ġthe Ġpermission Ġis Ġper manently Ġdenied ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġpermission Ġrequest Ġis Ġshow Ġr ationale ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġis Per manently Denied ( ĊĠĠĠĠĠĠĠ Ġf Activity : ĠActivity , ĊĠĠĠĠĠĠĠ Ġf Permission : ĠString ĊĠĠĠ Ġ) Ġ= ĠActivity Compat . check Self Permission ( f Activity , Ġf Permission ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! Activity Compat . should Show Request Permission R ationale ( f Activity , Ġf Permission ) ĊĠĠĠ Ġ// </ editor - fold > ĊĊĠĠĠ Ġ// < editor - fold Ġdesc =" Creates Ġan Ġintent Ġto Ġopen Ġapp Ġsettings Ġactivity "> ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġan Ġintent Ġto Ġopen Ġapp Ġsettings Ġactivity , Ġit Ġcome Ġin Ġhandy ĊĠĠĠĠ Ġ* Ġin Ġcase Ġthat Ġpermission Ġis Ġper manently Ġdenied Ġand Ġyou Ġneed ĊĠĠĠĠ Ġ* Ġto Ġinform Ġand Ġredirect Ġuser Ġto Ġapp Ġsettings ĊĠĠĠĠ Ġ* Ġ@ return Ġan Ġintent Ġthat Ġredirects Ġuser Ġto Ġapp Ġsettings ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġapp Detail Settings Intent ( f Context : ĠContext ): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapp Detail Settings Intent ( f Context . packageName ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġan Ġintent Ġto Ġopen Ġapp Ġsettings Ġactivity , Ġit Ġcome Ġin Ġhandy ĊĠĠĠĠ Ġ* Ġin Ġcase Ġthat Ġpermission Ġis Ġper manently Ġdenied Ġand Ġyou Ġneed ĊĠĠĠĠ Ġ* Ġto Ġinform Ġand Ġredirect Ġuser Ġto Ġapp Ġsettings ĊĠĠĠĠ Ġ* Ġ@ return Ġan Ġintent Ġthat Ġredirects Ġuser Ġto Ġapp Ġsettings ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġapp Detail Settings Intent ( f PackageName : ĠString ): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠIntent (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠSettings . ACTION _ APPLICATION _ DETAILS _ SETTINGS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠUri . from Parts (" package ", Ġf PackageName , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Flags ( Intent . FLAG _ ACTIVITY _ SINGLE _ TOP ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Flags ( Intent . FLAG _ ACTIVITY _ NO _ HISTORY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Flags ( Intent . FLAG _ ACTIVITY _ EXCL UDE _ FROM _ REC ENTS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// </ editor - fold > ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġwith ( f Context : ĠActivity ): ĠPermission Request Ġ{ ĊĠĠĠĠĠĠĠ Ġm Result Listener Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġreturn ĠPermission Request ( f Context ) ĊĠĠĠ Ġ} Ċ }