Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .idea/deploymentTargetSelector.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ dependencies {
implementation libs.material
implementation libs.activity
implementation libs.constraintlayout
implementation 'com.google.firebase:firebase-auth'
implementation libs.firebase.auth
implementation libs.firebase.firestore
testImplementation libs.junit
androidTestImplementation libs.ext.junit
androidTestImplementation libs.espresso.core
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
android:supportsRtl="true"
android:theme="@style/Theme.InventoryManagementSystem"
tools:targetApi="31">
<activity android:name=".RegistrationActivity" />
<activity android:name=".LoginActivity" />
<activity
android:name=".MainActivity"
android:exported="true">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.pewush.inventorymanagementsystem;

import android.os.Bundle;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class AdminDashboardActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_admin_dashboard);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.pewush.inventorymanagementsystem;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import com.google.firebase.auth.FirebaseAuth;

public class LoginActivity extends AppCompatActivity {
EditText emailInput, passwordInput;
Button loginButton, registerRedirect;
FirebaseAuth mAuth;
String role;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_login);
role = getIntent().getStringExtra("role");
mAuth = FirebaseAuth.getInstance();

emailInput = findViewById(R.id.editTextEmail);
passwordInput = findViewById(R.id.editTextPassword);
loginButton = findViewById(R.id.btnLogin);
registerRedirect = findViewById(R.id.registerRedirectButton);

loginButton.setOnClickListener(v -> {
String email = emailInput.getText().toString().trim();
String password = passwordInput.getText().toString().trim();

if (email.isEmpty() || password.isEmpty()) {
Toast.makeText(this, "Enter all details", Toast.LENGTH_SHORT).show();
return;
}

mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
Toast.makeText(this, "Login Successful as " + role, Toast.LENGTH_SHORT).show();
// TODO: Navigate to role-specific dashboard/activity
} else {
Toast.makeText(this, "Login Failed: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
});
});

registerRedirect.setOnClickListener(v -> {
Intent intent = new Intent(LoginActivity.this, RegistrationActivity.class);
intent.putExtra("role", role);
startActivity(intent);
});
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.pewush.inventorymanagementsystem;

import android.content.Intent;
import android.os.Bundle;

import android.widget.Button;
import android.view.View;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
Expand All @@ -10,15 +12,25 @@

public class MainActivity extends AppCompatActivity {

Button btnUser, btnAdmin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
btnUser = findViewById(R.id.btnUser);
btnAdmin = findViewById(R.id.btnAdmin);

btnUser.setOnClickListener(v -> {
Intent intent = new Intent(MainActivity.this, LoginActivity.class);
intent.putExtra("role", "user");
startActivity(intent);
});

btnAdmin.setOnClickListener(v -> {
Intent intent = new Intent(MainActivity.this, LoginActivity.class);
intent.putExtra("role", "admin");
startActivity(intent);
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package com.pewush.inventorymanagementsystem;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.FirebaseFirestore;

import java.util.HashMap;
import java.util.Map;

public class RegistrationActivity extends AppCompatActivity {
EditText editTextName, editTextEmail, editTextPassword, editTextConfirmPassword;
Button buttonRegister;
FirebaseAuth mAuth;
FirebaseFirestore db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_registration);
editTextName = findViewById(R.id.editTextName);
editTextEmail = findViewById(R.id.editTextEmail);
editTextPassword = findViewById(R.id.editTextPassword);
editTextConfirmPassword = findViewById(R.id.editTextConfirmPassword);
buttonRegister = findViewById(R.id.buttonRegister);

mAuth = FirebaseAuth.getInstance();
db = FirebaseFirestore.getInstance();

buttonRegister.setOnClickListener(v -> registerUser());
}

private void registerUser() {
String name = editTextName.getText().toString().trim();
String email = editTextEmail.getText().toString().trim();
String password = editTextPassword.getText().toString().trim();
String confirmPassword = editTextConfirmPassword.getText().toString().trim();

if (name.isEmpty() || email.isEmpty() || password.isEmpty() || confirmPassword.isEmpty()) {
Toast.makeText(this, "Please fill all fields", Toast.LENGTH_SHORT).show();
return;
}

if (!password.equals(confirmPassword)) {
Toast.makeText(this, "Passwords do not match", Toast.LENGTH_SHORT).show();
return;
}

mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
String uid = mAuth.getCurrentUser().getUid();

Map<String, Object> userMap = new HashMap<>();
userMap.put("name", name);
userMap.put("email", email);

db.collection("users").document(uid).set(userMap)
.addOnSuccessListener(unused -> {
Toast.makeText(this, "Registered Successfully", Toast.LENGTH_SHORT).show();
startActivity(new Intent(this, LoginActivity.class));
finish();
})
.addOnFailureListener(e ->
Toast.makeText(this, "Firestore error: " + e.getMessage(), Toast.LENGTH_SHORT).show()
);
} else {
Toast.makeText(this, "Registration failed: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.pewush.inventorymanagementsystem;

import android.os.Bundle;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class UserDashboardActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_user_dashboard);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
}
}
10 changes: 10 additions & 0 deletions app/src/main/res/layout/activity_admin_dashboard.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".AdminDashboardActivity">

</androidx.constraintlayout.widget.ConstraintLayout>
59 changes: 59 additions & 0 deletions app/src/main/res/layout/activity_login.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".LoginActivity">

<EditText
android:id="@+id/editTextEmail"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="220dp"
android:hint="Email"
android:inputType="textEmailAddress"
app:layout_constraintBottom_toTopOf="@+id/editTextPassword"
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.0"
tools:ignore="HardcodedText" />

<EditText
android:id="@+id/editTextPassword"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="Password"
android:inputType="textPassword"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="HardcodedText,MissingConstraints"
tools:layout_editor_absoluteY="366dp" />

<Button
android:id="@+id/btnLogin"
android:layout_width="184dp"
android:layout_height="73dp"
android:layout_marginStart="16dp"
android:text="Login"
android:textSize="24sp"
app:layout_constraintHorizontal_bias="0.065"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="HardcodedText,MissingConstraints"
tools:layout_editor_absoluteY="490dp" />
<Button
android:id="@+id/registerRedirectButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Not registered? Sign up"
app:layout_constraintTop_toBottomOf="@id/btnLogin"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="16dp"/>


</androidx.constraintlayout.widget.ConstraintLayout>
27 changes: 23 additions & 4 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,32 @@
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
android:layout_width="wrap_content"
<Button
android:id="@+id/btnUser"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Hello World!"
android:layout_marginTop="244dp"
android:text="Login as User"
app:layout_constraintBottom_toBottomOf="@+id/btnLoginAdmin"
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.634"
app:layout_constraintVertical_chainStyle="packed"
tools:ignore="HardcodedText" />

<Button
android:id="@+id/btnAdmin"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Login as Admin"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.613"
tools:ignore="HardcodedText" />

</androidx.constraintlayout.widget.ConstraintLayout>
Loading