package org.qii.weiciyuan.ui.send; import org.qii.weiciyuan.R; import org.qii.weiciyuan.bean.AccountBean; import org.qii.weiciyuan.bean.CommentBean; import org.qii.weiciyuan.othercomponent.sendweiboservice.SendReplyToCommentService; import org.qii.weiciyuan.support.database.DraftDBManager; import org.qii.weiciyuan.support.database.draftbean.ReplyDraftBean; 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: qii * Date: 12-8-28 */ public class WriteReplyToCommentActivity extends AbstractWriteActivity<CommentBean> { 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_REPLY = "org.qii.weiciyuan.NOTIFICATION_REPLY"; private CommentBean bean; private ReplyDraftBean replyDraftBean; private MenuItem enableRepost; private boolean savedEnableRepost; @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable("bean", bean); outState.putParcelable("replyDraftBean", replyDraftBean); outState.putBoolean("repost", enableRepost.isChecked()); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); if (savedInstanceState != null) { savedEnableRepost = savedInstanceState.getBoolean("repost", false); bean = (CommentBean) savedInstanceState.getParcelable("bean"); replyDraftBean = (ReplyDraftBean) savedInstanceState.getParcelable("replyDraftBean"); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getActionBar().setTitle(getString(R.string.reply_to_comment)); getActionBar().setSubtitle(getCurrentAccountBean().getUsernick()); if (savedInstanceState == null) { Intent intent = getIntent(); String action = intent.getAction(); if (!TextUtils.isEmpty(action)) { if (action.equals(WriteReplyToCommentActivity.ACTION_DRAFT)) { handleDraftOperation(intent); } else if (action.equals(WriteReplyToCommentActivity.ACTION_SEND_FAILED)) { handleFailedOperation(intent); } else if (action.equals(WriteReplyToCommentActivity.ACTION_NOTIFICATION_REPLY)) { handleNotificationReplyOperation(intent); } } else { handleNormalOperation(intent); } } } public static Intent startBecauseSendFailed(Context context, AccountBean account, String content, CommentBean oriMsg, ReplyDraftBean replyDraftBean, String repostContent, String failedReason) { Intent intent = new Intent(context, WriteReplyToCommentActivity.class); intent.setAction(WriteReplyToCommentActivity.ACTION_SEND_FAILED); intent.putExtra("account", account); intent.putExtra("content", content); intent.putExtra("oriMsg", oriMsg); intent.putExtra("failedReason", failedReason); intent.putExtra("repostContent", repostContent); intent.putExtra("replyDraftBean", replyDraftBean); return intent; } public static Intent newIntentFromNotification(Context context, AccountBean account, CommentBean oriMsg) { Intent intent = new Intent(context, WriteReplyToCommentActivity.class); intent.setAction(WriteReplyToCommentActivity.ACTION_NOTIFICATION_REPLY); intent.putExtra("account", account); intent.putExtra("oriMsg", oriMsg); return intent; } private void handleFailedOperation(Intent intent) { token = ((AccountBean) intent.getParcelableExtra("account")).getAccess_token(); bean = (CommentBean) getIntent().getParcelableExtra("oriMsg"); getEditTextView().setHint("@" + bean.getUser().getScreen_name() + ":" + bean.getText()); getEditTextView().setError(intent.getStringExtra("failedReason")); getEditTextView().setText(intent.getStringExtra("content")); replyDraftBean = (ReplyDraftBean) intent.getParcelableExtra("replyDraftBean"); if (!TextUtils.isEmpty(intent.getStringExtra("repostContent"))) { savedEnableRepost = true; } } private void handleNotificationReplyOperation(Intent intent) { token = ((AccountBean) intent.getParcelableExtra("account")).getAccess_token(); bean = (CommentBean) getIntent().getParcelableExtra("oriMsg"); getEditTextView().setHint("@" + bean.getUser().getScreen_name() + ":" + bean.getText()); if (!TextUtils.isEmpty(intent.getStringExtra("repostContent"))) { savedEnableRepost = true; } } private void handleNormalOperation(Intent intent) { token = intent.getStringExtra("token"); if (TextUtils.isEmpty(token)) { token = GlobalContext.getInstance().getSpecialToken(); } bean = (CommentBean) intent.getParcelableExtra("msg"); getEditTextView().setHint("@" + bean.getUser().getScreen_name() + ":" + bean.getText()); } private void handleDraftOperation(Intent intent) { token = intent.getStringExtra("token"); if (TextUtils.isEmpty(token)) { token = GlobalContext.getInstance().getSpecialToken(); } replyDraftBean = (ReplyDraftBean) intent.getParcelableExtra("draft"); getEditTextView().setText(replyDraftBean.getContent()); bean = replyDraftBean.getCommentBean(); getEditTextView().setHint("@" + bean.getUser().getScreen_name() + ":" + bean.getText()); } @Override protected boolean canShowSaveDraftDialog() { if (replyDraftBean == null) { return true; } else if (!replyDraftBean.getContent().equals(getEditTextView().getText().toString())) { return true; } return false; } @Override public void saveToDraft() { if (!TextUtils.isEmpty(getEditTextView().getText().toString())) { DraftDBManager.getInstance().insertReply(getEditTextView().getText().toString(), bean, GlobalContext.getInstance().getCurrentAccountId()); } finish(); } @Override protected void removeDraft() { if (replyDraftBean != null) { DraftDBManager.getInstance().remove(replyDraftBean.getId()); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.actionbar_menu_commentnewactivity, menu); menu.findItem(R.id.menu_enable_ori_comment).setVisible(false); menu.findItem(R.id.menu_enable_repost).setVisible(true); enableRepost = menu.findItem(R.id.menu_enable_repost); enableRepost.setChecked(savedEnableRepost); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { 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 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_repost: if (enableRepost.isChecked()) { enableRepost.setChecked(false); } else { enableRepost.setChecked(true); } break; case R.id.menu_at: Intent intent = new Intent(WriteReplyToCommentActivity.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 (canSend()) { String content = ((EditText) findViewById(R.id.status_new_content)).getText() .toString(); Intent intent = SendReplyToCommentService .newIntent(getCurrentAccountBean(), bean, content, enableRepost.isChecked() ? repost() : null); startService(intent); finish(); } } private String repost() { String content = ((EditText) findViewById(R.id.status_new_content)).getText().toString(); String msgContent = "//@" + bean.getUser().getScreen_name() + ": " + bean.getText(); String total = content + msgContent; if (total.length() < 140) { content = total; } return content; } @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 protected AccountBean getCurrentAccountBean() { if (WriteReplyToCommentActivity.ACTION_NOTIFICATION_REPLY.equals(getIntent().getAction()) || WriteReplyToCommentActivity.ACTION_SEND_FAILED.equals(getIntent().getAction())) { AccountBean accountBean = ((AccountBean) getIntent().getParcelableExtra("account")); return accountBean; } else { return super.getCurrentAccountBean(); } } }