package Ġcom . t ako hi . san ct uary Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . admin . Device Admin Receiver Ċ import Ġandroid . app . admin . Device Policy Manager Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . User Manager Ċ import Ġandroidx . core . content . edit Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġcom . t ako hi . san ct uary . database . San ct uary Database Ċ import Ġcom . t ako hi . san ct uary . database . System Application Ċ import Ġcom . t ako hi . san ct uary . managers . Password Manager Ċ import Ġcom . t ako hi . san ct uary . ui . setup . Setup Activity Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . util .* Ċ Ċ class ĠSan ct uary Device Admin Receiver Ġ: ĠDevice Admin Receiver () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Receive ( context , Ġintent ) ĊĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġintent . action ĊĠĠĠĠĠĠĠ Ġif Ġ( Device Policy Manager . ACTION _ MAN AG ED _ PROFILE _ PROV ISION ED Ġ== Ġaction Ġ|| ĠIntent . ACTION _ MAN AG ED _ PROFILE _ AD DED Ġ== Ġaction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreference Manager . getDefault SharedPreferences ( context ). edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean (" is _ provision ed ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Profile Provisioning Complete ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Profile Provisioning Complete ( context , Ġintent ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcomponent Name Ġ= Ġcomponent Name ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġdevice Policy Manager Ġ= Ġdevice Policy Manager ( context ) ĊĊĠĠĠĠĠĠĠ Ġdevice Policy Manager . set Profile Name ( component Name , Ġcontext . getString ( R . string . app _ name )) ĊĠĠĠĠĠĠĠ Ġdevice Policy Manager . set Profile Enabled ( component Name ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠHelp Ġus Ġto Ġdetect Ġif Ġa Ġpassword Ġis Ġset Ġor Ġnot Ġwith ĠisActive Password S ufficient ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . S ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Policy Manager . set Password Quality ( component Name , ĠDevice Policy Manager . PASSWORD _ QUAL ITY _ SO METH ING ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Policy Manager . required Password Complexity Ġ= ĠDevice Policy Manager . PASSWORD _ COMPLEX ITY _ LOW ĊĊĠĠĠĠĠĠĠ Ġ// ĠWork Ġprofile Ġcan Ġonly Ġbe Ġdeleted Ġfrom Ġthe Ġapplication Ġby Ġdefault ĊĠĠĠĠĠĠĠ Ġ// ĠRemoved , Ġdangerous Ġin Ġcase Ġuser Ġforgot Ġhis Ġpassword ĊĠĠĠĠĠĠĠ Ġ// Ġdevice Policy Manager . add User Restriction ( component Name , ĠUser Manager . DIS ALLOW _ REMOVE _ MAN AG ED _ PROFILE ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠForce Ġuser Ġto Ġchoose Ġa Ġdifferent Ġpassword Ġfor Ġthe Ġwork Ġprofile ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . P ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Policy Manager . add User Restriction ( component Name , ĠUser Manager . DIS ALLOW _ UN IFI ED _ PASSWORD ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġreset Ġpassword Ġtoken Ġnow Ġfor Ġlater ĊĠĠĠĠĠĠĠ Ġwith ( Password Manager ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Reset Password Token () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Password () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠEnable Ġdefault Ġsystem Ġapplications ĊĠĠĠĠĠĠĠ Ġval Ġsystem Apps Ġ= ĠarrayOf (" com . android . chrome ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( system App Ġin Ġsystem Apps ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Policy Manager . enable System App ( component Name , Ġsystem App ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNullPointerException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġmove Ġthat Ġsomewhere Ġelse ĊĠĠĠĠĠĠĠ Ġfetch System Applications ( context ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOn ĠSDK Ġ>= Ġ 2 6 , ĠSetup Activity Ġwill Ġbe Ġlaunched Ġwith Ġactivity Ġintent Ġandroid . app . action . PROV ISION ING _ SUCCESS FUL ĊĠĠĠĠĠĠĠ Ġif ( Build . VERSION . SDK _ INT Ġ< Ġ 2 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlaunch Intent Ġ= ĠIntent ( context , ĠSetup Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Intent . add Flags ( Intent . FLAG _ ACTIVITY _ CLEAR _ TASK Ġor ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( launch Intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Query Permissions Needed ") ĊĠĠĠ Ġprivate Ġfun Ġfetch System Applications ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠFetch Ġdisabled Ġsystem Ġapps ĊĠĠĠĠĠĠĠ Ġval Ġdisabled System Applications Ġ= ĠArrayList < System Application >() ĊĠĠĠĠĠĠĠ Ġval Ġpackage Manager Ġ= Ġcontext . package Manager ĊĠĠĠĠĠĠĠ Ġval Ġapps Ġ= Ġpackage Manager . get Installed Applications ( PackageManager . MATCH _ SYSTEM _ ONLY Ġor ĠPackage Manager . MATCH _ UN INST ALLED _ PACK AGES Ġor ĠPackage Manager . MATCH _ DISABLED _ COMPONENTS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTr ick Ġto Ġknow Ġif Ġa Ġsystem Ġapp Ġwe Ġcan Ġlaunch Ġor Ġnot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Manager . getApplication Icon ( it . packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPackage Manager . Name NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapps . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisabled System Applications . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Application ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName Ġ= Ġit . packageName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġit . load Label ( context . package Manager ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSan ct uary Database . getInstance ( context ). system Application Dao () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. insert All ( disabled System Applications ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcomponent Name ( context : ĠContext ): ĠComponent Name Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComponent Name ( context . application Context , ĠSan ct uary Device Admin Receiver :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġdevice Policy Manager ( context : ĠContext ): ĠDevice Policy Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getSystem Service ( Context . DEVICE _ POLICY _ SERVICE ) Ġas ĠDevice Policy Manager ĊĠĠĠ Ġ} Ċ } Ċ