YassinAJDI/MaterialJournal

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

Summary

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

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import com.ajdi.yassin.materialjournal.R;
import com.ajdi.yassin.materialjournal.ui.addedit.AddEditNoteActivity;
import com.ajdi.yassin.materialjournal.ui.login.AuthUiActivity;
import com.ajdi.yassin.materialjournal.ui.notedetail.NoteDetailActivity;
import com.ajdi.yassin.materialjournal.utils.ActivityUtils;
import com.ajdi.yassin.materialjournal.utils.UiUtils;
import com.ajdi.yassin.materialjournal.utils.ViewModelFactory;
import com.firebase.ui.auth.IdpResponse;
import com.firebase.ui.auth.util.ExtraConstants;
import com.google.android.material.bottomappbar.BottomAppBar;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;

public class NotesActivity extends AppCompatActivity implements NotesNavigator, NoteItemNavigator {

    private NotesViewModel mViewModel;

    private BottomAppBar mBar;

    private BottomSheetBehavior<View> bottomDrawerBehavior;

    private FirebaseAuth mFirebaseAuth;

    private FirebaseUser mFirebaseUser;

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

        checkIfSignedIn();

        setupViewFragment();

        setupBottomBar();

        setUpBottomDrawer();

        mViewModel = obtainViewModel(this);

        // Subscribe to add new note event
        mViewModel.getNewNoteEvent().observeEvent(this, new Observer<Void>() {
            @Override
            public void onChanged(@Nullable Void aVoid) {
                addNewNote();
            }
        });

        // Subscribe to open note event
        mViewModel.getOpenNoteEvent().observeEvent(this, new Observer<String>() {
            @Override
            public void onChanged(@Nullable String noteId) {
                if (noteId != null) {
                    openNoteDetails(noteId);
                }
            }
        });
    }

    private void checkIfSignedIn() {
        mFirebaseAuth = FirebaseAuth.getInstance();
        mFirebaseUser = mFirebaseAuth.getCurrentUser();

        if (mFirebaseUser == null){
            //Not signed in, launch the Sign In Activity
            startActivity(new Intent(this, AuthUiActivity.class));
            finish();
            return;
        }
    }

    private void setUpBottomDrawer() {
        View bottomDrawer = findViewById(R.id.bottom_drawer);
        bottomDrawerBehavior = BottomSheetBehavior.from(bottomDrawer);
        bottomDrawerBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);

        mBar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                bottomDrawerBehavior.setState(BottomSheetBehavior.STATE_HALF_EXPANDED);
            }
        });
        //mBar.setNavigationIcon(R.drawable.ic_menu_black_24dp);
        //mBar.replaceMenu(R.menu.demo_primary);
    }

    private void setupBottomBar() {
        mBar = findViewById(R.id.bottom_app_bar);
        setSupportActionBar(mBar);
    }

    private void setupViewFragment() {
        NotesFragment mNotesFragment = (NotesFragment)
                getSupportFragmentManager().findFragmentById(R.id.fragment_container);
        if (mNotesFragment == null) {
            // Create the fragment
            mNotesFragment = NotesFragment.newInstance();
            FragmentManager fragmentManager = getSupportFragmentManager();
            ActivityUtils.replaceFragmentInActivity(fragmentManager,
                    mNotesFragment, R.id.fragment_container);
        }
    }

    public static NotesViewModel obtainViewModel(FragmentActivity activity) {
        // Use a Factory to inject dependencies into the ViewModel
        ViewModelFactory factory = ViewModelFactory.getInstance(activity.getApplication());

        return ViewModelProviders.of(activity, factory).get(NotesViewModel.class);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);

        MenuItem menuItem = menu.findItem(R.id.action_search);

        if (menuItem != null) {
            UiUtils.tintMenuIcon(this, menuItem, R.color.md_white_1000);
        }

        return true;
    }





    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        mViewModel.handleActivityResult(requestCode, resultCode);

    }

    @Override
    public void addNewNote() {
        Intent intent = new Intent(this, AddEditNoteActivity.class);
        startActivityForResult(intent, AddEditNoteActivity.REQUEST_CODE);
    }

    @Override
    public void openNoteDetails(String noteId) {
        Intent intent = new Intent(this, NoteDetailActivity.class);
        intent.putExtra(NoteDetailActivity.EXTRA_NOTE_ID, noteId);
        startActivityForResult(intent, AddEditNoteActivity.REQUEST_CODE);
    }

    @Override
    public void onBackPressed() {

        if (bottomDrawerBehavior.getState() != BottomSheetBehavior.STATE_HIDDEN) {
            bottomDrawerBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
            return;
        }
        super.onBackPressed();
    }

    public static Intent createIntent(Context context, IdpResponse idpResponse) {
        return new Intent().setClass(context, NotesActivity.class)
                .putExtra(ExtraConstants.IDP_RESPONSE, idpResponse);
    }
}