11package com .example .hongjo .myfinancialmanager ;
22
3+ import android .app .LoaderManager ;
4+ import android .content .CursorLoader ;
5+ import android .content .Loader ;
36import android .content .ContentValues ;
47import android .content .Intent ;
8+ import android .database .Cursor ;
59import android .os .Bundle ;
610import android .support .v7 .app .AlertDialog ;
711import android .support .v7 .app .AppCompatActivity ;
1721import com .example .hongjo .myfinancialmanager .model .User ;
1822
1923//this app only accepts 1 user account because it is run in local Database
20- public class LoginActivity extends AppCompatActivity {
24+ public class LoginActivity extends AppCompatActivity implements LoaderManager .LoaderCallbacks <Cursor >,
25+ ShowingSecurityQuestionFragment .FromCallBack {
2126
2227 //key for shared preference
2328 public static final String ENABLE_LOGIN = "ENABLE_LOGIN" ;
@@ -32,6 +37,12 @@ public class LoginActivity extends AppCompatActivity{
3237
3338 private TextView forgotPassword ;
3439
40+ /**
41+ * This variable is used as the key, when passing a security question string
42+ * as an argument to the ShowingSecurityQuestionFragment.java class
43+ */
44+ public static final String SECURITY_QUESTION = "security_question" ;
45+
3546 @ Override
3647 protected void onCreate (Bundle savedInstanceState ) {
3748 super .onCreate (savedInstanceState );
@@ -57,12 +68,15 @@ protected void onCreate(Bundle savedInstanceState) {
5768 forgotPassword = findViewById (R .id .forgot_password );
5869
5970 Button signIn = findViewById (R .id .sign_in_button );
60- Button createAccount = findViewById (R .id .create_account_button );
71+ Button register = findViewById (R .id .register );
6172
6273 signIn .setOnClickListener (listener );
63- createAccount .setOnClickListener (listener );
74+ register .setOnClickListener (listener );
6475 forgotPassword .setOnClickListener (listener );
6576
77+ //init the LoaderManager
78+ getLoaderManager ().initLoader (0 , null , this );
79+
6680 }
6781
6882 View .OnClickListener listener = new View .OnClickListener (){
@@ -74,14 +88,26 @@ public void onClick(View view){
7488 case R .id .sign_in_button :
7589 checkValidity ();
7690 break ;
77- case R .id .create_account_button :
78- register ();
91+ case R .id .register :
92+ //if user data already exists, show this alert dialog
93+ if (user !=null ){
94+ AlertDialog .Builder builder = new AlertDialog .Builder (LoginActivity .this );
95+ builder .setTitle (R .string .register_error );
96+ builder .setMessage (R .string .sign_up_error_user_already_in_database );
97+ builder .setPositiveButton ("OK" , null ).create ().show ();
98+ return ;
99+ }
100+ Intent intent = new Intent (LoginActivity .this , RegisterActivity .class );
101+ startActivity (intent );
102+ finish ();
79103 break ;
80104 case R .id .forgot_password :
81105 //if the user forgets the password, send it to the user's email
82- //TO DO: send the user email with his/her message
106+ //TO DO: let the user answer his/her security question
83107 if (user !=null ) {
84- Toast .makeText (LoginActivity .this , user .getPassword (), Toast .LENGTH_SHORT ).show ();
108+ promptSecurityQuestion ();
109+ }else {
110+ Toast .makeText (LoginActivity .this , "Please create a new account" , Toast .LENGTH_SHORT ).show ();
85111 }
86112 break ;
87113 }
@@ -128,50 +154,70 @@ private void checkValidity(){
128154 builder .setMessage (R .string .sign_in_error_no_email_in_database );
129155 builder .setCancelable (false ).setPositiveButton ("OK" , null ).create ().show ();
130156 }
131-
132157 }
133158
134- //this method is to create account
135- private void register (){
159+ /**
160+ * This method is to show the security question and get the answer to it.
161+ * It is called when the user forgets the password or id
162+ */
163+
164+ private void promptSecurityQuestion (){
165+
166+ ShowingSecurityQuestionFragment fragment = new ShowingSecurityQuestionFragment ();
167+
168+ int index = user .getSecurityQNum ();
169+ String securityQuestion = getResources ().getStringArray (R .array .security_question )[index ];
170+
171+ Bundle bundle = new Bundle ();
172+ bundle .putString (SECURITY_QUESTION , securityQuestion );
173+ fragment .setArguments (bundle );
174+ fragment .show (getSupportFragmentManager (), "PROMPT_SECURITY_QUESTION" );
136175
176+ }
177+
178+ private void reLoad (){
179+ getLoaderManager ().restartLoader (0 , null , this );
137180 user = mDataSource .getUser ();
181+ }
138182
139- AlertDialog .Builder builder = new AlertDialog .Builder (this );
140- builder .setTitle (R .string .register_error );
183+ @ Override
184+ public void onResume (){
185+ super .onResume ();
186+ mDataSource .open ();
187+ reLoad ();
188+ }
141189
142- if ( user != null ){
143- builder . setMessage ( R . string . sign_up_error_user_already_in_database );
144- builder . setPositiveButton ( "OK" , null ). create (). show ();
145- return ;
146- }
190+ @ Override
191+ public void onPause (){
192+ super . onPause ();
193+ mDataSource . close () ;
194+ }
147195
148- email = emailEdt .getText ().toString ();
149- password = passwordEdt .getText ().toString ();
150196
151- if (!email .contains ("@" )){
152- builder .setMessage (R .string .register_error_invalid_email )
153- .setPositiveButton ("OK" , null ).create ().show ();
154- }else if (password .trim ().length ()<8 ){
155- builder .setMessage (R .string .register_error_short_password )
156- .setPositiveButton ("OK" , null ).create ().show ();
157- }else {
158- insertUser (email , password );
159- builder .setTitle (R .string .register_ok_account_created );
160- builder .setMessage (R .string .promt_sign_in ).setPositiveButton ("OK" , null ).create ().show ();
161- emailEdt .setText (email );
162- passwordEdt .setText ("" );
163- }
197+ @ Override
198+ public Loader <Cursor > onCreateLoader (int i , Bundle bundle ) {
199+ return new CursorLoader (this , DataProvider .USER_URI ,
200+ null , null , null , null );
164201 }
165202
166- private void insertUser (String email , String password ){
203+ @ Override
204+ public void onLoadFinished (android .content .Loader <Cursor > loader , Cursor cursor ) {
167205
168- ContentValues values = new ContentValues ();
206+ }
169207
170- values . put ( UserTable . COL1 , email );
171- values . put ( UserTable . COL2 , password );
208+ @ Override
209+ public void onLoaderReset ( android . content . Loader < Cursor > loader ) {
172210
173- getContentResolver ().insert (DataProvider .USER_URI , values );
174211 }
175212
213+ @ Override
214+ public void securityQuestionAnswered (String securityAnswer ) {
215+
216+ if (securityAnswer .toLowerCase ().equals (user .getSecuirtyAnswer ().toLowerCase ())){
217+ Toast .makeText (this , "Your password is: " +user .getPassword () , Toast .LENGTH_LONG ).show ();
218+ }else {
219+ Toast .makeText (this , "Wrong security answer!" , Toast .LENGTH_SHORT ).show ();
220+ }
221+ }
176222}
177223
0 commit comments