package org.qii.weiciyuan.ui.send; import org.qii.weiciyuan.R; import org.qii.weiciyuan.bean.AccountBean; import org.qii.weiciyuan.bean.MessageBean; import org.qii.weiciyuan.dao.send.RepostNewMsgDao; import org.qii.weiciyuan.othercomponent.sendweiboservice.SendRepostService; import org.qii.weiciyuan.support.database.DraftDBManager; import org.qii.weiciyuan.support.database.draftbean.RepostDraftBean; 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.Toast; /** * User: Jiang Qi * Date: 12-8-2 */ public class WriteRepostActivity extends AbstractWriteActivity<MessageBean> { public static final String ACTION_DRAFT = "org.qii.weiciyuan.DRAFT"; public static final String ACTION_SEND_FAILED = "org.qii.weiciyuan.SEND_FAILED"; private String token; private MessageBean msg; private RepostDraftBean repostDraftBean; private MenuItem menuEnableComment; private MenuItem menuEnableOriComment; private boolean savedEnableComment; private boolean savedEnableOriComment; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getActionBar().setTitle(getString(R.string.repost)); getActionBar().setSubtitle(GlobalContext.getInstance().getCurrentAccountName()); if (savedInstanceState == null) { Intent intent = getIntent(); String action = intent.getAction(); if (!TextUtils.isEmpty(action)) { if (action.equals(WriteRepostActivity.ACTION_DRAFT)) { handleDraftOperation(intent); } else if (action.equals(WriteRepostActivity.ACTION_SEND_FAILED)) { handleFailedOperation(intent); } } else { handleNormalOperation(intent); } } } private void handleDraftOperation(Intent intent) { AccountBean account = (AccountBean) intent.getParcelableExtra("account"); token = account.getAccess_token(); repostDraftBean = (RepostDraftBean) intent.getParcelableExtra("draft"); getEditTextView().setText(repostDraftBean.getContent()); msg = repostDraftBean.getMessageBean(); if (msg.getRetweeted_status() != null) { getEditTextView().setHint( "//@" + msg.getRetweeted_status().getUser().getScreen_name() + ":" + msg .getRetweeted_status().getText()); } else { getEditTextView().setHint("@" + msg.getUser().getScreen_name() + ":" + msg.getText()); } } public static Intent startBecauseSendFailed(Context context, AccountBean accountBean, String content, MessageBean oriMsg, RepostDraftBean repostDraftBean, String failedReason) { Intent intent = new Intent(context, WriteRepostActivity.class); intent.setAction(WriteRepostActivity.ACTION_SEND_FAILED); intent.putExtra("account", accountBean); intent.putExtra("content", content); intent.putExtra("oriMsg", oriMsg); intent.putExtra("failedReason", failedReason); intent.putExtra("repostDraftBean", repostDraftBean); return intent; } private void handleFailedOperation(Intent intent) { token = ((AccountBean) intent.getParcelableExtra("account")).getAccess_token(); msg = (MessageBean) intent.getParcelableExtra("oriMsg"); getEditTextView().setText(intent.getStringExtra("content")); if (msg.getRetweeted_status() != null) { getEditTextView().setHint( "//@" + msg.getRetweeted_status().getUser().getScreen_name() + ":" + msg .getRetweeted_status().getText()); } else { getEditTextView().setHint("@" + msg.getUser().getScreen_name() + ":" + msg.getText()); } getEditTextView().setError(intent.getStringExtra("failedReason")); repostDraftBean = (RepostDraftBean) intent.getParcelableExtra("repostDraftBean"); } private void handleNormalOperation(Intent intent) { token = intent.getStringExtra("token"); if (TextUtils.isEmpty(token)) { token = GlobalContext.getInstance().getSpecialToken(); } msg = (MessageBean) intent.getParcelableExtra("msg"); if (msg.getRetweeted_status() != null) { getEditTextView() .setText("//@" + msg.getUser().getScreen_name() + ": " + msg.getText()); getEditTextView().setHint( "//@" + msg.getRetweeted_status().getUser().getScreen_name() + ":" + msg .getRetweeted_status().getText()); } else { getEditTextView().setHint("@" + msg.getUser().getScreen_name() + ":" + msg.getText()); } getEditTextView().setSelection(0); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); if (savedInstanceState != null) { savedEnableComment = savedInstanceState.getBoolean("comment"); savedEnableOriComment = savedInstanceState.getBoolean("oriComment"); token = savedInstanceState.getString("token"); msg = (MessageBean) savedInstanceState.getParcelable("msg"); repostDraftBean = (RepostDraftBean) savedInstanceState.getParcelable("repostDraftBean"); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean("comment", menuEnableComment.isChecked()); outState.putBoolean("oriComment", menuEnableOriComment.isChecked()); outState.putString("token", token); outState.putParcelable("msg", msg); outState.putParcelable("repostDraftBean", repostDraftBean); } @Override protected boolean canShowSaveDraftDialog() { if (repostDraftBean == null) { return true; } else if (!repostDraftBean.getContent().equals(getEditTextView().getText().toString())) { return true; } return false; } @Override protected void insertTopic() { String ori = getEditTextView().getText().toString(); int index = getEditTextView().getSelectionStart(); StringBuilder stringBuilder = new StringBuilder(ori); stringBuilder.insert(index, "##"); getEditTextView().setText(stringBuilder.toString()); getEditTextView().setSelection(index + "##".length() - 1); } @Override public void saveToDraft() { if (!TextUtils.isEmpty(getEditTextView().getText().toString())) { DraftDBManager.getInstance().insertRepost(getEditTextView().getText().toString(), msg, GlobalContext.getInstance().getCurrentAccountId()); } finish(); } @Override protected void removeDraft() { if (repostDraftBean != null) { DraftDBManager.getInstance().remove(repostDraftBean.getId()); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.actionbar_menu_repostnewactivity, menu); menuEnableComment = menu.findItem(R.id.menu_enable_comment); menuEnableOriComment = menu.findItem(R.id.menu_enable_ori_comment); menuEnableComment.setChecked(savedEnableComment); menuEnableOriComment.setChecked(savedEnableOriComment); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { if (msg.getRetweeted_status() != null) { menuEnableOriComment.setVisible(true); } String contentStr = getEditTextView().getText().toString(); if (Utility.countWord(contentStr, "//@", 0) > 2) { menu.findItem(R.id.menu_short_right).setVisible(true); menu.findItem(R.id.menu_short_middle).setVisible(true); } else { menu.findItem(R.id.menu_short_right).setVisible(false); menu.findItem(R.id.menu_short_middle).setVisible(false); } 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_comment: if (menuEnableComment.isChecked()) { menuEnableComment.setChecked(false); } else { menuEnableComment.setChecked(true); } break; case R.id.menu_enable_ori_comment: if (menuEnableOriComment != null && menuEnableOriComment.isChecked()) { menuEnableOriComment.setChecked(false); } else if (menuEnableOriComment != null && !menuEnableOriComment.isChecked()) { menuEnableOriComment.setChecked(true); } break; case R.id.menu_at: Intent intent = new Intent(WriteRepostActivity.this, AtUserActivity.class); intent.putExtra("token", token); startActivityForResult(intent, AT_USER); break; case R.id.menu_clear: clearContentMenu(); break; case R.id.menu_short_right: shortContent(); break; case R.id.menu_short_middle: shortMiddleContent(); break; } return true; } private void shortContent() { String content = getEditTextView().getText().toString(); int index = getEditTextView().getSelectionStart(); int last = content.lastIndexOf("//@"); if (last >= 0) { String result = content.substring(0, last); getEditTextView().setText(result); if (index <= result.length()) { getEditTextView().setSelection(index); } } } private void shortMiddleContent() { String content = getEditTextView().getText().toString(); int index = getEditTextView().getSelectionStart(); int a = content.lastIndexOf("//@"); if (a >= 0) { String result = content.substring(0, a); int b = result.lastIndexOf("//@"); if (b >= 0) { String startPart = content.substring(0, b); String endPart = content.substring(a); getEditTextView().setText(startPart + endPart); if (index <= result.length()) { getEditTextView().setSelection(index); } } } } @Override protected void send() { if (canSend()) { boolean comment = menuEnableComment.isChecked(); boolean oriComment = (menuEnableOriComment != null && menuEnableOriComment.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(WriteRepostActivity.this, SendRepostService.class); intent.putExtra("oriMsg", msg); intent.putExtra("content", getEditTextView().getText().toString()); intent.putExtra("is_comment", is_comment); intent.putExtra("token", GlobalContext.getInstance().getSpecialToken()); intent.putExtra("account", GlobalContext.getInstance().getAccountBean()); startService(intent); finish(); } } @Override protected boolean canSend() { boolean haveToken = !TextUtils.isEmpty(token); int sum = Utility.length(getEditTextView().getText().toString()); int num = 140 - sum; boolean contentNumBelow140 = (num >= 0); if (haveToken && contentNumBelow140) { return true; } 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; } }