结对冲刺12
实现SignActivity
1 package com.example.chatapptest.activities; 2 3 import androidx.appcompat.app.AppCompatActivity; 4 5 import android.content.Intent; 6 import android.os.Bundle; 7 import android.util.Patterns; 8 import android.view.View; 9 import android.widget.Toast; 10 11 import com.example.chatapptest.R; 12 import com.example.chatapptest.databinding.ActivitySignInBinding; 13 import com.example.chatapptest.utilities.Constants; 14 import com.example.chatapptest.utilities.PreferenceManager; 15 import com.google.firebase.firestore.DocumentSnapshot; 16 import com.google.firebase.firestore.FirebaseFirestore; 17 18 import java.util.HashMap; 19 20 public class SignInActivity extends AppCompatActivity { 21 private ActivitySignInBinding binding; 22 private PreferenceManager preferenceManager; 23 24 @Override 25 protected void onCreate(Bundle savedInstanceState) { 26 super.onCreate(savedInstanceState); 27 preferenceManager = new PreferenceManager(getApplicationContext()); 28 if(preferenceManager.getBoolean(Constants.KEY_IS_SIGNED_IN)){ 29 Intent intent = new Intent(getApplicationContext(), MainActivity.class); 30 startActivity(intent); 31 finish(); 32 } 33 binding = ActivitySignInBinding.inflate(getLayoutInflater()); 34 setContentView(binding.getRoot()); 35 setListeners(); 36 } 37 38 private void setListeners(){ 39 binding.textCreateNewAccount.setOnClickListener(v -> 40 startActivity(new Intent(getApplicationContext(), SignUpActivity.class))); 41 binding.buttonSignIn.setOnClickListener(v -> { 42 if(isValidSignInDetails()){ 43 signIn(); 44 } 45 }); 46 } 47 48 private void showToast(String message){ 49 Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show(); 50 } 51 52 private void signIn(){ 53 loading(true); 54 FirebaseFirestore database = FirebaseFirestore.getInstance(); 55 database.collection(Constants.KEY_COLLECTION_USERS) 56 .whereEqualTo(Constants.KEY_EMAIL,binding.inputEmail.getText().toString()) 57 .whereEqualTo(Constants.KEY_PASSWORD,binding.inputPassword.getText().toString()) 58 .get() 59 .addOnCompleteListener(task -> { 60 if(task.isSuccessful() && task.getResult() != null 61 && task.getResult().getDocuments().size()>0){ 62 DocumentSnapshot documentSnapshot = task.getResult().getDocuments().get(0); 63 preferenceManager.putBoolean(Constants.KEY_IS_SIGNED_IN,true); 64 preferenceManager.putString(Constants.KEY_USER_ID, documentSnapshot.getId()); 65 preferenceManager.putString(Constants.KEY_NAME,documentSnapshot.getString(Constants.KEY_NAME)); 66 preferenceManager.putString(Constants.KEY_IMAGE,documentSnapshot.getString(Constants.KEY_IMAGE)); 67 Intent intent = new Intent(getApplicationContext(), MainActivity.class); 68 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 69 startActivity(intent); 70 }else { 71 loading(false); 72 showToast("Unable to sign in"); 73 } 74 }); 75 } 76 77 private void loading(Boolean isLoading){ 78 if(isLoading){ 79 binding.buttonSignIn.setVisibility(View.INVISIBLE); 80 binding.progressBar.setVisibility(View.VISIBLE); 81 }else { 82 binding.progressBar.setVisibility(View.INVISIBLE); 83 binding.buttonSignIn.setVisibility(View.VISIBLE); 84 } 85 } 86 87 private Boolean isValidSignInDetails(){ 88 if(binding.inputEmail.getText().toString().trim().isEmpty()){ 89 showToast("Enter email"); 90 return false; 91 } else if (!Patterns.EMAIL_ADDRESS.matcher(binding.inputEmail.getText().toString()).matches()) { 92 showToast("Enter valid email"); 93 return false; 94 } else if (binding.inputPassword.getText().toString().trim().isEmpty()) { 95 showToast("Enter password"); 96 return false; 97 }else { 98 return true; 99 } 100 } 101 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?