package com.gordonwong.materialsheetfab.sample; import android.os.Build; import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.v4.view.GravityCompat; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.Toast; import com.gordonwong.materialsheetfab.MaterialSheetFab; import com.gordonwong.materialsheetfab.MaterialSheetFabEventListener; import com.gordonwong.materialsheetfab.sample.adapters.MainPagerAdapter; /** * Created by Gordon Wong on 7/17/2015. * * Main activity for material sheet fab sample. */ public class MainActivity extends AppCompatActivity implements View.OnClickListener { private ActionBarDrawerToggle drawerToggle; private DrawerLayout drawerLayout; private MaterialSheetFab materialSheetFab; private int statusBarColor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle(R.string.notes); setContentView(R.layout.activity_main); setupActionBar(); setupDrawer(); setupFab(); setupTabs(); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); drawerToggle.syncState(); } @Override public void onBackPressed() { if (materialSheetFab.isSheetVisible()) { materialSheetFab.hideSheet(); } else { super.onBackPressed(); } } /** * Sets up the action bar. */ private void setupActionBar() { setSupportActionBar((Toolbar) findViewById(R.id.toolbar)); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } /** * Sets up the navigation drawer. */ private void setupDrawer() { drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.opendrawer, R.string.closedrawer); drawerLayout.setDrawerListener(drawerToggle); } /** * Sets up the tabs. */ private void setupTabs() { // Setup view pager ViewPager viewpager = (ViewPager) findViewById(R.id.viewpager); viewpager.setAdapter(new MainPagerAdapter(this, getSupportFragmentManager())); viewpager.setOffscreenPageLimit(MainPagerAdapter.NUM_ITEMS); updatePage(viewpager.getCurrentItem()); // Setup tab layout TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.setupWithViewPager(viewpager); viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i1) { } @Override public void onPageSelected(int i) { updatePage(i); } @Override public void onPageScrollStateChanged(int i) { } }); } /** * Sets up the Floating action button. */ private void setupFab() { Fab fab = (Fab) findViewById(R.id.fab); View sheetView = findViewById(R.id.fab_sheet); View overlay = findViewById(R.id.overlay); int sheetColor = getResources().getColor(R.color.background_card); int fabColor = getResources().getColor(R.color.theme_accent); // Create material sheet FAB materialSheetFab = new MaterialSheetFab<>(fab, sheetView, overlay, sheetColor, fabColor); // Set material sheet event listener materialSheetFab.setEventListener(new MaterialSheetFabEventListener() { @Override public void onShowSheet() { // Save current status bar color statusBarColor = getStatusBarColor(); // Set darker status bar color to match the dim overlay setStatusBarColor(getResources().getColor(R.color.theme_primary_dark2)); } @Override public void onHideSheet() { // Restore status bar color setStatusBarColor(statusBarColor); } }); // Set material sheet item click listeners findViewById(R.id.fab_sheet_item_recording).setOnClickListener(this); findViewById(R.id.fab_sheet_item_reminder).setOnClickListener(this); findViewById(R.id.fab_sheet_item_photo).setOnClickListener(this); findViewById(R.id.fab_sheet_item_note).setOnClickListener(this); } /** * Called when the selected page changes. * * @param selectedPage selected page */ private void updatePage(int selectedPage) { updateFab(selectedPage); updateSnackbar(selectedPage); } /** * Updates the FAB based on the selected page * * @param selectedPage selected page */ private void updateFab(int selectedPage) { switch (selectedPage) { case MainPagerAdapter.ALL_POS: materialSheetFab.showFab(); break; case MainPagerAdapter.SHARED_POS: materialSheetFab.showFab(0, -getResources().getDimensionPixelSize(R.dimen.snackbar_height)); break; case MainPagerAdapter.FAVORITES_POS: default: materialSheetFab.hideSheetThenFab(); break; } } /** * Updates the snackbar based on the selected page * * @param selectedPage selected page */ private void updateSnackbar(int selectedPage) { View snackbar = findViewById(R.id.snackbar); switch (selectedPage) { case MainPagerAdapter.SHARED_POS: snackbar.setVisibility(View.VISIBLE); break; case MainPagerAdapter.ALL_POS: case MainPagerAdapter.FAVORITES_POS: default: snackbar.setVisibility(View.GONE); break; } } /** * Toggles opening/closing the drawer. */ private void toggleDrawer() { if (drawerLayout.isDrawerVisible(GravityCompat.START)) { drawerLayout.closeDrawer(GravityCompat.START); } else { drawerLayout.openDrawer(GravityCompat.START); } } @Override public void onClick(View v) { Toast.makeText(this, R.string.sheet_item_pressed, Toast.LENGTH_SHORT).show(); materialSheetFab.hideSheet(); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: toggleDrawer(); return true; default: return super.onOptionsItemSelected(item); } } private int getStatusBarColor() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { return getWindow().getStatusBarColor(); } return 0; } private void setStatusBarColor(int color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().setStatusBarColor(color); } } }