1/**
2 * Copyright (c) 2011, Google Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.mail.compose;
17
18import android.animation.Animator;
19import android.animation.AnimatorSet;
20import android.animation.ObjectAnimator;
21import android.content.Context;
22import android.content.res.Resources;
23import android.util.AttributeSet;
24import android.view.LayoutInflater;
25import android.view.View;
26import android.widget.RelativeLayout;
27import com.android.mail.R;
28
29public class CcBccView extends RelativeLayout {
30
31    private final View mCc;
32    private final View mBcc;
33
34    public CcBccView(Context context) {
35        this(context, null);
36    }
37
38    public CcBccView(Context context, AttributeSet attrs) {
39        this(context, attrs, -1);
40    }
41
42    public CcBccView(Context context, AttributeSet attrs, int defStyle) {
43        super(context, attrs, defStyle);
44        LayoutInflater.from(context).inflate(R.layout.cc_bcc_view, this);
45        mCc = findViewById(R.id.cc_content);
46        mBcc = findViewById(R.id.bcc_content);
47    }
48
49    public void show(boolean animate, boolean showCc, boolean showBcc) {
50        boolean ccWasAlreadyShown = mCc.isShown();
51        mCc.setVisibility(showCc ? View.VISIBLE : View.GONE);
52        mBcc.setVisibility(showBcc ? View.VISIBLE : View.GONE);
53        if (animate) {
54            animate(ccWasAlreadyShown);
55        } else {
56            if (showCc) {
57                mCc.setAlpha(1);
58            }
59            if (showBcc) {
60                mBcc.setAlpha(1);
61            }
62            requestLayout();
63        }
64    }
65
66    private void animate(boolean ccWasAlreadyShown) {
67        Resources res = getResources();
68        // Then, have cc/ bcc fade in
69        int fadeDuration = res.getInteger(R.integer.fadein_cc_bcc_dur);
70        ObjectAnimator bccAnimator = ObjectAnimator.ofFloat(mBcc, "alpha", 0, 1);
71        bccAnimator.setDuration(fadeDuration);
72
73        Animator fadeAnimation;
74        if (!ccWasAlreadyShown) {
75            ObjectAnimator ccAnimator = ObjectAnimator.ofFloat(mCc, "alpha", 0, 1);
76            ccAnimator.setDuration(fadeDuration);
77            fadeAnimation = new AnimatorSet();
78            ((AnimatorSet) fadeAnimation).playTogether(ccAnimator, bccAnimator);
79        } else {
80            fadeAnimation = bccAnimator;
81        }
82        fadeAnimation.start();
83    }
84
85    /**
86     * @return whether the CC field is visible
87     */
88    public boolean isCcVisible() {
89        return mCc.getVisibility() == View.VISIBLE;
90    }
91
92    /**
93     * @return whether the BCC field is visible
94     */
95    public boolean isBccVisible() {
96        return mBcc.getVisibility() == View.VISIBLE;
97    }
98}
99