package com.joyplus; import android.content.Context; import android.net.TrafficStats; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import com.joyplus.JoyplusMediaPlayerActivity.URLTYPE; import com.joyplus.tvhelper.R; public class JoyplusMediaPlayerMiddleControlLoading extends LinearLayout implements JoyplusMediaPlayerInterface{ private Context mContext; private long mStartRX = 0;// private long rxByteslast = 0; public long mLoadingPreparedPercent = -1;// private TextView info; private TextView lasttime; private TextView from; public JoyplusMediaPlayerMiddleControlLoading(Context context) { super(context); // TODO Auto-generated constructor stub mContext = context; } public JoyplusMediaPlayerMiddleControlLoading(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub mContext = context; } protected void onFinishInflate() { info = (TextView) this.findViewById(R.id.MiddleControlLoading_info); lasttime = (TextView) this.findViewById(R.id.MiddleControlLoading_lasttime); from = (TextView) this.findViewById(R.id.MiddleControlLoading_from); StartTrafficStates(); } private void UpdateInfo(int speed,int finished){ if(speed<0)speed = 0; if(finished<-1)finished=0; else if(finished>95)finished = 95; if(finished >= 0)info.setText(mContext.getApplicationContext().getString(R.string.meidaplayer_loading_string,speed,finished)); if(JoyplusMediaPlayerActivity.mInfo.mLastTime>0){ lasttime.setVisibility(View.VISIBLE); // lasttime.setText(mContext.getApplicationContext().getString(R.string.meidaplayer_loading_string_lasttime)+getTimeString(JoyplusMediaPlayerActivity.mInfo.mLastTime)); lasttime.setText(mContext.getApplicationContext().getString(R.string.meidaplayer_loading_string_lasttime, getTimeString(JoyplusMediaPlayerActivity.mInfo.mLastTime))); }else lasttime.setVisibility(View.GONE); if(JoyplusMediaPlayerActivity.mInfo.mFrom != null && !"".equals(JoyplusMediaPlayerActivity.mInfo.mFrom)){ from.setVisibility(View.VISIBLE); from.setText(JoyplusMediaPlayerActivity.mInfo.mFrom); }else from.setVisibility(View.GONE); } private String getTimeString(int time){ if(time<0)time = 0; StringBuffer sb = new StringBuffer(); time/=1000; sb.append(getString(time/(60*60))); sb.append(":"); time%=(60*60); sb.append(getString(time/60)); sb.append(":"); time%=60; sb.append(getString(time)); return sb.toString(); } private String getString(int time){ StringBuffer sb = new StringBuffer(); sb.append(time/10).append(time%10); return sb.toString(); } private Handler mHandler = new Handler(); private void StartTrafficStates(){ mStartRX = TrafficStats.getTotalRxBytes();// ��ȡ�����ٶ� if (mStartRX == TrafficStats.UNSUPPORTED) { info.setText(mContext.getApplicationContext().getString(R.string.meidaplayer_loading_string_loading)); } else { rxByteslast = 0; mLoadingPreparedPercent = 0; mHandler.removeCallbacks(UpdateTrafficStats); mHandler.postDelayed(UpdateTrafficStats, 500); } } private Runnable UpdateTrafficStats = new Runnable(){ long beginTimeMillis, timeTakenMillis, m_bitrate; @Override public void run() { // TODO Auto-generated method stub long rxBytes = TrafficStats.getTotalRxBytes() - mStartRX; timeTakenMillis = System.currentTimeMillis() - beginTimeMillis; beginTimeMillis = System.currentTimeMillis(); if(timeTakenMillis!=0){ m_bitrate = (rxBytes - rxByteslast) / timeTakenMillis; rxByteslast = rxBytes; mLoadingPreparedPercent+=m_bitrate; UpdateInfo((int) m_bitrate,(int)mLoadingPreparedPercent/100); } mHandler.removeCallbacksAndMessages(null); mHandler.postDelayed(UpdateTrafficStats, 500); } }; @Override public boolean JoyplusdispatchMessage(Message msg) { // TODO Auto-generated method stub return false; } @Override public boolean JoyplusonKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub return false; } @Override public void JoyplussetVisible(boolean visible,int layout) { // TODO Auto-generated method stub if(visible){ this.setVisibility(View.VISIBLE); if(JoyplusMediaPlayerActivity.mInfo.mType == URLTYPE.NETWORK){ StartTrafficStates(); UpdateInfo(-1,(int)mLoadingPreparedPercent); } } if(!visible){ mHandler.removeCallbacksAndMessages(null); mLoadingPreparedPercent = 0; } } @Override public int JoyplusgetLayout() { // TODO Auto-generated method stub return JoyplusMediaPlayerMiddleControl.LAYOUT_LOADING; } @Override public boolean JoyplusonKeyLongPress(int keyCode, KeyEvent event) { // TODO Auto-generated method stub return false; } }