movemeet/movemeet

View on GitHub
app/src/main/java/com/sdp/movemeet/view/profile/ProfileActivity.java

Summary

Maintainability
A
30 mins
Test Coverage
A
98%
package com.sdp.movemeet.view.profile;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.DocumentSnapshot;
import com.sdp.movemeet.R;
import com.sdp.movemeet.backend.BackendManager;
import com.sdp.movemeet.backend.firebase.firestore.FirestoreUserManager;
import com.sdp.movemeet.backend.providers.AuthenticationInstanceProvider;
import com.sdp.movemeet.backend.serialization.UserSerializer;
import com.sdp.movemeet.models.Image;
import com.sdp.movemeet.models.User;
import com.sdp.movemeet.utility.ImageHandler;
import com.sdp.movemeet.view.home.LoginActivity;
import com.sdp.movemeet.view.navigation.Navigation;

import java.util.ArrayList;

public class ProfileActivity extends AppCompatActivity {

    private static final String TAG = "ProfileActivity";

    public static final String EXTRA_FULL_NAME = "fullName";
    public static final String EXTRA_EMAIL = "email";
    public static final String EXTRA_PHONE = "phone";
    public static final String EXTRA_DESCRIPTION = "description";
    public static final String EXTRA_CREATED_ACTIVITIES = "createdActivities";
    public static final String EXTRA_REGISTERED_ACTIVITIES = "registeredActivities";

    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
    public static boolean enableNav = true;

    private TextView fullName, email, phone, description;
    private ArrayList<String> createdActivities;
    private ArrayList<String> registeredActivities;

    private String userId, userImagePath;
    private User user;

    private FirebaseAuth fAuth;
    private BackendManager<User> userManager;

    private ProgressBar progressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);

        fAuth = AuthenticationInstanceProvider.getAuthenticationInstance();
        //The aim is to block any direct access to this page if the user is not logged
        if (fAuth.getCurrentUser() == null) {
            startActivity(new Intent(getApplicationContext(), LoginActivity.class));
            finish();
        } else {
            userId = fAuth.getCurrentUser().getUid();
        }

        if (enableNav) new Navigation(this, R.id.nav_edit_profile).createDrawer();

        ImageView profileImage = findViewById(R.id.image_view_profile_image);
        progressBar = findViewById(R.id.progress_bar_profile);

        fullName = findViewById(R.id.text_view_activity_profile_name);
        email = findViewById(R.id.text_view_activity_profile_email);
        phone = findViewById(R.id.text_view_activity_profile_phone);
        description = findViewById(R.id.text_view_activity_profile_description);

        userManager = new FirestoreUserManager(FirestoreUserManager.USERS_COLLECTION, new UserSerializer());
        displayRegisteredUserData();
        userImagePath = FirestoreUserManager.USERS_COLLECTION + ImageHandler.PATH_SEPARATOR + userId
                + ImageHandler.PATH_SEPARATOR + ImageHandler.USER_IMAGE_NAME;
        Image image = new Image(null, profileImage);
        image.setDocumentPath(userImagePath);
        ImageHandler.loadImage(image, this);
    }


    public void displayRegisteredUserData() {
        Task<DocumentSnapshot> document = (Task<DocumentSnapshot>) userManager.get(FirestoreUserManager.USERS_COLLECTION + "/" + userId);
        document.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful()) {
                    DocumentSnapshot document = task.getResult();
                    if (document.exists()) {
                        UserSerializer userSerializer = new UserSerializer();
                        user = userSerializer.deserialize(document.getData());
                        fullName.setText(user.getFullName());
                        email.setText(user.getEmail());
                        phone.setText(user.getPhoneNumber());
                        description.setText(user.getDescription());
                        createdActivities = user.getCreatedActivitiesId();
                        registeredActivities = user.getRegisteredActivitiesId();
                    } else {
                        Log.d(TAG, "No such document!");
                    }
                } else {
                    Log.d(TAG, "Get failed with: ", task.getException());
                }
            }
        });
    }

    public ProgressBar getProgressBar() {
        return progressBar;
    }


    public void goToEditProfileActivity(View view) {
        Intent i = new Intent(ProfileActivity.this, EditProfileActivity.class);
        i.putExtra(EXTRA_FULL_NAME, fullName.getText().toString()); // key, value
        i.putExtra(EXTRA_EMAIL, email.getText().toString());
        i.putExtra(EXTRA_PHONE, phone.getText().toString());
        i.putExtra(EXTRA_DESCRIPTION, description.getText().toString());
        i.putExtra(EXTRA_CREATED_ACTIVITIES, createdActivities);
        i.putExtra(EXTRA_REGISTERED_ACTIVITIES, registeredActivities);
        startActivity(i);
    }

}