package Ġorg . opp ia . android . app . profile Ċ Ċ import Ġandroid . content . Activity NotFoundException Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . text . method . Password Transformation Method Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġorg . opp ia . android . R Ċ import Ġorg . opp ia . android . app . home . Home Activity Ċ import Ġorg . opp ia . android . app . model . Profile Id Ċ import Ġorg . opp ia . android . app . translation . App Language Resource Handler Ċ import Ġorg . opp ia . android . app . utility . Lifecycle Safe Timer Factory Ċ import Ġorg . opp ia . android . app . utility . TextInput EditText Helper . Companion . on TextChanged Ċ import Ġorg . opp ia . android . app . view model . ViewModel Provider Ċ import Ġorg . opp ia . android . databinding . Pin Password Activity Binding Ċ import Ġorg . opp ia . android . domain . profile . Profile Management Controller Ċ import Ġorg . opp ia . android . util . data . Data Providers . Companion . to LiveData Ċ import Ġjavax . inject . Inject Ċ Ċ private Ġconst Ġval ĠTAG _ ADMIN _ SETTINGS _ DIALOG Ġ= Ġ" ADMIN _ SETTINGS _ DIALOG " Ċ private Ġconst Ġval ĠTAG _ RESET _ PIN _ DIALOG Ġ= Ġ" RESET _ PIN _ DIALOG " Ċ Ċ /** ĠThe Ġpresenter Ġfor Ġ[ Pin Password Activity ]. Ġ*/ Ċ class ĠPin Password Activity Presenter Ġ@ Inject Ġconstructor ( ĊĠ Ġprivate Ġval Ġactivity : ĠAppCompatActivity , ĊĠ Ġprivate Ġval Ġprofile Management Controller : ĠProfile Management Controller , ĊĠ Ġprivate Ġval Ġlifecycle Safe Timer Factory : ĠLifecycle Safe Timer Factory , ĊĠ Ġprivate Ġval ĠviewModel Provider : ĠViewModel Provider < Pin Password ViewModel >, ĊĠ Ġprivate Ġval Ġresource Handler : ĠApp Language Resource Handler Ċ ) Ġ{ ĊĠ Ġprivate Ġval Ġpin ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠ Ġget Pin Password ViewModel () ĊĠ Ġ} ĊĠ Ġprivate Ġvar Ġprofile Id Ġ= Ġ- 1 ĊĠ Ġprivate Ġlateinit Ġvar Ġalert Dialog : ĠAlertDialog ĊĊĠ Ġfun Ġhandle On Create () Ġ{ ĊĠĠĠ Ġval Ġadmin Pin Ġ= Ġactivity . intent . getString Extra ( PIN _ PASSWORD _ ADMIN _ PIN _ EXTRA _ KEY ) ĊĠĠĠ Ġprofile Id Ġ= Ġactivity . intent . getInt Extra ( PIN _ PASSWORD _ PROFILE _ ID _ EXTRA _ KEY , Ġ- 1 ) ĊĠĠĠ Ġval Ġbinding Ġ= ĠData Binding Util . set ContentView < Pin Password Activity Binding >( ĊĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠ ĠR . layout . pin _ password _ activity ĊĠĠĠ Ġ) ĊĠĠĠ Ġpin ViewModel . set Profile Id ( profile Id ) ĊĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġactivity ĊĠĠĠĠĠ ĠviewModel Ġ= Ġpin ViewModel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġbinding . pin Pass ord Toolbar . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠ Ġ( activity Ġas ĠPin Password Activity ). finish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġbinding . show Pin . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġpin ViewModel . show Password . set (! pin ViewModel . show Password . get () !! ) ĊĠĠĠĠĠ Ġif Ġ(! pin ViewModel . show Password . get () !! ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . pin Password Input Pin EditText . transformation Method Ġ= ĠPassword Transformation Method () ĊĠĠĠĠĠĠĠ Ġbinding . pin Password Input Pin EditText . setSelection ( ĊĠĠĠĠĠĠĠĠĠ Ġbinding . pin Password Input Pin EditText . text . toString (). length ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . pin Password Input Pin EditText . transformation Method Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġbinding . pin Password Input Pin EditText . setSelection ( ĊĠĠĠĠĠĠĠĠĠ Ġbinding . pin Password Input Pin EditText . text . toString (). length ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġbinding . pin Password Input Pin EditText . request Focus () ĊĠĠĠ Ġ// Ġ[ on TextChanged ] Ġis Ġa Ġextension Ġfunction Ġdefined Ġat Ġ[ TextInput EditText Helper ] ĊĠĠĠ Ġbinding . pin Password Input Pin EditText . on TextChanged Ġ{ Ġpin Ġ-> ĊĠĠĠĠĠ Ġpin ?. let Ġ{ Ġinput ted Pin Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( input ted Pin . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġpin ViewModel . show Error . set ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( input ted Pin . length Ġ== Ġpin ViewModel . correct Pin . get () !!. length Ġ&& ĊĠĠĠĠĠĠĠĠĠ Ġinput ted Pin . isNotEmpty () Ġ&& Ġpin ViewModel . correct Pin . get () !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNotEmpty () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( input ted Pin Ġ== Ġpin ViewModel . correct Pin . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Management Controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. login To Profile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Id . newBuilder (). set Internal Id ( profile Id ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). to LiveData () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Success ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity (( Home Activity . create Home Activity ( activity , Ġprofile Id ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . pin Password Input Pin EditText . start Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Utils . load Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . anim . shake ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Safe Timer Factory . create Timer ( 1 0 0 0 ). observe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . pin Password Input Pin EditText . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpin ViewModel . show Error . set ( true ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġbinding . forgot Pin . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġif Ġ( pin ViewModel . isAdmin . get () !! ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Admin Forgot Pin () ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprevious Frag Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġactivity . support FragmentManager . find Fragment By Tag ( TAG _ ADMIN _ SETTINGS _ DIALOG ) ĊĠĠĠĠĠĠĠ Ġif Ġ( previous Frag Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġactivity . support FragmentManager . beginTransaction (). remove ( previous Frag ). commit Now () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdialog Fragment Ġ= ĠAdmin Settings Dialog Fragment ĊĠĠĠĠĠĠĠĠĠ Ġ. newInstance ( admin Pin !! ) ĊĠĠĠĠĠĠĠ Ġdialog Fragment . show Now ( activity . support FragmentManager , ĠTAG _ ADMIN _ SETTINGS _ DIALOG ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( pin ViewModel . show Admin Pin Forgot Password Pop Up . get () !! ) Ġ{ ĊĠĠĠĠĠ Ġshow Admin Forgot Pin () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġhandle Route To Reset Pin Dialog () Ġ{ ĊĠĠĠ Ġ( ĊĠĠĠĠĠ Ġactivity ĊĠĠĠĠĠĠĠ Ġ. support FragmentManager ĊĠĠĠĠĠĠĠ Ġ. find Fragment By Tag ( ĊĠĠĠĠĠĠĠĠĠ ĠTAG _ ADMIN _ SETTINGS _ DIALOG ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠDialog Fragment ĊĠĠĠĠĠ Ġ). dismiss () ĊĠĠĠ Ġval Ġdialog Fragment Ġ= ĠReset Pin Dialog Fragment . newInstance ( ĊĠĠĠĠĠ Ġprofile Id , ĊĠĠĠĠĠ Ġpin ViewModel . name . get () !! ĊĠĠĠ Ġ) ĊĠĠĠ Ġdialog Fragment . show Now ( activity . support FragmentManager , ĠTAG _ RESET _ PIN _ DIALOG ) ĊĠ Ġ} ĊĊĠ Ġfun Ġhandle Route To Success Dialog () Ġ{ ĊĠĠĠ Ġ( ĊĠĠĠĠĠ Ġactivity ĊĠĠĠĠĠĠĠ Ġ. support FragmentManager ĊĠĠĠĠĠĠĠ Ġ. find Fragment By Tag ( ĊĠĠĠĠĠĠĠĠĠ ĠTAG _ RESET _ PIN _ DIALOG ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠDialog Fragment ĊĠĠĠĠĠ Ġ). dismiss () ĊĠĠĠ Ġshow Success Dialog () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Pin Password ViewModel (): ĠPin Password ViewModel Ġ{ ĊĠĠĠ Ġreturn ĠviewModel Provider . get For Activity ( activity , ĠPin Password ViewModel :: class . java ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshow Admin Forgot Pin () Ġ{ ĊĠĠĠ Ġval ĠappName Ġ= Ġresource Handler . getString In Locale ( R . string . app _ name ) ĊĠĠĠ Ġpin ViewModel . show Admin Pin Forgot Password Pop Up . set ( true ) ĊĠĠĠ Ġalert Dialog Ġ= ĠAlertDialog . Builder ( activity , ĠR . style . Opp ia AlertDialog Theme ) ĊĠĠĠĠĠ Ġ. setTitle ( R . string . pin _ password _ forgot _ title ) ĊĠĠĠĠĠ Ġ. setMessage ( ĊĠĠĠĠĠĠĠ Ġresource Handler . getString In Locale With Wr apping ( R . string . pin _ password _ forgot _ message , ĠappName ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ. set Negative Button ( R . string . admin _ settings _ cancel ) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġpin ViewModel . show Admin Pin Forgot Password Pop Up . set ( false ) ĊĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. set Positive Button ( R . string . pin _ password _ play _ store ) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġpin ViewModel . show Admin Pin Forgot Password Pop Up . set ( false ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ VIEW , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse (" market :// details ? id =" Ġ+ Ġactivity . packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠActivity NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ VIEW , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// play . google . com / store / apps / details ? id =" Ġ+ Ġactivity . packageName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠ Ġ}. create () ĊĠĠĠ Ġalert Dialog . show () ĊĠ Ġ} ĊĊĠ Ġfun Ġdismiss AlertDialog () Ġ{ ĊĠĠĠ Ġif Ġ(:: alert Dialog . isInitialized Ġ&& Ġalert Dialog . is Showing ) Ġ{ ĊĠĠĠĠĠ Ġalert Dialog . dismiss () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshow Success Dialog () Ġ{ ĊĠĠĠ ĠAlertDialog . Builder ( activity , ĠR . style . Opp ia AlertDialog Theme ) ĊĠĠĠĠĠ Ġ. setMessage ( R . string . pin _ password _ success ) ĊĠĠĠĠĠ Ġ. set Positive Button ( R . string . pin _ password _ close ) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠ Ġ}. create (). show () ĊĠ Ġ} Ċ } Ċ