/*
* ******************************************************************************
* 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.material;
import android.content.Context;
import android.support.annotation.DrawableRes;
import android.support.annotation.LayoutRes;
import android.support.annotation.StringRes;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
import it.gmariotti.cardslib.library.cards.R;
import it.gmariotti.cardslib.library.cards.actions.BaseSupplementalAction;
import it.gmariotti.cardslib.library.cards.base.BaseMaterialCard;
/**
* @author Gabriele Mariotti (gabri.mariotti@gmail.com)
*/
public class MaterialLargeImageCard extends BaseMaterialCard {
/**
* Resource Drawable ID
*/
protected @DrawableRes int mDrawableIdCardThumbnail;
/**
* Resource Drawable URL
*/
protected String mUrlCardThumbnail;
/**
* Interface for external usage for Thumbnail
*/
protected DrawableExternal mExternalCardThumbnail;
/**
* Title to use for the title over the image
*/
protected CharSequence mTextOverImage;
/**
* Resource Id to use for the title over the image
*/
protected @StringRes int mTextOverImageResId;
/**
* The subtitle
*/
protected CharSequence mSubTitle;
public static interface DrawableExternal{
void setupInnerViewElements(ViewGroup parent, View viewImage);
}
// -------------------------------------------------------------
// Constructors
// -------------------------------------------------------------
public MaterialLargeImageCard(Context context) {
this(context, R.layout.native_material_largeimage_inner_base_main);
}
public MaterialLargeImageCard(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;
private
@DrawableRes
int mDrawableCardThumbnail;
private String mUrlCardThumbnail;
private DrawableExternal mExternalCardThumbnail;
private CharSequence mTextOverImage;
private
@StringRes
int mTextOverImageResId;
private CharSequence mTitle;
private CharSequence mSubTitle;
private ArrayList<BaseSupplementalAction> mActions;
private int mSupplementalActionLayoutId;
private SetupWizard(Context context) {
mContext = context;
}
public SetupWizard useDrawableId(@DrawableRes int drawableIdCardThumbnail){
mDrawableCardThumbnail = drawableIdCardThumbnail;
return this;
}
public SetupWizard useDrawableUrl(String drawableUrlCardThumbnail){
mUrlCardThumbnail = drawableUrlCardThumbnail;
return this;
}
public SetupWizard useDrawableExternal(DrawableExternal externalCardThumbnail){
mExternalCardThumbnail = externalCardThumbnail;
return this;
}
public SetupWizard setTextOverImage(CharSequence textOverImage){
mTextOverImage = textOverImage;
return this;
}
public SetupWizard setTextOverImage(int textOverImageResId){
mTextOverImageResId = textOverImageResId;
return this;
}
public SetupWizard setTitle(CharSequence title){
mTitle = title;
return this;
}
public SetupWizard setSubTitle(CharSequence subTitle){
mSubTitle = subTitle;
return this;
}
public SetupWizard setupSupplementalActions(@LayoutRes int layoutId,ArrayList<BaseSupplementalAction> actions){
mSupplementalActionLayoutId = layoutId;
mActions = actions;
return this;
}
public MaterialLargeImageCard build() {
return build(new MaterialLargeImageCard(mContext));
}
public MaterialLargeImageCard build(MaterialLargeImageCard card) {
if (mExternalCardThumbnail != null){
card.setExternalCardThumbnail(mExternalCardThumbnail);
} else {
card.setDrawableIdCardThumbnail(mDrawableCardThumbnail);
card.setUrlCardThumbnail(mUrlCardThumbnail);
}
card.setTextOverImage(mTextOverImage);
card.setTextOverImageResId(mTextOverImageResId);
if (mTitle != null)
card.setTitle(mTitle.toString());
card.setSubTitle(mSubTitle);
if (mActions != null){
for (BaseSupplementalAction ac:mActions)
card.addSupplementalAction(ac);
}
card.setLayout_supplemental_actions_id(mSupplementalActionLayoutId);
card.build();
return card;
}
}
// -------------------------------------------------------------
// Build
// -------------------------------------------------------------
@Override
public void build(){
//Set CardThumbnail
if (mCardThumbnail == null) {
mCardThumbnail = initializeCardThumbnail();
if (mExternalCardThumbnail != null){
mCardThumbnail.setExternalUsage(true);
((MaterialLargeImageCardThumbnail)mCardThumbnail).setExternalCardThumbnail(mExternalCardThumbnail);
} else {
if (mDrawableIdCardThumbnail != 0) {
mCardThumbnail.setDrawableResource(mDrawableIdCardThumbnail);
} else if (mUrlCardThumbnail != null) {
mCardThumbnail.setUrlResource(mUrlCardThumbnail);
}
}
addCardThumbnail(mCardThumbnail);
}
((MaterialLargeImageCardThumbnail)mCardThumbnail).setTextOverImage(mTextOverImage);
((MaterialLargeImageCardThumbnail)mCardThumbnail).setTextOverImageResId(mTextOverImageResId);
}
@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) {
TextView mTitleView = (TextView) view.findViewById(R.id.card_main_inner_simple_subtitle);
if (mTitleView != null)
mTitleView.setText(mSubTitle);
}
}
@Override
public void setOnClickListener(OnCardClickListener onClickListener) {
addPartialOnClickListener(CLICK_LISTENER_ACTIONAREA1_VIEW, onClickListener);
}
/**
* Initialize the MaterialLargeImageCardThumbnail
* @return
*/
protected MaterialLargeImageCardThumbnail initializeCardThumbnail(){
return new MaterialLargeImageCardThumbnail(mContext);
}
// -------------------------------------------------------------
// Getters and setters
// -------------------------------------------------------------
/**
* Returns
* the title over the image
* @return
*/
public CharSequence getTextOverImage() {
return mTextOverImage;
}
/**
* Sets the title over the image
*
* @param textOverImage
*/
public void setTextOverImage(CharSequence textOverImage) {
mTextOverImage = textOverImage;
}
/**
* Sets the Resource Id to use for the title over the image
* @param textOverImageResId
*/
public void setTextOverImageResId(int textOverImageResId) {
mTextOverImageResId = textOverImageResId;
}
/**
* Returns the Resource Drawable ID
*
* @return
*/
public int getDrawableIdCardThumbnail() {
return mDrawableIdCardThumbnail;
}
/**
* Sets the Resource Drawable ID
*
* @param drawableIdCardThumbnail
*/
public void setDrawableIdCardThumbnail(int drawableIdCardThumbnail) {
mDrawableIdCardThumbnail = drawableIdCardThumbnail;
}
/**
* Returns the Drawable URL
* @return
*/
public String getUrlCardThumbnail() {
return mUrlCardThumbnail;
}
/**
* Sets the Drawable URL
*
* @param urlCardThumbnail
*/
public void setUrlCardThumbnail(String urlCardThumbnail) {
mUrlCardThumbnail = urlCardThumbnail;
}
/**
* Sets the interface to be called with the thumbnail
* @param externalCardThumbnail
*/
public void setExternalCardThumbnail(DrawableExternal externalCardThumbnail) {
mExternalCardThumbnail = externalCardThumbnail;
}
/**
* Returns the subtitle
* @return
*/
public CharSequence getSubTitle() {
return mSubTitle;
}
/**
* Sets the subtitle
* @param subTitle
*/
public void setSubTitle(CharSequence subTitle) {
mSubTitle = subTitle;
}
}