/** * Copyright (c) 2012 Todoroo Inc * * See the file "LICENSE" for the full license governing this code. */ package com.todoroo.astrid.welcome; import greendroid.widget.QuickAction; import greendroid.widget.QuickActionWidget; import java.util.List; import android.app.Activity; import android.content.Context; import android.graphics.Rect; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.TextView; import com.timsu.astrid.R; import com.todoroo.astrid.utility.AstridPreferences; /** * Displays a popover with some help text for first time users. * * @author Sam Bosley <sam@astrid.com> * */ public class HelpInfoPopover extends QuickActionWidget { public static HelpInfoPopover showPopover(final Activity activity, final View parent, final int textId, OnDismissListener dismissListener) { final HelpInfoPopover toShow = new HelpInfoPopover(activity, textId); if (dismissListener != null) { toShow.setOnDismissListener(dismissListener); } parent.postDelayed(new Runnable() { @Override public void run() { try { toShow.show(parent); } catch (Exception e) { //Activity wasn't running or something like that } } }, 250); return toShow; } private final boolean tablet; private int measuredWidth; private HelpInfoPopover(Context context, int textId) { super(context); setContentView(R.layout.help_popover); TextView message = (TextView)getContentView().findViewById(R.id.gdi_message); message.setText(textId); setFocusable(false); setTouchable(true); measuredWidth = -1; // uninitialized tablet = AstridPreferences.useTabletLayout(context); } @Override protected void populateQuickActions(List<QuickAction> quickActions) { // Do nothing } @Override protected int getArrowLeftMargin(View arrow) { if (measuredWidth > 0) return (measuredWidth - arrow.getMeasuredWidth()) / 2; if (tablet) return mRect.width() / 4; return mRect.width() / 2; } @Override protected int getShowAtX() { if (measuredWidth > 0) return mRect.left + (mRect.width() - measuredWidth) / 2; return mRect.left; } @Override protected void onMeasureAndLayout(Rect anchorRect, View contentView) { contentView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); contentView.measure(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); int rootHeight = contentView.getMeasuredHeight(); measuredWidth = contentView.getMeasuredWidth(); 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); } }