14
14
15
15
package com .firebase .ui .auth .ui .email ;
16
16
17
+ import android .app .Activity ;
18
+ import android .arch .lifecycle .Observer ;
19
+ import android .arch .lifecycle .ViewModelProviders ;
17
20
import android .content .Context ;
21
+ import android .content .DialogInterface ;
18
22
import android .content .Intent ;
19
23
import android .os .Bundle ;
20
- import android .support .annotation .NonNull ;
21
24
import android .support .annotation .RestrictTo ;
22
25
import android .support .design .widget .TextInputLayout ;
26
+ import android .support .v7 .app .AlertDialog ;
23
27
import android .view .View ;
24
28
import android .widget .EditText ;
25
29
26
30
import com .firebase .ui .auth .R ;
27
31
import com .firebase .ui .auth .data .model .FlowParameters ;
32
+ import com .firebase .ui .auth .data .model .Resource ;
33
+ import com .firebase .ui .auth .data .model .State ;
28
34
import com .firebase .ui .auth .ui .AppCompatBase ;
29
35
import com .firebase .ui .auth .ui .HelperActivityBase ;
30
- import com .firebase .ui .auth .ui .TaskFailureLogger ;
31
36
import com .firebase .ui .auth .util .ExtraConstants ;
37
+ import com .firebase .ui .auth .util .ui .ImeHelper ;
32
38
import com .firebase .ui .auth .util .ui .fieldvalidators .EmailFieldValidator ;
33
- import com .google .android .gms .tasks .OnFailureListener ;
34
- import com .google .android .gms .tasks .OnSuccessListener ;
39
+ import com .google .firebase .auth .FirebaseAuthInvalidCredentialsException ;
35
40
import com .google .firebase .auth .FirebaseAuthInvalidUserException ;
36
41
37
42
/**
38
43
* Activity to initiate the "forgot password" flow by asking for the user's email.
39
44
*/
40
45
@ RestrictTo (RestrictTo .Scope .LIBRARY_GROUP )
41
- public class RecoverPasswordActivity extends AppCompatBase implements View .OnClickListener {
42
- private static final String TAG = "RecoverPasswordActivity" ;
46
+ public class RecoverPasswordActivity extends AppCompatBase implements View .OnClickListener ,
47
+ ImeHelper .DonePressedListener {
48
+ private RecoverPasswordHandler mHandler ;
43
49
50
+ private TextInputLayout mEmailInputLayout ;
44
51
private EditText mEmailEditText ;
45
52
private EmailFieldValidator mEmailFieldValidator ;
46
53
47
- public static Intent createIntent (Context context , FlowParameters flowParams , String email ) {
48
- return HelperActivityBase .createBaseIntent (context , RecoverPasswordActivity .class , flowParams )
54
+ public static Intent createIntent (Context context , FlowParameters params , String email ) {
55
+ return HelperActivityBase .createBaseIntent (context , RecoverPasswordActivity .class , params )
49
56
.putExtra (ExtraConstants .EXTRA_EMAIL , email );
50
57
}
51
58
@@ -54,51 +61,67 @@ protected void onCreate(Bundle savedInstanceState) {
54
61
super .onCreate (savedInstanceState );
55
62
setContentView (R .layout .fui_forgot_password_layout );
56
63
57
- mEmailFieldValidator =
58
- new EmailFieldValidator ((TextInputLayout ) findViewById (R .id .email_layout ));
64
+ mHandler = ViewModelProviders .of (this ).get (RecoverPasswordHandler .class );
65
+ mHandler .init (getFlowHolder ().getArguments ());
66
+ mHandler .getProgressLiveData ().observe (this , new Observer <Resource <String >>() {
67
+ @ Override
68
+ public void onChanged (Resource <String > resource ) {
69
+ if (resource .getState () == State .LOADING ) {
70
+ getDialogHolder ().showLoadingDialog (R .string .fui_progress_dialog_sending );
71
+ return ;
72
+ }
73
+
74
+ getDialogHolder ().dismissDialog ();
75
+ if (resource .getState () == State .SUCCESS ) {
76
+ mEmailInputLayout .setError (null );
77
+ showEmailSentDialog (resource .getValue ());
78
+ } else if (resource .getException () instanceof FirebaseAuthInvalidUserException
79
+ || resource .getException () instanceof FirebaseAuthInvalidCredentialsException ) {
80
+ // No FirebaseUser exists with this email address, show error.
81
+ mEmailInputLayout .setError (getString (R .string .fui_error_email_does_not_exist ));
82
+ } else {
83
+ mEmailInputLayout .setError (resource .getException ().getLocalizedMessage ());
84
+ }
85
+ }
86
+ });
87
+
88
+ mEmailInputLayout = findViewById (R .id .email_layout );
59
89
mEmailEditText = findViewById (R .id .email );
90
+ mEmailFieldValidator = new EmailFieldValidator (mEmailInputLayout );
60
91
61
92
String email = getIntent ().getStringExtra (ExtraConstants .EXTRA_EMAIL );
62
93
if (email != null ) {
63
94
mEmailEditText .setText (email );
64
95
}
65
96
97
+ ImeHelper .setImeOnDoneListener (mEmailEditText , this );
66
98
findViewById (R .id .button_done ).setOnClickListener (this );
67
99
}
68
100
69
- private void next (final String email ) {
70
- getAuthHelper ().getFirebaseAuth ()
71
- .sendPasswordResetEmail (email )
72
- .addOnFailureListener (
73
- new TaskFailureLogger (TAG , "Error sending password reset email" ))
74
- .addOnSuccessListener (new OnSuccessListener <Void >() {
75
- @ Override
76
- public void onSuccess (Void aVoid ) {
77
- getDialogHolder ().dismissDialog ();
78
- RecoveryEmailSentDialog .show (
79
- email , getSupportFragmentManager ());
80
- }
81
- })
82
- .addOnFailureListener (this , new OnFailureListener () {
83
- @ Override
84
- public void onFailure (@ NonNull Exception e ) {
85
- getDialogHolder ().dismissDialog ();
86
-
87
- if (e instanceof FirebaseAuthInvalidUserException ) {
88
- // No FirebaseUser exists with this email address, show error.
89
- mEmailEditText .setError (getString (R .string .fui_error_email_does_not_exist ));
90
- }
91
- }
92
- });
93
- }
94
-
95
101
@ Override
96
102
public void onClick (View view ) {
97
- if (view .getId () == R .id .button_done ) {
98
- if (mEmailFieldValidator .validate (mEmailEditText .getText ())) {
99
- getDialogHolder ().showLoadingDialog (R .string .fui_progress_dialog_sending );
100
- next (mEmailEditText .getText ().toString ());
101
- }
103
+ if (view .getId () == R .id .button_done
104
+ && mEmailFieldValidator .validate (mEmailEditText .getText ())) {
105
+ onDonePressed ();
102
106
}
103
107
}
108
+
109
+ @ Override
110
+ public void onDonePressed () {
111
+ mHandler .startReset (mEmailEditText .getText ().toString ());
112
+ }
113
+
114
+ private void showEmailSentDialog (String email ) {
115
+ new AlertDialog .Builder (this )
116
+ .setTitle (R .string .fui_title_confirm_recover_password )
117
+ .setMessage (getString (R .string .fui_confirm_recovery_body , email ))
118
+ .setOnDismissListener (new DialogInterface .OnDismissListener () {
119
+ @ Override
120
+ public void onDismiss (DialogInterface dialog ) {
121
+ finish (Activity .RESULT_OK , new Intent ());
122
+ }
123
+ })
124
+ .setPositiveButton (android .R .string .ok , null )
125
+ .show ();
126
+ }
104
127
}
0 commit comments