package eoc.studio.voicecard.card.editor;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import eoc.studio.voicecard.BaseActivity;
import eoc.studio.voicecard.R;
import eoc.studio.voicecard.card.Card;
import eoc.studio.voicecard.card.CardCategory;
import eoc.studio.voicecard.card.Constant;
import eoc.studio.voicecard.card.FakeData;
import eoc.studio.voicecard.card.database.CardAssistant;
import eoc.studio.voicecard.card.database.CardDatabaseHelper;
import eoc.studio.voicecard.card.database.CategoryAssistant;
import eoc.studio.voicecard.menu.AddToFavorite;
import eoc.studio.voicecard.utils.FileUtility;
public class CardSelectorActivity extends BaseActivity
{
private static final int INT_FAVORITE = -999;
public static final String EXTRA_KEY_CATEGORY = "category";
private static final String TAG = "CardSelector";
private static Boolean isFavorite = false;
// private CardCategory category;
private CategoryAssistant category;
private Card currentCenteredCard;
private Gallery list;
private ImageView empty;
private ImageView title;
private ImageView back;
private TextView centerCardName;
private AddToFavorite addToFavorite;
private CardDatabaseHelper cardDatabaseHelper;
private Context context;
private String sendBackId;
@Override
protected void onCreate(Bundle savedInstanceState)
{
context = getApplicationContext();
getCategoryFromIntent();
initSendBackId();
initCardDataBase();
initLayout();
super.onCreate(savedInstanceState);
}
private void initCardDataBase()
{
cardDatabaseHelper = new CardDatabaseHelper(context);
cardDatabaseHelper.open();
}
@Override
protected void onDestroy()
{
// TODO Auto-generated method stub
super.onDestroy();
}
@Override
protected void onPause()
{
// TODO Auto-generated method stub
super.onPause();
}
@Override
protected void onResume()
{
// TODO Auto-generated method stub
super.onResume();
}
private void getCategoryFromIntent()
{
Intent intent = getIntent();
category = (CategoryAssistant) intent.getParcelableExtra(EXTRA_KEY_CATEGORY);
isFavorite = (category.getCategoryID() == INT_FAVORITE) ? true : false;
Log.d(TAG, "isFavorite: " + isFavorite);
Log.d(TAG,
"list card for category id: " + category.getCategoryID() + ",name: "
+ category.getCategoryName());
// Toast.makeText(this, "CATEGORY: " + category.getCategoryName(),
// Toast.LENGTH_LONG).show();
}
private void initSendBackId()
{
Intent intent = getIntent();
sendBackId = intent.getStringExtra(Constant.EXTRA_KEY_SENDBACK_ID);
}
private void initLayout()
{
setContentView(R.layout.activity_card_selector);
findViews();
updateByIsFavorite();
initList();
setListener();
}
private void setListener()
{
back.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
finish();
}
});
list.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
currentCenteredCard = (Card) list.getItemAtPosition(position);
centerCardName.setText(currentCenteredCard.getName());
}
@Override
public void onNothingSelected(AdapterView<?> arg0)
{
// TODO Auto-generated method stub
}
});
list.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
Card card = (Card) list.getItemAtPosition(position);
if (card == currentCenteredCard)
{
startCardEditor(card);
}
}
});
addToFavorite.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
addToFavorite(currentCenteredCard);
}
});
}
private void findViews()
{
title = (ImageView) findViewById(R.id.act_card_selector_iv_title);
back = (ImageView) findViewById(R.id.act_card_selector_iv_back);
list = (Gallery) findViewById(R.id.act_card_selector_gl_list);
empty = (ImageView) findViewById(R.id.act_card_selector_iv_empty);
centerCardName = (TextView) findViewById(R.id.act_card_select_tv_name);
addToFavorite = (AddToFavorite) findViewById(R.id.act_card_selector_adf_add_to_favorite);
}
private void updateByIsFavorite()
{
if (isFavorite)
{
title.setImageResource(R.drawable.title_collection);
addToFavorite.setImageResource(R.drawable.menu_remove_col);
}
else
{
title.setImageResource(R.drawable.title_select_card);
addToFavorite.setImageResource(R.drawable.menu_collect);
}
}
private void initList()
{
// TODO get card list from Bruce
List<Card> cards = getCartList(category);
// List<Card> cards = FakeData.getCardList(category);
Log.d(TAG, "get " + cards.size() + " cards from data provider");
CardAdapter adapter = new CardAdapter(cards);
list.setAdapter(adapter);
}
private List<Card> getCartList(CategoryAssistant category)
{
List<Card> cards = new ArrayList<Card>();
ArrayList<CardAssistant> cardAssistantList;
if (category.getCategoryID() == INT_FAVORITE)
{
cardAssistantList = cardDatabaseHelper.getEnabledFavoriteCardList(cardDatabaseHelper
.getSystemDPI(context));
// cardAssistantList = cardDatabaseHelper.getEnabledFavoriteCardList(CardDatabaseHelper.DPI_XHDPI);
}
else
{
cardAssistantList = cardDatabaseHelper.getEnabledCardListByCategory(category,
cardDatabaseHelper.getSystemDPI(context));
// cardAssistantList = cardDatabaseHelper.getEnabledCardListByCategory(category,
// CardDatabaseHelper.DPI_XHDPI);
}
if (cardAssistantList != null)
{
for (int index = 0; index < cardAssistantList.size(); index++)
{
cards.add(new Card(cardAssistantList.get(index).getCardID(), category,
cardAssistantList.get(index).getCardName(), cardAssistantList.get(index)
.getCloseLocalPath(), cardAssistantList.get(index)
.getOpenLocalPath(), cardAssistantList.get(index)
.getCoverLocalPath(), cardAssistantList.get(index)
.getLeftLocalPath(), cardAssistantList.get(index)
.getRightLocalPath(), cardAssistantList.get(index)
.getCardFontColor()));
}
}
return cards;
}
private void addToFavorite(Card card)
{
if (card != null)
{
if (isFavorite)
{
Log.d(TAG, "remove " + card.getId() + " from favorite");
boolean isOK = cardDatabaseHelper.setNonFavoriteCardByCardID(card.getId());
if (isOK)
{
List<Card> cards = getCartList(category);
Log.d(TAG, "get " + cards.size() + " cards from data provider");
if (cards.size() == 0)
{
list.setEmptyView(empty);
list.setAdapter(null);
centerCardName.setText("");
centerCardName.invalidate();
}
else
{
CardAdapter adapter = new CardAdapter(cards);
list.setAdapter(adapter);
}
list.invalidate();
}
}
else
{
Log.d(TAG, "add " + card.getId() + " to favorite");
boolean isOK = cardDatabaseHelper.setFavoriteCardByCardID(card.getId());
if (isOK)
{
Log.d(TAG,
getResources().getString(R.string.add_favorite) + " " + card.getName()
+ " " + getResources().getString(R.string.add_favorite_success));
Toast.makeText(
context,
getResources().getString(R.string.add_favorite) + " " + card.getName()
+ " " + getResources().getString(R.string.add_favorite_success),
Toast.LENGTH_LONG).show();
}
}
}
}
private void startCardEditor(Card card)
{
Log.d(TAG, "start editor for " + card.getName());
Intent intent = new Intent(this, CardEditorActivity.class);
Log.d(TAG, "start editor card.getId(): " + card.getId());
intent.putExtra(CardEditorActivity.EXTRA_KEY_CARD_ID, card.getId());
intent.putExtra(Constant.EXTRA_KEY_SENDBACK_ID, sendBackId);
startActivity(intent);
}
private class CardAdapter extends BaseAdapter
{
private List<Card> list;
public CardAdapter(List<Card> cards)
{
list = cards;
}
@Override
public int getCount()
{
return list.size();
}
@Override
public Card getItem(int position)
{
return list.get(position);
}
@Override
public long getItemId(int position)
{
return list.get(position).getId();
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
if (convertView == null)
{
LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
convertView = inflater.inflate(R.layout.view_card_list_item, null);
holder = new ViewHolder();
holder.image = (ImageView) convertView
.findViewById(R.id.glb_card_list_item_iv_image);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
Card card = getItem(position);
Bitmap img3dCoverBitmap = FileUtility.getBitmapFromPath(card.getImage3dCoverPath());
FileUtility.setImageViewWithBitmap(holder.image, img3dCoverBitmap);
return convertView;
}
}
private class ViewHolder
{
ImageView image;
}
}