Arthelh/NCNF

View on GitHub
app/src/main/java/com/ncnf/views/fragments/group/GroupFragment.java

Summary

Maintainability
A
1 hr
Test Coverage
A
90%
package com.ncnf.views.fragments.group;

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

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import com.ncnf.R;
import com.ncnf.adapters.GroupsAdapter;
import com.ncnf.models.Group;
import com.ncnf.models.User;
import com.ncnf.repositories.GroupRepository;
import com.ncnf.repositories.UserRepository;
import com.ncnf.views.activities.group.GroupCreationActivity;


import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;

import javax.inject.Inject;

import dagger.hilt.android.AndroidEntryPoint;

@AndroidEntryPoint
public class GroupFragment extends Fragment {

    @Inject
    public User user;

    @Inject
    public GroupRepository repository;

    @Inject
    public UserRepository userRepository;

    private FragmentManager fragmentManager;
    private RecyclerView recycler;
    private GroupsAdapter adapter;

    private Button newGroup;

    private TextView isEmpty;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        this.fragmentManager = getChildFragmentManager();

        return inflater.inflate(R.layout.fragment_group, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        recycler = requireView().findViewById(R.id.group_recycler_view);
        // Setup RecyclerView
        recycler.setLayoutManager(new LinearLayoutManager(getActivity()));
        recycler.hasFixedSize();

        newGroup = requireView().findViewById(R.id.new_group_button);
        newGroup.setOnClickListener(v -> {
            Intent intent = new Intent(getActivity(), GroupCreationActivity.class);
            startActivity(intent);
        });

        isEmpty = view.findViewById(R.id.no_owned_group);

        setUpGroupsView();
    }

    private void setUpGroupsView() {

        user.loadUserFromDB().thenAccept(user -> {
            List<String> allGroups = new ArrayList<>(user.getParticipatingGroupsIds());
            CompletableFuture<List<Group>> groupsFuture = repository.loadMultipleGroups(allGroups);

            groupsFuture.thenAccept(groups -> {
                if(groups.isEmpty()) {
                    isEmpty.setVisibility(View.VISIBLE);
                }
                else {
                    adapter = new GroupsAdapter(getContext(), groups, this::openGroupPage);
                    recycler.setAdapter(adapter);
                }
            });

        });

    }

    private void openGroupPage(Group g) {

        Bundle bundle = new Bundle();
        bundle.putString("GROUP_ID", g.getUuid().toString());

        if(g.getOwnerId().equals(user.getUuid())) {
            GroupDisplayFragmentOwner nextFrag= new GroupDisplayFragmentOwner();
            nextFrag.setArguments(bundle);

            getActivity().getSupportFragmentManager().beginTransaction()
                    .replace(((ViewGroup)getView().getParent()).getId(), nextFrag, "findThisFragment")
                    .addToBackStack("tag")
                    .commit();

        } else {
            GroupDisplayFragment nextFrag= new GroupDisplayFragment();
            nextFrag.setArguments(bundle);

            getActivity().getSupportFragmentManager().beginTransaction()
                    .replace(((ViewGroup)getView().getParent()).getId(), nextFrag, "findThisFragment")
                    .addToBackStack("tag")
                    .commit();
        }
    }


}