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) { } } }