package Ġeu . sis ik . dev owner čĊč Ċ import Ġandroid . Manifest č Ċ import Ġandroid . app . admin . Device Policy Manager č Ċ import Ġandroid . content . Component Name č Ċ import Ġandroid . content . Context č Ċ import Ġandroid . content . Intent č Ċ import Ġandroid . net . Uri č Ċ import Ġandroid . support . v 7 . app . AppCompatActivity č Ċ import Ġandroid . os . Bundle č Ċ import Ġandroid . os . User Manager č Ċ import Ġandroid . provider . Settings č Ċ import Ġandroid . util . Log č Ċ import Ġjava . io . BufferedReader č Ċ import Ġjava . io . InputStream Reader č Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* čĊč Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) čĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) čĊčĊĠĠĠĠĠĠĠ Ġbutton . setOnClickListener Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClick ing Ġon Ġinstall Ġbutton Ġwill Ġcause Ġthe Ġapp - update . apk Ġto čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbe Ġinstalled Ġfrom Ġthe Ġgiven Ġlocation . čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠYou Ġneed Ġto Ġensure Ġthat Ġthe Ġlocation Ġwhere Ġyou Ġput Ġthe ĠA PK Ġfile čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwith Ġupdated Ġversion Ġis Ġreadable Ġfrom Ġthis Ġapp . čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstall ( this @ MainActivity , ĠpackageName , Ġ"/ data / local / tmp / app - update . apk ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Resume () čĊĠĠĠĠĠĠĠ Ġval Ġd pm Ġ= Ġget System Service ( Context . DEVICE _ POLICY _ SERVICE ) Ġas ĠDevice Policy Manager čĊĠĠĠĠĠĠĠ Ġif Ġ( d pm . is Device Owner App ( packageName )) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" is Ġdevice Ġowner ") čĊĠĠĠĠĠĠĠ Ġelse čĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" not Ġdevice Ġowner ") čĊčĊĠĠĠĠĠĠĠ Ġtv _ text . text Ġ= Ġ" version Ġcode =" Ġ+ ĠBuild Config . VERSION _ CODE čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠBelow Ġare Ġsome Ġmethods Ġthat Ġdemonstrate Ġwhat Ġpriv ileged Ġtasks Ġcan Ġbe čĊĠĠĠĠ Ġ* Ġperformed Ġfrom Ġa ĠDevice ĠOwner Ġapp čĊĠĠĠĠ Ġ*/ čĊčĊĠĠĠ Ġfun Ġstart Lock Task Mode () Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġ// ĠGet ĠDevice Policy Manager Ġinstance čĊĠĠĠĠĠĠĠ Ġval Ġd pm Ġ= Ġget System Service ( Context . DEVICE _ POLICY _ SERVICE ) Ġas ĠDevice Policy Manager čĊčĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġan Ġidentifier Ġfor Ġthe Ġcomponent Ġthat Ġis ĠDevice Admin Receiver čĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġwill Ġbe Ġused Ġin Ġvarious ĠDevice Policy Manager Ġmethods čĊĠĠĠĠĠĠĠ Ġval Ġcn Ġ= ĠComponent Name ( this , ĠDev Admin Receiver :: class . java ) čĊčĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġare Ġa Ġdevice Ġowner , Ġwe Ġare Ġallowed Ġto čĊĠĠĠĠĠĠĠ Ġ// Ġwhitelist Ġa Ġpackage Ġfor Ġusing ĠLock Task Ġmode čĊĠĠĠĠĠĠĠ Ġif Ġ( d pm . is Device Owner App ( packageName ) Ġ&& Ġ! d pm . is Lock Task Per mitted ( packageName )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackages Ġ= ĠarrayOf ( packageName ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġd pm . set Lock Task Packages ( cn , Ġpackages ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġare Ġwh itelisted Ġfor ĠLock Task Ġmode , čĊĠĠĠĠĠĠĠ Ġ// Ġstart Ġthe Ġmode čĊĠĠĠĠĠĠĠ Ġif Ġ( d pm . is Lock Task Per mitted ( packageName )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Lock Task () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġhide Dial er () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġd pm Ġ= Ġget System Service ( Context . DEVICE _ POLICY _ SERVICE ) Ġas ĠDevice Policy Manager čĊĠĠĠĠĠĠĠ Ġval Ġcn Ġ= ĠComponent Name ( this , ĠDev Admin Receiver :: class . java ) čĊčĊĠĠĠĠĠĠĠ Ġ// ĠHide Ġdial er Ġhere , Ġor Ġset Ġlast Ġparameter Ġto Ġfalse Ġto Ġmake Ġit Ġvisible Ġagain čĊĠĠĠĠĠĠĠ Ġd pm . set Application Hidden ( cn , Ġ" com . android . dial er ", Ġtrue ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġgrant Storage Permission () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġd pm Ġ= Ġget System Service ( Context . DEVICE _ POLICY _ SERVICE ) Ġas ĠDevice Policy Manager čĊĠĠĠĠĠĠĠ Ġval Ġcn Ġ= ĠComponent Name ( this , ĠDev Admin Receiver :: class . java ) čĊčĊĠĠĠĠĠĠĠ Ġd pm . set Permission Grant State ( cn , ĠpackageName , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDevice Policy Manager . PERMISSION _ GRANT _ STATE _ GRAN TED ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġdis allow A ps Control () Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġval Ġd pm Ġ= Ġget System Service ( Context . DEVICE _ POLICY _ SERVICE ) Ġas ĠDevice Policy Manager čĊĠĠĠĠĠĠĠ Ġval Ġcn Ġ= ĠComponent Name ( this , ĠDev Admin Receiver :: class . java ) čĊčĊĠĠĠĠĠĠĠ Ġ// ĠRe strictions Ġcan Ġbe Ġcleared Ġagain Ġwith Ġclear User Restriction () čĊĠĠĠĠĠĠĠ Ġd pm . add User Restriction ( cn , ĠUser Manager . DIS ALLOW _ APPS _ CONTROL ) čĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġd pm . clear User Restriction ( cn , ĠUser Manager . DIS ALLOW _ APPS _ CONTROL ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġchange Secure Settings () Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġval Ġd pm Ġ= Ġget System Service ( Context . DEVICE _ POLICY _ SERVICE ) Ġas ĠDevice Policy Manager čĊĠĠĠĠĠĠĠ Ġval Ġcn Ġ= ĠComponent Name ( this , ĠDev Admin Receiver :: class . java ) čĊčĊĠĠĠĠĠĠĠ Ġd pm . set Secure Setting ( cn , ĠSettings . Secure . LOCATION _ MODE , Ġ" 1 ") čĊĠĠĠĠĠĠĠ Ġd pm . set Secure Setting ( cn , ĠSettings . Secure . SKIP _ FIRST _ USE _ HINT S , Ġ" 1 ") čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġreboot My Device () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġd pm Ġ= Ġget System Service ( Context . DEVICE _ POLICY _ SERVICE ) Ġas ĠDevice Policy Manager čĊĠĠĠĠĠĠĠ Ġval Ġcn Ġ= ĠComponent Name ( this , ĠDev Admin Receiver :: class . java !! ) čĊčĊĠĠĠĠĠĠĠ Ġ// ĠRe boot Ġrequires ĠN ou gat Ġand Ġhigher čĊĠĠĠĠĠĠĠ Ġd pm . reboot ( cn ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ// ĠThis Ġremoves Ġthe Ġdevice Ġowner Ġwithout Ġthe Ġneed Ġto Ġfactory Ġreset Ġthe Ġdevice čĊĠĠĠ Ġfun Ġclear Device Owner () Ġ{ čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcn Ġ= ĠComponent Name ( packageName , ĠpackageName Ġ+ Ġ". Admin Receiver ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd pm Ġ= Ġget System Service ( Context . DEVICE _ POLICY _ SERVICE ) Ġas ĠDevice Policy Manager čĊĠĠĠĠĠĠĠĠĠĠĠ Ġd pm . remove Active Admin ( cn ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġd pm . clear Device Owner App ( packageName ) čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSecurity Exception ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= Ġ" Min Device Owner " čĊĠĠĠ Ġ} č Ċ } čĊ