package com.partynetwork.iparty.imessage;
import java.util.ArrayList;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.TextView.BufferType;
import com.partynetwork.dataprovider.util.MediaFile;
import com.partynetwork.dataprovider.util.StringUtil;
import com.partynetwork.dataprovider.util.TimeUtil;
import com.partynetwork.iparty.R;
import com.partynetwork.iparty.app.AppContext;
import com.partynetwork.iparty.app.common.BitmapManager;
import com.partynetwork.iparty.app.entities.CommonUser;
import com.partynetwork.iparty.app.entities.IMessage;
import com.partynetwork.iparty.app.manager.MessageManager;
import com.partynetwork.iparty.app.manager.UserManager;
import com.partynetwork.iparty.app.ui.ImageDialog;
public class ChatHolder implements OnClickListener, OnPreparedListener,
OnCompletionListener {
ImageView head;
TextView sendtime;
TextView msg;
ImageView img;
TextView voice;
LinearLayout layout;
// 播放音乐控件
MediaPlayer player;
AnimationDrawable anima;
Context mContext;
String messageContent;
private IMessage iMessage;
private BitmapManager bitmapManager;
public ChatHolder(View view, Context context) {
this.mContext = context;
initView(view);
initDate();
}
private void initView(View view) {
head = (ImageView) view.findViewById(R.id.head);
sendtime = (TextView) view.findViewById(R.id.sendtime);
msg = (TextView) view.findViewById(R.id.msg_tv);
img = (ImageView) view.findViewById(R.id.msg_img);
voice = (TextView) view.findViewById(R.id.voice);
layout = (LinearLayout) view.findViewById(R.id.msg_ll);
}
private void initDate() {
bitmapManager = new BitmapManager();
player = new MediaPlayer();
}
private void initText(IMessage message) {
img.setVisibility(View.GONE);
voice.setVisibility(View.GONE);
msg.setVisibility(View.VISIBLE);
layout.setClickable(false);
msg.setText(StringUtil.convertNormalStringToSpannableString(mContext,
message.getContent()), BufferType.SPANNABLE);
}
private void initImage(IMessage message) {
img.setVisibility(View.VISIBLE);
voice.setVisibility(View.GONE);
msg.setVisibility(View.GONE);
layout.setOnClickListener(this);
layout.setClickable(true);
img.setMaxHeight(100);
img.setMaxWidth(50);
bitmapManager.loadBitmap(messageContent, img);
}
private void initVoice(IMessage message) {
img.setVisibility(View.VISIBLE);
voice.setVisibility(View.VISIBLE);
msg.setVisibility(View.GONE);
layout.setOnClickListener(this);
layout.setClickable(true);
player.setOnPreparedListener(this);
player.setOnCompletionListener(this);
if (message.getVoiceTime() > 1) {
voice.setText(message.getVoiceTime() + "s");
voice.setVisibility(View.VISIBLE);
} else {
voice.setVisibility(View.GONE);
}
if (message.getIsCome() == 1) {
anima = (AnimationDrawable) mContext.getResources().getDrawable(
R.anim.chatfrom_voice_playing);
} else {
anima = (AnimationDrawable) mContext.getResources().getDrawable(
R.anim.chatto_voice_playing);
}
anima.setOneShot(false);
anima.stop();
}
public void initDate(IMessage message) {
iMessage = message;
messageContent = message.getContent();
if (message.getContentType() == IMessage.TEXT) {
if (MediaFile.isAudioFileType(message.getContent())) {
initVoice(message);
} else if (MediaFile.isImageFileType(message.getContent())) {
initImage(message);
} else {
initText(message);
}
} else if (message.getContentType() == IMessage.VOICE) {
initVoice(message);
} else if (message.getContentType() == IMessage.PICTURE) {
initImage(message);
}
if (message.getIsCome() == 1) {
CommonUser user = UserManager.getInstance(mContext).getUserbyId(
message.getWithUser());
if (user != null) {
bitmapManager.loadBitmap(user.getUserHeadUrl(), head);
}
} else {
bitmapManager.loadBitmap(AppContext.getInstance().getLoginInfo()
.getFace(), head);
}
sendtime.setText(TimeUtil.friendly_time(message.getTime()));
if (message.getNeedTime() == 0) {
sendtime.setVisibility(View.GONE);
} else {
sendtime.setVisibility(View.VISIBLE);
}
}
@Override
public void onClick(View v) {
String content = iMessage.getContent();
if (MediaFile.isAudioFileType(content)
|| iMessage.getContentType() == IMessage.VOICE) {
if (player.isPlaying()) {
player.pause();
anima.stop();
} else {
new Thread() {
@Override
public void run() {
try {
player.setDataSource(messageContent);
player.prepare();
} catch (Exception e) {
}
player.start();
super.run();
}
}.start();
img.setImageDrawable(anima);
anima.start();
}
} else if (MediaFile.isImageFileType(content)
|| iMessage.getContentType() == IMessage.PICTURE) {
ArrayList<String> list = new ArrayList<String>();
list.add(messageContent);
Intent intent = new Intent(mContext, ImageDialog.class);
intent.putStringArrayListExtra(ImageDialog.IMAGE_ARRAY, list);
intent.putExtra(ImageDialog.IMAGE_POSITION, 0);
mContext.startActivity(intent);
}
}
@Override
public void onPrepared(MediaPlayer mp) {
int time = mp.getDuration() / 1000;
if (iMessage != null) {
iMessage.setVoiceTime(time);
}
voice.setText(time + "s");
voice.setVisibility(View.VISIBLE);
if (iMessage.getVoiceTime() == 0) {
iMessage.setVoiceTime(time);
MessageManager.getInstance(mContext).updataIMessage(iMessage);
}
}
@Override
public void onCompletion(MediaPlayer mp) {
try {
mp.stop();
mp.reset();
anima.stop();
if (iMessage.getIsCome() == 1) {
img.setImageResource(R.drawable.chatfrom_voice_playing);
} else {
img.setImageResource(R.drawable.chatto_voice_playing);
}
} catch (Exception e) {
}
}
}