package org.qii.weiciyuan.ui.send; import org.qii.weiciyuan.R; import org.qii.weiciyuan.bean.AccountBean; import org.qii.weiciyuan.bean.ItemBean; import org.qii.weiciyuan.bean.MessageBean; import org.qii.weiciyuan.dao.send.RepostNewMsgDao; import org.qii.weiciyuan.othercomponent.sendweiboservice.SendCommentService; import org.qii.weiciyuan.othercomponent.sendweiboservice.SendRepostService; import org.qii.weiciyuan.support.database.DraftDBManager; import org.qii.weiciyuan.support.database.draftbean.CommentDraftBean; import org.qii.weiciyuan.support.utils.GlobalContext; import org.qii.weiciyuan.support.utils.Utility; import org.qii.weiciyuan.ui.search.AtUserActivity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.view.Menu; import android.view.MenuItem; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.Toast; /** * User: Jiang Qi * Date: 12-8-2 */ public class WriteCommentActivity extends AbstractWriteActivity<ItemBean> { public static final String ACTION_DRAFT = "org.qii.weiciyuan.DRAFT"; private static final String ACTION_SEND_FAILED = "org.qii.weiciyuan.SEND_FAILED"; private static final String ACTION_NOTIFICATION_COMMENT = "org.qii.weiciyuan.NOTIFICATION_COMMENT"; private String token; private MessageBean msg; private CommentDraftBean commentDraftBean; private MenuItem enableCommentOri; private MenuItem enableRepost; private boolean savedEnableCommentOri; private boolean savedEnableRepost; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getActionBar().setTitle(R.string.comments); getActionBar().setSubtitle(getCurrentAccountBean().getUsernick()); if (savedInstanceState == null) { Intent intent = getIntent(); String action = intent.getAction(); if (!TextUtils.isEmpty(action)) { if (action.equals(WriteCommentActivity.ACTION_DRAFT)) { handleDraftOperation(intent); } else if (action.equals(WriteCommentActivity.ACTION_SEND_FAILED)) { handleFailedOperation(intent); } else if (action.equals(WriteCommentActivity.ACTION_NOTIFICATION_COMMENT)) { handleNotificationCommentOperation(intent); } } else { handleNormalOperation(intent); } } } public static Intent startBecauseSendFailed(Context context, AccountBean account, String content, MessageBean oriMsg, CommentDraftBean draft, boolean comment_ori, String failedReason) { Intent intent = new Intent(context, WriteCommentActivity.class); intent.setAction(WriteCommentActivity.ACTION_SEND_FAILED); intent.putExtra("account", account); intent.putExtra("content", content); intent.putExtra("oriMsg", oriMsg); intent.putExtra("comment_ori", comment_ori); intent.putExtra("failedReason", failedReason); intent.putExtra("draft", draft); return intent; } public static Intent newIntentFromNotification(Context context, AccountBean account, MessageBean msg) { Intent intent = new Intent(context, WriteCommentActivity.class); intent.setAction(WriteCommentActivity.ACTION_NOTIFICATION_COMMENT); intent.putExtra("account", account); intent.putExtra("msg", msg); return intent; } private void handleNotificationCommentOperation(Intent intent) { AccountBean accountBean = intent.getParcelableExtra("account"); token = accountBean.getAccess_token(); msg = intent.getParcelableExtra("msg"); getEditTextView().setHint("@" + msg.getUser().getScreen_name() + ":" + msg.getText()); } private void handleFailedOperation(Intent intent) { token = ((AccountBean) intent.getParcelableExtra("account")).getAccess_token(); msg = (MessageBean) getIntent().getParcelableExtra("oriMsg"); getEditTextView().setError(intent.getStringExtra("failedReason")); getEditTextView().setText(intent.getStringExtra("content")); commentDraftBean = (CommentDraftBean) intent.getParcelableExtra("draft"); getEditTextView().setHint("@" + msg.getUser().getScreen_name() + ":" + msg.getText()); savedEnableRepost = intent.getBooleanExtra("comment_ori", false); } private void handleNormalOperation(Intent intent) { token = getIntent().getStringExtra("token"); if (TextUtils.isEmpty(token)) { token = GlobalContext.getInstance().getSpecialToken(); } msg = (MessageBean) getIntent().getParcelableExtra("msg"); getEditTextView().setHint("@" + msg.getUser().getScreen_name() + ":" + msg.getText()); } private void handleDraftOperation(Intent intent) { token = getIntent().getStringExtra("token"); if (TextUtils.isEmpty(token)) { token = GlobalContext.getInstance().getSpecialToken(); } commentDraftBean = (CommentDraftBean) getIntent().getParcelableExtra("draft"); msg = commentDraftBean.getMessageBean(); getEditTextView().setText(commentDraftBean.getContent()); getEditTextView().setHint("@" + msg.getUser().getScreen_name() + ":" + msg.getText()); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean("commentOri", enableCommentOri.isChecked()); outState.putBoolean("repost", enableRepost.isChecked()); outState.putString("token", token); outState.putParcelable("msg", msg); outState.putParcelable("commentDraftBean", commentDraftBean); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); if (savedInstanceState != null) { savedEnableCommentOri = savedInstanceState.getBoolean("commentOri"); savedEnableRepost = savedInstanceState.getBoolean("repost"); token = savedInstanceState.getString("token"); msg = (MessageBean) savedInstanceState.getParcelable("msg"); commentDraftBean = (CommentDraftBean) savedInstanceState .getParcelable("commentDraftBean"); } } @Override protected boolean canShowSaveDraftDialog() { if (commentDraftBean == null) { return true; } else if (!commentDraftBean.getContent().equals(getEditTextView().getText().toString())) { return true; } return false; } @Override public void saveToDraft() { if (!TextUtils.isEmpty(getEditTextView().getText().toString())) { DraftDBManager.getInstance().insertComment(getEditTextView().getText().toString(), msg, GlobalContext.getInstance().getCurrentAccountId()); } finish(); } @Override protected void removeDraft() { if (commentDraftBean != null) { DraftDBManager.getInstance().remove(commentDraftBean.getId()); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.actionbar_menu_commentnewactivity, menu); enableCommentOri = menu.findItem(R.id.menu_enable_ori_comment); enableRepost = menu.findItem(R.id.menu_enable_repost); enableCommentOri.setChecked(savedEnableCommentOri); enableRepost.setChecked(savedEnableRepost); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { if (msg != null && msg.getRetweeted_status() != null) { enableCommentOri.setVisible(true); } String contentStr = getEditTextView().getText().toString(); if (!TextUtils.isEmpty(contentStr)) { menu.findItem(R.id.menu_clear).setVisible(true); } else { menu.findItem(R.id.menu_clear).setVisible(false); } return super.onPrepareOptionsMenu(menu); } @Override protected boolean canSend() { boolean haveContent = !TextUtils.isEmpty(getEditTextView().getText().toString()); boolean haveToken = !TextUtils.isEmpty(token); int sum = Utility.length(getEditTextView().getText().toString()); int num = 140 - sum; boolean contentNumBelow140 = (num >= 0); if (haveContent && haveToken && contentNumBelow140) { return true; } else { if (!haveContent && !haveToken) { Toast.makeText(this, getString(R.string.content_cant_be_empty_and_dont_have_account), Toast.LENGTH_SHORT).show(); } else if (!haveContent) { getEditTextView().setError(getString(R.string.content_cant_be_empty)); } else if (!haveToken) { Toast.makeText(this, getString(R.string.dont_have_account), Toast.LENGTH_SHORT) .show(); } if (!contentNumBelow140) { getEditTextView().setError(getString(R.string.content_words_number_too_many)); } } return false; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: InputMethodManager imm = (InputMethodManager) getSystemService( Context.INPUT_METHOD_SERVICE); if (imm.isActive()) { imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_NOT_ALWAYS); } finish(); break; case R.id.menu_enable_ori_comment: if (enableCommentOri.isChecked()) { enableCommentOri.setChecked(false); } else { enableCommentOri.setChecked(true); } break; case R.id.menu_enable_repost: if (enableRepost.isChecked()) { enableRepost.setChecked(false); } else { enableRepost.setChecked(true); } break; case R.id.menu_at: Intent intent = new Intent(WriteCommentActivity.this, AtUserActivity.class); intent.putExtra("token", token); startActivityForResult(intent, AT_USER); break; case R.id.menu_clear: clearContentMenu(); break; } return true; } @Override protected void send() { if (!enableRepost.isChecked()) { String content = ((EditText) findViewById(R.id.status_new_content)).getText() .toString(); Intent intent = SendCommentService .newIntent(getCurrentAccountBean(), msg, content, enableCommentOri.isChecked()); startService(intent); finish(); } else { repost(); } } /** * 1. this message has repost's message * 2. this message is an original message * <p/> * if this message has repost's message,try to include its content, * if total word number above 140,discard current msg content */ private void repost() { String content = ((EditText) findViewById(R.id.status_new_content)).getText().toString(); if (msg.getRetweeted_status() != null) { String msgContent = "//@" + msg.getUser().getScreen_name() + ": " + msg.getText(); String total = content + msgContent; if (total.length() < 140) { content = total; } } boolean comment = true; boolean oriComment = enableCommentOri.isChecked(); String is_comment = ""; if (comment && oriComment) { is_comment = RepostNewMsgDao.ENABLE_COMMENT_ALL; } else if (comment) { is_comment = RepostNewMsgDao.ENABLE_COMMENT; } else if (oriComment) { is_comment = RepostNewMsgDao.ENABLE_ORI_COMMENT; } Intent intent = new Intent(WriteCommentActivity.this, SendRepostService.class); intent.putExtra("oriMsg", msg); intent.putExtra("content", content); intent.putExtra("is_comment", is_comment); intent.putExtra("token", GlobalContext.getInstance().getSpecialToken()); intent.putExtra("accountId", GlobalContext.getInstance().getCurrentAccountId()); startService(intent); finish(); } @Override protected AccountBean getCurrentAccountBean() { if (WriteCommentActivity.ACTION_NOTIFICATION_COMMENT.equals(getIntent().getAction()) || WriteCommentActivity.ACTION_SEND_FAILED.equals(getIntent().getAction())) { AccountBean accountBean = ((AccountBean) getIntent().getParcelableExtra("account")); return accountBean; } else { return super.getCurrentAccountBean(); } } }