/** * Copyright (c) 2012 Todoroo Inc * * See the file "LICENSE" for the full license governing this code. */ package com.todoroo.astrid.ui; import greendroid.widget.QuickAction; import greendroid.widget.QuickActionWidget; import java.util.List; import android.content.Context; import android.graphics.Rect; import android.util.DisplayMetrics; import android.view.View; import android.view.View.MeasureSpec; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.FrameLayout; import com.timsu.astrid.R; public class FragmentPopover extends QuickActionWidget { protected DisplayMetrics metrics; public FragmentPopover(Context context, int layout) { super(context); setContentView(layout); metrics = context.getResources().getDisplayMetrics(); setFocusable(true); setTouchable(true); } public void setContent(View content) { FrameLayout contentContainer = (FrameLayout) getContentView().findViewById(R.id.content); contentContainer.addView(content); } public void setContent(View content, LayoutParams params) { FrameLayout contentContainer = (FrameLayout) getContentView().findViewById(R.id.content); contentContainer.addView(content, params); } @Override protected void populateQuickActions(List<QuickAction> quickActions) { // Do nothing } @Override protected void onMeasureAndLayout(Rect anchorRect, View contentView) { contentView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); contentView.measure(MeasureSpec.makeMeasureSpec(getScreenWidth(), MeasureSpec.EXACTLY), ViewGroup.LayoutParams.WRAP_CONTENT); int rootHeight = contentView.getMeasuredHeight(); int offsetY = getArrowOffsetY(); int dyTop = anchorRect.top; int dyBottom = getScreenHeight() - anchorRect.bottom; boolean onTop = (dyTop > dyBottom); int popupY = (onTop) ? anchorRect.top - rootHeight + offsetY : anchorRect.bottom - offsetY; setWidgetSpecs(popupY, onTop); } @Override protected int getArrowLeftMargin(View arrow) { return mRect.left + arrow.getMeasuredWidth() / 2 - (int) (10 * metrics.density); } @Override public void show(View anchor) { if (isShowing()) return; super.show(anchor); } }