10cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng/*
20cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng * Copyright (C) 2012 The Android Open Source Project
30cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng *
40cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License");
50cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng * you may not use this file except in compliance with the License.
60cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng * You may obtain a copy of the License at
70cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng *
80cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng *      http://www.apache.org/licenses/LICENSE-2.0
90cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng *
100cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng * Unless required by applicable law or agreed to in writing, software
110cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS,
120cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng * See the License for the specific language governing permissions and
140cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng * limitations under the License
150cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng */
160cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
170cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Chengpackage com.android.deskclock.widget;
180cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
190cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Chengimport android.animation.Animator;
200cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Chengimport android.animation.AnimatorInflater;
210cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Chengimport android.content.Context;
220cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Chengimport android.util.AttributeSet;
230cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Chengimport android.view.LayoutInflater;
240cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Chengimport android.view.MotionEvent;
250cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Chengimport android.view.View;
260cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Chengimport android.widget.FrameLayout;
270cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Chengimport android.widget.ImageView;
280cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Chengimport android.widget.LinearLayout;
290cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Chengimport android.widget.TextView;
300cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
310cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Chengimport com.android.deskclock.R;
320cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
330cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng/**
340cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng * A custom {@link View} that exposes an action to the user.
350cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng * <p>
360cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng * This is a copy of packages/apps/UnifiedEmail/src/com/android/mail/ui/ActionableToastBar.java
370cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng * with minor modifications.
380cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng */
390cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Chengpublic class ActionableToastBar extends LinearLayout {
400cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    private boolean mHidden = false;
410cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    private Animator mShowAnimation;
420cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    private Animator mHideAnimation;
430cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    private final int mBottomMarginSizeInConversation;
440cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
450cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    /** Icon for the description. */
460cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    private ImageView mActionDescriptionIcon;
470cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    /** The clickable view */
480cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    private View mActionButton;
490cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    /** Icon for the action button. */
500cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    private View mActionIcon;
510cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    /** The view that contains the description. */
520cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    private TextView mActionDescriptionView;
530cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    /** The view that contains the text for the action button. */
540cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    private TextView mActionText;
550cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    //private ToastBarOperation mOperation;
560cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
570cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    public ActionableToastBar(Context context) {
580cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        this(context, null);
590cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    }
600cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
610cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    public ActionableToastBar(Context context, AttributeSet attrs) {
620cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        this(context, attrs, 0);
630cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    }
640cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
650cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    public ActionableToastBar(Context context, AttributeSet attrs, int defStyle) {
660cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        super(context, attrs, defStyle);
670cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        mBottomMarginSizeInConversation = context.getResources().getDimensionPixelSize(
680cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                R.dimen.toast_bar_bottom_margin_in_conversation);
690cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        LayoutInflater.from(context).inflate(R.layout.actionable_toast_row, this, true);
700cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    }
710cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
720cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    @Override
730cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    protected void onFinishInflate() {
740cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        super.onFinishInflate();
750cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
760cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        mActionDescriptionIcon = (ImageView) findViewById(R.id.description_icon);
770cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        mActionDescriptionView = (TextView) findViewById(R.id.description_text);
780cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        mActionButton = findViewById(R.id.action_button);
790cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        mActionIcon = findViewById(R.id.action_icon);
800cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        mActionText = (TextView) findViewById(R.id.action_text);
810cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    }
820cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
830cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    /**
840cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     * Tells the view that it will be appearing in the conversation pane
850cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     * and should adjust its layout parameters accordingly.
860cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     * @param isInConversationMode true if the view will be shown in the conversation view
870cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     */
880cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    public void setConversationMode(boolean isInConversationMode) {
890cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        final FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) getLayoutParams();
900cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        params.bottomMargin = isInConversationMode ? mBottomMarginSizeInConversation : 0;
910cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        setLayoutParams(params);
920cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    }
930cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
940cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    /**
950cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     * Displays the toast bar and makes it visible. Allows the setting of
960cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     * parameters to customize the display.
970cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     * @param listener performs some action when the action button is clicked
980cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     * @param descriptionIconResourceId resource ID for the description icon or
990cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     * 0 if no icon should be shown
1000cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     * @param descriptionText a description text to show in the toast bar
1010cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     * @param showActionIcon if true, the action button icon should be shown
1020cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     * @param actionTextResource resource ID for the text to show in the action button
1030cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     * @param replaceVisibleToast if true, this toast should replace any currently visible toast.
1040cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     * Otherwise, skip showing this toast.
1050cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     */
1060cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    public void show(final ActionClickedListener listener, int descriptionIconResourceId,
1070cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            CharSequence descriptionText, boolean showActionIcon, int actionTextResource,
1080cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            boolean replaceVisibleToast) {
1090cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
1100cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        if (!mHidden && !replaceVisibleToast) {
1110cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            return;
1120cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        }
1130cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
1140cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        mActionButton.setOnClickListener(new OnClickListener() {
1150cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            @Override
1160cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            public void onClick(View widget) {
1170cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                if (listener != null) {
1180cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                    listener.onActionClicked();
1190cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                }
1200cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                hide(true);
1210cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            }
1220cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        });
1230cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
1240cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        // Set description icon.
1250cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        if (descriptionIconResourceId == 0) {
1260cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            mActionDescriptionIcon.setVisibility(GONE);
1270cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        } else {
1280cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            mActionDescriptionIcon.setVisibility(VISIBLE);
1290cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            mActionDescriptionIcon.setImageResource(descriptionIconResourceId);
1300cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        }
1310cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
1320cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        mActionDescriptionView.setText(descriptionText);
1330cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        mActionIcon.setVisibility(showActionIcon ? VISIBLE : GONE);
1340cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        mActionText.setText(actionTextResource);
1350cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
1360cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        mHidden = false;
1370cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        getShowAnimation().start();
1380cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    }
1390cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
1400cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    /**
1410cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     * Hides the view and resets the state.
1420cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     */
1430cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    public void hide(boolean animate) {
1440cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        // Prevent multiple call to hide.
14500c0d8672ea4741a23ff875ca1a992b8ad080e78Chiao Cheng        // Also prevent hiding if show animation is going on.
14600c0d8672ea4741a23ff875ca1a992b8ad080e78Chiao Cheng        if (!mHidden && !getShowAnimation().isRunning()) {
1470cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            mHidden = true;
1480cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            if (getVisibility() == View.VISIBLE) {
1490cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                mActionDescriptionView.setText("");
1500cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                mActionButton.setOnClickListener(null);
1510cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                // Hide view once it's clicked.
1520cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                if (animate) {
1530cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                    getHideAnimation().start();
1540cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                } else {
1550cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                    setAlpha(0);
1560cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                    setVisibility(View.GONE);
1570cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                }
1580cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            }
1590cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        }
1600cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    }
1610cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
1620cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    private Animator getShowAnimation() {
1630cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        if (mShowAnimation == null) {
1640cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            mShowAnimation = AnimatorInflater.loadAnimator(getContext(),
1650cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                    R.anim.fade_in);
1660cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            mShowAnimation.addListener(new Animator.AnimatorListener() {
1670cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                @Override
1680cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                public void onAnimationStart(Animator animation) {
1690cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                    setVisibility(View.VISIBLE);
1700cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                }
1710cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                @Override
1720cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                public void onAnimationEnd(Animator animation) {
17300c0d8672ea4741a23ff875ca1a992b8ad080e78Chiao Cheng                    // There is a tiny change that and hide animation could have finished right
17400c0d8672ea4741a23ff875ca1a992b8ad080e78Chiao Cheng                    // before the show animation finished.  In that case, the hide will mark the
17500c0d8672ea4741a23ff875ca1a992b8ad080e78Chiao Cheng                    // view as GONE.  We need to make sure the last one wins.
17600c0d8672ea4741a23ff875ca1a992b8ad080e78Chiao Cheng                    setVisibility(View.VISIBLE);
1770cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                }
1780cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                @Override
1790cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                public void onAnimationCancel(Animator animation) {
1800cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                }
1810cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                @Override
1820cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                public void onAnimationRepeat(Animator animation) {
1830cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                }
1840cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            });
1850cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            mShowAnimation.setTarget(this);
1860cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        }
1870cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        return mShowAnimation;
1880cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    }
1890cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
1900cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    private Animator getHideAnimation() {
1910cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        if (mHideAnimation == null) {
1920cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            mHideAnimation = AnimatorInflater.loadAnimator(getContext(),
1930cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                    R.anim.fade_out);
1940cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            mHideAnimation.addListener(new Animator.AnimatorListener() {
1950cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                @Override
1960cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                public void onAnimationStart(Animator animation) {
1970cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                }
1980cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                @Override
1990cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                public void onAnimationRepeat(Animator animation) {
2000cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                }
2010cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                @Override
2020cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                public void onAnimationEnd(Animator animation) {
2030cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                    setVisibility(View.GONE);
2040cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                }
2050cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                @Override
2060cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                public void onAnimationCancel(Animator animation) {
2070cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng                }
2080cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            });
2090cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            mHideAnimation.setTarget(this);
2100cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        }
2110cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        return mHideAnimation;
2120cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    }
2130cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
2140cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    public boolean isEventInToastBar(MotionEvent event) {
2150cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        if (!isShown()) {
2160cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng            return false;
2170cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        }
2180cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        int[] xy = new int[2];
2190cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        float x = event.getX();
2200cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        float y = event.getY();
2210cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        getLocationOnScreen(xy);
2220cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        return (x > xy[0] && x < (xy[0] + getWidth()) && y > xy[1] && y < xy[1] + getHeight());
2230cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    }
2240cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng
2250cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    /**
2260cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     * Classes that wish to perform some action when the action button is clicked
2270cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     * should implement this interface.
2280cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng     */
2290cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    public interface ActionClickedListener {
2300cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng        public void onActionClicked();
2310cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng    }
2320cb70993e26f300f92423bfced0d8cb3efc3f304Chiao Cheng}
233