// Path: app/src/main/java/com/baurine/instamaterial/ui/view/FeedContextMenu.java
// public class FeedContextMenu extends LinearLayout {
// 
//     private static final int CONTEXT_MENU_WIDTH = CommonUtils.dpToPx(240);
// 
//     private int mFeedItem = -1;
// 
//     private OnFeedContextMenuItemClickListener mListener;
// 
//     public FeedContextMenu(Context context) {
//         super(context);
//         init();
//     }
// 
//     private void init() {
//         LayoutInflater.from(getContext()).inflate(R.layout.view_context_menu, this, true);
//         setBackgroundResource(R.mipmap.bg_container_shadow);
//         setOrientation(VERTICAL);
//         setLayoutParams(new LayoutParams(CONTEXT_MENU_WIDTH, ViewGroup.LayoutParams.WRAP_CONTENT));
//     }
// 
//     public void bindToItem(int feedItem) {
//         mFeedItem = feedItem;
//     }
// 
//     @Override
//     protected void onAttachedToWindow() {
//         super.onAttachedToWindow();
//         ButterKnife.inject(this);
//     }
// 
//     public void dismiss() {
//         ((ViewGroup) getParent()).removeView(FeedContextMenu.this);
//     }
// 
//     @OnClick(R.id.btn_report)
//     public void onReportClick() {
//         if (mListener != null) {
//             mListener.onReportClick(mFeedItem);
//         }
//     }
// 
//     @OnClick(R.id.btn_share_photo)
//     public void onSharePhotoClick() {
//         if (mListener != null) {
//             mListener.onSharePhototClick(mFeedItem);
//         }
//     }
// 
//     @OnClick(R.id.btn_copy_share_url)
//     public void onCopyShareUrlClick() {
//         if (mListener != null)
//             mListener.onCopyShareUrlClick(mFeedItem);
//     }
// 
//     @OnClick(R.id.btn_cancel)
//     public void onCancelClick() {
//         if (mListener != null) {
//             mListener.onCancelClick(mFeedItem);
//         }
//     }
// 
//     public void setOnFeedContextMentItemListener(OnFeedContextMenuItemClickListener listener) {
//         mListener = listener;
//     }
// 
//     public interface OnFeedContextMenuItemClickListener {
//         public void onReportClick(int feedItem);
// 
//         public void onSharePhototClick(int feedItem);
// 
//         public void onCopyShareUrlClick(int feedItem);
// 
//         public void onCancelClick(int feedItem);
//     }
// }
// 
// Path: app/src/main/java/com/baurine/instamaterial/utils/CommonUtils.java
// public class CommonUtils {
// 
//     private static int mScreenWidth = 0;
//     private static int mScreenHeight = 0;
// 
//     private static void getScreenMetric(Context cxt) {
//         WindowManager wm = (WindowManager) cxt.getSystemService(Context.WINDOW_SERVICE);
//         Display display = wm.getDefaultDisplay();
//         Point size = new Point();
//         display.getSize(size);
//         mScreenWidth = size.x;
//         mScreenHeight = size.y;
//     }
// 
//     public static int getScreenWidth(Context cxt) {
//         if (mScreenHeight == 0) {
//             getScreenMetric(cxt);
//         }
// 
//         return mScreenWidth;
//     }
// 
//     public static int getScreenHeight(Context cxt) {
//         if (mScreenHeight == 0) {
//             getScreenMetric(cxt);
//         }
// 
//         return mScreenHeight;
//     }
// 
//     public static int dpToPx(int dp) {
//         return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
//     }
// 
// }


import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.OvershootInterpolator;
import com.baurine.instamaterial.ui.view.FeedContextMenu;
import com.baurine.instamaterial.utils.CommonUtils;
            mContextMenuView.setOnFeedContextMentItemListener(listener);

            ((ViewGroup) openingView.getRootView().findViewById(android.R.id.content))
                    .addView(mContextMenuView);

            mContextMenuView.getViewTreeObserver().addOnPreDrawListener(
                    new ViewTreeObserver.OnPreDrawListener() {
                        @Override
                        public boolean onPreDraw() {
                            mContextMenuView.getViewTreeObserver().removeOnPreDrawListener(this);
                            setupContextMenuInitPostion(openingView);
                            performShowAnimation();
                            return false;
                        }
                    }
            );
        }
    }

    private void setupContextMenuInitPostion(View openingView) {
        final int[] openingViewLocation = new int[2];
        openingView.getLocationOnScreen(openingViewLocation);
        int additionalBottomMargin = CommonUtils.dpToPx(16);
        mContextMenuView.setTranslationX(openingViewLocation[0] - mContextMenuView.getWidth() / 3);
        mContextMenuView.setTranslationY(openingViewLocation[1] - mContextMenuView.getHeight()
                - additionalBottomMargin);
    }

    private void performShowAnimation() {
        mContextMenuView.setPivotX(mContextMenuView.getWidth() / 2);
// Path: app/src/main/java/com/baurine/instamaterial/ui/view/FeedContextMenu.java
// public class FeedContextMenu extends LinearLayout {
// 
//     private static final int CONTEXT_MENU_WIDTH = CommonUtils.dpToPx(240);
// 
//     private int mFeedItem = -1;
// 
//     private OnFeedContextMenuItemClickListener mListener;
// 
//     public FeedContextMenu(Context context) {
//         super(context);
//         init();
//     }
// 
//     private void init() {
//         LayoutInflater.from(getContext()).inflate(R.layout.view_context_menu, this, true);
//         setBackgroundResource(R.mipmap.bg_container_shadow);
//         setOrientation(VERTICAL);
//         setLayoutParams(new LayoutParams(CONTEXT_MENU_WIDTH, ViewGroup.LayoutParams.WRAP_CONTENT));
//     }
// 
//     public void bindToItem(int feedItem) {
//         mFeedItem = feedItem;
//     }
// 
//     @Override
//     protected void onAttachedToWindow() {
//         super.onAttachedToWindow();
//         ButterKnife.inject(this);
//     }
// 
//     public void dismiss() {
//         ((ViewGroup) getParent()).removeView(FeedContextMenu.this);
//     }
// 
//     @OnClick(R.id.btn_report)
//     public void onReportClick() {
//         if (mListener != null) {
//             mListener.onReportClick(mFeedItem);
//         }
//     }
// 
//     @OnClick(R.id.btn_share_photo)
//     public void onSharePhotoClick() {
//         if (mListener != null) {
//             mListener.onSharePhototClick(mFeedItem);
//         }
//     }
// 
//     @OnClick(R.id.btn_copy_share_url)
//     public void onCopyShareUrlClick() {
//         if (mListener != null)
//             mListener.onCopyShareUrlClick(mFeedItem);
//     }
// 
//     @OnClick(R.id.btn_cancel)
//     public void onCancelClick() {
//         if (mListener != null) {
//             mListener.onCancelClick(mFeedItem);
//         }
//     }
// 
//     public void setOnFeedContextMentItemListener(OnFeedContextMenuItemClickListener listener) {
//         mListener = listener;
//     }
// 
//     public interface OnFeedContextMenuItemClickListener {
//         public void onReportClick(int feedItem);
// 
//         public void onSharePhototClick(int feedItem);
// 
//         public void onCopyShareUrlClick(int feedItem);
// 
//         public void onCancelClick(int feedItem);
//     }
// }
// 
// Path: app/src/main/java/com/baurine/instamaterial/utils/CommonUtils.java
// public class CommonUtils {
// 
//     private static int mScreenWidth = 0;
//     private static int mScreenHeight = 0;
// 
//     private static void getScreenMetric(Context cxt) {
//         WindowManager wm = (WindowManager) cxt.getSystemService(Context.WINDOW_SERVICE);
//         Display display = wm.getDefaultDisplay();
//         Point size = new Point();
//         display.getSize(size);
//         mScreenWidth = size.x;
//         mScreenHeight = size.y;
//     }
// 
//     public static int getScreenWidth(Context cxt) {
//         if (mScreenHeight == 0) {
//             getScreenMetric(cxt);
//         }
// 
//         return mScreenWidth;
//     }
// 
//     public static int getScreenHeight(Context cxt) {
//         if (mScreenHeight == 0) {
//             getScreenMetric(cxt);
//         }
// 
//         return mScreenHeight;
//     }
// 
//     public static int dpToPx(int dp) {
//         return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
//     }
// 
// }


// Path: app/src/main/java/com/baurine/instamaterial/ui/manager/FeedContextMenuManager.java
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.OvershootInterpolator;
import com.baurine.instamaterial.ui.view.FeedContextMenu;
import com.baurine.instamaterial.utils.CommonUtils;

            mContextMenuView.setOnFeedContextMentItemListener(listener);

            ((ViewGroup) openingView.getRootView().findViewById(android.R.id.content))
                    .addView(mContextMenuView);

            mContextMenuView.getViewTreeObserver().addOnPreDrawListener(
                    new ViewTreeObserver.OnPreDrawListener() {
                        @Override
                        public boolean onPreDraw() {
                            mContextMenuView.getViewTreeObserver().removeOnPreDrawListener(this);
                            setupContextMenuInitPostion(openingView);
                            performShowAnimation();
                            return false;
                        }
                    }
            );
        }
    }

    private void setupContextMenuInitPostion(View openingView) {
        final int[] openingViewLocation = new int[2];
        openingView.getLocationOnScreen(openingViewLocation);
        int additionalBottomMargin = CommonUtils.dpToPx(16);
        mContextMenuView.setTranslationX(openingViewLocation[0] - mContextMenuView.getWidth() / 3);
        mContextMenuView.setTranslationY(openingViewLocation[1] - mContextMenuView.getHeight()
                - additionalBottomMargin);
    }

    private void performShowAnimation() {
        mContextMenuView.setPivotX(mContextMenuView.getWidth() / 2);
        mContextMenuView.setPivotY(mContextMenuView.getHeight());