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 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.
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 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.
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 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.
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 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 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.