/* * ****************************************************************************** * Copyright (c) 2013-2014 Gabriele Mariotti. * * 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 it.gmariotti.cardslib.library.cards.topcolored; import android.content.Context; import android.graphics.drawable.GradientDrawable; import android.os.Build; import android.support.annotation.ColorRes; import android.support.annotation.LayoutRes; import android.support.annotation.StringRes; import android.view.View; import android.view.ViewGroup; import android.view.ViewStub; import android.widget.LinearLayout; import android.widget.TextView; import it.gmariotti.cardslib.library.cards.R; import it.gmariotti.cardslib.library.cards.base.BaseMaterialCard; import it.gmariotti.cardslib.library.view.CardViewNative; /** * @author Gabriele Mariotti (gabri.mariotti@gmail.com) */ public class TopColoredCard extends BaseMaterialCard { /** * Resource Background Color ID */ protected @ColorRes int mColorResourceId; /** * Title to use for the title over the color */ protected CharSequence mTitleOverColor; /** * Resource Id to use for the title over the color */ protected @StringRes int mTitleOverColorResId; /** * Title to use for the subtitle over the color */ protected CharSequence mSubTitleOverColor; /** * Resource Id to use for the subtitle over the color */ protected @StringRes int mSubTitleOverColorResId; /** * An identifier for the layout resource to inflate when the ViewStub becomes visible */ private @LayoutRes int mSecondHalfViewStubLayoutId; private OnSetupInnerElements mOnSetupInnerElements; /** * Callback to setup inner Elements */ public interface OnSetupInnerElements { void setupInnerViewElementsSecondHalf(View secondHalfView); } // ------------------------------------------------------------- // Constructors // ------------------------------------------------------------- public TopColoredCard(Context context) { this(context, R.layout.native_material_topcolored_inner_base_main); } public TopColoredCard(Context context, @LayoutRes int innerLayout) { super(context, innerLayout); } // ------------------------------------------------------------- // Builder // ------------------------------------------------------------- public static SetupWizard with(Context context) { return new SetupWizard(context); } public static final class SetupWizard { private final Context mContext; protected @ColorRes int mColorResourceId; protected CharSequence mTitleOverColor; protected @StringRes int mTitleOverColorResId; protected CharSequence mSubTitleOverColor; protected @StringRes int mSubTitleOverColorResId; private @LayoutRes int mSecondHalfViewStubLayoutId; private OnSetupInnerElements mOnSetupInnerElements; private SetupWizard(Context context) { mContext = context; } public SetupWizard setColorResId(@ColorRes int colorId){ mColorResourceId = colorId; return this; } public SetupWizard setTitleOverColor(CharSequence textOverColor){ mTitleOverColor = textOverColor; return this; } public SetupWizard setTitleOverColor(int textOverColorResId){ mTitleOverColorResId = textOverColorResId; return this; } public SetupWizard setSubTitleOverColor(CharSequence subtitleOverColor){ mSubTitleOverColor = subtitleOverColor; return this; } public SetupWizard setSubTitleOverColor(int subtitleOverColorResId){ mSubTitleOverColorResId = subtitleOverColorResId; return this; } public SetupWizard setupSubLayoutId(@LayoutRes int layoutId){ mSecondHalfViewStubLayoutId = layoutId; return this; } public SetupWizard setupInnerElements(OnSetupInnerElements innerElements){ mOnSetupInnerElements = innerElements; return this; } public TopColoredCard build() { TopColoredCard card = new TopColoredCard(mContext); card.setColorResourceId(mColorResourceId); card.setTitleOverColor(mTitleOverColor); card.setTitleOverColorResId(mTitleOverColorResId); card.setSubTitleOverColor(mSubTitleOverColor); card.setSubTitleOverColorResId(mSubTitleOverColorResId); card.setSecondHalfViewStubLayoutId(mSecondHalfViewStubLayoutId); card.setOnSetupInnerElements(mOnSetupInnerElements); card.build(); return card; } } // ------------------------------------------------------------- // Build // ------------------------------------------------------------- @Override public void build(){ } @Override public void setupInnerViewElements(ViewGroup parent, View view) { //Use the title in super method super.setupInnerViewElements(parent, view); //Add a simple subtitle if (view != null) { ViewHolder holder = (ViewHolder) view.getTag(); if (holder == null) { holder = new ViewHolder(); holder.mLinearLayoutContainer = (LinearLayout) view.findViewById(R.id.card_main_inner_topcolored_layout); holder.mTitleView = (TextView) view.findViewById(R.id.card_main_inner_topcolored_title); holder.mSubTitleView = (TextView) view.findViewById(R.id.card_main_inner_topcolored_subtitle); View viewStub = ((View)getCardView()).findViewById(R.id.card_halfcolored_secondhalf); if (viewStub != null) { ((ViewStub)viewStub).setLayoutResource(mSecondHalfViewStubLayoutId); ((ViewStub)viewStub).inflate(); holder.mSecondHalfView= ((View)getCardView()).findViewById(R.id.card_halfcolored_secondhalf_layout); } view.setTag(holder); } //Color the LinearLayout if (holder.mLinearLayoutContainer != null && mColorResourceId != 0) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) holder.mLinearLayoutContainer.setBackgroundColor(mContext.getResources().getColor(mColorResourceId)); else{ ((CardViewNative)(getCardView()) ).setPreventCornerOverlap(false); GradientDrawable shapeDrawable = (GradientDrawable) (holder.mLinearLayoutContainer.getBackground()); shapeDrawable.setColor(mContext.getResources().getColor(mColorResourceId)); } } //Set the text elements buildTitleOverColor(holder); buildSubTitleOverColor(holder); //Set the second half area if (holder.mSecondHalfView!=null && mSecondHalfViewStubLayoutId!=0 ){ setupInnerViewElementsSecondHalf(holder.mSecondHalfView); } } } static class ViewHolder { /** * LinearLayout */ LinearLayout mLinearLayoutContainer; /** * Title */ private TextView mTitleView; /** * SubTitle */ private TextView mSubTitleView; /** * ViewStub for the secondHalf card */ private View mSecondHalfView; } protected void setupInnerViewElementsSecondHalf(View secondHalfView){ if (mOnSetupInnerElements != null) mOnSetupInnerElements.setupInnerViewElementsSecondHalf(secondHalfView); }; /** * Build the title to be applied over the color */ protected void buildTitleOverColor(ViewHolder viewHolder){ if (viewHolder != null && viewHolder.mTitleView != null) { if (mTitleOverColorResId != 0) { if (mContext != null) viewHolder.mTitleView.setText(mContext.getResources().getString(mTitleOverColorResId)); } else { viewHolder.mTitleView.setText(mTitleOverColor); } } } /** * Build the subtitle to be applied over the color */ protected void buildSubTitleOverColor(ViewHolder viewHolder){ if (viewHolder != null && viewHolder.mSubTitleView != null) { if (mSubTitleOverColorResId != 0) { viewHolder.mSubTitleView.setVisibility(View.VISIBLE); if (mContext != null) viewHolder.mSubTitleView.setText(mContext.getResources().getString(mSubTitleOverColorResId)); } else if (mSubTitleOverColor != null) { viewHolder.mSubTitleView.setText(mSubTitleOverColor); viewHolder.mSubTitleView.setVisibility(View.VISIBLE); } else { viewHolder.mSubTitleView.setVisibility(View.GONE); } } } // ------------------------------------------------------------- // Getters and setters // ------------------------------------------------------------- public int getColorResourceId() { return mColorResourceId; } public void setColorResourceId(int colorResourceId) { mColorResourceId = colorResourceId; } public CharSequence getTitleOverColor() { return mTitleOverColor; } public void setTitleOverColor(CharSequence titleOverColor) { mTitleOverColor = titleOverColor; } public int getTitleOverColorResId() { return mTitleOverColorResId; } public void setTitleOverColorResId(int titleOverColorResId) { mTitleOverColorResId = titleOverColorResId; } public CharSequence getSubTitleOverColor() { return mSubTitleOverColor; } public void setSubTitleOverColor(CharSequence subTitleOverColor) { mSubTitleOverColor = subTitleOverColor; } public int getSubTitleOverColorResId() { return mSubTitleOverColorResId; } public void setSubTitleOverColorResId(int subTitleOverColorResId) { mSubTitleOverColorResId = subTitleOverColorResId; } public void setSecondHalfViewStubLayoutId(int secondHalfViewStubLayoutId) { mSecondHalfViewStubLayoutId = secondHalfViewStubLayoutId; } public void setOnSetupInnerElements(OnSetupInnerElements onSetupInnerElements) { mOnSetupInnerElements = onSetupInnerElements; } }