package io.github.froger.instamaterial.ui.activity; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.Menu; import android.view.View; import android.view.animation.OvershootInterpolator; import butterknife.BindView; import butterknife.OnClick; import io.github.froger.instamaterial.R; import io.github.froger.instamaterial.Utils; import io.github.froger.instamaterial.ui.adapter.FeedAdapter; import io.github.froger.instamaterial.ui.adapter.FeedItemAnimator; import io.github.froger.instamaterial.ui.view.FeedContextMenu; import io.github.froger.instamaterial.ui.view.FeedContextMenuManager; public class MainActivity extends BaseDrawerActivity implements FeedAdapter.OnFeedItemClickListener, FeedContextMenu.OnFeedContextMenuItemClickListener { public static final String ACTION_SHOW_LOADING_ITEM = "action_show_loading_item"; private static final int ANIM_DURATION_TOOLBAR = 300; private static final int ANIM_DURATION_FAB = 400; @BindView(R.id.rvFeed) RecyclerView rvFeed; @BindView(R.id.btnCreate) FloatingActionButton fabCreate; @BindView(R.id.content) CoordinatorLayout clContent; private FeedAdapter feedAdapter; private boolean pendingIntroAnimation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setupFeed(); if (savedInstanceState == null) { pendingIntroAnimation = true; } else { feedAdapter.updateItems(false); } } private void setupFeed() { LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this) { @Override protected int getExtraLayoutSpace(RecyclerView.State state) { return 300; } }; rvFeed.setLayoutManager(linearLayoutManager); feedAdapter = new FeedAdapter(this); feedAdapter.setOnFeedItemClickListener(this); rvFeed.setAdapter(feedAdapter); rvFeed.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { FeedContextMenuManager.getInstance().onScrolled(recyclerView, dx, dy); } }); rvFeed.setItemAnimator(new FeedItemAnimator()); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (ACTION_SHOW_LOADING_ITEM.equals(intent.getAction())) { showFeedLoadingItemDelayed(); } } private void showFeedLoadingItemDelayed() { new Handler().postDelayed(new Runnable() { @Override public void run() { rvFeed.smoothScrollToPosition(0); feedAdapter.showLoadingView(); } }, 500); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); if (pendingIntroAnimation) { pendingIntroAnimation = false; startIntroAnimation(); } return true; } private void startIntroAnimation() { fabCreate.setTranslationY(2 * getResources().getDimensionPixelOffset(R.dimen.btn_fab_size)); int actionbarSize = Utils.dpToPx(56); getToolbar().setTranslationY(-actionbarSize); getIvLogo().setTranslationY(-actionbarSize); getInboxMenuItem().getActionView().setTranslationY(-actionbarSize); getToolbar().animate() .translationY(0) .setDuration(ANIM_DURATION_TOOLBAR) .setStartDelay(300); getIvLogo().animate() .translationY(0) .setDuration(ANIM_DURATION_TOOLBAR) .setStartDelay(400); getInboxMenuItem().getActionView().animate() .translationY(0) .setDuration(ANIM_DURATION_TOOLBAR) .setStartDelay(500) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { startContentAnimation(); } }) .start(); } private void startContentAnimation() { fabCreate.animate() .translationY(0) .setInterpolator(new OvershootInterpolator(1.f)) .setStartDelay(300) .setDuration(ANIM_DURATION_FAB) .start(); feedAdapter.updateItems(true); } @Override public void onCommentsClick(View v, int position) { final Intent intent = new Intent(this, CommentsActivity.class); int[] startingLocation = new int[2]; v.getLocationOnScreen(startingLocation); intent.putExtra(CommentsActivity.ARG_DRAWING_START_LOCATION, startingLocation[1]); startActivity(intent); overridePendingTransition(0, 0); } @Override public void onMoreClick(View v, int itemPosition) { FeedContextMenuManager.getInstance().toggleContextMenuFromView(v, itemPosition, this); } @Override public void onProfileClick(View v) { int[] startingLocation = new int[2]; v.getLocationOnScreen(startingLocation); startingLocation[0] += v.getWidth() / 2; UserProfileActivity.startUserProfileFromLocation(startingLocation, this); overridePendingTransition(0, 0); } @Override public void onReportClick(int feedItem) { FeedContextMenuManager.getInstance().hideContextMenu(); } @Override public void onSharePhotoClick(int feedItem) { FeedContextMenuManager.getInstance().hideContextMenu(); } @Override public void onCopyShareUrlClick(int feedItem) { FeedContextMenuManager.getInstance().hideContextMenu(); } @Override public void onCancelClick(int feedItem) { FeedContextMenuManager.getInstance().hideContextMenu(); } @OnClick(R.id.btnCreate) public void onTakePhotoClick() { int[] startingLocation = new int[2]; fabCreate.getLocationOnScreen(startingLocation); startingLocation[0] += fabCreate.getWidth() / 2; TakePhotoActivity.startCameraFromLocation(startingLocation, this); overridePendingTransition(0, 0); } public void showLikedSnackbar() { Snackbar.make(clContent, "Liked!", Snackbar.LENGTH_SHORT).show(); } }