activity_register.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#4CAF50"
tools:context = ".Register" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/aclonica"
android:text="OTP AUTH"
android:textColor="#FFFFFE"
android:textSize="30sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.13" />
<com.rilixtech.widget.countrycodepicker.CountryCodePicker
android:id="@+id/ccp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.26999998" />
<EditText
android:id="@+id/phone"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:ems="10"
android:hint="Mobile Number"
android:inputType="phone"
android:textColor="#F2F1F3"
android:textColorHint="#FFFEFE"
android:textSize="19sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ccp"
app:layout_constraintVertical_bias="0.0">
</EditText>
<Button
android:id="@+id/nextBtn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:background="#009688"
android:text="NEXT"
android:textColor="#FFFFFF"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/state"
app:layout_constraintVertical_bias="0.19" />
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:visibility="invisible"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/phone" />
<TextView
android:id="@+id/state"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="8dp"
android:text="Sending OTP.."
android:textColor="#FFEB3B"
android:textSize="18sp"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="@+id/progressBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/progressBar"
app:layout_constraintTop_toTopOf="@+id/progressBar" />
<EditText
android:id="@+id/codeEnter"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
android:ems="10"
android:hint="Enter OTP"
android:inputType="number"
android:textColor="#FFFFFF"
android:textColorHighlight="#E8E9EE"
android:textColorHint="#DEDFE6"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/phone"
app:layout_constraintVertical_bias="0.0" />
<TextView
android:id="@+id/resendOtpBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Resend"
android:textColor="#FFEB3B"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="@+id/codeEnter"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.92"
app:layout_constraintStart_toEndOf="@+id/progressBar"
app:layout_constraintTop_toTopOf="@+id/codeEnter" />
</androidx.constraintlayout.widget.ConstraintLayout>
Register.JAVA
package com.tn.loginpacttr;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.FirebaseException;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.PhoneAuthCredential;
import com.google.firebase.auth.PhoneAuthProvider;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.EventListener;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreException;
import com.rilixtech.widget.countrycodepicker.CountryCodePicker;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
public class Register extends AppCompatActivity {
FirebaseAuth fAuth;
String phoneNumber = "+8801712441411";
String otpCode = "889889";
String verificationId;
EditText phone,optEnter;
Button next;
CountryCodePicker countryCodePicker;
PhoneAuthCredential credential;
Boolean verificationOnProgress = false;
ProgressBar progressBar;
TextView state,resend;
PhoneAuthProvider.ForceResendingToken token;
FirebaseFirestore fStore;
@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
phone = findViewById(R.id.phone);
optEnter = findViewById(R.id.codeEnter);
countryCodePicker = findViewById(R.id.ccp);
next = findViewById(R.id.nextBtn);
fAuth = FirebaseAuth.getInstance();
fStore = FirebaseFirestore.getInstance();
progressBar = findViewById(R.id.progressBar);
state = findViewById(R.id.state);
resend = findViewById(R.id.resendOtpBtn);
resend.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
// todo:: resend OTP }
});
next.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
if(!phone.getText().toString().isEmpty() && phone.getText().toString().length() == 10) {
if(!verificationOnProgress){
next.setEnabled(false);
progressBar.setVisibility(View.VISIBLE);
state.setVisibility(View.VISIBLE);
String phoneNum = "+"+countryCodePicker
.getSelectedCountryCode()+phone.getText().toString();
Log.d("phone", "Phone No.: " + phoneNum);
requestPhoneAuth(phoneNum);
}else {
next.setEnabled(false);
optEnter.setVisibility(View.GONE);
progressBar.setVisibility(View.VISIBLE);
state.setText("Log in");
state.setVisibility(View.VISIBLE);
otpCode = optEnter.getText().toString();
if(otpCode.isEmpty()){
optEnter.setError("Required");
return;
}
credential = PhoneAuthProvider.getCredential(verificationId,otpCode);
verifyAuth(credential);
}
}else {
phone.setError("Valid Phone Number Required");
}
}
});
}
private void requestPhoneAuth(String phoneNumber) {
PhoneAuthProvider.getInstance().verifyPhoneNumber(phoneNumber,60L, TimeUnit.SECONDS,this,
new PhoneAuthProvider.OnVerificationStateChangedCallbacks(){
@Override public void onCodeAutoRetrievalTimeOut(String s) {
super.onCodeAutoRetrievalTimeOut(s);
Toast.makeText(Register.this, "OTP Timeout, Please Re-generate the OTP Again.", Toast.LENGTH_SHORT).show();
resend.setVisibility(View.VISIBLE);
}
@Override public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
super.onCodeSent(s, forceResendingToken);
verificationId = s;
token = forceResendingToken;
verificationOnProgress = true;
progressBar.setVisibility(View.GONE);
state.setVisibility(View.GONE);
next.setText("Verify");
next.setEnabled(true);
optEnter.setVisibility(View.VISIBLE);
}
@Override public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
// called if otp is automatically detected by the app verifyAuth(phoneAuthCredential);
}
@Override public void onVerificationFailed(FirebaseException e) {
Toast.makeText(Register.this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
private void verifyAuth(PhoneAuthCredential credential) {
fAuth.signInWithCredential(credential).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
Toast.makeText(Register.this,
"Phone Verified."+fAuth.getCurrentUser().getUid(), Toast.LENGTH_SHORT).show();
checkUserProfile();
}else {
progressBar.setVisibility(View.GONE);
state.setVisibility(View.GONE);
Toast.makeText(Register.this, "Can not Verify phone and Create Account.",
Toast.LENGTH_SHORT).show();
}
}
});
}
@Overrideprotected void onStart() {
super.onStart();
if(fAuth.getCurrentUser() != null){
progressBar.setVisibility(View.VISIBLE);
state.setText("Checking..");
state.setVisibility(View.VISIBLE);
checkUserProfile();
}
}
private void checkUserProfile() {
DocumentReference docRef = fStore.collection("users").document
(fAuth.getCurrentUser().getUid());
docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override public void onSuccess(DocumentSnapshot documentSnapshot) {
if(documentSnapshot.exists()){
startActivity(new Intent(getApplicationContext(),MainActivity.class));
finish();
}else {
//Toast.makeText(Register.this, "Profile Do not Exists.", Toast.LENGTH_SHORT).show();
startActivity(new Intent(getApplicationContext(),Detaile.class));
finish();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override public void onFailure(@NonNull Exception e) {
Toast.makeText(Register.this, "Profile Do Not Exists", Toast.LENGTH_SHORT).show();
}
});
}
}
0 Comments