/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 2 ĠD anny ĠLin Ġ< d anny @ k drag 0 n . dev > Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġdev . k drag 0 n . d ynt heme . service . priv ileged . sys Ċ Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . om . Overlay Identifier Ċ import Ġandroid . content . om . Overlay Info Ċ import Ġandroid . content . om . Overlay Manager Ċ import Ġandroid . content . om . Overlay Manager Transaction Ċ import Ġandroid . os . Parcel Ċ import Ġandroid . os . System Properties Ċ import Ġandroid . os . User Handle Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . util . Log Ċ import Ġdev . k drag 0 n . d ynt heme . service . priv ileged . IP riv ileged Service Ċ import Ġjava . io . File Ċ import Ġjava . lang . IllegalStateException Ċ Ċ const Ġval ĠPRIV _ SERVICE _ VERSION Ġ= Ġ 1 Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" PS / System Priv " Ċ const Ġval ĠUN INSTALL _ ACTION S _ FILE Ġ= Ġ" uninstall _ actions . bin " Ċ Ċ class ĠSystem Priv ileged ServiceImpl ( ĊĠĠĠ Ġprivate Ġval Ġservice : ĠService , ĊĠĠĠ Ġprivate Ġval Ġoverlay Manager : ĠOverlay Manager , Ċ ) Ġ: ĠIP riv ileged Service . Stub () Ġ{ ĊĠĠĠ Ġ// ĠFor Ġcleaning Ġup Ġthemes Ġon Ġuninstall ĊĠĠĠ Ġprivate Ġvar Ġuninstall Actions : ĠUn install Actions ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġget Service Version () Ġ= ĠPRIV _ SERVICE _ VERSION ĊĊĠĠĠ Ġoverride Ġfun Ġget Overlay Info ( ĊĠĠĠĠĠĠĠ Ġidentifier : ĠOverlay Identifier , ĊĠĠĠĠĠĠĠ Ġuser : ĠUser Handle , ĊĠĠĠ Ġ): ĠOverlay Info ? Ġ= Ġwrap (" get Overlay Info ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverlay Manager . get Overlay Info ( identifier , Ġuser ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Overlay Infos For Target ( ĊĠĠĠĠĠĠĠ Ġtarget PackageName : ĠString , ĊĠĠĠĠĠĠĠ Ġuser : ĠUser Handle , ĊĠĠĠ Ġ): ĠList < Overlay Info > Ġ= Ġwrap (" get Overlay Infos For Target ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverlay Manager . get Overlay Infos For Target ( target PackageName , Ġuser ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Overlay Enabled ( ĊĠĠĠĠĠĠĠ ĠpackageName : ĠString , ĊĠĠĠĠĠĠĠ Ġenable : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġuser : ĠUser Handle , ĊĠĠĠ Ġ) Ġ= Ġwrap (" set Overlay Enabled ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverlay Manager . setEnabled ( packageName , Ġenable , Ġuser ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Overlay Enabled Exclusive In Category ( ĊĠĠĠĠĠĠĠ ĠpackageName : ĠString , ĊĠĠĠĠĠĠĠ Ġuser : ĠUser Handle , ĊĠĠĠ Ġ) Ġ= Ġwrap (" set Overlay Enabled Exclusive In Category ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverlay Manager . setEnabled Exclusive In Category ( packageName , Ġuser ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcommit Overlay Transaction ( ĊĠĠĠĠĠĠĠ Ġtxn : ĠOverlay Manager Transaction , ĊĠĠĠ Ġ) Ġ= Ġwrap (" commit Overlay Transaction ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverlay Manager . commit ( txn ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Un install Actions ( actions : ĠUn install Actions ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġuninstall Actions Ġ= Ġactions ĊĠĠĠĠĠĠĠ Ġpersist Un install Actions () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Boot anim Prop ( key : ĠString , Ġvalue : ĠString ) Ġ= Ġwrap (" set Boot anim Prop ") Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem Properties . set (" persist . boot anim .$ key ", Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Secure Setting ( key : ĠString , Ġvalue : ĠString ?) Ġ= Ġwrap (" set Secure Setting ") Ġ{ ĊĠĠĠĠĠĠĠ ĠSettings . Secure . putString ( service . content Resolver , Ġkey , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSystem Ġservice Ġis Ġmanaged Ġdifferently , Ġso Ġthis Ġisn 't Ġnormally Ġcalled ĊĠĠĠĠĠĠĠ Ġdestroy Now () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdestroy Now () Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . stop Self () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠNever Ġthrow Ġan Ġunsupported Ġexception Ġthat Ġcauses Ġthis Ġprocess Ġto Ġcrash ĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< T > Ġwrap ( method : ĠString , Ġcross inline Ġblock : Ġ() Ġ-> ĠT ) Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ"$ method Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ("$ method Ġfailed : Ġ${ e . stack Trace ToString () }", Ġe ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpersist Un install Actions () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparcel Ġ= ĠParcel . obtain () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel . write Parcelable ( uninstall Actions , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( service . create Device Protected Storage Context (). files Dir , ĠUN INSTALL _ ACTION S _ FILE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Bytes ( parcel . marshall ()) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ