package net.dev123.yibo;
import java.util.ArrayList;
import java.util.List;
import net.dev123.commons.util.ListUtil;
import net.dev123.commons.util.StringUtil;
import net.dev123.mblog.entity.User;
import net.dev123.yibo.common.Constants;
import net.dev123.yibo.common.SelectMode;
import net.dev123.yibo.common.theme.ThemeUtil;
import net.dev123.yibo.service.adapter.UserSuggestAdapter;
import net.dev123.yibo.service.listener.EditDirectMessageSendClickListener;
import net.dev123.yibo.service.listener.EditMicroBlogEmotionClickListener;
import net.dev123.yibo.service.listener.EditMicroBlogMentionClickListener;
import net.dev123.yibo.service.listener.EditMicroBlogTextDeleteClickListener;
import net.dev123.yibo.service.listener.EditMicroBlogTopicClickListener;
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.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.MultiAutoCompleteTextView;
import android.widget.TextView;
public class EditDirectMessageActivity extends BaseActivity {
private String displayName = null;
private EmotionViewController emotionViewController;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_direct_message);
Bundle bundle = this.getIntent().getExtras();
displayName = bundle.getString("DISPLAY_NAME");
initComponents();
bindEvent();
}
private void initComponents() {
LinearLayout llHeaderBase = (LinearLayout)findViewById(R.id.llHeaderBase);
LinearLayout llContentPanel = (LinearLayout)findViewById(R.id.llContentPanel);
AutoCompleteTextView etDisplayName = (AutoCompleteTextView)this.findViewById(R.id.etDisplayName);
Button btnUserSelector = (Button)this.findViewById(R.id.btnUserSelector);
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);
ThemeUtil.setSecondaryHeader(llHeaderBase);
ThemeUtil.setContentBackground(llContentPanel);
int padding6 = theme.dip2px(6);
int padding8 = theme.dip2px(8);
llContentPanel.setPadding(padding6, padding8, padding6, 0);
etDisplayName.setBackgroundDrawable(theme.getDrawable("bg_input_frame_left_half"));
etDisplayName.setTextColor(theme.getColor("content"));
btnUserSelector.setBackgroundDrawable(theme.getDrawable("selector_btn_message_user"));
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"));
TextView tvTitle = (TextView) this.findViewById(R.id.tvTitle);
tvTitle.setText(R.string.title_edit_direct_message);
if (StringUtil.isNotEmpty(displayName)) {
etDisplayName.setText(displayName);
etText.requestFocus();
}
etDisplayName.setAdapter(new UserSuggestAdapter(this));
etDisplayName.setOnTouchListener(hideEmotionGridListener);
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));
emotionViewController = new EmotionViewController(this);
}
private View.OnTouchListener hideEmotionGridListener = new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
emotionViewController.hideEmotionView();
return false;
}
};
private void bindEvent() {
Button btnBack = (Button) this.findViewById(R.id.btnBack);
btnBack.setOnClickListener(new GoBackClickListener());
Button btnSend = (Button) this.findViewById(R.id.btnOperate);
btnSend.setText(R.string.label_send);
btnSend.setVisibility(View.VISIBLE);
btnSend.setOnClickListener(new EditDirectMessageSendClickListener(this));
Button btnUserSelector = (Button) this.findViewById(R.id.btnUserSelector);
//btnUserSelector.setOnClickListener(new EditDirectMessageUserSelectorClickListener(this));
EditMicroBlogMentionClickListener userSelectorListener = new EditMicroBlogMentionClickListener();
userSelectorListener.setRequestCode(Constants.REQUEST_CODE_USER_SELECTOR_MESSAGE);
userSelectorListener.setSelectMode(SelectMode.Single);
userSelectorListener.setTitleId(R.string.title_select_recipient);
btnUserSelector.setOnClickListener(userSelectorListener);
EditText etText = (EditText) this.findViewById(R.id.etText);
etText.addTextChangedListener(new MicroBlogTextWatcher(this));
etText.setOnTouchListener(hideEmotionGridListener);
Button btnTopic = (Button) this.findViewById(R.id.btnTopic);
btnTopic.setOnClickListener(new EditMicroBlogTopicClickListener(this));
Button btnEmotion = (Button) this.findViewById(R.id.btnEmotion);
btnEmotion.setOnClickListener(new EditMicroBlogEmotionClickListener(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));
}
@SuppressWarnings("unchecked")
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
List<User> userList = null;
switch (requestCode) {
case Constants.REQUEST_CODE_USER_SELECTOR_MESSAGE:
if (resultCode != Constants.RESULT_CODE_SUCCESS) {
break;
}
userList = (List<User>)data.getSerializableExtra("LIST_USER");
if (ListUtil.isEmpty(userList)) {
userList = new ArrayList<User>();
}
AutoCompleteTextView etDisplayName =
(AutoCompleteTextView)this.findViewById(R.id.etDisplayName);
//String recipientName = etDisplayName.getText().toString().trim();
StringBuilder newRecipientName = new StringBuilder();
for (User user : userList) {
if (newRecipientName.length() == 0) {
newRecipientName.append(user.getDisplayName());
} else {
newRecipientName.append(Constants.SEPARATOR_RECEIVER)
.append(user.getDisplayName());
}
}
etDisplayName.setText(newRecipientName.toString());
etDisplayName.setSelection(newRecipientName.length());
break;
case Constants.REQUEST_CODE_USER_SELECTOR:
if (resultCode != Constants.RESULT_CODE_SUCCESS) {
break;
}
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();
} else {
super.onBackPressed();
}
}
@Override
protected void onResume() {
super.onResume();
emotionViewController.hideEmotionView();
}
public EmotionViewController getEmotionViewController() {
return emotionViewController;
}
}