/* * Copyright 2014 Google Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.samples.apps.iosched.ui.widget; import android.animation.Animator; import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Typeface; import android.text.TextUtils; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.FrameLayout; import android.widget.TextView; import com.google.samples.apps.iosched.R; import com.google.samples.apps.iosched.util.UIUtils; import static com.google.samples.apps.iosched.util.LogUtils.LOGD; import static com.google.samples.apps.iosched.util.LogUtils.LOGW; import static com.google.samples.apps.iosched.util.LogUtils.makeLogTag; public class MessageCardView extends FrameLayout implements View.OnClickListener { private static final String TAG = makeLogTag("MessageCardView"); private TextView mTitleView; private TextView mMessageView; private Button[] mButtons; private String[] mButtonTags; private OnMessageCardButtonClicked mListener = null; private View mRoot; public static final int ANIM_DURATION = 200; public interface OnMessageCardButtonClicked { public void onMessageCardButtonClicked(String tag); } public MessageCardView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MessageCardView(Context context) { this(context, null, 0); } public MessageCardView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE); mRoot = inflater.inflate(R.layout.message_card, this, true); mTitleView = (TextView) mRoot.findViewById(R.id.title); mMessageView = (TextView) mRoot.findViewById(R.id.text); mButtons = new Button[] { (Button) mRoot.findViewById(R.id.button1), (Button) mRoot.findViewById(R.id.button2) }; mButtonTags = new String[] { "", "" }; for (Button button : mButtons) { button.setVisibility(View.GONE); button.setOnClickListener(this); } TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MessageCard, 0, 0); String title = a.getString(R.styleable.MessageCard_messageTitle); setTitle(title); String text = a.getString(R.styleable.MessageCard_messageText); if (text != null) { setText(text); } String button1text = a.getString(R.styleable.MessageCard_button1text); boolean button1emphasis = a.getBoolean(R.styleable.MessageCard_button1emphasis, false); String button1tag = a.getString(R.styleable.MessageCard_button1tag); String button2text = a.getString(R.styleable.MessageCard_button2text); boolean button2emphasis = a.getBoolean(R.styleable.MessageCard_button2emphasis, false); String button2tag = a.getString(R.styleable.MessageCard_button2tag); int emphasisColor = a.getColor(R.styleable.MessageCard_emphasisColor, getResources().getColor(R.color.theme_primary)); if (button1text != null) { setButton(0, button1text, button1tag, button1emphasis, 0); } if (button2text != null) { setButton(1, button2text, button2tag, button2emphasis, emphasisColor); } } public void setListener(OnMessageCardButtonClicked listener) { mListener = listener; } public void setButton(int index, String text, String tag, boolean emphasis, int emphasisColor) { if (index < 0 || index >= mButtons.length) { LOGW(TAG, "Invalid button index: " + index); return; } mButtons[index].setText(text); mButtons[index].setVisibility(View.VISIBLE); mButtonTags[index] = tag; if (emphasis) { if (emphasisColor == 0) { emphasisColor = getResources().getColor(R.color.theme_primary); } mButtons[index].setTextColor(emphasisColor); mButtons[index].setTypeface(null, Typeface.BOLD); } } /** * Use sparingly. */ public void setTitle(String title) { if (TextUtils.isEmpty(title)) { mTitleView.setVisibility(View.GONE); } else { mTitleView.setVisibility(View.VISIBLE); mTitleView.setText(title); } } public void setText(String text) { mMessageView.setText(text); } public void overrideBackground(int bgResId) { findViewById(R.id.card_root).setBackgroundResource(bgResId); } @Override public void onClick(View v) { if (mListener == null) { return; } for (int i = 0; i < mButtons.length; i++) { if (mButtons[i] == v) { mListener.onMessageCardButtonClicked(mButtonTags[i]); break; } } } public void dismiss() { dismiss(false); } public void dismiss(boolean animate) { if (!animate) { setVisibility(View.GONE); } else { animate().scaleY(0.1f).alpha(0.1f).setDuration(ANIM_DURATION); } } public void show() { setVisibility(View.VISIBLE); } }