Search in sources :

Example 1 with ActiveUser

use of com.example.first_responder_app.interfaces.ActiveUser in project FirstResponse by mattpost1700.

the class FirestoreDatabase method editUser.

/**
 * Update a user's data
 *
 * @param firstName The user's first name
 * @param lastName The user's last name
 * @param phone The user's prone number (as a String)
 * @param rank The user's rank (document ID, not rank name)
 * @param address The user's address
 * @param id The document id of the user being updated
 * @param context The context
 */
public void editUser(String firstName, String lastName, String rank, String phone, String address, String id, Context context) {
    String phoneNum = parsePhone(phone);
    db.collection("users").document(id).update("first_name", firstName, "last_name", lastName, "address", address, "phone_number", phoneNum, FIELD_RANK_ID, rank).addOnSuccessListener(new OnSuccessListener<Void>() {

        @Override
        public void onSuccess(Void aVoid) {
            Log.d("DB", "User successfully updated");
            ActiveUser activeUser = (ActiveUser) context;
            if (activeUser != null) {
                UsersDataModel user = activeUser.getActive();
                if (user != null && (user.getDocumentId().equals(id))) {
                    user.setRank_id(rank);
                    user.setFirst_name(firstName);
                    user.setLast_name(lastName);
                    user.setPhone_number(phoneNum);
                    activeUser.setActive(user);
                }
            }
        }
    }).addOnFailureListener(new OnFailureListener() {

        @Override
        public void onFailure(@NonNull Exception e) {
            Log.w("DB", "Error updating user " + id, e);
        }
    });
}
Also used : UsersDataModel(com.example.first_responder_app.dataModels.UsersDataModel) ActiveUser(com.example.first_responder_app.interfaces.ActiveUser) OnSuccessListener(com.google.android.gms.tasks.OnSuccessListener) OnFailureListener(com.google.android.gms.tasks.OnFailureListener)

Example 2 with ActiveUser

use of com.example.first_responder_app.interfaces.ActiveUser in project FirstResponse by mattpost1700.

the class EventFragment method onCreateView.

@SuppressLint("SetTextI18n")
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    // binding fragment with nav_map by using navHostFragment, throw this block of code in there and that allows you to switch to other fragments
    binding = DataBindingUtil.inflate(inflater, R.layout.fragment_event, container, false);
    NavHostFragment navHostFragment = (NavHostFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
    NavController navController = navHostFragment.getNavController();
    // initialize vars as well as fetching userID
    participants = new ArrayList<>();
    ActiveUser activeUser = (ActiveUser) getActivity();
    UsersDataModel user = activeUser.getActive();
    userID = user.getDocumentId();
    // getting data from event group
    mViewModel = new ViewModelProvider(requireActivity()).get(EventViewModel.class);
    eventInfo = mViewModel.getEventDetail();
    isParticipating = eventInfo.getParticipants().contains(user.getDocumentId());
    EventRecyclerViewAdapter.ItemClickListener listener = (view, pos) -> {
        UsersDataModel u = participants.get(pos);
        UserViewModel userViewModel = new ViewModelProvider(requireActivity()).get(UserViewModel.class);
        userViewModel.setUserDataModel(u);
        NavDirections action = EventFragmentDirections.actionEventFragmentToUserFragment();
        Navigation.findNavController(binding.getRoot()).navigate(action);
    };
    // recycler binding
    RecyclerView eventRecyclerView = binding.eventEventRecycler;
    eventRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    eventRecyclerViewAdapter = new EventRecyclerViewAdapter(getContext(), participants, isAnyParticipants);
    eventRecyclerViewAdapter.setClickListener(listener);
    eventRecyclerView.setAdapter(eventRecyclerViewAdapter);
    updateUI(false);
    final SwipeRefreshLayout pullToRefresh = binding.eventRefreshLayout;
    pullToRefresh.setOnRefreshListener(() -> {
        participants.clear();
        updateUI(true);
        pullToRefresh.setRefreshing(false);
    });
    addParticipatingEventListener();
    binding.signUp.setOnClickListener(v -> {
        if (binding.signUp.getText().equals("Withdraw")) {
            eventInfo.getParticipants().remove(userID);
            db.collection(FirestoreDatabase.EVENTS_COLLECTION_DIR).document(eventInfo.getDocumentId()).set(eventInfo).addOnSuccessListener(documentReference -> {
                isParticipating = false;
                binding.signUp.setText("Sign Up");
            }).addOnFailureListener(e -> Log.w(TAG, "onCreateView: Could not update event UI", e));
        } else {
            eventInfo.getParticipants().add(userID);
            db.collection(FirestoreDatabase.EVENTS_COLLECTION_DIR).document(eventInfo.getDocumentId()).set(eventInfo).addOnSuccessListener(documentReference -> {
                isParticipating = true;
                binding.signUp.setText("Withdraw");
            }).addOnFailureListener(e -> Log.w(TAG, "onCreateView: Could not update event UI", e));
            // sends the event that includes the following:
            // title, location, description, duration
            Intent intent = new Intent(Intent.ACTION_INSERT);
            intent.setData(CalendarContract.Events.CONTENT_URI);
            intent.putExtra(CalendarContract.Events.TITLE, eventInfo.getTitle());
            intent.putExtra(CalendarContract.Events.EVENT_LOCATION, eventInfo.getLocation());
            intent.putExtra(CalendarContract.Events.DESCRIPTION, eventInfo.getDescription());
            intent.putExtra(CalendarContract.Events.DURATION, eventInfo.getDuration_in_minutes());
            if (intent.resolveActivity(requireContext().getPackageManager()) != null) {
                startActivity(intent);
            } else {
                Log.d("EVENT INTENT: ", "Event setup Failed");
            }
        // // Calendar intent
        // Calendar cal = Calendar.getInstance();
        // Intent intent = new Intent(Intent.ACTION_EDIT);
        // long startTime = eventInfo.getEvent_time().toDate().toInstant().toEpochMilli();
        // intent.putExtra("beginTime", startTime);
        // //intent.putExtra("allDay", true);
        // intent.putExtra("endTime", startTime + AppUtil.numOfMinutesToMilliSeconds(eventInfo.getDuration_in_minutes()));
        // intent.putExtra("title", "A Test Event from android app");
        // startActivity(intent);
        }
    });
    return binding.getRoot();
}
Also used : Bundle(android.os.Bundle) PackageManager(android.content.pm.PackageManager) NonNull(androidx.annotation.NonNull) Date(java.util.Date) Uri(android.net.Uri) CalendarContract(android.provider.CalendarContract) NavController(androidx.navigation.NavController) EventsDataModel(com.example.first_responder_app.dataModels.EventsDataModel) ActiveUser(com.example.first_responder_app.interfaces.ActiveUser) Manifest(android.Manifest) FieldPath(com.google.firebase.firestore.FieldPath) ContentResolver(android.content.ContentResolver) Locale(java.util.Locale) Fragment(androidx.fragment.app.Fragment) View(android.view.View) RecyclerView(androidx.recyclerview.widget.RecyclerView) Log(android.util.Log) NavHostFragment(androidx.navigation.fragment.NavHostFragment) DataBindingUtil(androidx.databinding.DataBindingUtil) Timestamp(com.google.firebase.Timestamp) NavDirections(androidx.navigation.NavDirections) AppUtil(com.example.first_responder_app.AppUtil) IncidentViewModel(com.example.first_responder_app.viewModels.IncidentViewModel) ViewGroup(android.view.ViewGroup) R(com.example.first_responder_app.R) Objects(java.util.Objects) List(java.util.List) Nullable(androidx.annotation.Nullable) ContentValues(android.content.ContentValues) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) EventViewModel(com.example.first_responder_app.viewModels.EventViewModel) SimpleDateFormat(java.text.SimpleDateFormat) Intent(android.content.Intent) FragmentEventBinding(com.example.first_responder_app.databinding.FragmentEventBinding) ArrayList(java.util.ArrayList) SuppressLint(android.annotation.SuppressLint) Calendar(java.util.Calendar) QueryDocumentSnapshot(com.google.firebase.firestore.QueryDocumentSnapshot) Toast(android.widget.Toast) ListenerRegistration(com.google.firebase.firestore.ListenerRegistration) TAG(android.content.ContentValues.TAG) EventRecyclerViewAdapter(com.example.first_responder_app.recyclerViews.EventRecyclerViewAdapter) DocumentSnapshot(com.google.firebase.firestore.DocumentSnapshot) UsersDataModel(com.example.first_responder_app.dataModels.UsersDataModel) ViewModelProvider(androidx.lifecycle.ViewModelProvider) LayoutInflater(android.view.LayoutInflater) ActivityCompat(androidx.core.app.ActivityCompat) SwipeRefreshLayout(androidx.swiperefreshlayout.widget.SwipeRefreshLayout) User(com.google.firebase.firestore.auth.User) FirestoreDatabase(com.example.first_responder_app.FirestoreDatabase) UserViewModel(com.example.first_responder_app.viewModels.UserViewModel) FirebaseFirestore(com.google.firebase.firestore.FirebaseFirestore) Navigation(androidx.navigation.Navigation) UsersDataModel(com.example.first_responder_app.dataModels.UsersDataModel) NavController(androidx.navigation.NavController) Intent(android.content.Intent) EventRecyclerViewAdapter(com.example.first_responder_app.recyclerViews.EventRecyclerViewAdapter) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) SwipeRefreshLayout(androidx.swiperefreshlayout.widget.SwipeRefreshLayout) NavDirections(androidx.navigation.NavDirections) EventViewModel(com.example.first_responder_app.viewModels.EventViewModel) UserViewModel(com.example.first_responder_app.viewModels.UserViewModel) ActiveUser(com.example.first_responder_app.interfaces.ActiveUser) RecyclerView(androidx.recyclerview.widget.RecyclerView) NavHostFragment(androidx.navigation.fragment.NavHostFragment) ViewModelProvider(androidx.lifecycle.ViewModelProvider) SuppressLint(android.annotation.SuppressLint)

Example 3 with ActiveUser

use of com.example.first_responder_app.interfaces.ActiveUser in project FirstResponse by mattpost1700.

the class IncidentFragment method respondingButtonClicked.

/**
 * When responding button is clicked update active users responding status
 *
 * @param b the button that was clicked
 */
public void respondingButtonClicked(View b) {
    Log.d(TAG, "respondingButtonClicked: " + ((Button) b).getText());
    String text = ((Button) b).getText().toString();
    String id = incidentDataModel.getDocumentId();
    // Get active user id
    ActiveUser active = (ActiveUser) getActivity();
    UsersDataModel activeUser = null;
    if (active != null) {
        activeUser = active.getActive();
    }
    if (activeUser == null && context != null) {
        Toast.makeText(context, "You must be logged in", Toast.LENGTH_LONG).show();
    } else if (activeUser != null) {
        List<String> responses = activeUser.getResponses();
        if (!AppUtil.timeIsWithin(activeUser.getResponding_time(), requireContext())) {
            responses = new ArrayList<>();
        }
        // TODO: remove hardcoded string
        if (text.equals("Unavailable")) {
            FirestoreDatabase.getInstance().responding(activeUser.getDocumentId(), incidentDataModel, text, false, responses, null);
            setActiveButton(text);
        } else {
            FirestoreDatabase.getInstance().responding(activeUser.getDocumentId(), incidentDataModel, text, true, responses, () -> {
                RefreshETAs refreshETAs = (RefreshETAs) getActivity();
                refreshETAs.refresh();
            });
            setActiveButton(text);
        }
    }
}
Also used : UsersDataModel(com.example.first_responder_app.dataModels.UsersDataModel) Button(android.widget.Button) ActiveUser(com.example.first_responder_app.interfaces.ActiveUser) ArrayList(java.util.ArrayList) ColorStateList(android.content.res.ColorStateList) List(java.util.List) ArrayList(java.util.ArrayList) RefreshETAs(com.example.first_responder_app.interfaces.RefreshETAs)

Example 4 with ActiveUser

use of com.example.first_responder_app.interfaces.ActiveUser in project FirstResponse by mattpost1700.

the class UserFragment method onCreateView.

@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    FragmentUserBinding binding = DataBindingUtil.inflate(inflater, R.layout.fragment_user, container, false);
    NavHostFragment navHostFragment = (NavHostFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
    mViewModel = new ViewModelProvider(requireActivity()).get(UserViewModel.class);
    user = mViewModel.getUserDataModel();
    profilePictureImageView = binding.userProfilePictureImageView;
    // Get active user id
    ActiveUser active = (ActiveUser) getActivity();
    if (active != null) {
        activeUser = active.getActive();
    }
    // TODO: navCont created for side bar(still need to be implemented)
    NavController navController = navHostFragment.getNavController();
    boolean THIS_IS_CURRENT_USER = user != null && activeUser != null && activeUser.getDocumentId().equals(user.getDocumentId());
    if (THIS_IS_CURRENT_USER) {
        binding.userSendMessageFab.setVisibility(View.GONE);
        binding.userEditFab.setOnClickListener(v -> {
            NavDirections action = UserFragmentDirections.actionUserFragmentToEditUserFragment2();
            Navigation.findNavController(binding.getRoot()).navigate(action);
        });
    } else {
        binding.userEditFab.setVisibility(View.GONE);
        binding.userSendMessageFab.setOnClickListener(v -> {
            Snackbar.make(getView(), "Send msg!", Snackbar.LENGTH_SHORT).show();
        // TODO: Send message
        });
    }
    setText(binding);
    try {
        final File localFile = File.createTempFile("Images", "bmp");
        StorageReference ref = FirestoreDatabase.profilePictureRef.child(user.getRemote_path_to_profile_picture());
        ref.getFile(localFile).addOnSuccessListener(bytes -> {
            try {
                profilePictureImageView.setImageBitmap(BitmapFactory.decodeFile(localFile.getAbsolutePath()));
            } catch (Exception e) {
                Log.d(TAG, "onCreateView: No profile picture found");
            }
        }).addOnFailureListener(e -> {
            Log.w(TAG, "getUserProfile: Could not load profile picture!", e);
        });
    } catch (IOException e) {
        Log.e(TAG, "onCreateView: Failed creating temp file", e);
    } catch (IllegalArgumentException e) {
        Log.d(TAG, "No profile picture");
    }
    return binding.getRoot();
}
Also used : Bundle(android.os.Bundle) NonNull(androidx.annotation.NonNull) ImageView(android.widget.ImageView) BitmapFactory(android.graphics.BitmapFactory) NavController(androidx.navigation.NavController) ActiveUser(com.example.first_responder_app.interfaces.ActiveUser) Fragment(androidx.fragment.app.Fragment) View(android.view.View) TAG(android.content.ContentValues.TAG) Log(android.util.Log) NavHostFragment(androidx.navigation.fragment.NavHostFragment) DataBindingUtil(androidx.databinding.DataBindingUtil) UsersDataModel(com.example.first_responder_app.dataModels.UsersDataModel) ViewModelProvider(androidx.lifecycle.ViewModelProvider) NavDirections(androidx.navigation.NavDirections) LayoutInflater(android.view.LayoutInflater) FirestoreDatabase(com.example.first_responder_app.FirestoreDatabase) IOException(java.io.IOException) FragmentUserBinding(com.example.first_responder_app.databinding.FragmentUserBinding) ViewGroup(android.view.ViewGroup) File(java.io.File) UserViewModel(com.example.first_responder_app.viewModels.UserViewModel) R(com.example.first_responder_app.R) FirebaseFirestore(com.google.firebase.firestore.FirebaseFirestore) Nullable(androidx.annotation.Nullable) StorageReference(com.google.firebase.storage.StorageReference) Navigation(androidx.navigation.Navigation) Snackbar(com.google.android.material.snackbar.Snackbar) FragmentUserBinding(com.example.first_responder_app.databinding.FragmentUserBinding) StorageReference(com.google.firebase.storage.StorageReference) NavController(androidx.navigation.NavController) IOException(java.io.IOException) IOException(java.io.IOException) NavDirections(androidx.navigation.NavDirections) UserViewModel(com.example.first_responder_app.viewModels.UserViewModel) ActiveUser(com.example.first_responder_app.interfaces.ActiveUser) NavHostFragment(androidx.navigation.fragment.NavHostFragment) File(java.io.File) ViewModelProvider(androidx.lifecycle.ViewModelProvider)

Example 5 with ActiveUser

use of com.example.first_responder_app.interfaces.ActiveUser in project FirstResponse by mattpost1700.

the class MainActivity method setActive.

/**
 * Set the logged in user
 * @param user the user who just logged in
 */
@Override
public void setActive(UsersDataModel user) {
    Log.d(TAG, "setActive: " + user);
    if (user == null) {
        this.activeUser = null;
        if (userListener != null) {
            userListener.remove();
            userListener = null;
        }
        if (incidentListener != null) {
            incidentListener.remove();
            incidentListener = null;
        }
        stopETA();
        return;
    }
    this.activeUser = user;
    NavigationView navView = findViewById(R.id.navView);
    View header = navView.getHeaderView(0);
    TextView name = header.findViewById(R.id.nav_name);
    TextView username = header.findViewById(R.id.nav_username);
    String fullName = user.getFirst_name() + " " + user.getLast_name();
    name.setText(fullName);
    username.setText(user.getUsername());
    // Ensure that the active user data is updated if database is updated
    if (userListener == null) {
        DocumentReference docRef = FirestoreDatabase.getInstance().getDb().collection("users").document(user.getDocumentId());
        userListener = docRef.addSnapshotListener((snapshot, err) -> {
            Log.d(TAG, "READ DATABASE - MAIN ACTIVITY");
            if (err != null) {
                System.err.println("Listen failed: " + err);
                return;
            }
            if (snapshot != null && snapshot.exists()) {
                activeUser = snapshot.toObject(UsersDataModel.class);
                // Find the address of the department and determine where they are responding
                setRespAddr();
                // Download profile pic
                try {
                    if (activeUser.getRemote_path_to_profile_picture() != null) {
                        final File localFile = File.createTempFile("Images", "bmp");
                        StorageReference ref = FirestoreDatabase.profilePictureRef.child(activeUser.getRemote_path_to_profile_picture());
                        ref.getFile(localFile).addOnSuccessListener(bytes -> {
                            try {
                                ((ImageView) findViewById(R.id.appDrawerProfilePicImageView)).setImageBitmap(BitmapFactory.decodeFile(localFile.getAbsolutePath()));
                            } catch (Exception e) {
                                Log.d(TAG, "onCreateView: No profile picture found");
                            }
                        }).addOnFailureListener(e -> {
                            Log.w(TAG, "getUserProfile: Could not load profile picture!", e);
                        });
                    }
                } catch (IOException e) {
                    Log.e(TAG, "onCreateView: Failed creating temp file", e);
                } catch (NullPointerException e) {
                    Log.e(TAG, "onCreate: Cannot get user", e);
                } catch (IllegalArgumentException e) {
                    Log.e(TAG, "onCreate: User has no image", e);
                }
            } else {
                System.out.print("Current data: null");
            }
        });
    }
}
Also used : Address(android.location.Address) Bundle(android.os.Bundle) PackageManager(android.content.pm.PackageManager) NonNull(androidx.annotation.NonNull) ImageView(android.widget.ImageView) LocationListener(android.location.LocationListener) AppCompatActivity(androidx.appcompat.app.AppCompatActivity) Drawable(android.graphics.drawable.Drawable) NavController(androidx.navigation.NavController) ActionBar(androidx.appcompat.app.ActionBar) ActiveUser(com.example.first_responder_app.interfaces.ActiveUser) Manifest(android.Manifest) ActionBarDrawerToggle(androidx.appcompat.app.ActionBarDrawerToggle) Locale(java.util.Locale) ETA(com.example.first_responder_app.DirectionAPI.ETA) Map(java.util.Map) Fragment(androidx.fragment.app.Fragment) View(android.view.View) ContextCompat(androidx.core.content.ContextCompat) MenuCompat(androidx.core.view.MenuCompat) NavHostFragment(androidx.navigation.fragment.NavHostFragment) Log(android.util.Log) LatLng(com.google.android.gms.maps.model.LatLng) Geocoder(android.location.Geocoder) IncidentFragment(com.example.first_responder_app.fragments.IncidentFragment) List(java.util.List) TextView(android.widget.TextView) ConstraintLayout(androidx.constraintlayout.widget.ConstraintLayout) StorageReference(com.google.firebase.storage.StorageReference) Toolbar(androidx.appcompat.widget.Toolbar) Location(android.location.Location) LocationManager(android.location.LocationManager) Context(android.content.Context) DrawerLayout(androidx.drawerlayout.widget.DrawerLayout) NavigationView(com.google.android.material.navigation.NavigationView) AppBarConfiguration(androidx.navigation.ui.AppBarConfiguration) BitmapFactory(android.graphics.BitmapFactory) DrawerLocker(com.example.first_responder_app.interfaces.DrawerLocker) MenuItem(android.view.MenuItem) ArrayList(java.util.ArrayList) ClipData(android.content.ClipData) SuppressLint(android.annotation.SuppressLint) DocumentReference(com.google.firebase.firestore.DocumentReference) QueryDocumentSnapshot(com.google.firebase.firestore.QueryDocumentSnapshot) IncidentDataModel(com.example.first_responder_app.dataModels.IncidentDataModel) NavigationUI(androidx.navigation.ui.NavigationUI) Toast(android.widget.Toast) ListenerRegistration(com.google.firebase.firestore.ListenerRegistration) TAG(android.content.ContentValues.TAG) UsersDataModel(com.example.first_responder_app.dataModels.UsersDataModel) FragmentManager(androidx.fragment.app.FragmentManager) ViewModelProvider(androidx.lifecycle.ViewModelProvider) ActivityCompat(androidx.core.app.ActivityCompat) GravityCompat(androidx.core.view.GravityCompat) AppCompatDelegate(androidx.appcompat.app.AppCompatDelegate) IOException(java.io.IOException) File(java.io.File) FireDepartmentDataModel(com.example.first_responder_app.dataModels.FireDepartmentDataModel) UserViewModel(com.example.first_responder_app.viewModels.UserViewModel) SharedPreferences(android.content.SharedPreferences) RefreshETAs(com.example.first_responder_app.interfaces.RefreshETAs) PreferenceManager(androidx.preference.PreferenceManager) NavigationView(com.google.android.material.navigation.NavigationView) StorageReference(com.google.firebase.storage.StorageReference) IOException(java.io.IOException) ImageView(android.widget.ImageView) View(android.view.View) TextView(android.widget.TextView) NavigationView(com.google.android.material.navigation.NavigationView) IOException(java.io.IOException) TextView(android.widget.TextView) ImageView(android.widget.ImageView) File(java.io.File) DocumentReference(com.google.firebase.firestore.DocumentReference)

Aggregations

ActiveUser (com.example.first_responder_app.interfaces.ActiveUser)11 UsersDataModel (com.example.first_responder_app.dataModels.UsersDataModel)9 NavDirections (androidx.navigation.NavDirections)7 ViewModelProvider (androidx.lifecycle.ViewModelProvider)6 NavHostFragment (androidx.navigation.fragment.NavHostFragment)6 Bundle (android.os.Bundle)5 View (android.view.View)5 NonNull (androidx.annotation.NonNull)5 NavController (androidx.navigation.NavController)5 FirestoreDatabase (com.example.first_responder_app.FirestoreDatabase)5 TAG (android.content.ContentValues.TAG)4 Log (android.util.Log)4 LayoutInflater (android.view.LayoutInflater)4 ViewGroup (android.view.ViewGroup)4 Toast (android.widget.Toast)4 Nullable (androidx.annotation.Nullable)4 DataBindingUtil (androidx.databinding.DataBindingUtil)4 Navigation (androidx.navigation.Navigation)4 R (com.example.first_responder_app.R)4 QueryDocumentSnapshot (com.google.firebase.firestore.QueryDocumentSnapshot)4