/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 ĠSch ib st ed ĠProducts Ġ& ĠTechnology ĠAS . ĠLicensed Ġunder Ġthe Ġterms Ġof Ġthe ĠMIT Ġlicense . ĠSee ĠLICENSE Ġin Ġthe Ġproject Ġroot . Ċ Ġ*/ Ċ Ċ package Ġcom . sch ib st ed . account . ui . login . screen . password Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . sch ib st ed . account . Routes Ċ import Ġcom . sch ib st ed . account . common . tracking . Tracking Data Ċ import Ġcom . sch ib st ed . account . engine . input . Identifier Ċ import Ġcom . sch ib st ed . account . model . error . Client Error Ċ import Ġcom . sch ib st ed . account . persistence . Local Secrets Provider Ċ import Ġcom . sch ib st ed . account . ui . Internal Ui Configuration Ċ import Ġcom . sch ib st ed . account . ui . R Ċ import Ġcom . sch ib st ed . account . ui . login . Base Login Activity Ċ import Ġcom . sch ib st ed . account . ui . login . screen . Login Screen Ċ import Ġcom . sch ib st ed . account . ui . ui . Flow Fragment Ċ import Ġcom . sch ib st ed . account . ui . ui . Web Fragment Ċ import Ġcom . sch ib st ed . account . ui . ui . component . Account Selector View Ċ import Ġcom . sch ib st ed . account . ui . ui . dialog . Information Dialog Fragment Ċ import Ġcom . sch ib st ed . account . ui . ui . dialog . Selector Dialog Ċ import Ġcom . sch ib st ed . account . ui . ui . rule . Basic Validation Rule Ċ import Ġcom . sch ib st ed . account . ui . ui . rule . Password Validation Rule Ċ import Ġcom . sch ib st ed . account . util . Deep Link Ċ import Ġkotlinx . android . synt hetic . main . sch acc _ password _ fragment _ layout .* Ċ Ċ private Ġconst Ġval ĠKEY _ IDENTIFIER Ġ= Ġ" IDENTIFIER " Ċ private Ġconst Ġval ĠKEY _ USER _ AVAILABLE Ġ= Ġ" USER _ EXIST ING " Ċ private Ġconst Ġval ĠKEY _ UI _ CONF Ġ= Ġ" UI _ CONF " Ċ Ċ class ĠPassword Fragment Ġ: ĠFlow Fragment < Password Contract . Presenter >(), ĠPassword Contract . View , ĠAccount Selector View . Listener Ġ{ ĊĠĠĠ Ġoverride Ġval ĠisActive : ĠBoolean Ġget () Ġ= Ġis Added ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpresenter : ĠPassword Contract . Presenter ĊĠĠĠ Ġprivate Ġvar Ġis User Available : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġidentifier : ĠIdentifier ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġval Ġarg Ġ= ĠsavedInstanceState Ġ?: Ġarguments ĊĠĠĠĠĠĠĠ Ġis User Available Ġ= Ġarg ?. getBoolean ( KEY _ USER _ AVAILABLE ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġidentifier Ġ= Ġarg ?. get Parcelable ( KEY _ IDENTIFIER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( R . layout . sch acc _ password _ fragment _ layout , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġprimary Action View Ġ= Ġview . findViewById ( R . id . password _ button _ continue ) ĊĠĠĠĠĠĠĠ Ġsecondary Action View Ġ= Ġif Ġ( is User Available ) Ġnull Ġelse Ġview . findViewById ( R . id . mobile _ password _ button _ forgot ) ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġadd User Options ( is User Available ) ĊĊĠĠĠĠĠĠĠ Ġmobile _ password _ button _ forgot . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Login Activity . tracker ?. event Eng agement ( Tracking Data . Eng agement . CLICK , ĠTracking Data . UIElement . FOR G OT _ PASSWORD , ĠTracking Data . Screen . PASSWORD ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Key Ġ= Ġidentifier ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Secrets Provider ( require Context ()). put ( G SON . toJson ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġredirect Uri Ġ= ĠDeep Link . Identifier Provided . create Deep Link Uri ( ui Conf . redirect Uri , Ġid Key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ"") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Listener ?. on WebView Navigation Requested ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeb Fragment . newInstance ( Routes . forgot Password Url ( redirect Uri , Ġui Conf . locale ). toString (), Ġui Conf . redirect Uri ), ĠLogin Screen . WEB _ FOR G OT _ PASSWORD _ SCREEN ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġaccount _ selector _ view . set Account Identifier ( array ListOf ( identifier )) ĊĠĠĠĠĠĠĠ Ġaccount _ selector _ view . action Listener Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġval Ġacc Select Desc Ġ= Ġif Ġ( is User Available ) ĠR . string . sch acc _ accessibility _ signup _ id Ġelse ĠR . string . sch acc _ accessibility _ login _ id ĊĠĠĠĠĠĠĠ Ġaccount _ selector _ view . content Description Ġ= ĠgetString ( acc Select Desc , Ġidentifier ?. identifier ) ĊĊĠĠĠĠĠĠĠ Ġpassword _ input _ view . validation Rule Ġ= Ġ( if Ġ( is User Available ) ĠPassword Validation Rule Ġelse ĠBasic Validation Rule ) ĊĠĠĠĠĠĠĠ Ġprimary Action View . setOnClickListener Ġ{ Ġsign User () Ġ} ĊĊĠĠĠĠĠĠĠ Ġpassword _ input _ view . set I me Action ( Editor Info . IME _ ACTION _ NEXT ) Ġ{ Ġ_, Ġaction Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ NEXT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign User () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ set I me Action Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġremember _ me . isChecked Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ui Conf . show Remember Me Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremember _ me . label View . text Ġ= ĠgetString ( R . string . sch acc _ remember _ me ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremember _ me _ info . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Listener ?. on Dialog Navigation Requested ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInformation Dialog Fragment . newInstance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . sch acc _ dialog _ remember _ me _ title ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . sch acc _ dialog _ remember _ me _ description ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . sch acc _ ic _ remember _ me , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremember _ me . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremember _ me _ info . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Remember Me Enabled () Ġ= Ġremember _ me . isChecked ĊĊĠĠĠ Ġprivate Ġfun Ġsign User () Ġ{ ĊĠĠĠĠĠĠĠ ĠBase Login Activity . tracker ?. event Interaction ( Tracking Data . Interaction Type . SEND , ĠTracking Data . Screen . PASSWORD ) ĊĠĠĠĠĠĠĠ Ġpresenter . sign ( password _ input _ view , Ġidentifier , Ġremember _ me . isChecked ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd User Options ( is User Available : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is User Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmobile _ password _ button _ forgot . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġage _ limit _ info . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo _ bar _ message . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword _ input _ view . setTitle ( R . string . sch acc _ password _ sign _ up _ label ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword _ input _ view . set Information Message ( getString ( R . string . sch acc _ password _ extra _ info )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword _ button _ continue . setText ( R . string . sch acc _ password _ sign _ up _ button _ label ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword _ input _ view . setTitle ( R . string . sch acc _ password _ sign _ in _ label ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmobile _ password _ button _ forgot . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġout State . put Boolean ( KEY _ USER _ AVAILABLE , Ġis User Available ) ĊĠĠĠĠĠĠĠ Ġout State . put Parcelable ( KEY _ IDENTIFIER , Ġidentifier ) ĊĠĠĠĠĠĠĠ Ġout State . put Parcelable ( KEY _ UI _ CONF , Ġui Conf ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Dialog Requested ( selector Dialog : ĠSelector Dialog ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselector Dialog . action Listener Ġ= ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Login Activity . tracker ?. event Eng agement ( Tracking Data . Eng agement . CLICK , ĠTracking Data . UIElement . CHANGE _ IDENTIFIER , ĠTracking Data . Screen . PASSWORD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Listener ?. on Navigate Back Requested () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselector Dialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnavigation Listener ?. on Dialog Navigation Requested ( selector Dialog ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Presenter ( presenter : ĠPassword Contract . Presenter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . presenter Ġ= Ġpresenter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Error Dialog ( error : ĠClient Error , ĠerrorMessage : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay Error Dialog ( error , ĠerrorMessage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( identifier : ĠIdentifier , Ġis User Available : ĠBoolean , Ġui Configuration : ĠInternal Ui Configuration ): ĠPassword Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠPassword Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarg . put Parcelable ( KEY _ IDENTIFIER , Ġidentifier ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarg . put Boolean ( KEY _ USER _ AVAILABLE , Ġis User Available ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarg . put Parcelable ( KEY _ UI _ CONF , Ġui Configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . arguments Ġ= Ġarg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠG SON Ġ= ĠGson () ĊĠĠĠ Ġ} Ċ } Ċ