my app start with register activity that asks for their phone num, after entering phone numb a otp code would be received then entered to access the final stage of creating an account which is setup profile name and picture.
my problem is if the user closed the app when he is setup profile activity which is after otp, next time he opens the app he would still be logged in even if the phone and account is not created yet at firebase.
SetProfileActivity:
public class SetupProfileActivity extends AppCompatActivity {
ActivitySetupProfileBinding binding;
FirebaseAuth auth;
FirebaseDatabase database;
FirebaseStorage storage;
Uri selectedImage;
ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivitySetupProfileBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
database = FirebaseDatabase.getInstance();
storage = FirebaseStorage.getInstance();
auth = FirebaseAuth.getInstance();
dialog = new ProgressDialog(this);
dialog.setMessage("Uploading Profile Setting...");
dialog.setCancelable(false);
binding.profileImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, 45);
}
});
binding.finishBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name = binding.nameBox.getText().toString();
if (name.isEmpty()) {
binding.nameBox.setError(getString(R.string.cant_be_empty));
return;
}
dialog.show();
if (selectedImage !=null){
StorageReference reference = storage.getReference().child("Profiles").child(auth.getUid());
reference.putFile(selectedImage).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if (task.isSuccessful()){
reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String imageUrl = uri.toString();
String uid = auth.getUid();
String phone = auth.getCurrentUser().getPhoneNumber();
String name = binding.nameBox.getText().toString().trim();
User user = new User(uid, name, phone, imageUrl);
database.getReference()
.child("Users")
.child(phone)
.setValue(user)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
dialog.dismiss();
Intent intent = new Intent(SetupProfileActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
});
}
});
}
}
});
} else {
String uid = auth.getUid();
String phone = auth.getCurrentUser().getPhoneNumber();
User user = new User(uid, name, phone, "No Image");
database.getReference()
.child("Users")
.child(phone)
.setValue(user)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
dialog.dismiss();
Intent intent = new Intent(SetupProfileActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
});
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data !=null){
if (data.getData() !=null){
binding.profileImageView.setImageURI(data.getData());
selectedImage = data.getData();
}
}
}
// check if want to exit
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, getString(R.string.click_again_to_Exit), Toast.LENGTH_SHORT).show();
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
}
}
CodePudding user response:
Since you tagged with firebase-realtime-database
I'm going to assume that is where you store the additional profile information.
If so, you will have to:
- Try and read the profile information for the current user when the app starts.
- If the information exists, redirect them to the main activity.
- If the information does not exist, redirect them to the registration page.