package com.etiennelawlor.loop.activities; import android.content.Intent; import android.graphics.Typeface; import android.os.Bundle; import android.support.design.widget.NavigationView; import android.support.design.widget.Snackbar; import android.support.v4.app.Fragment; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.widget.TextView; import com.bumptech.glide.Glide; import com.etiennelawlor.loop.R; import com.etiennelawlor.loop.bus.RxBus; import com.etiennelawlor.loop.bus.events.LeftDrawableClickedEvent; import com.etiennelawlor.loop.fragments.ExploreFragment; import com.etiennelawlor.loop.fragments.LikedVideosFragment; import com.etiennelawlor.loop.fragments.WatchLaterVideosFragment; import com.etiennelawlor.loop.fragments.WatchNowFragment; import com.etiennelawlor.loop.network.models.response.AuthorizedUser; import com.etiennelawlor.loop.network.models.response.Picture; import com.etiennelawlor.loop.prefs.LoopPrefs; import com.etiennelawlor.loop.utilities.EmailUtility; import com.etiennelawlor.loop.utilities.FontCache; import com.etiennelawlor.loop.utilities.TrestleUtility; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import de.hdodenhof.circleimageview.CircleImageView; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; import rx.subscriptions.CompositeSubscription; /** * Created by etiennelawlor on 5/23/15. */ public class MainActivity extends AppCompatActivity { // region Constants private static final String WATCH_NOW = "Watch Now"; private static final String LIKES = "Likes"; private static final String WATCH_LATER = "Watch Later"; private static final String EXPLORE = "Explore"; // private static final String SETTINGS = "Settings"; private static final String HELP_AND_FEEDBACK = "Help and Feedback"; private static final String LOGOUT = "Logout"; // endregion // region Views @BindView(R.id.drawer_layout) DrawerLayout drawerLayout; @BindView(R.id.nav_view) NavigationView navigationView; private CircleImageView avatarImageView; private TextView fullNameTextView; // endregion // region Member Variables private Typeface font; private AuthorizedUser authorizedUser; private CompositeSubscription compositeSubscription; // endregion // region Listeners private NavigationView.OnNavigationItemSelectedListener mNavigationViewOnNavigationItemSelectedListener = new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { drawerLayout.closeDrawers(); String title = menuItem.getTitle().toString(); switch (title) { case WATCH_NOW: if(!menuItem.isChecked()){ menuItem.setChecked(true); getSupportFragmentManager() .beginTransaction() .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) .replace(R.id.content_fl, WatchNowFragment.newInstance(), "") .commit(); } break; case LIKES: if(!menuItem.isChecked()) { menuItem.setChecked(true); getSupportFragmentManager() .beginTransaction() .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) .replace(R.id.content_fl, LikedVideosFragment.newInstance(), "") .commit(); } break; case WATCH_LATER: if(!menuItem.isChecked()) { menuItem.setChecked(true); getSupportFragmentManager() .beginTransaction() .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) .replace(R.id.content_fl, WatchLaterVideosFragment.newInstance(), "") .commit(); } break; case EXPLORE: if(!menuItem.isChecked()) { menuItem.setChecked(true); getSupportFragmentManager() .beginTransaction() .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) .replace(R.id.content_fl, ExploreFragment.newInstance(), "") .commit(); } break; // case SETTINGS: // getSupportFragmentManager() // .beginTransaction() // .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) // .replace(R.id.content_fl, PlaceholderFragment.newInstance(), "") // .commit(); // break; case HELP_AND_FEEDBACK: try { startActivity(EmailUtility.getEmailIntent(MainActivity.this)); } catch (android.content.ActivityNotFoundException ex) { Snackbar.make(findViewById(android.R.id.content), TrestleUtility.getFormattedText("There are no email apps installed on your device", font, 16), Snackbar.LENGTH_LONG) .show(); } break; case LOGOUT: LoopPrefs.signOut(MainActivity.this); startActivity(new Intent(MainActivity.this, LauncherActivity.class)); default: break; } return true; } }; // endregion // region Lifecycle Methods @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); font = FontCache.getTypeface("Ubuntu-Medium.ttf", this); authorizedUser = LoopPrefs.getAuthorizedUser(this); View header = LayoutInflater.from(this).inflate(R.layout.nav_header, null); avatarImageView = (CircleImageView) header.findViewById(R.id.user_avatar_riv); fullNameTextView = (TextView) header.findViewById(R.id.full_name_tv); navigationView.addHeaderView(header); setUpAvatar(); setUpFullName(); formatMenuItems(); // Setup NavigationView navigationView.setNavigationItemSelectedListener(mNavigationViewOnNavigationItemSelectedListener); getSupportFragmentManager() .beginTransaction() .replace(R.id.content_fl, WatchNowFragment.newInstance(), "") .commit(); compositeSubscription = new CompositeSubscription(); setUpRxBusSubscription(); } @Override protected void onResume() { super.onResume(); } @Override protected void onDestroy() { super.onDestroy(); compositeSubscription.unsubscribe(); } // endregion @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: drawerLayout.openDrawer(GravityCompat.START); return true; } return super.onOptionsItemSelected(item); } @Override public void onBackPressed() { if (drawerLayout.isDrawerOpen(Gravity.LEFT)) { drawerLayout.closeDrawer(Gravity.LEFT); } else { super.onBackPressed(); } } @Override public void setTitle(CharSequence title) { if (getSupportActionBar() != null) { getSupportActionBar().setTitle(title); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.content_fl); if (fragment != null) { fragment.onActivityResult(requestCode, resultCode, data); } } // region Helper Methods private void setUpAvatar(){ if(authorizedUser != null){ List<Picture> pictures = authorizedUser.getPictures(); if(pictures != null && pictures.size()>0){ Picture picture = pictures.get(pictures.size() - 1); if(picture != null){ String link = picture.getLink(); if(!TextUtils.isEmpty(link)){ Glide.with(this) .load(link) // .placeholder(R.drawable.ic_placeholder) // .error(R.drawable.ic_error) .into(avatarImageView); } } } } } private void setUpFullName(){ if(authorizedUser != null){ String name = authorizedUser.getName(); if(!TextUtils.isEmpty(name)){ fullNameTextView.setText(name); } } } private void formatMenuItems() { Menu menu = navigationView.getMenu(); for (int i = 0; i < menu.size(); i++) { MenuItem mi = menu.getItem(i); SubMenu subMenu = mi.getSubMenu(); if (subMenu != null && subMenu.size() > 0) { for (int j = 0; j < subMenu.size(); j++) { MenuItem subMenuItem = subMenu.getItem(j); applyFontToMenuItem(subMenuItem); } } applyFontToMenuItem(mi); } } private void applyFontToMenuItem(MenuItem mi) { mi.setTitle(TrestleUtility.getFormattedText(mi.getTitle().toString(), font)); } private void setUpRxBusSubscription(){ Subscription rxBusSubscription = RxBus.getInstance().toObserverable() .observeOn(AndroidSchedulers.mainThread()) // UI Thread .subscribe(new Action1<Object>() { @Override public void call(Object event) { if (event == null) { return; } if(event instanceof LeftDrawableClickedEvent){ LeftDrawableClickedEvent.Type type = ((LeftDrawableClickedEvent)event).getType(); if(type == LeftDrawableClickedEvent.Type.MENU) drawerLayout.openDrawer(GravityCompat.START); } } }); compositeSubscription.add(rxBusSubscription); } // endregion }