package org.qii.weiciyuan.ui.send;
import org.qii.weiciyuan.R;
import org.qii.weiciyuan.bean.AccountBean;
import org.qii.weiciyuan.support.file.FileLocationMethod;
import org.qii.weiciyuan.support.imageutility.ImageUtility;
import org.qii.weiciyuan.support.lib.CheatSheet;
import org.qii.weiciyuan.support.smileypicker.SmileyPicker;
import org.qii.weiciyuan.support.utils.GlobalContext;
import org.qii.weiciyuan.support.utils.SmileyPickerUtility;
import org.qii.weiciyuan.ui.interfaces.AbstractAppActivity;
import org.qii.weiciyuan.ui.main.MainTimeLineActivity;
import org.qii.weiciyuan.ui.maintimeline.SaveDraftDialog;
import org.qii.weiciyuan.ui.search.AtUserActivity;
import android.app.ActionBar;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.AutoCompleteTextView;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
/**
* User: qii
* Date: 12-9-25
*/
public abstract class AbstractWriteActivity<T> extends AbstractAppActivity
implements View.OnClickListener, ClearContentDialog.IClear
, SaveDraftDialog.IDraft {
public static final int AT_USER = 3;
private AutoCompleteTextView et;
private SmileyPicker smiley = null;
private RelativeLayout container = null;
protected String token;
protected EditText getEditTextView() {
return et;
}
@Override
public void clear() {
getEditTextView().setText("");
}
protected abstract void send();
protected abstract boolean canSend();
public void insertEmotion(String emotionChar) {
String ori = getEditTextView().getText().toString();
int index = getEditTextView().getSelectionStart();
StringBuilder stringBuilder = new StringBuilder(ori);
stringBuilder.insert(index, emotionChar);
getEditTextView().setText(stringBuilder.toString());
getEditTextView().setSelection(index + emotionChar.length());
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.abstractwriteactivity_layout);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setDisplayShowCustomEnabled(true);
int avatarWidth = getResources().getDimensionPixelSize(R.dimen.timeline_avatar_width);
int avatarHeight = getResources().getDimensionPixelSize(R.dimen.timeline_avatar_height);
Bitmap bitmap = ImageUtility
.getWriteWeiboRoundedCornerPic(getCurrentAccountBean().getInfo().getAvatar_large(),
avatarWidth, avatarHeight, FileLocationMethod.avatar_large);
if (bitmap == null) {
bitmap = ImageUtility.getWriteWeiboRoundedCornerPic(
getCurrentAccountBean().getInfo().getProfile_image_url(),
avatarWidth, avatarHeight, FileLocationMethod.avatar_small);
}
if (bitmap != null) {
actionBar.setIcon(new BitmapDrawable(getResources(), bitmap));
}
token = getIntent().getStringExtra("token");
View title = getLayoutInflater().inflate(R.layout.writeweiboactivity_title_layout, null);
actionBar.setCustomView(title, new ActionBar.LayoutParams(Gravity.RIGHT));
et = ((AutoCompleteTextView) findViewById(R.id.status_new_content));
et.addTextChangedListener(
new TextNumLimitWatcher((TextView) findViewById(R.id.menu_send), et, this));
AutoCompleteAdapter adapter = new AutoCompleteAdapter(this, et,
(ProgressBar) title.findViewById(R.id.have_suggest_progressbar));
et.setAdapter(adapter);
findViewById(R.id.menu_topic).setOnClickListener(this);
findViewById(R.id.menu_at).setOnClickListener(this);
findViewById(R.id.menu_emoticon).setOnClickListener(this);
findViewById(R.id.menu_send).setOnClickListener(this);
CheatSheet.setup(AbstractWriteActivity.this, findViewById(R.id.menu_at), R.string.at_other);
CheatSheet.setup(AbstractWriteActivity.this, findViewById(R.id.menu_emoticon),
R.string.add_emoticon);
CheatSheet.setup(AbstractWriteActivity.this, findViewById(R.id.menu_topic),
R.string.add_topic);
CheatSheet.setup(AbstractWriteActivity.this, findViewById(R.id.menu_send), R.string.send);
smiley = (SmileyPicker) findViewById(R.id.smiley_picker);
smiley.setEditText(AbstractWriteActivity.this,
((LinearLayout) findViewById(R.id.root_layout)), et);
container = (RelativeLayout) findViewById(R.id.container);
et.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hideSmileyPicker(true);
}
});
}
private void showSmileyPicker(boolean showAnimation) {
this.smiley.show(AbstractWriteActivity.this, showAnimation);
lockContainerHeight(SmileyPickerUtility.getAppContentHeight(AbstractWriteActivity.this));
}
public void hideSmileyPicker(boolean showKeyBoard) {
if (this.smiley.isShown()) {
if (showKeyBoard) {
//this time softkeyboard is hidden
LinearLayout.LayoutParams localLayoutParams = (LinearLayout.LayoutParams) this
.container.getLayoutParams();
localLayoutParams.height = smiley.getTop();
localLayoutParams.weight = 0.0F;
this.smiley.hide(AbstractWriteActivity.this);
SmileyPickerUtility.showKeyBoard(et);
et.postDelayed(new Runnable() {
@Override
public void run() {
unlockContainerHeightDelayed();
}
}, 200L);
} else {
this.smiley.hide(AbstractWriteActivity.this);
unlockContainerHeightDelayed();
}
}
}
private void lockContainerHeight(int paramInt) {
LinearLayout.LayoutParams localLayoutParams = (LinearLayout.LayoutParams) this.container
.getLayoutParams();
localLayoutParams.height = paramInt;
localLayoutParams.weight = 0.0F;
}
public void unlockContainerHeightDelayed() {
((LinearLayout.LayoutParams) AbstractWriteActivity.this.container.getLayoutParams()).weight
= 1.0F;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.menu_emoticon:
if (smiley.isShown()) {
hideSmileyPicker(true);
} else {
showSmileyPicker(
SmileyPickerUtility.isKeyBoardShow(AbstractWriteActivity.this));
}
break;
case R.id.menu_send:
send();
break;
case R.id.menu_topic:
insertTopic();
break;
case R.id.menu_at:
Intent intent = new Intent(AbstractWriteActivity.this, AtUserActivity.class);
intent.putExtra("token", token);
startActivityForResult(intent, AT_USER);
break;
}
}
protected void insertTopic() {
String ori = getEditTextView().getText().toString();
String topicTag = "##";
getEditTextView().setText(ori + topicTag);
getEditTextView().setSelection(et.getText().toString().length() - 1);
}
protected void clearContentMenu() {
ClearContentDialog dialog = new ClearContentDialog();
dialog.show(getFragmentManager(), "");
}
@Override
public void onBackPressed() {
if (smiley.isShown()) {
hideSmileyPicker(false);
} else if (!TextUtils.isEmpty(et.getText().toString()) && canShowSaveDraftDialog()) {
SaveDraftDialog dialog = new SaveDraftDialog();
dialog.show(getFragmentManager(), "");
} else {
if (GlobalContext.getInstance().getAccountBean().equals(getCurrentAccountBean())) {
super.onBackPressed();
} else {
InputMethodManager imm = (InputMethodManager) getSystemService(
Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
InputMethodManager.HIDE_NOT_ALWAYS);
}
Intent intent = MainTimeLineActivity.newIntent(getCurrentAccountBean());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
}
protected AccountBean getCurrentAccountBean() {
return GlobalContext.getInstance().getAccountBean();
}
protected abstract boolean canShowSaveDraftDialog();
public abstract void saveToDraft();
protected abstract void removeDraft();
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case AT_USER:
String name = intent.getStringExtra("name");
String ori = getEditTextView().getText().toString();
int index = getEditTextView().getSelectionStart();
StringBuilder stringBuilder = new StringBuilder(ori);
stringBuilder.insert(index, name);
getEditTextView().setText(stringBuilder.toString());
getEditTextView().setSelection(index + name.length());
break;
}
}
}
}