package eoc.studio.voicecard.mailbox; import java.util.ArrayList; import java.util.List; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import eoc.studio.voicecard.BaseActivity; import eoc.studio.voicecard.R; import eoc.studio.voicecard.card.viewer.CardViewerActivity; import eoc.studio.voicecard.manager.HttpManager; import eoc.studio.voicecard.menu.ClearAllMail; import eoc.studio.voicecard.menu.DeleteSelectedMail; import eoc.studio.voicecard.utils.ListUtility; public class MailboxActivity extends BaseActivity { private static final String TAG = "MailboxActivity"; // Data private List<Mail> mails; private MailsAdapterData mailsAdapterData; private MailsAdapterView mailAdapterView; private HttpManager httpManager = new HttpManager(); private int firstVisiblePosition = 0; private int currentListSize = 0; private int lastVisiblePosition = 0; private boolean isSelectedAll = false; // Views private TextView mailInfo, errorMsg; private Button selectAll; private ListView showMails; private ProgressDialog progressDialog; private Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mailbox); context = getApplicationContext(); findViews(); } @Override public void onResume() { super.onResume(); isSelectedAll = false; mailsAdapterData = new MailsAdapterData(MailboxActivity.this); mailsAdapterData.open(); showMailInfo(0); LoadDbThread loadDbThread = new LoadDbThread(); loadDbThread.start(); } @Override public void onPause() { super.onPause(); updateUnReadCount(); if (mailAdapterView != null) { mailAdapterView.setPause(true); if (mails != null) { mails.clear(); } mailAdapterView.clearData(); } if (mailsAdapterData != null) { mailsAdapterData.close(); } } private void updateUnReadCount() { String PREFS_FILENAME = "MAIN_MENU_SETTING"; SharedPreferences configPreferences = getSharedPreferences(PREFS_FILENAME, 0); Log.d(TAG, "updateUnReadCount() mailsAdapterData.getLocalUnReadMailCount(): " + mailsAdapterData.getLocalUnReadMailCount(httpManager.getFacebookID())); configPreferences .edit() .putInt("mailboxUnReadCount", mailsAdapterData.getLocalUnReadMailCount(httpManager.getFacebookID())) .commit(); } @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy()"); progressDialog.dismiss(); } private void findViews() { mailInfo = (TextView) findViewById(R.id.act_mailbox_tv_title_bar); showMails = (ListView) findViewById(R.id.act_mailbox_lv); errorMsg = (TextView) findViewById(R.id.act_mailbox_tv_errorMsg); selectAll = (Button) findViewById(R.id.act_mailbox_bt_title_bar); selectAll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mailAdapterView != null) { if (!isSelectedAll) { selectAll.setText(getResources().getString(R.string.deselect_all)); mailAdapterView.selectAll(); isSelectedAll = true; } else { selectAll.setText(getResources().getString(R.string.select_all)); mailAdapterView.deselectAll(); isSelectedAll = false; } } } }); DeleteSelectedMail deleteSelectedMail = (DeleteSelectedMail) findViewById(R.id.act_mailbox_iv_menu_deleteSelectedMail); deleteSelectedMail.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mailAdapterView.setInterrupt(true); deleteSelectedMails(); } }); ClearAllMail clearAllMail = (ClearAllMail) findViewById(R.id.act_mailbox_iv_menu_clearAllMail); clearAllMail.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mailAdapterView.setInterrupt(true); clearAllMails(); } }); showMails.setOnScrollListener(listScrollListener); showMails.setOnItemClickListener(itemClickListener); } private boolean loadDb() { mails = new ArrayList<Mail>(); String rowId, cardId, ownerId, sendId, sendFrom, sendFromName, senderImgLink, sendTo, subject, body, fontSize, fontColor, imgLink, speech, sign, sendTime; int checkState = 0, newState; byte[] img; Cursor cursor = mailsAdapterData.getDatafromOwnerId(httpManager.getFacebookID()); if (cursor != null) { int count = cursor.getCount(); Log.d(TAG, "cursor size is " + count); if (count > 0) { while (cursor.moveToNext()) { rowId = cursor.getString(cursor.getColumnIndex(MailsAdapterData.KEY_ROW_ID)); cardId = cursor.getString(cursor.getColumnIndex(MailsAdapterData.KEY_CARD_ID)); ownerId = cursor .getString(cursor.getColumnIndex(MailsAdapterData.KEY_OWNER_ID)); sendId = cursor.getString(cursor.getColumnIndex(MailsAdapterData.KEY_SEND_ID)); sendFrom = cursor.getString(cursor .getColumnIndex(MailsAdapterData.KEY_SEND_FROM)); sendFromName = cursor.getString(cursor .getColumnIndex(MailsAdapterData.KEY_SEND_FROM_NAME)); senderImgLink = cursor.getString(cursor .getColumnIndex(MailsAdapterData.KEY_SEND_FROM_LINK)); sendTo = cursor.getString(cursor.getColumnIndex(MailsAdapterData.KEY_SEND_TO)); subject = cursor.getString(cursor.getColumnIndex(MailsAdapterData.KEY_SUBJECT)); body = cursor.getString(cursor.getColumnIndex(MailsAdapterData.KEY_BODY)); fontSize = cursor.getString(cursor .getColumnIndex(MailsAdapterData.KEY_FONT_SIZE)); fontColor = cursor.getString(cursor .getColumnIndex(MailsAdapterData.KEY_FONT_COLOR)); imgLink = cursor .getString(cursor.getColumnIndex(MailsAdapterData.KEY_IMG_LINK)); img = cursor.getBlob(cursor.getColumnIndex(MailsAdapterData.KEY_IMG)); speech = cursor.getString(cursor.getColumnIndex(MailsAdapterData.KEY_SPEECH)); sign = cursor.getString(cursor.getColumnIndex(MailsAdapterData.KEY_SIGN)); sendTime = cursor.getString(cursor .getColumnIndex(MailsAdapterData.KEY_SEND_TIME)); newState = cursor.getInt(cursor.getColumnIndex(MailsAdapterData.KEY_NEW_STATE)); mails.add(new Mail(rowId, cardId, ownerId, sendId, sendFrom, sendFromName, senderImgLink, sendTo, subject, body, fontSize, fontColor, imgLink, img, speech, sign, sendTime, checkState, newState)); } return true; } else { return false; } } else { return false; } } private void updateView(boolean isEmpty) { if (mailAdapterView != null) mailAdapterView.setInterrupt(false); if (isEmpty) { errorMsg.setVisibility(View.VISIBLE); showMails.setVisibility(View.INVISIBLE); } else { errorMsg.setVisibility(View.INVISIBLE); showMails.setVisibility(View.VISIBLE); mailAdapterView = new MailsAdapterView(MailboxActivity.this, mails, mailsAdapterData, showMails); showMails.setAdapter(mailAdapterView); } dialogHandler.sendEmptyMessage(ListUtility.DISMISS_WAITING_DIALOG); } private void deleteSelectedMails() { if (mailAdapterView != null) { if (mailsAdapterData != null) { boolean success = mailsAdapterData .deleteSelected(mailAdapterView.getSelectedItem()); if (success) { clearData(); } } } } private void clearAllMails() { if (mailsAdapterData != null) { boolean success = mailsAdapterData.delete(); if (success) { clearData(); } } } private void clearData() { mails.clear(); mailAdapterView.clearData(); showMailInfo(0); LoadDbThread loadDbThread = new LoadDbThread(); loadDbThread.start(); } public void showMailInfo(int count) { mailInfo.setText(getResources().getString(R.string.select_mails, count)); } public void setButtonString(boolean isSelectedAll, int resId) { selectAll.setText(getResources().getString(resId)); this.isSelectedAll = isSelectedAll; } private void getMailsImgfromDB() { if (mailsAdapterData != null) { Log.d(TAG, "firstVisiblePosition is " + firstVisiblePosition); Log.d(TAG, "lastVisiblePosition is " + lastVisiblePosition); mailAdapterView.loadImagefromPosition(firstVisiblePosition, lastVisiblePosition); } } private Handler uiHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case ListUtility.LOAD_DB_COMPLETE: updateView(false); break; case ListUtility.LOAD_DB_EMPTY: updateView(true); break; } } }; private Handler dialogHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case ListUtility.SHOW_WAITING_DIALOG: Log.d(TAG, "show waiting dialog "); progressDialog = ProgressDialog.show(MailboxActivity.this, "", getResources() .getString(R.string.file_process_loading)); break; case ListUtility.DISMISS_WAITING_DIALOG: Log.d(TAG, "dismiss dialog "); if (progressDialog != null) progressDialog.dismiss(); break; } } }; private Handler downloadHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case ListUtility.GET_THUMBNAIL: Log.d(TAG, "GET_THUMBNAIL "); mailAdapterView.setInterrupt(false); getMailsImgfromDB(); break; } } }; private AbsListView.OnScrollListener listScrollListener = new AbsListView.OnScrollListener() { @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { firstVisiblePosition = firstVisibleItem; lastVisiblePosition = firstVisiblePosition + visibleItemCount; } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { Log.d(TAG, "scrollState " + scrollState); if (currentListSize != 0) { if (scrollState == OnScrollListener.SCROLL_STATE_IDLE && mailAdapterView != null) { downloadHandler.sendEmptyMessageDelayed(ListUtility.GET_THUMBNAIL, 1500); } if (scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL && mailAdapterView != null) { downloadHandler.removeMessages(ListUtility.GET_THUMBNAIL); } mailAdapterView.setInterrupt(true); } else { Log.d(TAG, "currentListSize is zero "); } } }; private OnItemClickListener itemClickListener = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.d(TAG, "This position is " + position); mailAdapterView.setInterrupt(true); downloadHandler.removeMessages(ListUtility.GET_THUMBNAIL); if (position < mails.size()) { Log.d(TAG, "mail is " + mails.get(position).toString()); mailsAdapterData.updateNewState(mails.get(position).getRowId(), MailsAdapterData.NOTNEW); Intent mailIntent = new Intent(MailboxActivity.this, CardViewerActivity.class); mailIntent.putExtra(CardViewerActivity.EXTRA_KEY_MODE, CardViewerActivity.MODE_VIEWER); mailIntent.putExtra(CardViewerActivity.EXTRA_KEY_MAIL, mails.get(position)); startActivity(mailIntent); } } }; private class LoadDbThread extends Thread { @Override public void run() { dialogHandler.sendEmptyMessage(ListUtility.SHOW_WAITING_DIALOG); boolean isSucess = loadDb(); if (isSucess) uiHandler.sendEmptyMessage(ListUtility.LOAD_DB_COMPLETE); else uiHandler.sendEmptyMessage(ListUtility.LOAD_DB_EMPTY); } } }