package Ġcom . dar sh an . e zy login . adb . command Ċ Ċ import Ġcom . android . dd m lib . I Device Ċ import Ġcom . dar sh an . e zy login . adb . A db Util Ċ import Ġcom . dar sh an . e zy login . adb . command . receiver . Generic Receiver Ċ import Ġcom . dar sh an . e zy login . ui . Notification Helper Ċ import Ġcom . dar sh an . e zy login . ui . Notification Helper . error Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġorg . jetbrains . android . facet . Android Facet Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠRe voke Permissions Command Ġ: ĠCommand Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġrun ( project : ĠProject , Ġdevice : ĠI Device , Ġfacet : ĠAndroid Facet , ĠpackageName : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device Has Mar shm allow ( device )) Ġif Ġ( A db Util . is App Installed ( device , ĠpackageName )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshell Output Receiver Ġ= ĠGeneric Receiver () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . execute Shell Command (" dump sys Ġpackage Ġ$ packageName ", Ġshell Output Receiver , Ġ 1 5 L , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshell Output Receiver . adb Output Lines . stream () Ġ// only Ġgranted Ġpermissions , Ġthey Ġcome Ġin Ġ" android . permission . CAMERA : Ġgranted = true " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġs : ĠString Ġ-> Ġs . contains (" permission ") Ġ}. filter Ġ{ Ġs : ĠString Ġ-> Ġs . contains (" gr anted = true ") Ġ} Ġ// just Ġthe Ġpermission Ġname Ġis Ġimportant ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġs : ĠString Ġ-> Ġs . split (" :" . to Regex ()). to Typed Array ()[ 0 ]. trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġs : ĠString Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . execute Shell Command (" pm Ġre voke Ġ$ packageName Ġ$ s ", ĠGeneric Receiver (), Ġ 1 5 L , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Helper . info ( String . format (" Permission Ġ< b >% s </ b > Ġrev oked Ġon Ġ% s ", Ġs , Ġdevice . name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ( String . format (" Rev oking Ġ% s Ġfailed Ġon Ġ% s : Ġ% s ", Ġs , Ġdevice . name , Ġe . message )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ( String . format ("< b >% s </ b > Ġis Ġnot Ġinstalled Ġon Ġ% s ", ĠpackageName , Ġdevice . name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ( String . format ("% s Ġmust Ġbe Ġat Ġleast Ġapi Ġlevel Ġ 2 3 ", Ġdevice . name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e 1 : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Rev oking Ġpermissions Ġfail ... Ġ" Ġ+ Ġe 1 . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdevice Has Mar shm allow ( device : ĠI Device ) Ġ= Ġdevice . version . api Level Ġ>= Ġ 2 3 Ċ }