package net.dev123.yibo; import java.util.ArrayList; import java.util.List; import net.dev123.commons.ServiceProvider; import net.dev123.commons.util.ListUtil; import net.dev123.commons.util.StringUtil; import net.dev123.mblog.FeaturePatternUtils; import net.dev123.mblog.entity.Status; import net.dev123.mblog.entity.User; import net.dev123.yibo.common.Constants; import net.dev123.yibo.common.theme.ThemeUtil; import net.dev123.yibo.service.adapter.UserSuggestAdapter; import net.dev123.yibo.service.listener.EditMicroBlogMentionClickListener; import net.dev123.yibo.service.listener.EditMicroBlogTextDeleteClickListener; import net.dev123.yibo.service.listener.EditMicroBlogTokenizer; import net.dev123.yibo.service.listener.EditMicroBlogTopicClickListener; import net.dev123.yibo.service.listener.EditRetweetEmotionClickListener; import net.dev123.yibo.service.listener.EditRetweetSendClickListener; import net.dev123.yibo.service.listener.GoBackClickListener; import net.dev123.yibo.service.listener.MicroBlogTextWatcher; import net.dev123.yibo.widget.EmotionViewController; import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.MultiAutoCompleteTextView; import android.widget.TextView; public class EditRetweetActivity extends BaseActivity { private Integer type; private Status status; private Status retweetedStatus; private boolean isComment = false; private boolean isCommentToOrigin = false; private CheckBox cbComment = null; private CheckBox cbCommentToOrigin = null; private TextView tvText = null; private EmotionViewController emotionViewController; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.edit_retweet); if (!getIntent().hasExtra("STATUS")) { finish(); } //默认不弹出输入法 //getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); initParams(); initComponents(); bindEvent(); } private void initParams() { Intent intent = getIntent(); type = intent.getIntExtra("TYPE", Constants.EDIT_TYPE_RETWEET); status = (Status)intent.getSerializableExtra("STATUS"); emotionViewController = new EmotionViewController(this); } private void initComponents() { LinearLayout llHeaderBase = (LinearLayout)findViewById(R.id.llHeaderBase); LinearLayout llContentPanel = (LinearLayout)findViewById(R.id.llContentPanel); LinearLayout llEditText = (LinearLayout)findViewById(R.id.llEditText); MultiAutoCompleteTextView etText = (MultiAutoCompleteTextView)findViewById(R.id.etText); Button btnEmotion = (Button)this.findViewById(R.id.btnEmotion); Button btnMention = (Button)this.findViewById(R.id.btnMention); Button btnTopic = (Button)this.findViewById(R.id.btnTopic); Button btnTextCount = (Button)this.findViewById(R.id.btnTextCount); cbComment = (CheckBox) this.findViewById(R.id.cbComment); cbCommentToOrigin = (CheckBox)this.findViewById(R.id.cbCommentToOrigin); tvText = (TextView)this.findViewById(R.id.tvText); ThemeUtil.setSecondaryHeader(llHeaderBase); ThemeUtil.setContentBackground(llContentPanel); int padding6 = theme.dip2px(6); int padding8 = theme.dip2px(8); llContentPanel.setPadding(padding6, padding8, padding6, 0); llEditText.setBackgroundDrawable(theme.getDrawable("bg_input_frame_normal")); etText.setTextColor(theme.getColor("content")); btnEmotion.setBackgroundDrawable(theme.getDrawable("selector_btn_emotion")); btnMention.setBackgroundDrawable(theme.getDrawable("selector_btn_mention")); btnTopic.setBackgroundDrawable(theme.getDrawable("selector_btn_topic")); btnTextCount.setBackgroundDrawable(theme.getDrawable("selector_btn_text_count")); btnTextCount.setPadding(padding6, 0, theme.dip2px(20), 0); btnTextCount.setTextColor(theme.getColor("status_capability")); cbComment.setButtonDrawable(theme.getDrawable("selector_checkbox")); cbComment.setTextColor(theme.getColor("content")); cbCommentToOrigin.setButtonDrawable(theme.getDrawable("selector_checkbox")); cbCommentToOrigin.setTextColor(theme.getColor("content")); tvText.setTextColor(theme.getColor("quote")); TextView tvTitle = (TextView)this.findViewById(R.id.tvTitle); tvTitle.setText(R.string.title_retweet); MicroBlogTextWatcher textWatcher = new MicroBlogTextWatcher(this); etText.addTextChangedListener(textWatcher); etText.setHint(R.string.hint_retweet); etText.requestFocus(); etText.setAdapter(new UserSuggestAdapter(this)); etText.setTokenizer(new EditMicroBlogTokenizer()); retweetedStatus = status; if (status.getServiceProvider() != ServiceProvider.Sohu) { if (status.getServiceProvider() == ServiceProvider.Fanfou || status.getRetweetedStatus() != null) { etText.setText( String.format( FeaturePatternUtils.getRetweetFormat(status.getServiceProvider()), FeaturePatternUtils.getRetweetSeparator(status.getServiceProvider()), status.getUser().getMentionName(), status.getText() ) ); } if (!(status.getServiceProvider() == ServiceProvider.Fanfou || status.getRetweetedStatus() == null)) { retweetedStatus = status.getRetweetedStatus(); } etText.setSelection(0); } int length = StringUtil.getLengthByByte(etText.getText().toString()); int leavings = (int) Math.floor((double) (Constants.STATUS_TEXT_MAX_LENGTH * 2 - length) / 2); btnTextCount.setText((leavings < 0 ? "-" : "") + Math.abs(leavings)); String lableComment = this.getString(R.string.label_retweet_with_comment, status.getUser().getScreenName()); cbComment.setText(lableComment); if (isComment2OriginVisible()) { String lableCommentToOrigin = this.getString( R.string.label_retweet_with_comment_to_origin, retweetedStatus.getUser().getScreenName()); cbCommentToOrigin.setText(lableCommentToOrigin); cbCommentToOrigin.setVisibility(View.VISIBLE); } String promptText = retweetedStatus.getUser().getMentionTitleName() + ":" + retweetedStatus.getText(); tvText.setText(promptText); } public boolean isComment2OriginVisible() { return status != null && status.getRetweetedStatus() != null; } private void bindEvent() { Button btnBack = (Button)this.findViewById(R.id.btnBack); btnBack.setOnClickListener(new GoBackClickListener()); EditText etText = (EditText)this.findViewById(R.id.etText); etText.setOnTouchListener(new View.OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { emotionViewController.hideEmotionView(); displayOptions(true); return false; } }); Button btnSend = (Button)this.findViewById(R.id.btnOperate); btnSend.setText(R.string.label_send); btnSend.setVisibility(View.VISIBLE); btnSend.setOnClickListener(new EditRetweetSendClickListener(this)); Button btnTopic = (Button)this.findViewById(R.id.btnTopic); btnTopic.setOnClickListener(new EditMicroBlogTopicClickListener(this)); Button btnEmotion = (Button)this.findViewById(R.id.btnEmotion); btnEmotion.setOnClickListener(new EditRetweetEmotionClickListener(this)); Button btnMention = (Button)this.findViewById(R.id.btnMention); btnMention.setOnClickListener(new EditMicroBlogMentionClickListener()); Button btnTextCount = (Button)this.findViewById(R.id.btnTextCount); btnTextCount.setOnClickListener(new EditMicroBlogTextDeleteClickListener(this)); CheckBox cbComment = (CheckBox)this.findViewById(R.id.cbComment); cbComment.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { isComment = isChecked; } }); CheckBox cbCommentToOrigin = (CheckBox)this.findViewById(R.id.cbCommentToOrigin); cbCommentToOrigin.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { isCommentToOrigin = isChecked; } }); } @Override protected void onDestroy() { super.onDestroy(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } @SuppressWarnings("unchecked") @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch(requestCode) { case Constants.REQUEST_CODE_IMG_SELECTOR: case Constants.REQUEST_CODE_CAMERA: break; case Constants.REQUEST_CODE_USER_SELECTOR: if (resultCode == Constants.RESULT_CODE_SUCCESS) { List<User> userList = (List<User>)data.getSerializableExtra("LIST_USER"); if (ListUtil.isEmpty(userList)) { userList = new ArrayList<User>(); } MultiAutoCompleteTextView etText = (MultiAutoCompleteTextView)this.findViewById(R.id.etText); StringBuilder mentions = new StringBuilder(); for (User user : userList) { mentions.append(user.getMentionName()).append(" "); } int currentPos = etText.getSelectionStart(); etText.getText().insert(currentPos, mentions); } break; default: break; } } @Override public void onBackPressed() { if (emotionViewController.getEmotionViewVisibility() == View.VISIBLE) { emotionViewController.hideEmotionView(); displayOptions(true); } else { super.onBackPressed(); } } @Override protected void onResume() { super.onResume(); emotionViewController.hideEmotionView(); displayOptions(true); } public void displayOptions(boolean isDisplay) { LinearLayout llOptions = (LinearLayout) findViewById(R.id.llOptions); if (isDisplay) { llOptions.setVisibility(View.VISIBLE); } else { llOptions.setVisibility(View.GONE); } } public Integer getType() { return type; } public void setType(Integer type) { this.type = type; } public Status getStatus() { return status; } public Status getRetweetedStatus() { return retweetedStatus; } public boolean isComment() { return isComment; } public boolean isCommentToOrigin() { return isCommentToOrigin; } public EmotionViewController getEmotionViewController() { return emotionViewController; } }