diff --git a/Team Patrologix/app/src/main/java/com/example/sentinex/MainActivity.java b/Team Patrologix/app/src/main/java/com/example/sentinex/MainActivity.java index 6ddd10a2..b4607e1b 100644 --- a/Team Patrologix/app/src/main/java/com/example/sentinex/MainActivity.java +++ b/Team Patrologix/app/src/main/java/com/example/sentinex/MainActivity.java @@ -1,14 +1,166 @@ package com.example.sentinex; +import static android.content.ContentValues.TAG; +import androidx.fragment.app.Fragment; + +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; +import android.annotation.SuppressLint; +import android.app.Dialog; +import android.content.Intent; +import android.graphics.drawable.GradientDrawable; import android.os.Bundle; +import android.provider.MediaStore; +import android.util.Log; +import android.view.MenuItem; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.PopupMenu; +import android.widget.Toast; + +import com.example.sentinex.Fragments.AddFragment; +import com.example.sentinex.Fragments.HomeFragment; +import com.example.sentinex.Fragments.NotificationsFragment; +import com.example.sentinex.Fragments.ProfileFragment; +import com.example.sentinex.Fragments.SearchFragment; +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.GoogleApiAvailability; +import com.google.android.gms.common.GoogleApiAvailabilityLight; +import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.google.android.material.navigation.NavigationBarView; +import com.google.firebase.auth.FirebaseAuth; public class MainActivity extends AppCompatActivity { + private final int CAMERA_REQ_CODE = 100; + private static final String TAG = "MainActivity"; + // FirebaseAuth auth; + private static final int ERROR_DIALOG_REQUEST = 9001; + FirebaseAuth auth; + BottomNavigationView bottomNavigationView; + @SuppressLint("MissingInflatedId") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + bottomNavigationView = (BottomNavigationView) findViewById(R.id.bttom_nav); + FragmentManager fm = (FragmentManager) getSupportFragmentManager(); + FragmentTransaction fragmentTransaction = fm.beginTransaction(); + fragmentTransaction.replace(R.id.container, new HomeFragment()); + fragmentTransaction.commit(); + if (getSupportActionBar() != null) { + getSupportActionBar().hide(); + } + bottomNavigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() { + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem item) { + int id = item.getItemId(); + if (id == R.id.nav_home) { + loadFragment(new HomeFragment()); + } else if (id == R.id.nav_search) { + loadFragment(new SearchFragment()); + } +// else if (id == R.id.nav_add) { +// loadFragment(new AddFragment()); +// } + else if (id == R.id.nav_notifications) { + loadFragment(new NotificationsFragment()); + } else if (id == R.id.nav_profile) { + loadFragment(new ProfileFragment()); + } + return false; + } + }); + + } + + + private void loadFragment(Fragment fragment) { + FragmentManager fm = (FragmentManager) getSupportFragmentManager(); + FragmentTransaction fragmentTransaction = fm.beginTransaction(); + fragmentTransaction.replace(R.id.container, fragment); + fragmentTransaction.commit(); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + } + + + +// Button signupbutton1 = findViewById(R.id.signupbutton1); +// +// signupbutton1.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// Intent icamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); +// startActivityForResult(icamera, CAMERA_REQ_CODE); +// } +// }); + // Create a GradientDrawable with the desired colors + //Button btnmap = findViewById(R.id.signupbutton4); // edit it laater map button + //done +// Button signupbutton4 = findViewById(R.id.signupbutton4); +// signupbutton4.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// Intent intent = new Intent(MainActivity.this, UploadActivity.class); +// startActivity(intent); +// } +// }); +// auth =FirebaseAuth.getInstance(); +// if(auth.getCurrentUser()==null) +// +// { +// Intent intent = new Intent(MainActivity.this, login.class); +// startActivity(intent); +// } +// } +// public void showDropdownMenu(View view) { +// PopupMenu popupMenu = new PopupMenu(this, view); +// popupMenu.getMenuInflater().inflate(R.menu.dropdown_menu, popupMenu.getMenu()); +// +// // Set a listener for menu item clicks +// popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { +// @Override +// public boolean onMenuItemClick(MenuItem menuItem) { +// // Handle menu item clicks here +// +// return true; +// } +// }); +// +// popupMenu.show(); +// } + + public boolean isServiceOK() { + Log.d(TAG, "isServiceOK: checking Google services"); + int available = GoogleApiAvailabilityLight.getInstance().isGooglePlayServicesAvailable(MainActivity.this); + if (available == ConnectionResult.SUCCESS) { + Log.d(TAG, "isServiceOK: WORKING"); + return true; + } else if (GoogleApiAvailability.getInstance().isUserResolvableError(available)) { + Log.d(TAG, "isServiceOK: error but fixed"); + Dialog dialog = GoogleApiAvailability.getInstance().getErrorDialog(MainActivity.this, available, ERROR_DIALOG_REQUEST); + dialog.show(); + } else { + Toast.makeText(this, "You cannot do anything", Toast.LENGTH_SHORT).show(); + } + return false; } + + + + + + } \ No newline at end of file diff --git a/Team Patrologix/app/src/main/java/com/example/sentinex/Users.java b/Team Patrologix/app/src/main/java/com/example/sentinex/Users.java new file mode 100644 index 00000000..8ab53c33 --- /dev/null +++ b/Team Patrologix/app/src/main/java/com/example/sentinex/Users.java @@ -0,0 +1,73 @@ +package com.example.sentinex; + + +public class Users { + String profilepic,mail,userName,password,userId,lastMessage,status; + + public Users(){} + + public Users(String userId, String userName, String maill, String password, String profilepic, String status) { + this.userId = userId; + this.userName = userName; + this.mail = maill; + this.password = password; + this.profilepic = profilepic; + this.status = status; + } + + public String getProfilepic() { + return profilepic; + } + + public void setProfilepic(String profilepic) { + this.profilepic = profilepic; + } + + public String getMail() { + return mail; + } + + public void setMail(String mail) { + this.mail = mail; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getLastMessage() { + return lastMessage; + } + + public void setLastMessage(String lastMessage) { + this.lastMessage = lastMessage; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/Team Patrologix/app/src/main/java/com/example/sentinex/login.java b/Team Patrologix/app/src/main/java/com/example/sentinex/login.java index 2477ca70..f46e44b1 100644 --- a/Team Patrologix/app/src/main/java/com/example/sentinex/login.java +++ b/Team Patrologix/app/src/main/java/com/example/sentinex/login.java @@ -1,5 +1,8 @@ package com.example.sentinex; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; @@ -10,19 +13,90 @@ import android.widget.TextView; import android.widget.Toast; -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; - -import com.google.firebase.Firebase; +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; public class login extends AppCompatActivity { + TextView logsignup; + Button button; + EditText email, password; + FirebaseAuth auth; + String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+"; + android.app.ProgressDialog progressDialog; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_login); + getSupportActionBar().hide(); + progressDialog = new ProgressDialog(this); + progressDialog.setMessage("Please Wait..."); + progressDialog.setCancelable(false); + auth = FirebaseAuth.getInstance(); + button = findViewById(R.id.logbutton); + email = findViewById(R.id.editTexLogEmail); + password = findViewById(R.id.editTextLogPassword); + logsignup = findViewById(R.id.logsignup); + + logsignup.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(login.this,registration.class); + startActivity(intent); + finish(); + } + }); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String Email = email.getText().toString(); + String pass = password.getText().toString(); + if ((TextUtils.isEmpty(Email))){ + progressDialog.dismiss(); + Toast.makeText(login.this, "Enter The Email", Toast.LENGTH_SHORT).show(); + }else if (TextUtils.isEmpty(pass)){ + progressDialog.dismiss(); + Toast.makeText(login.this, "Enter The Password", Toast.LENGTH_SHORT).show(); + }else if (!Email.matches(emailPattern)){ + progressDialog.dismiss(); + email.setError("Give Proper Email Address"); + }else if (password.length()<6){ + progressDialog.dismiss(); + password.setError("More Then Six Characters"); + Toast.makeText(login.this, "Password Needs To Be Longer Then Six Characters", Toast.LENGTH_SHORT).show(); + }else { + auth.signInWithEmailAndPassword(Email,pass).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()){ + progressDialog.show(); + try { + Intent intent = new Intent(login.this , MainActivity.class); + intent.putExtra("key",Email);//rajeev yeh use karenge as key (email)...yeh pass ho raha hai next activity mei + startActivity(intent); + finish(); + }catch (Exception e){ + Toast.makeText(login.this, e.getMessage(), Toast.LENGTH_SHORT).show(); + } + }else { + Toast.makeText(login.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show(); + } + } + }); + } + + } + }); + } } // -//package com.example.sentenix; +//package com.example.sentenix_prototype2; // //public class Report { // private String description; @@ -45,4 +119,3 @@ public class login extends AppCompatActivity { // return location; // } //} - diff --git a/Team Patrologix/app/src/main/java/com/example/sentinex/registration.java b/Team Patrologix/app/src/main/java/com/example/sentinex/registration.java index 84940d91..728be3c7 100644 --- a/Team Patrologix/app/src/main/java/com/example/sentinex/registration.java +++ b/Team Patrologix/app/src/main/java/com/example/sentinex/registration.java @@ -1,5 +1,200 @@ package com.example.sentinex; -public class registration { +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import android.app.ProgressDialog; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.example.sentinex.R; +import com.example.sentinex.login; +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.OnSuccessListener; +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; +import com.google.firebase.storage.FirebaseStorage; +import com.google.firebase.storage.StorageReference; +import com.google.firebase.storage.UploadTask; + +import de.hdodenhof.circleimageview.CircleImageView; + +public class registration extends AppCompatActivity { + + TextView loginBut; + EditText rgUsername, rgEmail, rgPassword, rgRepassword; + Button rgSignup; + CircleImageView rgProfileImg; + FirebaseAuth auth; + Uri imageURI; + String imageUri; + String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+"; + FirebaseDatabase database; + FirebaseStorage storage; + ProgressDialog progressDialog; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_registration); + getSupportActionBar().hide(); + progressDialog = new ProgressDialog(this); + progressDialog.setMessage("Establishing The Account"); + progressDialog.setCancelable(false); + database = FirebaseDatabase.getInstance(); + storage = FirebaseStorage.getInstance(); + auth = FirebaseAuth.getInstance(); + loginBut = findViewById(R.id.loginbut); + rgUsername = findViewById(R.id.rgusername); + rgEmail = findViewById(R.id.rgemail); + rgPassword = findViewById(R.id.rgpassword); + rgRepassword = findViewById(R.id.rgrepassword); + rgProfileImg = findViewById(R.id.profilerg0); + rgSignup = findViewById(R.id.signupbutton); + + loginBut.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(registration.this, login.class ); + startActivity(intent); + finish(); + } + }); + + rgSignup.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + String name = rgUsername.getText().toString(); + String email = rgEmail.getText().toString(); + String password = rgPassword.getText().toString(); + String confirmPassword = rgRepassword.getText().toString(); + String status = "Hey I'm Using This Application"; + + if (TextUtils.isEmpty(name) || TextUtils.isEmpty(email) || + TextUtils.isEmpty(password) || TextUtils.isEmpty(confirmPassword)) { + progressDialog.dismiss(); + Toast.makeText(registration.this, "Please Enter Valid Information", Toast.LENGTH_SHORT).show(); + } else if (!email.matches(emailPattern)) { + progressDialog.dismiss(); + rgEmail.setError("Type A Valid Email Here"); + } else if (password.length() < 6) { + progressDialog.dismiss(); + rgPassword.setError("Password Must Be 6 Characters Or More"); + } else if (!password.equals(confirmPassword)) { + progressDialog.dismiss(); + rgPassword.setError("The Password Doesn't Match"); + } else { + auth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + FirebaseUser user = auth.getCurrentUser(); + String id = user.getUid(); + DatabaseReference reference = database.getReference().child("user").child(id); + StorageReference storageReference = storage.getReference().child("Upload").child(id); + + if (imageURI != null) { + uploadProfileImage(user, reference, storageReference, name, email, password, status); + } else { + // No image selected, proceed with default image + String defaultImageUri = "https://firebasestorage.googleapis.com/v0/b/yatra-360.appspot.com/o/man.png?alt=media&token=131835fd-74a6-44ec-8299-1629b5166959"; + Users users = new Users(id, name, email, password, defaultImageUri, status); + reference.setValue(users).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + progressDialog.show(); + Intent intent = new Intent(registration.this, MainActivity.class); + startActivity(intent); + finish(); + } else { + Toast.makeText(registration.this, "Error in creating the user", Toast.LENGTH_SHORT).show(); + } + } + }); + } + } else { + Toast.makeText(registration.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show(); + } + } + }); + } + } + Intent intent = new Intent(registration.this, MainActivity.class); + + }); + + rgProfileImg.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(); + intent.setType("image/*"); + intent.setAction(Intent.ACTION_GET_CONTENT); + startActivityForResult(Intent.createChooser(intent, "Select Picture"), 10); + } + }); + } + + private void uploadProfileImage(FirebaseUser user, DatabaseReference reference, StorageReference storageReference, + String name, String email, String password, String status) { + storageReference.putFile(imageURI).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener() { + @Override + public void onSuccess(Uri uri) { + imageUri = uri.toString(); + Users users = new Users(user.getUid(), name, email, password, imageUri, status); + reference.setValue(users).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + progressDialog.show(); + Intent intent = new Intent(registration.this, MainActivity.class); + startActivity(intent); + finish(); + } else { + Toast.makeText(registration.this, "Error in creating the user", Toast.LENGTH_SHORT).show(); + Log.e("Registration", "Error setting user data", task.getException()); + } + } + }); + } + }); + } else { + Toast.makeText(registration.this, "Error uploading profile image", Toast.LENGTH_SHORT).show(); + Log.e("Registration", "Error uploading profile image", task.getException()); // Log the exception + } + } + }); + } + + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == 10) { + if (data != null) { + imageURI = data.getData(); + rgProfileImg.setImageURI(imageURI); + } + } + } } + diff --git a/Team Patrologix/app/src/main/res/drawable/photo3.png b/Team Patrologix/app/src/main/res/drawable/photo3.png new file mode 100644 index 00000000..01590ea6 Binary files /dev/null and b/Team Patrologix/app/src/main/res/drawable/photo3.png differ diff --git a/Team Patrologix/app/src/main/res/layout/activity_main.xml b/Team Patrologix/app/src/main/res/layout/activity_main.xml index 17eab17b..dc270288 100644 --- a/Team Patrologix/app/src/main/res/layout/activity_main.xml +++ b/Team Patrologix/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,36 @@ - - + + + + + + android:layout_alignParentBottom="true" + android:layout_marginBottom="0dp" + android:background="@android:color/transparent" + app:itemTextColor="@color/black" + app:itemIconTint="@color/black" + app:itemIconSize="24dp" + app:elevation="0dp" + app:menu="@menu/bottom_menu" /> + + + - \ No newline at end of file + \ No newline at end of file diff --git a/Team Patrologix/app/src/main/res/menu/bottom_menu.xml b/Team Patrologix/app/src/main/res/menu/bottom_menu.xml new file mode 100644 index 00000000..459f0167 --- /dev/null +++ b/Team Patrologix/app/src/main/res/menu/bottom_menu.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + \ No newline at end of file