package com.hupu.games.activity;
import java.util.ArrayList;
import java.util.List;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.hupu.games.R;
import com.hupu.games.adapter.ViewPagerAdapter;
import com.hupu.games.common.HuPuRes;
import com.hupu.games.common.HupuLog;
import com.hupu.games.common.SharedPreferencesMgr;
import com.hupu.games.data.BuyItemEntity;
import com.hupu.games.pay.BasePayActivity;
import com.hupu.games.pay.HupuOrderActivity;
import com.hupu.http.HupuHttpHandler;
/**
* @author panyongjun 发送热线,当然也能发表情
*/
public class ChatInputActivity extends BasePayActivity {
private String userName;
/** 输入的文字信息编辑栏 */
private EditText edtMsg;
private int size = 140;
/** 输入的文字 */
private String content;
/** 输入的文字数目 */
private TextView txtNum;
private String TAG;
/** 翻页控件 */
private ViewPager pager;
/** 表情显示的图片控件 */
private ImageView imgEmoji;
LayoutInflater mInflater;
/** 所有的表情的ids */
int[] emoji_ids;
int[] emoji_ids_1;
/** 表情的页面数 */
int pageSize;
/** 每页最大显示的表情数 */
final int MAX_PRE_PAGE = 8;
/** 表情网格视图列表 */
List<View> viewList;
/** pager适配器 */
ViewPagerAdapter pagerAdater;
/** 选择的表情索引值 */
private int emojiIndex;
LinearLayout layoutIndicator;
private int padding;
private int inputMode;
TextView tips;
private int lastIndicator;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_chat_input);
TAG = getIntent().getStringExtra("tag");
roomid = getIntent().getIntExtra("roomid", -1);
userName = SharedPreferencesMgr.getString(HuPuRes.KEY_NICK_NAME, "");
edtMsg = (EditText) findViewById(R.id.edt_msg);
edtMsg.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence c, int arg1, int arg2,
int arg3) {
size = 140 - (int) calculateWeiboLength(c);
txtNum.setText(size + "字");
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
}
@Override
public void afterTextChanged(Editable arg0) {
}
});
txtNum = (TextView) findViewById(R.id.txt_num);
// pager = (ViewPager) findViewById(R.id.emoj_pager);
// imgEmoji = (ImageView) findViewById(R.id.img_emoji);
//initEmojiView();
setOnClickListener(R.id.btn_back);
setOnClickListener(R.id.btn_sent);
if (userName.length() < 3) {
// 注册nickname
switchToNickNameAct();
} else {
showKeyBoard(edtMsg);
}
mApp.doPost = false;
}
void switchToNickNameAct() {
Intent intent = new Intent(this, NickNameActivity.class);
startActivityForResult(intent, 5555);
}
@Override
public void treatClickEvent(int id) {
super.treatClickEvent(id);
switch (id) {
case R.id.btn_back:
setResult(RESULT_CANCELED);
finish();
break;
case R.id.btn_sent:
if (userName == null)
switchToNickNameAct();
else
sent();
break;
}
}
/** 初始化表情 */
// private void initEmojiView() {
//
// if (!SharedPreferencesMgr.getBoolean("guide_emoji", false)) {
// SharedPreferencesMgr.setBoolean("guide_emoji", true);
// tips = (TextView) findViewById(R.id.txt_tips);
// if (SharedPreferencesMgr.getInt("show_vip", 0) == 1) {
// // 初次教程停留5秒
// new Handler().postDelayed(new Runnable() {
//
// @Override
// public void run() {
// if (tips != null)
// tips.setVisibility(View.GONE);
// }
// }, 5000);
// tips.setVisibility(View.VISIBLE);
// } else {
// tips.setVisibility(View.GONE);
// }
// }
//
// Resources res = getResources();
// String ss[] = res.getStringArray(R.array.emoji_list);
// String ss_1[] = res.getStringArray(R.array.emoji_list_1);
// emoji_ids = new int[ss.length];
// emoji_ids_1 = new int[ss.length];
// String pack = getPackageName();
// for (int i = 0; i < ss.length; i++) {
// // 反射
// emoji_ids[i] = res.getIdentifier(ss[i], "drawable", pack);
// emoji_ids_1[i] = res.getIdentifier(ss_1[i], "drawable", pack);
// }
// pageSize = emoji_ids.length / MAX_PRE_PAGE
// + (emoji_ids.length % MAX_PRE_PAGE == 0 ? 0 : 1);
// // Log.d("initEmojiView",
// // "pageSize="+pageSize+" draw0="+R.drawable.emoji_bobo);
// mInflater = LayoutInflater.from(this);
// viewList = new ArrayList<View>();
// layoutIndicator = (LinearLayout) findViewById(R.id.layout_indicator);
// padding = (int) getResources().getDisplayMetrics().density * 10;
// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
// ViewGroup.LayoutParams.WRAP_CONTENT,
// ViewGroup.LayoutParams.WRAP_CONTENT);
// params.rightMargin = padding;
// for (int i = 0; i < pageSize; i++) {
// GridView view = (GridView) mInflater.inflate(R.layout.emoji_grid,
// null);
// view.setAdapter(new GridAdapter(i));
// view.setOnItemClickListener(new ItemOnClick(i));
// viewList.add(view);
// ImageView indicator = new ImageView(this);
// indicator.setLayoutParams(params);
// if (i == 0)
// indicator.setBackgroundResource(R.drawable.point_1);
// else
// indicator.setBackgroundResource(R.drawable.point);
// layoutIndicator.addView(indicator);
// }
// pagerAdater = new ViewPagerAdapter(viewList);
// pager.setAdapter(pagerAdater);
// pager.setOnPageChangeListener(new GuidePageChangeListener());
//
// }
/**
* 设置表情翻页的标识
* */
private void setIndicator(int p) {
layoutIndicator.getChildAt(lastIndicator).setBackgroundResource(
R.drawable.point);
layoutIndicator.getChildAt(p).setBackgroundResource(R.drawable.point_1);
lastIndicator = p;
}
/**
* 显示表情
* */
// private void showEmojiView() {
// // Log.d("showEmojiView", "showEmojiView");
// hideKeyBoard();
// inputMode = 1;
//
// new Handler().postDelayed(new Runnable() {
//
// @Override
// public void run() {
// findViewById(R.id.layout_edit).setVisibility(View.GONE);
//
// findViewById(R.id.layout_emoji).setVisibility(View.VISIBLE);
// pager.setVisibility(View.VISIBLE);
// layoutIndicator.setVisibility(View.VISIBLE);
// }
// }, 300);
//
// }
/**
* 显示文字编辑
* */
private void showEditView() {
// Log.d("showEditView", "showEditView");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
showKeyBoard(edtMsg);
}
}, 200);
inputMode = 0;
// findViewById(R.id.layout_edit).setVisibility(View.VISIBLE);
// findViewById(R.id.layout_emoji).setVisibility(View.GONE);
//
// pager.setVisibility(View.GONE);
// layoutIndicator.setVisibility(View.GONE);
}
/**
* 响应请求反馈
* */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 5555) {
// 有名称返回
if (resultCode == RESULT_OK)
userName = data.getStringExtra("username");
else if (resultCode == RESULT_CANCELED) {
finish();
}
} else if (requestCode == 9988) {
// 充值成功
if (resultCode == RESULT_OK) {
int success = 1;
if (data != null)
success = data.getIntExtra("success", 1);
if (success == 1) {
// 成功
showToast("恭喜您成为VIP会员,现在就开始VIP之旅吧");
} else {
// 失败
showFail();
bagVerify(HuPuRes.ITEM_VIP, false);
}
} else if (resultCode == RESULT_CANCELED) {
// 用户取消
bagVerify(HuPuRes.ITEM_VIP, false);
}
}
}
/**
* 发送热线,目前两种逻辑,文字信息直接发送,如果是表情则去服务端验证bag有效性
* */
private void sent() {
if (inputMode == 0) {
content = edtMsg.getEditableText().toString();
if (content == null || (content.trim().length() == 0)) {
showToast("请输入文字");
} else if (size < 0) {
showToast("字数超过140字");
} else {
Intent data = new Intent();
data.putExtra("user", userName);
data.putExtra("content", content);
data.putExtra("roomid", roomid);
HupuLog.e("chatInput-328", "send_chat_roomid="+roomid);
setResult(RESULT_OK, data);
finish();
}
}/* else {
if (emojiIndex == 0)
showToast("请选择表情");
else {
String tk = SharedPreferencesMgr.getString("tk", null);
if (tk == null)
showCustomDialog(DIALOG_BUY_VIP_CHARGE);
else
bagVerify(10004, true);
}
}*/
}
/**
* 发送表情
* */
void sendEmoji() {
Intent data = new Intent();
data.putExtra("user", userName);
data.putExtra("emoji", "A_" + emojiIndex);
setResult(RESULT_OK, data);
finish();
}
/**
* 计算微博内容的长度 1个汉字 == 两个英文字母所占的长度 标点符号区分英文和中文
*
* @param c
* 所要统计的字符序列
* @return 返回字符序列计算的长度
*/
public static long calculateWeiboLength(CharSequence c) {
double len = 0;
for (int i = 0; i < c.length(); i++) {
int temp = (int) c.charAt(i);
if (temp > 0 && temp < 127) {
len += 0.5;
} else {
len++;
}
}
return Math.round(len);
}
private void showKeyBoard(View view) {
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
.showSoftInput(view, 0);
}
private void hideKeyBoard() {
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(this.getCurrentFocus()
.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
// -------表情网格-------//
class GridAdapter extends BaseAdapter {
private int page;
private int startIndex;
private int size;
public GridAdapter(int p) {
page = p;
startIndex = page * MAX_PRE_PAGE;
size = emoji_ids.length - startIndex;
if (size > MAX_PRE_PAGE)
size = MAX_PRE_PAGE;
}
@Override
public int getCount() {
return size;
}
@Override
public Integer getItem(int position) {
return startIndex + position;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Log.d("GridAdapter", "getView" + position);
if (convertView == null) {
ImageView img = new ImageView(ChatInputActivity.this);
img.setScaleType(ScaleType.FIT_CENTER);
convertView = img;
}
((ImageView) convertView)
.setImageResource(emoji_ids_1[getItem(position)]);
// ((ImageView) convertView)
// .setImageResource(R.drawable.emoji_bobo);
return convertView;
}
}
class ItemOnClick implements OnItemClickListener {
int page;
public ItemOnClick(int p) {
page = p;
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
emojiIndex = page * MAX_PRE_PAGE + arg2 + 1;
imgEmoji.setImageResource(emoji_ids[emojiIndex - 1]);
try {
AnimationDrawable draw = (AnimationDrawable) imgEmoji
.getDrawable();
if (draw == null || draw.isRunning()) {
} else {
draw.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/** 指引页面改监**听**器 */
class GuidePageChangeListener implements OnPageChangeListener {
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
// 这里可以做一些小动作,不如当你滑动到那一页的时候你要加个图标,文字啥的
public void onPageSelected(int p) {
setIndicator(p);
}
}
// 1 有权限,-1 未登陆,-2 无权限,-3无权限且余额不够购买
public void onCheckFinish(int state) {
if (state == 1) {
SharedPreferencesMgr.setBoolean("vip", true);
sendEmoji();
} else if (state == -2) {
// 有钱购买
showCustomDialog(DIALOG_BUY_VIP_DIRECT);
} else {
// 未登录或没钱
showCustomDialog(DIALOG_BUY_VIP_CHARGE);
}
}
/** 去支付页面 */
private void toPay() {
Intent in = new Intent(this, HupuOrderActivity.class);
in.putExtra("buy_vip", "1");
in.putExtra("pid", "" + EMOJI_ITEM_PID);
startActivityForResult(in, 9988);
}
@Override
public void onReqResponse(Object o, int methodId) {
super.onReqResponse(o, methodId);
if (methodId == HuPuRes.REQ_METHOD_BUY_EMOJI) {
BuyItemEntity item = (BuyItemEntity) o;
if (item.state == 1 || item.state == -4) {
showToast("恭喜您成为VIP会员,现在就开始VIP之旅吧");
SharedPreferencesMgr.setBoolean("vip", true);
} else if (item.state == -2) {
showToast("您的购买出现异常,请重新提交。");
} else {
// 没钱
toPay();
}
}
}
private final int DIALOG_BUY_VIP_DIRECT = 3322;
private final int DIALOG_BUY_VIP_CHARGE = 3323;
private int DIALOG_BUY_VIP_FAIL = 3325;
private int EMOJI_ITEM_PID = 10007;
void showCustomDialog(int d) {
showCustomDialog(d, R.string.title_buy, R.string.buy_vip_content,
TOW_BUTTONS, R.string.buy_vip, R.string.buy_later);
}
void showFail() {
showCustomDialog(DIALOG_BUY_VIP_FAIL, R.string.title_buy,
R.string.buy_fail_content, TOW_BUTTONS,
R.string.buy_get_trouble, R.string.buy_success);
}
@Override
public void clickPositiveButton(int dialogId) {
super.clickPositiveButton(dialogId);
if (DIALOG_BUY_VIP_DIRECT == dialogId) {
buy(EMOJI_ITEM_PID);
} else if (DIALOG_BUY_VIP_CHARGE == dialogId) {
toPay();
} else if (DIALOG_BUY_VIP_FAIL == dialogId) {
// 遇上麻烦了当然找客服mm帮忙啦。
Intent inContact = new Intent(this, ContactsActivity.class);
startActivity(inContact);
}
if (mDialog != null)
mDialog.dismiss();
}
@Override
public void clickNegativeButton(int dialogId) {
super.clickNegativeButton(dialogId);
switch (dialogId) {
case DIALOG_BUY_VIP_DIRECT:
case DIALOG_BUY_VIP_CHARGE:
break;
}
if (mDialog != null && mDialog.isShowing())
mDialog.dismiss();
}
void buy(int pid) {
initParameter();
String token = SharedPreferencesMgr.getString("tk", null);
mParams.put("token", token);
mParams.put("pid", "" + pid);
// Log.d("buy", "token=" + token);
sendRequest(HuPuRes.REQ_METHOD_BUY_EMOJI, mParams, new HupuHttpHandler(
this), true);
}
@Override
protected void onResume() {
super.onResume();
if (mApp.doPost) {
//
mApp.doPost = false;
showFail();
}
}
}