From 8a6bac00da9bf455a521ff97b1b83fa3df61b928 Mon Sep 17 00:00:00 2001 From: Nezumi <123229563+Nez27@users.noreply.github.com> Date: Tue, 21 Mar 2023 16:07:42 +0700 Subject: [PATCH] Add verify email user --- .../Activity/AccountAndProfileActivity.java | 104 +++++++++++++----- .../foodify/Activity/MainActivity.java | 1 + .../foodify/Activity/SignInActivity.java | 2 +- .../Activity/VerifyAccountActivity.java | 4 +- .../java/com/capstone/foodify/Common.java | 6 +- .../layout/activity_account_and_profile.xml | 64 ++++++++++- 6 files changed, 148 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/capstone/foodify/Activity/AccountAndProfileActivity.java b/app/src/main/java/com/capstone/foodify/Activity/AccountAndProfileActivity.java index 7a26104..bbaf677 100644 --- a/app/src/main/java/com/capstone/foodify/Activity/AccountAndProfileActivity.java +++ b/app/src/main/java/com/capstone/foodify/Activity/AccountAndProfileActivity.java @@ -6,6 +6,7 @@ import android.content.ContentResolver; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.os.CountDownTimer; import android.view.View; import android.webkit.MimeTypeMap; import android.widget.Button; @@ -13,6 +14,7 @@ import android.widget.DatePicker; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.TextView; import android.widget.Toast; import androidx.activity.result.ActivityResult; @@ -58,9 +60,10 @@ public class AccountAndProfileActivity extends AppCompatActivity { private static final String FOLDER_DIRECTORY = "UserImages/"; TextInputLayout textInput_email, textInput_phone, textInput_fullName, textInput_birthDay; + TextView txt_countdown, txt_resend_code, txt_verify_email; EditText edt_birthday, edt_email, edt_phone, edt_fullName; final Calendar myCalendar= Calendar.getInstance(); - LinearLayout change_password; + LinearLayout change_password, countdown_layout; Button update_button, update_image_button; ImageView back_image; RoundedImageView profile_avatar; @@ -69,6 +72,19 @@ public class AccountAndProfileActivity extends AppCompatActivity { ConstraintLayout progressLayout; FirebaseAuth mAuth; FirebaseUser firebaseUser; + CountDownTimer count = new CountDownTimer(60000, 1000) { + @Override + public void onTick(long millisUntilFinished) { + txt_countdown.setText(millisUntilFinished / 1000 + " giây"); + } + + @Override + public void onFinish() { + countdown_layout.setVisibility(View.GONE); + + txt_resend_code.setVisibility(View.VISIBLE); + } + }; @Override protected void onCreate(Bundle savedInstanceState) { @@ -145,8 +161,21 @@ public class AccountAndProfileActivity extends AppCompatActivity { } }); - } + //Set event resend_code button + txt_resend_code.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + sendEmailVerification(); + countdown_layout.setVisibility(View.VISIBLE); + + txt_resend_code.setVisibility(View.GONE); + + count.start(); + } + }); + + } private void uploadToFirebase(Uri uri){ //Name of image user @@ -217,34 +246,52 @@ public class AccountAndProfileActivity extends AppCompatActivity { } } + private void sendEmailVerification(){ + firebaseUser.sendEmailVerification().addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + Toast.makeText(AccountAndProfileActivity.this, "Email đã được gửi đi, vui lòng kiểm tra hộp thư của bạn!", Toast.LENGTH_SHORT).show(); + } + }); + } private void showNotificationEmailVerify(){ - //Get firebase user from Paper - firebaseUser = Paper.book().read("user"); - // Check if user is signed in (non-null) and update UI accordingly. firebaseUser = mAuth.getCurrentUser(); - if(firebaseUser != null){ - if(!firebaseUser.isEmailVerified()){ - showDialogCaution(); - textInput_email.setError("Nhấp vào đây để xác thực!"); - textInput_email.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - //When user click on the text - firebaseUser.sendEmailVerification().addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - Toast.makeText(AccountAndProfileActivity.this, "Email đã được gửi đi, vui lòng kiểm tra hộp thư của bạn!", Toast.LENGTH_SHORT).show(); - } - }); - } - }); - } else { - textInput_email.setErrorEnabled(false); + //Reload firebase user data + firebaseUser.reload().addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + progressLayout.setVisibility(View.GONE); + if(task.isSuccessful()){ + if(firebaseUser != null){ + + //If user don't verify email yet + if(!firebaseUser.isEmailVerified()){ + showDialogCaution(); + txt_verify_email.setVisibility(View.VISIBLE); + txt_verify_email.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + //When user click on the text + + //Count down resend code + countdown_layout.setVisibility(View.VISIBLE); + count.start(); + + sendEmailVerification(); + txt_verify_email.setVisibility(View.GONE); + } + }); + } else { + txt_verify_email.setVisibility(View.GONE); + } + } + } else { + Common.showErrorServerNotification(AccountAndProfileActivity.this, "Đã có lỗi từ hệ thống! Vui lòng thử lại sau!"); + } } - - } + }); } private void showDialogCaution() { @@ -275,7 +322,7 @@ public class AccountAndProfileActivity extends AppCompatActivity { @Override public void onFailure(Call call, Throwable t) { - Common.showErrorServerNotification(AccountAndProfileActivity.this); + Common.showErrorServerNotification(AccountAndProfileActivity.this, "Không thể cập nhật thông tin, vui lòng thử lại sau!"); progressLayout.setVisibility(View.GONE); } }); @@ -301,6 +348,11 @@ public class AccountAndProfileActivity extends AppCompatActivity { profile_avatar = findViewById(R.id.profile_avatar); progressLayout = findViewById(R.id.progress_layout); + countdown_layout = findViewById(R.id.countdown_layout); + + txt_countdown = findViewById(R.id.textview_countdown); + txt_resend_code = findViewById(R.id.textview_resendCode_button); + txt_verify_email = findViewById(R.id.textview_verify_email); } private void setFontUI() { textInput_email.setTypeface(Common.setFontBebas(getAssets())); diff --git a/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java b/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java index 75dae2e..f065b49 100644 --- a/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java +++ b/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java @@ -48,6 +48,7 @@ public class MainActivity extends AppCompatActivity { // Check if user is signed in (non-null) and update UI accordingly. user = mAuth.getCurrentUser(); + if(user != null && Common.CURRENT_USER == null){ user.getIdToken(true) .addOnCompleteListener(new OnCompleteListener() { diff --git a/app/src/main/java/com/capstone/foodify/Activity/SignInActivity.java b/app/src/main/java/com/capstone/foodify/Activity/SignInActivity.java index 504f829..a19463d 100644 --- a/app/src/main/java/com/capstone/foodify/Activity/SignInActivity.java +++ b/app/src/main/java/com/capstone/foodify/Activity/SignInActivity.java @@ -184,7 +184,7 @@ public class SignInActivity extends AppCompatActivity { @Override public void onFailure(Call call, Throwable t) { System.out.println("ERROR: " + t); - Common.showErrorServerNotification(SignInActivity.this); + Common.showErrorServerNotification(SignInActivity.this, "Không thể đăng nhập tài khoản! Vui lòng thử lại sau!"); } }); } else { diff --git a/app/src/main/java/com/capstone/foodify/Activity/VerifyAccountActivity.java b/app/src/main/java/com/capstone/foodify/Activity/VerifyAccountActivity.java index 57df950..d89ae09 100644 --- a/app/src/main/java/com/capstone/foodify/Activity/VerifyAccountActivity.java +++ b/app/src/main/java/com/capstone/foodify/Activity/VerifyAccountActivity.java @@ -259,12 +259,12 @@ public class VerifyAccountActivity extends AppCompatActivity { public void onFailure(Call call, Throwable t) { progressLayout.setVisibility(View.GONE); showErrorText(t.toString()); - Common.showErrorServerNotification(VerifyAccountActivity.this); + Common.showErrorServerNotification(VerifyAccountActivity.this, "Không thể tạo tài khoản! Vui lòng thử lại sau!"); } }); } else { progressLayout.setVisibility(View.GONE); - Common.showErrorServerNotification(VerifyAccountActivity.this); + Common.showErrorServerNotification(VerifyAccountActivity.this, "Đã có lỗi kết nối! Vui lòng thử lại sau!"); } } }); diff --git a/app/src/main/java/com/capstone/foodify/Common.java b/app/src/main/java/com/capstone/foodify/Common.java index 2267918..b7d984f 100644 --- a/app/src/main/java/com/capstone/foodify/Common.java +++ b/app/src/main/java/com/capstone/foodify/Common.java @@ -109,17 +109,17 @@ public class Common { public static void showNotificationError(Context context, Activity activity) { if(getConnectionType(context) != 0){ //Has internet connection - showErrorServerNotification(activity); + showErrorServerNotification(activity, "Đã có lỗi từ hệ thống! Xin vui lòng thử lại sau!"); } else { //No internet, show notification showErrorInternetConnectionNotification(activity); } } - public static void showErrorServerNotification(Activity activity){ + public static void showErrorServerNotification(Activity activity, String message){ new AestheticDialog.Builder(activity, DialogStyle.RAINBOW, DialogType.ERROR) .setTitle("LỖI!") - .setMessage("Đã xuất hiện lỗi từ hệ thống! Vui lòng thử lại sau!") + .setMessage(message) .setCancelable(false) .setOnClickListener(new OnDialogClickListener() { @Override diff --git a/app/src/main/res/layout/activity_account_and_profile.xml b/app/src/main/res/layout/activity_account_and_profile.xml index bda0d6f..6b72f68 100644 --- a/app/src/main/res/layout/activity_account_and_profile.xml +++ b/app/src/main/res/layout/activity_account_and_profile.xml @@ -85,6 +85,68 @@ + + + + + + + + + + +