YassinAJDI/MaterialJournal

View on GitHub
app/src/main/java/com/ajdi/yassin/materialjournal/ui/notes/NotesFragment.java

Summary

Maintainability
A
0 mins
Test Coverage
package com.ajdi.yassin.materialjournal.ui.notes;


import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

import com.ajdi.yassin.materialjournal.R;
import com.ajdi.yassin.materialjournal.data.model.Note;
import com.ajdi.yassin.materialjournal.databinding.FragmentNotesBinding;
import com.ajdi.yassin.materialjournal.ui.login.AuthUiActivity;
import com.ajdi.yassin.materialjournal.utils.SnackbarMessage;
import com.ajdi.yassin.materialjournal.utils.SnackbarUtils;
import com.firebase.ui.auth.AuthUI;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.util.ArrayList;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import timber.log.Timber;

/**
 * Display a grid of {@link Note}s. User can choose to view all, favorite or trashed notes.
 */
public class NotesFragment extends Fragment {

    private NotesViewModel mNotesViewModel;

    private NotesAdapter mNotesAdapter;

    private FragmentNotesBinding mFragmentNotesBinding;

    public NotesFragment() {
        // Required empty public constructor
    }

    public static NotesFragment newInstance() {
        return new NotesFragment();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mFragmentNotesBinding = FragmentNotesBinding.inflate(inflater, container,
                false);

        mNotesViewModel = NotesActivity.obtainViewModel(getActivity());

        mFragmentNotesBinding.setViewmodel(mNotesViewModel);
        //mFragmentNotesBinding.setLifecycleOwner(this);

        setHasOptionsMenu(true);

        return mFragmentNotesBinding.getRoot();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.action_logout) {
            Timber.d("log out");
            AuthUI.getInstance()
                    .signOut(getActivity())
                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful()) {
                                startActivity(AuthUiActivity.createIntent(getActivity()));
                                getActivity().finish();
                            }
                        }
                    });
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        setupFab();

        setupListAdapter();

        setupSnackbar();

        setupRefreshLayout();
    }

    @Override
    public void onStart() {
        super.onStart();
        mNotesViewModel.start();
    }

    private void setupListAdapter() {
        Timber.d("setupListAdapter");
        RecyclerView recyclerView = mFragmentNotesBinding.recyclerNoteList;
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

        mNotesAdapter = new NotesAdapter(getActivity(), new ArrayList<Note>(0), mNotesViewModel);

        recyclerView.setAdapter(mNotesAdapter);
    }

    private void setupRefreshLayout() {
        final SwipeRefreshLayout swipeRefreshLayout = mFragmentNotesBinding.refreshLayout;
        swipeRefreshLayout.setColorSchemeColors(
                ContextCompat.getColor(getActivity(), R.color.colorPrimary),
                ContextCompat.getColor(getActivity(), R.color.colorAccent),
                ContextCompat.getColor(getActivity(), R.color.colorPrimaryDark)
        );
    }

    private void setupFab() {
        if (getActivity() == null)
            return;

        FloatingActionButton fab = getActivity().findViewById(R.id.fab_add_note);

        fab.setImageResource(R.drawable.ic_add_black_24dp);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mNotesViewModel.addNewNote();
            }
        });
    }

    private void setupSnackbar() {
        mNotesViewModel.getSnackbarMessage().observe(this, new SnackbarMessage.SnackbarObserver() {
            @Override
            public void onNewMessage(@StringRes int snackbarMessageResourceId) {
                SnackbarUtils.showSnackbar(getView(), getString(snackbarMessageResourceId));
            }
        });
    }
}