This is the Part 1 of “Build a Social Media App on Android Studio” tutorial, and we are going to cover the following functionalities in this article:
- Creating a Splash Screen
- Authentication Part:
- Registration, and
- Login
Step By Step Implementation
Step 1: Create a New Project
To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. Note that select Java as the programming language.
Step 2: Connect your app to firebase
Go to the Tools > Firebase > Authentication and connect your app to firebase and also add the firebase authentication SDK to your app like the following image.
Then go to the Firebase Console > Authentication > Sign-in method and Enable the Email/Password.
Step 3: Create 4 new empty activities
Go to the package name > right-click > New > Activity > Empty Activity and name the activity as SplashScreen, RegistrationActivity, LoginActivity, and DashboardActivity. You may also refer to this article How to create new empty activity in android studio.
Step 4: Working with the SplashScreen Activity
Navigate to the app > res > layout > activity_splash_screen.xml and add the below code to that file. Below is the code for the activity_splash_screen.xml file.
XML
<? xml version = "1.0" encoding = "utf-8" ?> < androidx.constraintlayout.widget.ConstraintLayout android:layout_width = "match_parent" android:layout_height = "match_parent" android:background = "@drawable/background_color" tools:context = ".SplashScreen" > </ androidx.constraintlayout.widget.ConstraintLayout > |
Working with the SplashScreen.java file. Here we are checking that if the user is null then go to LoginActivity. Else move to DashboardActivity.
new Handler().postDelayed(new Runnable() { @Override public void run() { FirebaseUser user=mAuth.getCurrentUser(); if(user==null){ Intent intent = new Intent(SplashScreen.this, LoginActivity.class); startActivity(intent); finish(); } else { Intent mainIntent= new Intent(SplashScreen.this, DashboardActivity.class); mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(mainIntent); finish(); } } },1000);
Below is the code for the SplashScreen.java file.
Java
package com.example.socialmediaapp; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import androidx.appcompat.app.AppCompatActivity; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; public class SplashScreen extends AppCompatActivity { FirebaseUser currentUser; private FirebaseAuth mAuth; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_splash_screen); mAuth = FirebaseAuth.getInstance(); if (mAuth != null ) { currentUser = mAuth.getCurrentUser(); } new Handler().postDelayed( new Runnable() { @Override public void run() { FirebaseUser user = mAuth.getCurrentUser(); if (user == null ) { Intent intent = new Intent(SplashScreen. this , LoginActivity. class ); startActivity(intent); finish(); } else { Intent mainIntent = new Intent(SplashScreen. this , DashboardActivity. class ); mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(mainIntent); finish(); } } }, 1000 ); } } |
Step 5: Working with the RegistrationActivity Activity
Navigate to the app > res > layout > activity_registration.xml and add the below code to that file. Below is the code for the activity_registration.xml file. Here we have created three EditText for the name, email and password and one Button to Register user.
XML
<? xml version = "1.0" encoding = "utf-8" ?> < RelativeLayout android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context = ".RegistrationActivity" > < TextView android:id = "@+id/teacher" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_alignParentStart = "true" android:layout_alignParentTop = "true" android:layout_marginTop = "50dp" android:gravity = "center" android:text = "Sign Up Here" android:textColor = "@color/colorBlack" android:textSize = "28sp" android:textStyle = "bold|italic" /> < TextView android:id = "@+id/names" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@id/teacher" android:layout_marginStart = "35dp" android:layout_marginTop = "120dp" android:text = "Name" android:textColor = "@color/colorBlack" /> < EditText android:id = "@+id/register_name" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@+id/names" android:layout_alignParentStart = "true" android:layout_marginLeft = "30dp" android:layout_marginTop = "10dp" android:layout_marginRight = "30dp" android:background = "@drawable/edit" android:drawableStart = "@drawable/name" android:hint = "Your Name..." android:inputType = "text" android:padding = "8dp" /> < TextView android:id = "@+id/email" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@id/register_name" android:layout_marginStart = "35dp" android:layout_marginTop = "10dp" android:text = "Email" android:textColor = "@color/colorBlack" /> < EditText android:id = "@+id/register_email" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@+id/email" android:layout_alignParentStart = "true" android:layout_marginLeft = "30dp" android:layout_marginTop = "10dp" android:layout_marginRight = "30dp" android:background = "@drawable/edit" android:drawableStart = "@drawable/ic_email" android:hint = "Email..." android:inputType = "textEmailAddress" android:padding = "8dp" /> < TextView android:id = "@+id/pass" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@id/register_email" android:layout_marginStart = "35dp" android:layout_marginTop = "10dp" android:text = "Password" android:textColor = "@color/colorBlack" /> < EditText android:id = "@+id/register_password" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@+id/pass" android:layout_alignParentStart = "true" android:layout_marginLeft = "30dp" android:layout_marginTop = "10dp" android:layout_marginRight = "30dp" android:background = "@drawable/edit" android:drawableStart = "@drawable/password" android:hint = "Password..." android:inputType = "textPassword" android:padding = "8dp" /> < Button android:id = "@+id/register_button" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@+id/register_password" android:layout_marginLeft = "30dp" android:layout_marginTop = "30dp" android:layout_marginRight = "30dp" android:background = "@drawable/buttonss" android:padding = "4dp" android:text = "Create Account" android:textAllCaps = "false" android:textColor = "@android:color/background_light" android:textSize = "24sp" /> < TextView android:id = "@+id/homepage" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@+id/register_button" android:layout_centerHorizontal = "true" android:layout_marginStart = "15dp" android:layout_marginTop = "20dp" android:layout_marginEnd = "23dp" android:text = " Already Have a Account?Sign In" android:textAlignment = "center" android:textColor = "@color/colorBlack" android:textSize = "17sp" android:textStyle = "bold" /> </ RelativeLayout > |
Working with the RegistrationActivity.java file. Creating a user with the email and password written by the user. If it fails then we will be showing the error.
mAuth.createUserWithEmailAndPassword(emaill, pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()){ progressDialog.dismiss(); } else { progressDialog.dismiss(); Toast.makeText(RegistrationActivity.this,"Error",Toast.LENGTH_LONG).show(); } } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { progressDialog.dismiss(); Toast.makeText(RegistrationActivity.this,"Error Occurred",Toast.LENGTH_LONG).show(); } });
Below is the code for the RegistrationActivity.java file.
Java
package com.example.socialmediaapp; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.util.Patterns; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.OnFailureListener; 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.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import java.util.HashMap; public class RegistrationActivity extends AppCompatActivity { private EditText email, password, name; private Button mRegister; private TextView existaccount; private ProgressDialog progressDialog; private FirebaseAuth mAuth; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_registration); ActionBar actionBar = getSupportActionBar(); actionBar.setTitle( "Create Account" ); actionBar.setDisplayShowHomeEnabled( true ); actionBar.setDisplayHomeAsUpEnabled( true ); email = findViewById(R.id.register_email); name = findViewById(R.id.register_name); password = findViewById(R.id.register_password); mRegister = findViewById(R.id.register_button); existaccount = findViewById(R.id.homepage); mAuth = FirebaseAuth.getInstance(); progressDialog = new ProgressDialog( this ); progressDialog.setMessage( "Register" ); mRegister.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { String emaill = email.getText().toString().trim(); String uname = name.getText().toString().trim(); String pass = password.getText().toString().trim(); if (!Patterns.EMAIL_ADDRESS.matcher(emaill).matches()) { email.setError( "Invalid Email" ); email.setFocusable( true ); } else if (pass.length() < 6 ) { password.setError( "Length Must be greater than 6 character" ); password.setFocusable( true ); } else { registerUser(emaill, pass, uname); } } }); existaccount.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { startActivity( new Intent(RegistrationActivity. this , LoginActivity. class )); } }); } private void registerUser(String emaill, final String pass, final String uname) { progressDialog.show(); mAuth.createUserWithEmailAndPassword(emaill, pass).addOnCompleteListener( new OnCompleteListener<AuthResult>() { @Override public void onComplete( @NonNull Task<AuthResult> task) { if (task.isSuccessful()) { progressDialog.dismiss(); FirebaseUser user = mAuth.getCurrentUser(); String email = user.getEmail(); String uid = user.getUid(); HashMap<Object, String> hashMap = new HashMap<>(); hashMap.put( "email" , email); hashMap.put( "uid" , uid); hashMap.put( "name" , uname); hashMap.put( "onlineStatus" , "online" ); hashMap.put( "typingTo" , "noOne" ); hashMap.put( "image" , "" ); FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference reference = database.getReference( "Users" ); reference.child(uid).setValue(hashMap); Toast.makeText(RegistrationActivity. this , "Registered User " + user.getEmail(), Toast.LENGTH_LONG).show(); Intent mainIntent = new Intent(RegistrationActivity. this , DashboardActivity. class ); mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(mainIntent); finish(); } else { progressDialog.dismiss(); Toast.makeText(RegistrationActivity. this , "Error" , Toast.LENGTH_LONG).show(); } } }).addOnFailureListener( new OnFailureListener() { @Override public void onFailure( @NonNull Exception e) { progressDialog.dismiss(); Toast.makeText(RegistrationActivity. this , "Error Occurred" , Toast.LENGTH_LONG).show(); } }); } @Override public boolean onSupportNavigateUp() { onBackPressed(); return super .onSupportNavigateUp(); } } |
Step 6: Working with the LoginActivity Activity
Navigate to the app > res > layout > activity_login.xml and add the below code to that file. Below is the code for the activity_login.xml file. Here We are creating two EditText for email and password and one Button to Login.
XML
<? xml version = "1.0" encoding = "utf-8" ?> < LinearLayout android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context = ".LoginActivity" > < ScrollView android:layout_width = "match_parent" android:layout_height = "match_parent" android:layout_alignParentStart = "true" android:layout_alignParentTop = "true" > < RelativeLayout android:layout_width = "match_parent" android:layout_height = "wrap_content" > < TextView android:id = "@+id/welcom" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_marginStart = "120dp" android:layout_marginTop = "50dp" android:text = "Welcome!" android:textColor = "@color/colorBlack" android:textSize = "30sp" android:textStyle = "italic|bold" /> < TextView android:id = "@+id/email" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@id/welcom" android:layout_marginStart = "35dp" android:layout_marginTop = "120dp" android:text = "Email" android:textColor = "@color/colorBlack" /> < EditText android:id = "@+id/login_email" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@+id/email" android:layout_alignParentStart = "true" android:layout_marginLeft = "30dp" android:layout_marginTop = "5dp" android:layout_marginRight = "30dp" android:background = "@drawable/edit" android:drawableStart = "@drawable/ic_email" android:hint = "Email..." android:inputType = "textEmailAddress" android:padding = "8dp" /> < TextView android:id = "@+id/password" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@id/login_email" android:layout_marginStart = "32dp" android:layout_marginTop = "20dp" android:text = "Password" android:textColor = "@color/colorBlack" /> < EditText android:id = "@+id/login_password" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@+id/password" android:layout_alignParentStart = "true" android:layout_marginLeft = "30dp" android:layout_marginTop = "5dp" android:layout_marginRight = "30dp" android:background = "@drawable/edit" android:drawableStart = "@drawable/password" android:hint = "Password..." android:inputType = "textPassword" android:padding = "8dp" /> < TextView android:id = "@+id/forgetp" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@+id/login_password" android:layout_marginStart = "210dp" android:layout_marginTop = "15dp" android:layout_marginEnd = "23dp" android:text = "Forget Password?" android:textAlignment = "center" android:textColor = "@color/colorPrimaryDark" android:textSize = "17sp" android:textStyle = "bold" /> < Button android:id = "@+id/login_button" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@+id/forgetp" android:layout_marginLeft = "30dp" android:layout_marginTop = "15dp" android:layout_marginRight = "30dp" android:background = "@drawable/buttonss" android:padding = "4dp" android:text = "Login" android:textAllCaps = "false" android:textColor = "@android:color/background_light" android:textSize = "24sp" /> < TextView android:id = "@+id/needs_new_account" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@+id/login_button" android:layout_centerHorizontal = "true" android:layout_marginStart = "15dp" android:layout_marginTop = "20dp" android:layout_marginEnd = "23dp" android:text = "Need new Account?Sign Up Here" android:textAlignment = "center" android:textColor = "@color/colorPrimary" android:textSize = "17sp" android:textStyle = "bold" /> </ RelativeLayout > </ ScrollView > </ LinearLayout > |
Working with the LoginActivity.java file. Signing in user with the email and password written by the user. If it fails then we will be showing the error.
mAuth.signInWithEmailAndPassword(emaill, pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { loadingBar.dismiss(); } else { loadingBar.dismiss(); Toast.makeText(LoginActivity.this,"Login Failed",Toast.LENGTH_LONG).show(); } } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { loadingBar.dismiss(); Toast.makeText(LoginActivity.this,"Error Occurred",Toast.LENGTH_LONG).show(); } });
Below is the code for the LoginActivity.java file.
Java
package com.example.socialmediaapp; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.text.InputType; import android.util.Patterns; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.OnFailureListener; 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.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import java.util.HashMap; public class LoginActivity extends AppCompatActivity { private EditText email, password, name; private Button mlogin; private TextView newdnewaccount, reocverpass; FirebaseUser currentUser; private ProgressDialog loadingBar; private FirebaseAuth mAuth; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_login); ActionBar actionBar = getSupportActionBar(); actionBar.setTitle( "Create Account" ); actionBar.setDisplayShowHomeEnabled( true ); actionBar.setDisplayHomeAsUpEnabled( true ); // initialising the layout items email = findViewById(R.id.login_email); password = findViewById(R.id.login_password); newdnewaccount = findViewById(R.id.needs_new_account); reocverpass = findViewById(R.id.forgetp); mAuth = FirebaseAuth.getInstance(); mlogin = findViewById(R.id.login_button); loadingBar = new ProgressDialog( this ); mAuth = FirebaseAuth.getInstance(); // checking if user is null or not if (mAuth != null ) { currentUser = mAuth.getCurrentUser(); } mlogin.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { String emaill = email.getText().toString().trim(); String pass = password.getText().toString().trim(); // if format of email doesn't matches return null if (!Patterns.EMAIL_ADDRESS.matcher(emaill).matches()) { email.setError( "Invalid Email" ); email.setFocusable( true ); } else { loginUser(emaill, pass); } } }); // If new account then move to Registration Activity newdnewaccount.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { startActivity( new Intent(LoginActivity. this , RegistrationActivity. class )); } }); // Recover Your Password using email reocverpass.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { showRecoverPasswordDialog(); } }); } private void showRecoverPasswordDialog() { AlertDialog.Builder builder = new AlertDialog.Builder( this ); builder.setTitle( "Recover Password" ); LinearLayout linearLayout = new LinearLayout( this ); final EditText emailet = new EditText( this ); //write your registered email emailet.setText( "Email" ); emailet.setMinEms( 16 ); emailet.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); linearLayout.addView(emailet); linearLayout.setPadding( 10 , 10 , 10 , 10 ); builder.setView(linearLayout); builder.setPositiveButton( "Recover" , new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String emaill = emailet.getText().toString().trim(); beginRecovery(emaill); //send a mail on the mail to recover password } }); builder.setNegativeButton( "Cancel" , new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show(); } private void beginRecovery(String emaill) { loadingBar.setMessage( "Sending Email...." ); loadingBar.setCanceledOnTouchOutside( false ); loadingBar.show(); // send reset password email mAuth.sendPasswordResetEmail(emaill).addOnCompleteListener( new OnCompleteListener<Void>() { @Override public void onComplete( @NonNull Task<Void> task) { loadingBar.dismiss(); if (task.isSuccessful()) { Toast.makeText(LoginActivity. this , "Done sent" , Toast.LENGTH_LONG).show(); } else { Toast.makeText(LoginActivity. this , "Error Occurred" , Toast.LENGTH_LONG).show(); } } }).addOnFailureListener( new OnFailureListener() { @Override public void onFailure( @NonNull Exception e) { loadingBar.dismiss(); Toast.makeText(LoginActivity. this , "Error Failed" , Toast.LENGTH_LONG).show(); } }); } private void loginUser(String emaill, String pass) { loadingBar.setMessage( "Logging In...." ); loadingBar.show(); // sign in with email and password after authenticating mAuth.signInWithEmailAndPassword(emaill, pass).addOnCompleteListener( new OnCompleteListener<AuthResult>() { @Override public void onComplete( @NonNull Task<AuthResult> task) { if (task.isSuccessful()) { loadingBar.dismiss(); FirebaseUser user = mAuth.getCurrentUser(); if (task.getResult().getAdditionalUserInfo().isNewUser()) { String email = user.getEmail(); String uid = user.getUid(); HashMap<Object, String> hashMap = new HashMap<>(); hashMap.put( "email" , email); hashMap.put( "uid" , uid); hashMap.put( "name" , "" ); hashMap.put( "onlineStatus" , "online" ); hashMap.put( "typingTo" , "noOne" ); hashMap.put( "phone" , "" ); hashMap.put( "image" , "" ); hashMap.put( "cover" , "" ); FirebaseDatabase database = FirebaseDatabase.getInstance(); // store the value in Database in "Users" Node DatabaseReference reference = database.getReference( "Users" ); // storing the value in Firebase reference.child(uid).setValue(hashMap); } Toast.makeText(LoginActivity. this , "Registered User " + user.getEmail(), Toast.LENGTH_LONG).show(); Intent mainIntent = new Intent(LoginActivity. this , DashboardActivity. class ); mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(mainIntent); finish(); } else { loadingBar.dismiss(); Toast.makeText(LoginActivity. this , "Login Failed" , Toast.LENGTH_LONG).show(); } } }).addOnFailureListener( new OnFailureListener() { @Override public void onFailure( @NonNull Exception e) { loadingBar.dismiss(); Toast.makeText(LoginActivity. this , "Error Occurred" , Toast.LENGTH_LONG).show(); } }); } @Override public boolean onSupportNavigateUp() { onBackPressed(); return super .onSupportNavigateUp(); } } |
Step 7: Working with the AndroidManifest.xml file
Navigate to the AndroidManifest.xml file and add the below permission for getting internet permission in the app.
<uses-permission android:name=”android.permission.INTERNET”/>
Also, make the SplashScreen Activity as the welcome screen. Refer to the following code
<activity android:name=".SplashScreen"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
Below is the complete code for the AndroidManifest.xml file.
XML
<? xml version = "1.0" encoding = "utf-8" ?> package = "com.example.socialmediaapp" > < uses-permission android:name = "android.permission.INTERNET" /> < application android:allowBackup = "true" android:icon = "@mipmap/ic_launcher" android:label = "@string/app_name" android:roundIcon = "@mipmap/ic_launcher_round" android:supportsRtl = "true" android:theme = "@style/Theme.SocialMediaApp" > < activity android:name = ".DashboardActivity" ></ activity > < activity android:name = ".LoginActivity" /> < activity android:name = ".RegistrationActivity" /> < activity android:name = ".SplashScreen" > < intent-filter > < action android:name = "android.intent.action.MAIN" /> < category android:name = "android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > </ application > </ manifest > |
Step 8: Working with the colors.xml file
Go to the app > res > values > colors.xml file and use the following color
XML
<? xml version = "1.0" encoding = "utf-8" ?> < resources > < color name = "colorPrimary" >#CC2E76BE</ color > < color name = "colorPrimaryDark" >#CC073D74</ color > < color name = "colorAccent" >#0A527E</ color > < color name = "colorBlack" >#000000</ color > < color name = "colorWhite" >#fff</ color > < color name = "colorGray" >#F5F1F1</ color > < color name = "colorgray01" >#959595</ color > < color name = "colorGray02" >#f5f0f0</ color > < color name = "colorGreen" >#17581A</ color > < color name = "colorRed" >#F4511E</ color > < color name = "btnRed" >#E61313</ color > < color name = "btnedit" >#2CA7E0</ color > < color name = "neutral" >#0a1b97</ color > < color name = "colordrawer" >#2B2C2E</ color > </ resources > |
Output:
Registration:
Login:
After successfully authenticated the admin can see the users in the firebase console like the following
For all the drawable file used in this article please refer to this link: https://drive.google.com/drive/folders/1M_knOH_ugCuwSP5nkYzeD4dRp-Honzbe?usp=sharing
Below is the file structure after performing these operations:
Note: In this part, there is nothing to do with the DashboardActivity.