How to Create a Simple Login and Registration App in Android Studio That Displays Username Using Firebase
Firebase was created by google to simplify processes that involved databases. Instead of writing SQL codes, developers could use firebase to simplify their processes. Firebase can be used for authentication and data storage. In this tutorial we will focus on authentication that involves user email and password. Though other forms exist, like google, facebook and twitter login amongst others. We will stick with the email and password for now. You can check my timeline for the other tutorials. For complete beginners don’t worry I have uploaded the source code on github and have riddled my code with comments to help you better understand. Before commencing this tutorial make sure you have hooked up your project to firebase.
First we will create a welcome page in xml. The page will consist of two buttons. A login and signup button. I used a constraint layout as the default layout. The code is below with comments. The comments are marked by a “//” in front. You might notice that the buttons have a background. We will be creating a background button for the signup and login. For the login button we will create an xml file under the drawable folder and name it get.
<?xml version=”1.0" encoding=”utf-8"?>
<shape xmlns:android=”http://schemas.android.com/apk/res/android"
android:shape=”rectangle”> // defines the shape of the background
<solid android:color=”@color/signIn”/> // this color is defined in the color.xml
<corners android:radius=”5dp”/> // defines the corner radius
</shape>
For the signup button we follow the steps we used to create the get.xml file and input the following code. we will call the xml file transaprent
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke android:color="@color/signIn"
android:width="2dp"/>
<solid android:color="@android:color/transparent"/>
<corners
android:radius="5dp"/>
// follow the comments in get.xml for better understanding
</shape>
In our activity.main input the following code.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="@drawable/background" // specifies the background of the activity. You can use a normal color like @android:color/white
tools:context=".MainActivity">
<Button
android:id="@+id/btnlogin"
android:layout_width="0dp"
android:layout_height="38dp"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
android:background="@drawable/get"
android:text="@string/login_name"// specifies the background of the button
android:textColor="@android:color/background_light"
android:textSize="15sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.914"
tools:text="@string/login_name" />
<Button
android:id="@+id/btnsignup"
android:layout_width="0dp"
android:layout_height="38dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:background="@drawable/transparent" //specifies button background
android:text="@string/signup_name"
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/btnlogin"
app:layout_constraintVertical_bias="0.333"
tools:text="@string/signup_name" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:fontFamily="@font/noto_sans_bold"
android:text="@string/welcome"
android:textColor="@color/signIn"
android:textSize="42sp"
app:layout_constraintBottom_toTopOf="@+id/btnlogin"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.287" />
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/btnlogin"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.495"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView4"
app:srcCompat="@drawable/logo" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:fontFamily="@font/noto_sans_bold"
android:text="@string/to"
android:textColor="@color/transTo"
android:textSize="15sp"
app:layout_constraintBottom_toTopOf="@+id/imageView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView4"
app:layout_constraintVertical_bias="0.00999999" />
</android.support.constraint.ConstraintLayout>
In the MainActivity. Java we type in the following
package com.example.logintask;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnSignup = (Button) findViewById(R.id.btnsignup);
Button btnLogin = (Button) findViewById(R.id.btnlogin);
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent login = new Intent(MainActivity.this, login.class);
startActivity(login); // takes the user to the login activity
}
});
btnSignup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent signup = new Intent(MainActivity.this, signup.class);
startActivity(signup);
}
});
}
}
we will create a new activity and call it login. In the login.xml we type in the following
?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="@drawable/login"
tools:context=".login">
<EditText
android:id="@+id/etemail"
android:layout_width="0dp"
android:layout_height="57dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
android:background="@drawable/editfield"
android:ems="10"
android:fontFamily="sans-serif-medium"
android:hint="@string/email_name"
android:inputType="text"
android:textColor="@color/editText"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.367" />
<EditText
android:id="@+id/etpassword"
android:layout_width="0dp"
android:layout_height="57dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
android:autofillHints=""
android:background="@drawable/editfield"
android:ems="10"
android:fontFamily="sans-serif-medium"
android:hint="@string/password_name"
android:inputType="textPassword"
android:textColor="@color/editText"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/etemail"
app:layout_constraintVertical_bias="0.044" />
<Button
android:id="@+id/btnlogin"
android:layout_width="0dp"
android:layout_height="57dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
android:background="@drawable/loginbtn"
android:text="@string/login_name"
android:textColor="@android:color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/etpassword"
app:layout_constraintVertical_bias="0.125" />
<Button
android:id="@+id/btnsignup"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
android:background="@drawable/transparent"
android:text="@string/signup_name"
android:textColor="@color/signIn"
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/textView"
app:layout_constraintVertical_bias="0.407" />
<ProgressBar
android:id="@+id/progressLog"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:fontFamily="@font/noto_sans_bold"
android:text="@string/login_name"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@color/signIn"
android:textSize="32sp"
app:layout_constraintBottom_toTopOf="@+id/etemail"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/etemail"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.582" />
<TextView
android:id="@+id/textView7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="32dp"
android:layout_marginBottom="8dp"
android:fontFamily="sans-serif-medium"
android:text="@string/login_info"
android:textAlignment="textStart"
android:textColor="@color/signIn"
android:textSize="13sp"
app:layout_constraintBottom_toTopOf="@+id/etemail"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.212"
app:layout_constraintStart_toStartOf="@+id/etemail"
app:layout_constraintTop_toBottomOf="@+id/textView6"
app:layout_constraintVertical_bias="0.324" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="2dp"
android:fontFamily="sans-serif-medium"
android:text="@string/dont_name"
android:textColor="@color/signIn"
android:textSize="15sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnlogin"
app:layout_constraintVertical_bias="0.6" />
</android.support.constraint.ConstraintLayout>
In the login.java we will type in the following.
package com.example.logintask;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
public class login extends AppCompatActivity {
FirebaseAuth firebaseAuth;
EditText etmail;
EditText etPassword;
Button btnLogin;
Button btnRegister;
private FirebaseAuth.AuthStateListener authStateListener;
ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
firebaseAuth = FirebaseAuth.getInstance();
etmail = (EditText) findViewById(R.id.etemail);
etPassword = (EditText) findViewById(R.id.etpassword);
btnLogin = (Button) findViewById(R.id.btnlogin);
btnRegister = (Button) findViewById(R.id.btnsignup);
progressBar = (ProgressBar) findViewById(R.id.progressLog);
// checks whether the user is logged in and executes the code
authStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
if (firebaseUser != null){
Toast.makeText(login.this, "Login Successful", Toast.LENGTH_SHORT).show();
Intent home = new Intent(login.this, dashboard.class);
startActivity(home);
}
else{
Toast.makeText(login.this, "Please Login", Toast.LENGTH_SHORT).show();
}
}
};
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
String email = etmail.getText().toString(); // gets the user email
String password = etPassword.getText().toString();
if (email.isEmpty()){
etmail.setError("PLEASE ENTER EMAIL ADDRESS");
etmail.requestFocus();
}
else if (password.isEmpty()){
etPassword.setError("PLEASE INPUT PASSWORD");
etPassword.requestFocus();
}
else if (email.isEmpty() && password.isEmpty()){
Toast.makeText(login.this, " BOTH FIELDS ARE EMPTY!!", Toast.LENGTH_SHORT).show();
}
else if (!(email.isEmpty() && !password.isEmpty())){
progressBar.setVisibility(View.VISIBLE);
firebaseAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(login.this,
new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
progressBar.setVisibility(View.GONE);
if (!task.isSuccessful()){
Toast.makeText(login.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
else{
Intent dashboard = new Intent(login.this, dashboard.class);
startActivity(dashboard);
}
}
});
}
else {
Toast.makeText(login.this, "Error Occured",Toast.LENGTH_SHORT).show();
}
}
});
btnRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent signup = new Intent(login.this, signup.class);
startActivity(signup);
}
});
}
@Override
protected void onStart() {
super.onStart(); // attach the firebase listener when the activity starts
firebaseAuth.addAuthStateListener(authStateListener);
}
@Override
protected void onStop() {
super.onStop(); // remove the firebase listener when the activity stops
if (authStateListener != null) {
firebaseAuth.removeAuthStateListener(authStateListener);
}
}
}
Create a new activity and call it signup. In the signup .xml . input the following code.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="@drawable/login"
tools:context=".signup">
<EditText
android:id="@+id/editTextemail"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
android:background="@drawable/editfield"
android:ems="10"
android:hint="@string/email_name"
android:inputType="textEmailAddress"
android:textColor="@color/editText"
android:textSize="15sp"
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/textName"
app:layout_constraintVertical_bias="0.0" />
<EditText
android:id="@+id/editTextpassword"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
android:background="@drawable/editfield"
android:ems="10"
android:hint="@string/password_name"
android:inputType="textPassword"
android:textColor="@color/editText"
android:textSize="15sp"
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/editTextemail"
app:layout_constraintVertical_bias="0.0" />
<Button
android:id="@+id/btnsignup"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
android:background="@drawable/loginbtn"
android:text="@string/signup_name"
android:textColor="@android:color/white"
android:textSize="14sp"
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/editTextpassword"
app:layout_constraintVertical_bias="0.0" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:text="@string/already_name"
android:textColor="@color/signIn"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnsignup"
app:layout_constraintVertical_bias="0.651" />
<Button
android:id="@+id/btnlogin"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
android:background="@drawable/transparent"
android:text="@string/login_name"
android:textColor="@color/signIn"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2" />
<ProgressBar
android:id="@+id/progressLog"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/editTextpassword"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/textName"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
android:background="@drawable/editfield"
android:ems="10"
android:hint="@string/user_name"
android:inputType="textPersonName"
android:textColor="@color/editText"
android:textSize="15sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.367" />
<TextView
android:id="@+id/textView8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:fontFamily="@font/noto_sans_bold"
android:text="@string/signup_name"
android:textColor="@color/signIn"
android:textSize="32sp"
app:layout_constraintBottom_toTopOf="@+id/textName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/textName"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView9"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="32dp"
android:layout_marginBottom="8dp"
android:fontFamily="sans-serif-medium"
android:text="@string/signup_info"
android:textAlignment="textStart"
android:textColor="@color/signIn"
android:textSize="13sp"
app:layout_constraintBottom_toTopOf="@+id/textName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/textName"
app:layout_constraintTop_toBottomOf="@+id/textView8"
app:layout_constraintVertical_bias="0.07999998" />
In the signup.java we input the following code.
package com.example.logintask;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
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.Toast;
import com.example.logintask.model.user;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.UserProfileChangeRequest;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
public class signup extends AppCompatActivity {
FirebaseDatabase database;
DatabaseReference users;
EditText username;
EditText emails;
EditText password;
Button btnRegister;
FirebaseAuth firebaseAuth;
ProgressBar progressBar;
Button loginBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signup);
firebaseAuth = FirebaseAuth.getInstance();
loginBtn = (Button) findViewById(R.id.btnlogin);
username = (EditText)findViewById(R.id.textName);
emails = (EditText) findViewById(R.id.editTextemail);
password = (EditText) findViewById(R.id.editTextpassword);
btnRegister = (Button) findViewById(R.id.btnsignup);
progressBar = (ProgressBar) findViewById(R.id.progressLog);
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(signup.this,login.class));
}
});
btnRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String email = emails.getText().toString().trim();
String pwd = password.getText().toString().trim();
final String name = username.getText().toString().trim();// this condition checks to make sure the user inputs the correct details
if(email.isEmpty()){
emails.setError("Please enter email id");
emails.requestFocus();
}
else if(pwd.isEmpty()){
password.setError("Please enter your password");
password.requestFocus();
}
else if(email.isEmpty() && pwd.isEmpty()){
Toast.makeText(signup.this,"Fields Are Empty!",Toast.LENGTH_SHORT).show();
}
else if(!(email.isEmpty() && pwd.isEmpty())){
progressBar.setVisibility(View.VISIBLE);// this firebase method creates a user with email and password
firebaseAuth.createUserWithEmailAndPassword(email, pwd).addOnCompleteListener(signup.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(!task.isSuccessful()){
Toast.makeText(signup.this,task.getException().getMessage(),Toast.LENGTH_SHORT).show();
}
else {
FirebaseUser user = firebaseAuth.getCurrentUser();
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setDisplayName(name).build(); // saves the username
user.updateProfile(profileUpdates).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(signup.this, "username stored successful", Toast.LENGTH_LONG).show();
}
}
});
startActivity(new Intent(signup.this, login.class));
Toast.makeText(signup.this, "Registration is successful", Toast.LENGTH_SHORT).show();
}
}
});
}
else{
Toast.makeText(signup.this,"Error Occurred!",Toast.LENGTH_SHORT).show();
}
}
});
}
}
This is the moment we create a dashboard that welcomes our user and displays our username and email. We create a dashboard activity and in the dashboard.xml we input the following code.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="@drawable/login"
tools:context=".dashboard">
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:fontFamily="@font/noto_sans_bold"
android:text="@string/welcome"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textColor="@color/signIn"
android:textSize="40sp"
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.38" />
<TextView
android:id="@+id/username_conf"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:fontFamily="sans-serif-medium"
android:text="TextView"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@color/signIn"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView3"
app:layout_constraintVertical_bias="0.042" />
<TextView
android:id="@+id/email_conf"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:fontFamily="sans-serif-medium"
android:text="TextView"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@color/signIn"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/username_conf"
app:layout_constraintVertical_bias="0.051" />
<Button
android:id="@+id/btnSignout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/loginbtn"
android:text="@string/sign_out"
android:textColor="@android:color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/email_conf" />
<ProgressBar
android:id="@+id/progresSign"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
In the dashboard.java we input the following code
package com.example.logintask;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
public class dashboard extends AppCompatActivity {
Button signOut;
private FirebaseAuth auth;
private FirebaseAuth.AuthStateListener authListener;
ProgressBar progressBar;
TextView emailText;
TextView username;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dashboard);
progressBar = (ProgressBar) findViewById(R.id.progresSign);
signOut = (Button) findViewById(R.id.btnSignout);
auth = FirebaseAuth.getInstance();
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); // gets the current user and stores it
emailText = (TextView) findViewById(R.id.email_conf);
username = (TextView) findViewById(R.id.username_conf);
String name = user.getDisplayName(); // gets display name gets the name of the user and stores it in the String name
username.setText(name);
emailText.setText(user.getEmail()); // gets the user email and appends it to the emailtext textview.
authListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user == null) {
startActivity(new Intent(dashboard.this, login.class));
finish();
}
}
};
signOut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progressBar.setVisibility(View.VISIBLE);
auth.signOut();
startActivity(new Intent(dashboard.this, login.class));
progressBar.setVisibility(View.INVISIBLE);
}
});
}
}



the github link: https://github.com/Ochuba/LoginTask
you can follow me on twitter: @samuelOchuba
May the force with you.