Virtual Asset (Crypto)

Virtual Asset (Crypto)

The Mindchain Ecosystem refers to a decentralized network built on blockchain technology that encompasses various interconnected components, including cryptocurrencies, own blockchain, decentralized applications (DApps), wallets, centralized exchange (CEX), decentralized exchange (DEX), and digital payment solutions.

Phone OTP Create Register Activity-4

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();
      }
   });
}
}

Post a Comment

0 Comments