package Ġcom . kas per sky . kas press o . device . permissions Ċ Ċ import Ġandroid . app . Ui Automation Ċ import Ġandroid . os . Process Ċ import Ġandroid . os . User Handle Ċ import Ġcom . kas per sky . kas press o . logger . Ui Test Logger Ċ Ċ /** Ċ Ġ* ĠThe Ġimplementation Ġof Ġthe Ġ[ Hack Permissions ] Ġinterface . Ċ Ġ*/ Ċ class ĠHack Permissions Impl ( ĊĠĠĠ Ġprivate Ġval Ġui Automation : ĠUi Automation , ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠUi Test Logger Ċ ) Ġ: ĠHack Permissions Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġresult Ġof Ġoperation : Ġtrue Ġis Ġsuccess , Ġfalse Ġis Ġsomething Ġwent Ġwrong ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġgrant ( packageName : ĠString , Ġpermission : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . i (" Attempt Ġto Ġgrant Ġpermission =$ permission Ġfor ĠpackageName =$ packageName Ġun fair ly ") ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui Automation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. java Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getDeclared Method ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" grant Runtime Permission ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Handle :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). invoke ( ui Automation , ĠpackageName , Ġpermission , ĠProcess . my User Handle ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . i (" Attempt Ġto Ġgrant Ġpermission =$ permission Ġfor ĠpackageName =$ packageName Ġun fair ly Ġwas Ġsuccessful ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . e (" Attempt Ġto Ġgrant Ġpermission =$ permission Ġfor ĠpackageName =$ packageName Ġun fair ly Ġfailed Ġwith Ġerror =$ error ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }