package Ġcom . br ins . lock smith . ui . activity Ċ Ċ import Ġandroid . app . Activity Manager Ċ import Ġandroid . app . Activity Manager . Running App Process Info Ċ import Ġandroid . app . Key guard Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Looper Ċ import Ġandroid . os . Process Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Nullable Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . br ins . lock smith . R Ċ import Ġcom . br ins . lock smith . ui . dialog . F inger Auth Dialog Fragment Ċ import Ġcom . br ins . lock smith . ui . dialog . Loading Dialog Fragment Ċ import Ġcom . br ins . lock smith . ui . dialog . Miss Password Dialog Fragment Ċ import Ġcom . br ins . lock smith . utils . Injector Util Ċ import Ġcom . br ins . lock smith . utils . setText Dark Ċ import Ġcom . br ins . lock smith . utils . set Trans luc ent Ċ import Ġcom . br ins . lock smith . view model . card . Save Card ViewModel Ċ import Ġcom . br ins . lock smith . view model . passport . Passport ViewModel Ċ import Ġcom . br ins . lock smith . view model . save . Save Password ViewModel Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . Scheduled ExecutorService Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . system . exit Process Ċ Ċ abstract Ġclass ĠBase Activity Ġ: ĠAppCompatActivity (), ĠView . OnClickListener Ġ{ ĊĊĠĠĠ Ġprotected Ġopen Ġval ĠTAG Ġ= Ġthis :: class . java . simple Name ĊĠĠĠ Ġprivate Ġval Ġm MainThread Ġ= ĠL ooper . get Main Looper (). thread ĊĠĠĠ Ġprivate Ġvar Ġm Scheduled ExecutorService : ĠScheduled ExecutorService ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġneed Auth Request Ġ= Ġfalse ĊĠĠĠ Ġprotected Ġvar Ġm F inger Dialog : ĠF inger Auth Dialog Fragment ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġval Ġm Key guard Manager : ĠKey guard Manager Ġby Ġlazy Ġ{ Ġget System Service ( KEY GU ARD _ SERVICE ) Ġas ĠKey guard Manager Ġ} ĊĠĠĠ Ġprotected Ġvar Ġm Loading Dialog Fragment : ĠLoading Dialog Fragment ? Ġ= Ġnull ĊĊĊĠĠĠ Ġprivate Ġval Ġm Timer Task : ĠTimer Task Ġ= Ġobject Ġ: ĠTimer Task () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isIn Foreground ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Collector . finish all () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġneed Auth Request Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Timer () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġval Ġm Passport ViewModel : ĠPass port ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( this , ĠInject or Util . get Passport Model Factory ()). get ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPass port ViewModel :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġval Ġm Save Password ViewModel : ĠSave Password ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( this , ĠInject or Util . get Pass Word Factory ()). get ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSave Password ViewModel :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprotected Ġval Ġm Save Card ViewModel : ĠSave Card ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( this , ĠInject or Util . get Card Factory ()). get ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSave Card ViewModel :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġshow Loading ( content : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Loading Dialog Fragment Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Loading Dialog Fragment Ġ= ĠLoading Dialog Fragment . show Self ( support FragmentManager , Ġcontent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġhide Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Loading Dialog Fragment ?. dismiss () ĊĠĠĠĠĠĠĠ Ġm Loading Dialog Fragment Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠActivity Collector . add Activity ( this ) ĊĠĠĠĠĠĠĠ ĠonCreate Before Binding ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġval Ġres Id Ġ= Ġget Layout Res Id () ĊĠĠĠĠĠĠĠ Ġif Ġ( res Id Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetContentView ( res Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠonCreate After Binding ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset StatusBar Trans luc ent () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġstart Timer () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Scheduled ExecutorService Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Scheduled ExecutorService Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExec utors . new Single Thread Scheduled Executor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Time Task ( m Timer Task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Scheduled ExecutorService !!. schedule At Fixed Rate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Timer Task , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . SECONDS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġcancel Time Task ( task : ĠTimer Task ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġtask ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġstop Timer () Ġ{ ĊĠĠĠĠĠĠĠ Ġcancel Time Task ( m Timer Task ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Scheduled ExecutorService Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Scheduled ExecutorService !!. shutdown () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Scheduled ExecutorService Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġlaunch F inger Auth () Ġ{ ĊĠĠĠĠĠĠĠ Ġm F inger Dialog Ġ= ĠF inger Auth Dialog Fragment . show Self ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF inger Auth Dialog Fragment . Stage . F ING ER PRINT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġthis ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠisIn Foreground (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget System Service ( Context . ACTIVITY _ SERVICE ) Ġas ĠActivity Manager ĊĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġmanager . running App Processes ĊĠĠĠĠĠĠĠ Ġval Ġprocess Info Ġ= Ġinfo [ 0 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġapplication Info . packageName Ġ== Ġprocess Info . process Name Ġ&& Ġprocess Info . import ance Ġ== ĠRunning App Process Info . IMPORT ANCE _ FO REG ROUND ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġif Ġ( need Auth Request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Key guard Manager . is Key guard Secure ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch F inger Auth () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM iss Password Dialog Fragment . show Self ( support FragmentManager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġif Ġ(! isIn Foreground ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Timer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġkill App () Ġ{ ĊĠĠĠĠĠĠĠ ĠActivity Collector . finish all () ĊĠĠĠĠĠĠĠ ĠProcess . kill Process ( Process . my Pid ()) ĊĠĠĠĠĠĠĠ Ġexit Process ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( v . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . cancel Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm F inger Dialog ?. dismiss Allow ing State Loss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Collector . finish all () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . use Password Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Use Password () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġauth enc it ated Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġm F inger Dialog ?. dismiss () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprotected Ġopen Ġfun ĠonClick Use Password () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent : ĠIntent ? Ġ= Ġm Key guard Manager . create Confirm Device Credential Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Authentication Ġrequired ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" PASSWORD " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( intent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠF inger Auth Dialog Fragment . AUTH _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun ĠonCreate Before Binding (@ Nullable ĠsavedInstanceState : ĠBundle ?) Ġ{} ĊĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġget Layout Res Id (): ĠInt ĊĊĠĠĠ Ġprotected Ġopen Ġfun ĠonCreate After Binding (@ Nullable ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġset StatusBar Trans luc ent () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Trans luc ent ( this ) Ċ /* ĠĠĠĠĠĠĠ Ġif Ġ( is Dark Theme ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Text Dark ( this . window , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġelse */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Text Dark ( this . window , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠF inger Auth Dialog Fragment . AUTH _ REQUEST _ CODE Ġ&& ĠresultCode Ġ== ĠRESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth enc it ated Callback () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Dark Theme (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġflag Ġ= Ġthis . resources . configuration . ui Mode Ġand ĠConfiguration . UI _ MODE _ N IGHT _ MASK ĊĠĠĠĠĠĠĠ Ġreturn Ġflag Ġ== ĠConfiguration . UI _ MODE _ N IGHT _ YES ĊĠĠĠ Ġ} Ċ } Ċ