package com.wistron.WiViewer;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import com.tridef3d.hardware.Display3D;
import com.tridef3d.widget.VideoView3D;
import com.wistron.StereoUI.CaptionsResolve;
import com.wistron.StereoUI.FileInfoMsgBox;
import com.wistron.StereoUI.MsgBox;
import com.wistron.StereoUI.ShareMenu;
import com.wistron.StereoUI.SlideButton;
import com.wistron.StereoUI.SlideButton.OnCheckedChangedListener;
import com.wistron.WiCamera.InterSurfaceView;
import com.wistron.WiCamera.WiCameraActivity;
import com.wistron.WiGallery.AsyncFileProvider;
import com.wistron.WiGallery.FavoriteDBAdapter;
import com.wistron.WiGallery.WiGalleryOpenGLRenderer;
import com.wistron.swpc.wicamera3dii.R;
import com.wistron.swpc.wicamera3dii.R.color;
import Utilities.CSStaticData;
import Utilities.FileTypeHelper;
import android.R.integer;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.ColorStateList;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.media.AudioManager;
import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnInfoListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnVideoSizeChangedListener;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.util.Log;
import android.view.GestureDetector.OnGestureListener;
import android.view.GestureDetector;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AbsoluteLayout;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.Gallery;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.VideoView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;
@SuppressWarnings("deprecation")
public class WiVideoViewerActivity extends Activity implements
OnGestureListener
{
final static String TAG = "3D Media Player";
final static int PLAYBACK_STATE_PLAY = 0x01; // 定义播放器状态
final static int PLAYBACK_STATE_PAUSE = 0x02;
final static int PLAYBACK_STATE_STOP = 0x03;
final static int PLAYBACK_STATE_UNKNOWN = 0x04;
final static int CONTROL_HANDLER_APPEAR_CTRLS = 0x10; // 通过handler控制按钮消失隐藏
final static int CONTROL_HANDLER_HIDE_CTRLS = 0x11;
final static int CONTROL_HANDLER_DISPLAY_VIDEO_INFO = 0x12;
final static int CONTROL_HANDLER_HIDE_VIDEO_INFO = 0x13;
final static int CONTROL_HANDLER_PROGRESS_CHANGED = 0x14;
final static int CONTROL_HANDLER_PROGRESS_STOP = 0x15;
final static int CONTROL_HANDLER_RESET_PROGRESS = 0x16;
// final static int CONTROL_HANDLER_APPEAR_CTRLS_SYS = 0x17; // 系统状态栏隐藏
final static int CONTROL_HANDLER_HIDEFRAMESEEKBAR_DELAY = 0x50;
final static int CONTROL_HANDLER_SHOWFRAMESEEKBAR = 0x51;
final static int BROADCAST_HANDLER_ADJUST_VOLUME = 0x20;
public final static int WiVideoViewerActivityID = 0x76114;
private static final long DELAY_HIDE_TIME = 3000; // 按钮隐藏时间
private static final int CTRL_OFFSET = 2; //
private static final int TEXT_SIZE = 22; //
private ArrayList<String> mDeleteList = new ArrayList<String>();
private boolean m_isplay_return = false;
private int m_interrupt_process = 0;
private int m_screen_width = 0;
private int m_screen_height = 0;
private int m_video_width = 0;
private int m_video_height = 0;
public static int mMainListDisablePosition = 3;
private boolean mIsVideoSizeKnown = false;
private boolean mIsVideoReadyToBePlayed = false;
private int mVideoWidth;
private int mVideoHeight;
// 喜好列表
private List<String> mFavoriteInfoList;
private int mFavoriteListCount = 0;
private int m_state_playback = 0x01; // 记录播放器状态
private int m_current_process = 0; // 当前播放进度
private int m_duration_process = 0; // 当前视频长度
private int m_duration_frameseek = 0;
private int m_max_volume = 0;
private VideoInfo m_video_info = null;
private boolean m_control_isshow = true;
private boolean isMute = false;
private boolean isFullScreen = true;
private boolean isFrameSeekbarModeChanged = false;
private VideoService m_media_player = null;
private AudioManager m_audio_manager = null;
// private SurfaceView m_surfaceview = null;
// private SurfaceHolder m_surfaceholder = null;
MediaFilePicker m_videopicker; // 视频文件列表维护器
private FileInputStream m_fin = null; //
private String fileName = null;
// private String videoName=null;
public static Handler m_handler_broadcast = null;
private boolean m_ispause = false;
private boolean m_allow_hide_share = true;
private SlideButton m_bt_3dSwitch;
private Button m_bt_cameraSwitch;
private Button m_bt_more;
private Button m_bt_mute;
private Button m_bt_play;
private Button m_bt_fullScreen;
private SeekBar m_sbr_Normal;
private SeekBar m_sbr_FrameSeekBar;
private RelativeLayout m_relativelayout_frameseekbar;
private TextView m_tv_during_normalseekbar;
private TextView m_tv_during_frameseekbar;
private RelativeLayout m_relativelayout_normalseekbar;
private RelativeLayout m_relativelayout_controlLayout;
private RelativeLayout m_relativelayout_surfaceview;
private ShareMenu mShareMenu;
private MsgBox mMsgBox;
private FileInfoMsgBox mMsgBox_info;
private RelativeLayout m_popupLayout;
private RelativeLayout m_captionLayout;
// 菜单中的资源id
private int[][] mMoreMenuResId = null, mSeekBarModeResId = null,
mLanguageEcodingResId = null, mGalleryMoveToMenuResId = null;
private ListView mMenuListView = null, mSubMenuListView = null;
private ViewerListAdapter mMenuListAdapter = null, mSubListAdapter = null;
private HashMap<Integer, Integer> mSubMenuStateMap;
public static int mListPosition = -1;
public static int mSubListPosition = -1;
private XmlPullParser mTextColorWhite = null;
private XmlPullParser mTextColorGreen = null;
public static ColorStateList COLORSTATELIST_WHITE = null;
public static ColorStateList COLORSTATELIST_GREEN = null;
private Context mContext = null;
private RelativeLayout mMenuLayout = null,// 菜单所在layout
mSubMenuLayout = null;// 子菜单所在layout
private TextView mSubListTitle = null;
private static final int SUBMENU_SEEKBARMODE_START_ID = 0x110;
private static final int SUBMENU_LANGUAGEENCODING_START_ID = 0x120;
private static final int SUBMENU_MOVETO_INTERNAL = 0x00140;
public static boolean mIsVideoViewerList = false;
private GridView gv_base;
private Gallery gv_sub;
private Handler m_VideoFrameHandler;
private boolean isVideoFrameLoadComplete = true;
final static int MSG_SEEK_BASE_READY = 8;
final static int MSG_SEEK_SON_READY = 7;
private LoadVideoFrameTask loadInnerFrametaskImageTask;
private VideoFrameAdapter mFrameAdapter_base;
private VideoFrameAdapter mFrameAdapter_sub;
private boolean m_isLandScape;
private GestureDetector m_gesturedetector;
private RelativeLayout m_MoreLayout;
private RelativeLayout m_relativelayout_frameseekbar_small;
private android.widget.RelativeLayout.LayoutParams m_layoutparams_frameseekbar_small;
int m_layoutparams_frameseekbar_small_off;
int m_init_playmode = 0;
// 字幕解析
private CaptionsResolve mCaptionsResolve = null;
private String mCaptionPath = null;
private String mCharSet = null;
private boolean isBaseFramebarHasShow = false;//标记帧预览底层图片是否已经加载
private boolean m_is3DVideo = false; // 指示当前文件是否为3D视频(其实是标示视频是否会被芯片识别为3D视频)
private int m_seekbar_mode = 0;
private boolean isLaunchedFromInner = true;
private int m_frameseek_tempprogress = 0;
public static MsgBox msgBox_disappearautoBox = null;
// public boolean is3Dmode=false;//判断当前屏幕是否开启了3D模式
private RelativeLayout m_relativelayout_content;// 用于放置VideoView
private VideoView m_videoview2D;
private VideoView3D m_videoview3D;
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
requestWindowFeature(Window.FEATURE_NO_TITLE);
Window win = getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
winParams.buttonBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF;
win.setAttributes(winParams);
TDStaticData.SCREEN_WIDTH = getWindowManager().getDefaultDisplay()
.getWidth();
TDStaticData.SCREEN_HEIGHT = getWindowManager().getDefaultDisplay()
.getHeight();
TDStaticData.SCREEN_WIDTH_ORG = TDStaticData.SCREEN_WIDTH;
TDStaticData.SCREEN_HEIGHT_ORG = TDStaticData.SCREEN_HEIGHT;
m_screen_width = TDStaticData.SCREEN_WIDTH;
m_screen_height = TDStaticData.SCREEN_HEIGHT;
m_screen_width = 800;
m_screen_height = 480;
if (m_screen_width > m_screen_height)
{
m_isLandScape = true;
} else
{
m_isLandScape = false;
}
setContentView(R.layout.wivideovieweractivity_main);
// 初始化按钮控件
initializeControls();
initFrameSeekbar();
// 添加监听器
initializeListeners();
m_gesturedetector = new GestureDetector(this);
initData();
initListViewListenner();
lookupFavoriteInfo();
}
private void initFrameSeekbar()
{
// TODO Auto-generated method stub
m_relativelayout_frameseekbar_small = (RelativeLayout) findViewById(R.id.frameseekbar_small_relativelayout);
m_relativelayout_frameseekbar_small.setVisibility(View.INVISIBLE);
m_layoutparams_frameseekbar_small = (android.widget.RelativeLayout.LayoutParams) m_relativelayout_frameseekbar_small
.getLayoutParams();
m_layoutparams_frameseekbar_small_off = m_layoutparams_frameseekbar_small.leftMargin;
mFrameAdapter_sub = new VideoFrameAdapter(getBaseContext(), 31, false);
gv_sub.setAdapter(mFrameAdapter_sub);
gv_sub.setUnselectedAlpha(100);
gv_sub.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3)
{
//
// if (!isVideoFrameLoadComplete)
// {
// loadInnerFrametaskImageTask.cancel(true);
// }
// LoadVideoFrameTask.Callback callback = new
// LoadVideoFrameTask.Callback()
// {
// @Override
// public void onComplete(long time)
// {
// Log.e(TAG, "???曄??冽" + time);
// isVideoFrameLoadComplete = true;
// }
// };
// loadInnerFrametaskImageTask = new LoadVideoFrameTask(
// WiVideoViewerActivity.this, callback,
// m_videopicker.getCurrentFileName(),
// m_VideoFrameHandler);
// loadInnerFrametaskImageTask.execute(
// m_duration_process, 7,
// (int) (rate * m_duration_process), 1,10);
// isVideoFrameLoadComplete = false;
if (arg2 < 10)
{
if (arg2 - 1 >= 0)
{
if (mFrameAdapter_sub.mBitmaps[arg2 - 1] == null)
{
LoadVideoFrameTask.Callback callback = new LoadVideoFrameTask.Callback()
{
@Override
public void onComplete(long time)
{
if (CSStaticData.DEBUG)
Log.e(TAG, "生成图片耗时" + time);
}
};
LoadVideoFrameTask tempTask = new LoadVideoFrameTask(
WiVideoViewerActivity.this, callback,
m_videopicker.getCurrentFileName(),
m_VideoFrameHandler);
tempTask.execute(m_duration_process, 7,
m_duration_frameseek, false, arg2 - 1, 5);
}
}
} else if (arg2 > 10)
{
if (arg2 + 5 <= 30)
{
if (mFrameAdapter_sub.mBitmaps[arg2 + 5] == null)
{
LoadVideoFrameTask.Callback callback = new LoadVideoFrameTask.Callback()
{
@Override
public void onComplete(long time)
{
if (CSStaticData.DEBUG)
Log.e(TAG, "生成图片耗时" + time);
}
};
LoadVideoFrameTask tempTask = new LoadVideoFrameTask(
WiVideoViewerActivity.this, callback,
m_videopicker.getCurrentFileName(),
m_VideoFrameHandler);
tempTask.execute(m_duration_process, 7,
m_duration_frameseek, false, arg2 + 5);
}
}
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0)
{
// TODO Auto-generated method stub
}
});
if (m_isLandScape)
{
mFrameAdapter_base = new VideoFrameAdapter(getBaseContext(), 8,
true);
} else
{
mFrameAdapter_base = new VideoFrameAdapter(getBaseContext(), 5,
true);
}
gv_base.setAdapter(mFrameAdapter_base);
gv_sub.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
if (CSStaticData.DEBUG)
Log.e(TAG, "setOnItemClickListener");
if (m_duration_process != 0)
{
try
{
m_media_player
.seekTo((int) (m_duration_frameseek + (position - 10) * 1000));
} catch (Exception e)
{
if (CSStaticData.DEBUG)
Log.e(TAG, "fail to seekto");
}
}
}
});
gv_base.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
}
});
m_VideoFrameHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
switch (msg.arg1)
{
case MSG_SEEK_BASE_READY:
Bitmap bitmap1 = (Bitmap) msg.obj;
if (CSStaticData.DEBUG)
Log.e("changkuan", "" + bitmap1.getWidth() + "*"
+ bitmap1.getHeight());
mFrameAdapter_base.mBitmaps[msg.arg2] = (Bitmap) msg.obj;
mFrameAdapter_base.notifyDataSetChanged();
break;
case MSG_SEEK_SON_READY:
Bitmap bitmap2 = (Bitmap) msg.obj;
if (CSStaticData.DEBUG)
Log.e("changkuan", "" + bitmap2.getWidth() + "*"
+ bitmap2.getHeight());
mFrameAdapter_sub.mBitmaps[msg.arg2] = (Bitmap) msg.obj;
mFrameAdapter_sub.notifyDataSetChanged();
break;
}
}
};
}
private MediaPlayer.OnPreparedListener mOnPreparedListener = new OnPreparedListener()
{
@Override
public void onPrepared(MediaPlayer mp)
{
// TODO Auto-generated method stub
if (m_state_playback == PLAYBACK_STATE_PLAY)
{
if (mp != null)
{
m_ispause = false;
}
}
if (m_state_playback == PLAYBACK_STATE_PAUSE)
{
if (mp != null)
{
m_ispause = true;
}
}
m_state_playback = PLAYBACK_STATE_PLAY;
updateDuration();
m_video_width = mp.getVideoWidth();
m_video_height = mp.getVideoHeight();
TsetScreenSize();
startVideoPlayback();
if(m_ispause||m_isplay_return)
{
pauseMedia(true);
}
// if (m_ispause)
// {
// if (!m_isplay_return)
// {
// pauseMedia(true);
// } else
// {
// m_isplay_return = false;
// }
// }
}
};
private MediaPlayer.OnCompletionListener mOnCompletionListener = new OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp)
{
// TODO Auto-generated method stub
m_state_playback = PLAYBACK_STATE_STOP;
stopMedia();
resetDelayonFling();
if (m_init_playmode == 0)
{
finish();
} else
{
if (m_videopicker.getCurrentFileIndex() != m_videopicker
.getFileCounts() - 1)
{
m_videopicker.getNextBitmap();
resetPlayer(true, false);
if (CSStaticData.DEBUG)
Toast.makeText(
WiVideoViewerActivity.this,
"文件列表信息"
+ (m_videopicker.getCurrentFileIndex() + 1)
+ "/" + m_videopicker.getFileCounts(),
1000).show();
} else
{
finish();
}
}
}
};
private MediaPlayer.OnErrorListener mOnErrorListener = new OnErrorListener()
{
@Override
public boolean onError(MediaPlayer mp, int what, int extra)
{
// TODO Auto-generated method stub
Log.v(TAG, "onError called");
mp.reset();
resetPlayer(false, true);
resetDelayonFling();
mMsgBox = new MsgBox(mContext);
mMsgBox.setMessage(R.string.video_warn_error);
mMsgBox.setBackgound(R.drawable.main_menu_window_portrait);
mMsgBox.setPositiveButton(R.string.video_warn_confirm,
new OnClickListener()
{
@Override
public void onClick(View v)
{
mMsgBox.hide();
m_popupLayout.removeView(mMsgBox);
// finish();
}
});
mMsgBox.addToLayout(m_popupLayout);
mMsgBox.show();
return true;
}
};
/**
* 重置播放器
*
* @param refreshAll
* 是否保留播放进度,全屏,静音的设置
*/
private void initVideoView(boolean refreshAll)
{
// 只有在2D视频在3D模式下采用3D视频控件
if (!m_is3DVideo)
{
// 使用3D控件
if (m_videoview2D != null)
{
m_relativelayout_content.removeView(m_videoview2D);
m_videoview2D = null;
}
if (m_videoview3D == null)
{
m_videoview3D = new Video3DService(WiVideoViewerActivity.this);
m_relativelayout_content.addView(m_videoview3D);
}
m_media_player = (VideoService) m_videoview3D;
} else
{
if (m_videoview3D != null)
{
m_relativelayout_content.removeView(m_videoview3D);
m_videoview3D = null;
}
if (m_videoview2D == null)
{
m_videoview2D = new Video2DService(WiVideoViewerActivity.this);
m_relativelayout_content.addView(m_videoview2D);
}
m_media_player = (VideoService) m_videoview2D;
}
initializeMediaPlayer(refreshAll);
}
@Override
protected void onStart()
{
// TODO Auto-generated method stub
Intent intent = WiVideoViewerActivity.this.getIntent();
String intentPath = intent.getDataString();
System.out.println("没转intentpath"+intentPath);
if (intentPath != null)
{
// 从外部启动
isLaunchedFromInner = false;
intentPath = Uri.decode(intentPath);
m_videopicker = new MediaFilePicker(intentPath);
System.out.println("intentpath"+intentPath);
//m_videopicker.getCurrentFileName();
//m_videopicker
m_init_playmode = 0;
} else
{
// 从内部启动
isLaunchedFromInner = true;
String playmode = intent.getStringExtra("cmd");
if (playmode != null && playmode.equals("sildeshow"))
{
m_init_playmode = 1;
} else if (playmode != null && playmode.equals("play"))
{
m_init_playmode = 0;
}
// 获取当前文件路径
String fileName = intent.getStringExtra("filePath");
List<String> fileList = WiVideoViewerActivity.this.getIntent()
.getStringArrayListExtra("fileList");
if (fileName != null && fileList != null && fileList.size() > 0)
{
m_videopicker = new MediaFilePicker(fileList, fileName);
update3DSwitchButton();
} else
{
// 传入文件路径有误
if (CSStaticData.DEBUG)
Toast.makeText(WiVideoViewerActivity.this, "传入文件路径有误",
1000).show();
finish();
// try
// {
// m_videopicker=new
// MediaFilePicker(TDStaticData.VIEWMODE_VIDEO_VIEW, null);
// } catch (IOException e)
// {
// e.printStackTrace();
// }
}
}
initStatusData();
// 开始字幕解析
startCaptionResolve();
super.onStart();
}
public void update3DSwitchButton()
{
String mString = null;
mString = m_videopicker.getCurrentFileName();
if (mString != null)
{
m_is3DVideo = FileTypeHelper.isStereoVideoFileWithFilepath(
WiVideoViewerActivity.this.getContentResolver(), mString);
}
m_bt_3dSwitch.setChecked(m_is3DVideo);
}
@Override
protected void onResume()
{
// TODO Auto-generated method stub
m_is3DVideo = FileTypeHelper.isStereoVideoFileWithFilepath(
WiVideoViewerActivity.this.getContentResolver(),
m_videopicker.getCurrentFileName());
initVideoView(false);
m_media_player.resume();
if (isFrameSeekbarModeChanged)
{
m_seekbar_mode = 1;
m_relativelayout_normalseekbar.setVisibility(View.INVISIBLE);
m_relativelayout_frameseekbar.setVisibility(View.VISIBLE);
if (!isBaseFramebarHasShow)
{
// 加载帧预览
LoadVideoFrameTask.Callback callback = new LoadVideoFrameTask.Callback()
{
@Override
public void onComplete(long time)
{
if (CSStaticData.DEBUG)
Log.e(TAG, "生成图片耗时" + time);
}
};
LoadVideoFrameTask task = new LoadVideoFrameTask(
WiVideoViewerActivity.this, callback,
m_videopicker.getCurrentFileName(), m_VideoFrameHandler);
if (m_isLandScape)
{
task.execute(m_duration_process, 8, 0, true, 0);
} else
{
task.execute(m_duration_process, 5, 0, true, 0);
}
isBaseFramebarHasShow = true;
}
if (isLoadSubFrames(m_duration_process))
{
resetSubImageToGivenTime(m_interrupt_process);
} else
{
m_relativelayout_frameseekbar_small
.setVisibility(View.INVISIBLE);
}
isFrameSeekbarModeChanged = false;
}
// 显示按钮
m_handle_control.removeMessages(CONTROL_HANDLER_HIDE_CTRLS);
m_handle_control.sendEmptyMessage(CONTROL_HANDLER_APPEAR_CTRLS);
boolean bool = (mMsgBox != null && mMsgBox.isShown())
|| (mMsgBox_info != null && mMsgBox_info.isShown());
if (!bool)
m_handle_control.sendEmptyMessageDelayed(
CONTROL_HANDLER_HIDE_CTRLS, DELAY_HIDE_TIME);
setControlEnable();
boolean initstate = CSStaticData.g_is_3D_mode || m_is3DVideo;
// CSStaticData.g_is_3D_mode=CSStaticData.g_is_3D_mode||is3DVideo;
// if(CSStaticData.g_is_3D_mode){
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// }else{
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
// }
m_bt_3dSwitch.setChecked(initstate);
setScreenDimension(initstate);
if (CSStaticData.DEBUG)
Toast.makeText(
WiVideoViewerActivity.this,
"通过读取tag判定文件3D=" + m_is3DVideo + "g_is_3D_mode="
+ CSStaticData.g_is_3D_mode, 3000).show();
mListPosition = -1;
if (mMenuListAdapter != null)
{
mMenuListAdapter.notifyDataSetChanged();
}
super.onResume();
}
public void setScreenDimension(boolean is3D)
{
String[] cmdTurnOn3D =
{ "/system/bin/sh", "-c",
"echo 1 > /sys/devices/platform/mipi_masterimage.513/enable_3d_barrier" };
String[] cmdTurnOff3D =
{ "/system/bin/sh", "-c",
"echo 0 > /sys/devices/platform/mipi_masterimage.513/enable_3d_barrier" };
// CSStaticData.g_is_3D_mode = is3D;
try
{
if (is3D)
{
if (CSStaticData.DEBUG)
{
Log.w(TAG, "[setScreenDimension]设置屏幕为3D");
}
Runtime.getRuntime().exec(cmdTurnOn3D);
} else
{
if (CSStaticData.DEBUG)
{
Log.w(TAG, "[setScreenDimension]设置屏幕为2D");
}
Runtime.getRuntime().exec(cmdTurnOff3D);
}
} catch (IOException exp)
{
if (CSStaticData.DEBUG)
{
Log.w(TAG, "[setScreenDimension]设置屏幕IOException");
}
} catch (SecurityException exp)
{
if (CSStaticData.DEBUG)
{
Log.w(TAG, "[setScreenDimension]设置屏幕SecurityException");
}
} catch (Exception exp)
{
if (CSStaticData.DEBUG)
{
Log.w(TAG, "[setScreenDimension]设置屏幕Exception");
}
}
}
@Override
protected void onPause()
{
super.onPause();
// 暂停时保存播放进度
if (m_state_playback == PLAYBACK_STATE_PLAY
|| m_state_playback == PLAYBACK_STATE_PAUSE)
{
if (m_media_player != null)
{
try
{
m_interrupt_process = m_media_player.getCurrentPosition();
Log.e(TAG, "[onPause]---------------->暂停时保存的进度为"
+ m_interrupt_process);
m_media_player.pause();
} catch (Exception e)
{
if (CSStaticData.DEBUG)
Log.e(TAG, "unnable to getCurrentPosition ");
}
}
}
releaseMediaPlayer();
if(mMenuLayout.getVisibility()==View.VISIBLE)
{
mMenuLayout.setVisibility(View.GONE);
if(m_isplay_return==true)
{
m_isplay_return=false;
m_state_playback=PLAYBACK_STATE_PLAY;
}
}
m_bt_more.setBackgroundResource(R.drawable.gallery_more_btn_selector);
doCleanUp();
if (CSStaticData.g_is_3D_mode || m_is3DVideo)
{
setScreenDimension(false);
}
}
@Override
protected void onStop()
{
// TODO Auto-generated method stub
super.onStop();
if (m_media_player != null)
{
try
{
m_media_player.stopPlayback();
} catch (Exception e)
{
// TODO: handle exception
}
}
}
@Override
protected void onDestroy()
{
releaseMediaPlayer();
doCleanUp();
if (m_audio_manager != null)
m_audio_manager
.unregisterMediaButtonEventReceiver(new ComponentName(
"com.wistron.wigallery3d",
"com.wistron.wigallery3d.MediaButtonBroadcastReceiver"));
m_handle_control.removeMessages(CONTROL_HANDLER_PROGRESS_CHANGED);
super.onDestroy();
}
/**
* 初始化播放器,
*
* @param refreshAll
* ,为true时销毁播放器播放状态
*/
private void initializeMediaPlayer(boolean refreshAll)
{
doCleanUp();
if (refreshAll)
{
//取消帧预览
isBaseFramebarHasShow=false;
m_seekbar_mode = 0;
mSubMenuStateMap.put(SUBMENU_SEEKBARMODE_START_ID, 0);
m_relativelayout_normalseekbar.setVisibility(View.VISIBLE);
m_relativelayout_frameseekbar.setVisibility(View.INVISIBLE);
m_state_playback = PLAYBACK_STATE_PLAY;
isFullScreen = true;
m_bt_fullScreen
.setBackgroundResource(R.drawable.gallery_screen_narrow_btn_selector);
m_interrupt_process = 0;
isMute = false;
}
try
{
if (m_audio_manager == null)
{
m_audio_manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
}
m_media_player.setOnPreparedListener(mOnPreparedListener);
m_media_player.setOnCompletionListener(mOnCompletionListener);
m_media_player.setOnErrorListener(mOnErrorListener);
if (m_videopicker.getCurrentFileName() != null)
m_media_player.setVideoPath(m_videopicker.getCurrentFileName());
if (CSStaticData.g_is_3D_mode)
{
m_media_player.force3DMode(Display3D.VERTICAL_INTERLACED);
} else
{
m_media_player.force3DMode(Display3D.MODE_2D);
}
setMute(isMute);
} catch (Exception e)
{
resetPlayer(false, true);
resetDelayonFling();
mMsgBox = new MsgBox(mContext);
mMsgBox.setMessage(R.string.video_warn_failinit);
mMsgBox.setBackgound(R.drawable.main_menu_window_portrait);
mMsgBox.setPositiveButton(R.string.video_warn_confirm,
new OnClickListener()
{
@Override
public void onClick(View v)
{
// m_media_player.setDisplay(m_surfaceholder);
mMsgBox.hide();
m_popupLayout.removeView(mMsgBox);
}
});
mMsgBox.addToLayout(m_popupLayout);
mMsgBox.show();
}
}
private void startVideoPlayback()
{
if (CSStaticData.DEBUG)
Log.e(TAG, "当前播放进度为[m_interrupt_process]-------------->"
+ m_interrupt_process);
if (m_interrupt_process > 0)
{
m_media_player.seekTo(m_interrupt_process);
}
updateProcess();
m_media_player.start();
m_bt_play.setBackgroundResource(R.drawable.gallery_pause_btn_selector);
}
/**
* 初始化控件
*/
private void initializeControls()
{
// TODO Auto-generated method stub
m_relativelayout_controlLayout = (RelativeLayout) findViewById(R.id.control_relativelayout);
m_relativelayout_normalseekbar = (RelativeLayout) findViewById(R.id.normalseekbar_relativelayout);
m_relativelayout_surfaceview = (RelativeLayout) findViewById(R.id.surfaceview_relativelayout);
m_popupLayout = (RelativeLayout) findViewById(R.id.popup_relativelayout);
m_captionLayout = (RelativeLayout) findViewById(R.id.captionlayout);
m_relativelayout_content = (RelativeLayout) findViewById(R.id.surfaceview_content);
m_MoreLayout = (RelativeLayout) findViewById(R.id.MenuLayout);//全屏布局
m_bt_3dSwitch = (SlideButton) findViewById(R.id.toggleButtonDimension);
m_bt_cameraSwitch = (Button) findViewById(R.id.button2);
gv_base = (GridView) findViewById(R.id.Gridview02);
gv_sub = (Gallery) findViewById(R.id.Gridview01);
m_sbr_FrameSeekBar = (SeekBar) findViewById(R.id.progress_frameseekbar);
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.scrolling_bar_normal);
BitmapDrawable mBitmapDrawable = new BitmapDrawable(mBitmap);
m_sbr_FrameSeekBar.setThumb(mBitmapDrawable);
m_sbr_FrameSeekBar.setMax(100);
m_bt_more = (Button) findViewById(R.id.button1);
m_bt_play = (Button) findViewById(R.id.button4);
m_bt_mute = (Button) findViewById(R.id.button5);
m_bt_fullScreen = (Button) findViewById(R.id.button6);
m_sbr_Normal = (SeekBar) findViewById(R.id.progress);
m_sbr_Normal.setMax(100);
m_tv_during_normalseekbar = (TextView) findViewById(R.id.video_during);
m_tv_during_frameseekbar = (TextView) findViewById(R.id.video_during_frameseekbar);
m_relativelayout_frameseekbar = (RelativeLayout) findViewById(R.id.frameseekbar_relativelayout);
m_relativelayout_frameseekbar.setVisibility(View.GONE);
msgBox_disappearautoBox = new MsgBox(WiVideoViewerActivity.this);
// msgBox_disappearautoBox.setMessage("...");
// msgBox_disappearautoBox.hideDelay(2000);
msgBox_disappearautoBox.setModelStatus(false);
msgBox_disappearautoBox.addToLayout(m_popupLayout);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev)
{
if (mMsgBox != null && mMsgBox.isShown())
{
return mMsgBox.dispatchTouchEvent(ev);
}
if (mMsgBox_info != null && mMsgBox_info.isShown())
{
if (!mMsgBox_info.dispatchTouchEvent(ev))
{
if (m_isplay_return)
{
contiuneMedia();
m_isplay_return = false;
}
hideButtonsWithDelay();
}
return true;
}
return super.dispatchTouchEvent(ev);
}
public void updateTimeIndicator(boolean isreset)
{
int myduring = m_duration_process;
int time = m_current_process;
if (isreset)
{
myduring = 0;
time = 0;
}
String currentProgress = getStringFromTime(time);
String totalDuring = getStringFromTime((int) Math.ceil(myduring));
String myString = currentProgress + "/" + totalDuring;
SpannableString ss = new SpannableString(myString);
ss.setSpan(new ForegroundColorSpan(0xff88ee00), 0,
currentProgress.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ss.setSpan(new ForegroundColorSpan(Color.WHITE),
currentProgress.length(), currentProgress.length()
+ totalDuring.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
m_tv_during_normalseekbar.setText(ss);
m_tv_during_frameseekbar.setText(ss);
}
public String getStringFromTime(int time)
{
time /= 1000;
int minute;
int second;
minute = (int) (time) / 60;
second = (int) (time) % 60;
if (minute >= 100)
{
return String.format("%03d:%02d", minute, second);
} else
{
return String.format("%02d:%02d", minute, second);
}
}
/**
* 根据播放进度修改帧预览子进度条的位置
*
* @param progress
* @return
*/
public int getOffsetMargin(int progress)
{
if (progress < 32)
{
return 0;
} else if (progress < 68)
{
return 240 * (progress - 32) / 36;
} else
{
return 240;
}
}
/**
* 添加监听器
*/
private void initializeListeners()
{
if (CSStaticData.DEBUG)
Log.e("initializeListeners", "ok");
m_relativelayout_surfaceview
.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener()
{
int times=0;
public void onSystemUiVisibilityChange(int visibility)
{
Log.e(TAG, "[onSystemUiVisibilityChange]-------"+visibility);
if (visibility == View.SYSTEM_UI_FLAG_VISIBLE)
{
if(times%3==0)
{
resetOnSystemUiShow();
}
times++;
}
}
});
m_relativelayout_surfaceview.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
if (m_state_playback == PLAYBACK_STATE_PLAY)
{
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
Log.e(TAG, "onTouchEvent--------surfaceview");
resetDelay();
}
}
m_gesturedetector.onTouchEvent(event);
return true;
}
});
m_bt_3dSwitch.setOnChangedListener(new OnCheckedChangedListener()
{
@Override
public void OnChecked(boolean isChecked)
{
int isLandscape = getRequestedOrientation();
// if(isChecked){
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// if(isLandscape == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
// ||
// isLandscape ==
// ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT
// ||
// isLandscape ==
// ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT){
// return;
// }
// }else{
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
// }
CSStaticData.g_is_3D_mode = isChecked;
setScreenDimension(isChecked);
if(m_media_player!=null)
{
if (CSStaticData.g_is_3D_mode)
{
m_media_player.force3DMode(Display3D.VERTICAL_INTERLACED);
} else
{
m_media_player.force3DMode(Display3D.MODE_2D);
}
}
}
});
m_bt_cameraSwitch.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
Intent intent = new Intent(WiVideoViewerActivity.this,
com.wistron.WiCamera.WiCameraActivity.class);
intent.putExtra("camera_cmd", "call_from_videoview");
startActivity(intent);
// finish();
}
});
m_sbr_FrameSeekBar
.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
{
// boolean control=false;
@Override
public void onStopTrackingTouch(SeekBar seekBar)
{
if (m_isplay_return)
{
m_isplay_return = false;
contiuneMedia();
m_handle_control.sendEmptyMessageDelayed(
CONTROL_HANDLER_HIDEFRAMESEEKBAR_DELAY,
DELAY_HIDE_TIME);
}
if (isLoadSubFrames(m_duration_process))
{
resetSubImageToGivenTime(m_frameseek_tempprogress);
} else
{
m_relativelayout_frameseekbar_small
.setVisibility(View.INVISIBLE);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar)
{
if (m_state_playback == PLAYBACK_STATE_PLAY)
{
m_isplay_return = true;
pauseMedia(false);
}
m_frameseek_tempprogress = 0;
}
@Override
public void onProgressChanged(SeekBar seekBar,
int progress, boolean fromUser)
{
double rate = 0.0;
if (fromUser)
{
if (m_media_player != null)
{
if (progress < 99)
{
rate = (float) progress / 100f;
updateTimeIndicator(false);
} else
{
rate = 0.99;
updateTimeIndicator(false);
}
try
{
m_media_player
.seekTo((int) (rate * m_duration_process));
if (CSStaticData.DEBUG)
Log.e(TAG,
"[onProgressChanged]------->当前播放进度为"
+ (int) (rate * m_duration_process));
} catch (Exception e)
{
Log.e(TAG, "fail to seek");
}
m_frameseek_tempprogress = (int) (rate * m_duration_process);
}
}
if (m_isLandScape)
{
m_layoutparams_frameseekbar_small.setMargins(
m_layoutparams_frameseekbar_small_off
+ getOffsetMargin(progress), 0, 0,
0);
m_relativelayout_frameseekbar_small
.setLayoutParams(m_layoutparams_frameseekbar_small);
}
}
});
m_sbr_Normal.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
{
@Override
public void onStopTrackingTouch(SeekBar seekBar)
{
if (m_isplay_return)
{
m_isplay_return = false;
contiuneMedia();
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar)
{
if (m_state_playback == PLAYBACK_STATE_PLAY)
{
m_isplay_return = true;
pauseMedia(false);
}
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser)
{
double rate = 0.0;
if (fromUser)
{
if (CSStaticData.DEBUG)
Log.e("onProgressChanged", "ok_______________________");
if (m_media_player != null)
{
if (progress < 99)
{
rate = (float) progress / 100f;
updateTimeIndicator(false);
} else
{
rate = 0.99;
updateTimeIndicator(false);
}
try
{
m_media_player
.seekTo((int) (rate * m_duration_process));
} catch (Exception e)
{
Log.e(TAG, "fail to seekto");
}
}
// }
}
}
});
m_bt_play.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
Tplay();
}
});
m_MoreLayout.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
// TODO Auto-generated method stub
if (mMenuLayout.getVisibility() == View.VISIBLE)
{
mMenuLayout.setVisibility(View.INVISIBLE);
if (mShareMenu != null && mShareMenu.isShown())
{
mShareMenu.hideAndRemove();
// m_popupLayout.removeView(mShareMenu);
if (m_isplay_return)
{
contiuneMedia();
m_isplay_return = false;
}
}
if(m_isplay_return)
{
m_isplay_return=false;
contiuneMedia();
}
hideButtonsWithDelay();
m_bt_more
.setBackgroundResource(R.drawable.gallery_more_btn_selector);
return true;
}
return false;
}
});
m_bt_more.setOnTouchListener(mButtonOntouchListener);
m_bt_3dSwitch.setOnTouchListener(mButtonOntouchListener);
m_bt_cameraSwitch.setOnTouchListener(mButtonOntouchListener);
m_bt_fullScreen.setOnTouchListener(mButtonOntouchListener);
m_bt_mute.setOnTouchListener(mButtonOntouchListener);
m_bt_play.setOnTouchListener(mButtonOntouchListener);
m_bt_more.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if (mMenuLayout.getVisibility() == View.VISIBLE)
{
mMenuLayout.setVisibility(View.INVISIBLE);
hideButtonsWithDelay();
m_bt_more
.setBackgroundResource(R.drawable.gallery_more_btn_selector);
if(m_isplay_return)
{
m_isplay_return=false;
contiuneMedia();
}
return;
}
if (m_state_playback == PLAYBACK_STATE_PLAY)
{
m_isplay_return = true;
pauseMedia(true);
}
mListPosition = -1;
updateMenuInfo(m_videopicker.getCurrentFileName());
mMenuListView.setAdapter(mMenuListAdapter);
mSubMenuLayout.setVisibility(View.INVISIBLE);
if (mShareMenu != null && mShareMenu.isShown())
{
mShareMenu.hideAndRemove();
// m_popupLayout.removeView(mShareMenu);
if (m_isplay_return)
{
contiuneMedia();
m_isplay_return = false;
}
}
m_bt_more
.setBackgroundResource(R.drawable.gallery_more_btn_click);
mMenuLayout.setVisibility(View.VISIBLE);
showButtonsWithoutDelay();
}
});
m_bt_fullScreen.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
isFullScreen = !isFullScreen;
TsetScreenSize();
}
});
m_bt_mute.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
isMute = !isMute;
setMute(isMute);
}
});
}
public void setMute(boolean isMute)
{
if (m_audio_manager != null)
{
m_audio_manager.setStreamMute(AudioManager.STREAM_MUSIC, isMute);
if (isMute)
{
m_bt_mute
.setBackgroundResource(R.drawable.gallery_mute_btn_selector);
} else
{
m_bt_mute
.setBackgroundResource(R.drawable.gallery_mute_off_btn_selector);
}
}
}
public void setControlEnable()
{
// m_csbtn_play_pause.setEnable(true);
// m_csbtn_set.setEnable(true);
// m_csbtn_share.setEnable(true);
// m_csbtn_delete.setEnable(true);
}
/**
* 添加广播(音量)
*/
private void initializeBroadcastReceiver()
{
m_audio_manager.registerMediaButtonEventReceiver(new ComponentName(
"com.wistron.wigallery3d",
"com.wistron.wigallery3d.MediaButtonBroadcastReceiver"));
Handler m_handler_broadcast = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// TODO Auto-generated method stub
switch (msg.what)
{
case BROADCAST_HANDLER_ADJUST_VOLUME:
break;
}
super.handleMessage(msg);
}
};
}
private void resetOnSystemUiShow()
{
m_handle_control.removeMessages(CONTROL_HANDLER_HIDE_CTRLS);
m_handle_control.sendEmptyMessage(CONTROL_HANDLER_APPEAR_CTRLS);
m_handle_control.sendEmptyMessageDelayed(CONTROL_HANDLER_HIDE_CTRLS,
DELAY_HIDE_TIME);
}
private void resetDelay()
{
// TODO Auto-generated method stub
if (m_control_isshow)
{
if (CSStaticData.DEBUG)
Log.e(TAG, "hide+++++++++++++++");
m_handle_control.removeMessages(CONTROL_HANDLER_APPEAR_CTRLS);
m_handle_control.removeMessages(CONTROL_HANDLER_HIDE_CTRLS);
m_handle_control.sendEmptyMessage(CONTROL_HANDLER_HIDE_CTRLS);
} else
{
if (CSStaticData.DEBUG)
Log.e(TAG, "show++++++++++");
m_handle_control.removeMessages(CONTROL_HANDLER_HIDE_CTRLS);
m_handle_control.sendEmptyMessage(CONTROL_HANDLER_APPEAR_CTRLS);
m_handle_control.sendEmptyMessageDelayed(
CONTROL_HANDLER_HIDE_CTRLS, DELAY_HIDE_TIME);
}
}
private void showButtonsWithoutDelay()
{
m_handle_control.removeMessages(CONTROL_HANDLER_HIDE_CTRLS);
m_handle_control.sendEmptyMessage(CONTROL_HANDLER_APPEAR_CTRLS);
}
private void hideButtonsWithDelay()
{
if (m_state_playback == PLAYBACK_STATE_PLAY)
{
m_handle_control.removeMessages(CONTROL_HANDLER_HIDE_CTRLS);
m_handle_control.sendEmptyMessage(CONTROL_HANDLER_APPEAR_CTRLS);
m_handle_control.sendEmptyMessageDelayed(
CONTROL_HANDLER_HIDE_CTRLS, DELAY_HIDE_TIME);
}
}
public OnTouchListener mButtonOntouchListener = new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
int action = event.getAction();
switch (action)
{
case MotionEvent.ACTION_DOWN:
Log.e(TAG, "MotionEvent.ACTION_DOWN");
showButtonsWithoutDelay();
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
hideButtonsWithDelay();
Log.e(TAG, "MotionEvent.ACTION_UP");
break;
default:
break;
}
return false;
}
};
private void resetDelayonFling()
{
// TODO Auto-generated method stub
m_handle_control.removeMessages(CONTROL_HANDLER_HIDE_CTRLS);
m_handle_control.sendEmptyMessage(CONTROL_HANDLER_APPEAR_CTRLS);
m_handle_control.sendEmptyMessageDelayed(CONTROL_HANDLER_HIDE_CTRLS,
DELAY_HIDE_TIME);
}
/**
* 更新视频播放长度信息
*/
private void updateDuration()
{
try
{
double duration = m_media_player.getDuration();
m_current_process = 0;
m_duration_process = (int) duration;
updateTimeIndicator(false);
} catch (Exception e)
{
// TODO: handle exception
Log.e(TAG, "updateDuration");
}
}
/**
* 更新播放进度,控制UI
*/
private void updateProcess()
{
m_handle_control.sendEmptyMessage(CONTROL_HANDLER_PROGRESS_CHANGED);
}
/**
* ??慦?
*/
public void pauseMedia(boolean bool)
{
try
{
if (m_media_player != null)
{
if (m_media_player.isPlaying())
{
Log.w(TAG, "[pauseMedia]??慦?嚗挽蝵格?敹蛹PAUSE");
m_media_player.pause();
m_state_playback = PLAYBACK_STATE_PAUSE;
if (bool)
{
m_bt_play
.setBackgroundResource(R.drawable.gallery_play_btn_selector);
}
m_handle_control.removeMessages(CONTROL_HANDLER_HIDE_CTRLS);
m_handle_control
.sendEmptyMessage(CONTROL_HANDLER_APPEAR_CTRLS);
m_handle_control
.removeMessages(CONTROL_HANDLER_HIDEFRAMESEEKBAR_DELAY);
m_handle_control
.sendEmptyMessage(CONTROL_HANDLER_SHOWFRAMESEEKBAR);
}
}
} catch (Exception e)
{
// TODO: handle exception
if (CSStaticData.DEBUG)
Log.e(TAG, "fail to pauseMedia");
}
}
/**
* 继续播放
*/
public void contiuneMediaWithoutHideButtonsInDelay()
{
try
{
if (m_media_player != null)
{
m_media_player.start();
m_bt_play
.setBackgroundResource(R.drawable.gallery_pause_btn_selector);
m_state_playback = PLAYBACK_STATE_PLAY;
}
} catch (Exception e)
{
// TODO: handle exception
}
}
public void contiuneMedia()
{
try
{
if (m_media_player != null)
{
Log.w(TAG, "[contiuneMedia]蝏剜慦?嚗挽蝵格?敹蛹PLAY");
m_media_player.start();
m_bt_play
.setBackgroundResource(R.drawable.gallery_pause_btn_selector);
m_state_playback = PLAYBACK_STATE_PLAY;
m_handle_control
.sendEmptyMessageDelayed(
CONTROL_HANDLER_HIDEFRAMESEEKBAR_DELAY,
DELAY_HIDE_TIME);
m_handle_control.sendEmptyMessageDelayed(
CONTROL_HANDLER_HIDE_CTRLS, DELAY_HIDE_TIME);
}
} catch (Exception e)
{
// TODO: handle exception
}
}
private void releaseMediaPlayer()
{
if (m_media_player != null)
{
m_media_player.stopPlayback();
m_media_player = null;
}
}
/**
* 停止播放
*/
public void stopMedia()
{
m_handle_control.removeMessages(CONTROL_HANDLER_PROGRESS_CHANGED);
m_handle_control.sendEmptyMessage(CONTROL_HANDLER_PROGRESS_STOP);
m_handle_control.sendEmptyMessage(CONTROL_HANDLER_RESET_PROGRESS);
if (m_media_player != null)
{
if (m_state_playback != PLAYBACK_STATE_UNKNOWN)
{
m_media_player.pause();
} else
{
// resetPlayer(false);
}
m_media_player.stopPlayback();
m_state_playback = PLAYBACK_STATE_STOP;
}
}
/**
* 重置播放器
*
* @param refreshAll
* ,是否保存播放进度等信息
* @param iserro
* ,在发生错误时使用
*/
public void resetPlayer(boolean refreshAll, boolean iserro)
{
m_handle_control.removeMessages(CONTROL_HANDLER_PROGRESS_CHANGED);
m_handle_control.sendEmptyMessage(CONTROL_HANDLER_PROGRESS_STOP);
updateTimeIndicator(true);
update3DSwitchButton();
m_sbr_Normal.setProgress(0);
m_sbr_FrameSeekBar.setProgress(0);
isBaseFramebarHasShow = false;
try
{
if (m_media_player.isPlaying())
{
m_media_player.pause();
}
m_media_player.stopPlayback();
} catch (Exception e)
{
if (CSStaticData.DEBUG)
Log.e(TAG, "fail to reset player");
}
if (iserro)
{
m_bt_play.setEnabled(false);
m_bt_mute.setEnabled(false);
} else
{
initVideoView(refreshAll);
m_bt_play.setEnabled(true);
m_bt_mute.setEnabled(true);
}
}
@Override
public void finish()
{
Intent intent = new Intent();
intent.putStringArrayListExtra("callbackfilelist",
(ArrayList<String>) m_videopicker.getfilepathList());
if (mDeleteList.size() > 0)
{
intent.putStringArrayListExtra("deletelist", mDeleteList);
}
WiVideoViewerActivity.this.setResult(RESULT_OK, intent);
super.finish();
}
@Override
public void onBackPressed()
{
if (CSStaticData.DEBUG)
Log.e(TAG, "onBackPressed");
// TODO Auto-generated method stub
setControlEnable();
// 对话框是否显示
if (mMsgBox != null && mMsgBox.isShown())
{
mMsgBox.hide();
m_popupLayout.removeView(mMsgBox);
if (m_isplay_return)
{
contiuneMedia();
m_isplay_return = false;
}
hideButtonsWithDelay();
if(m_videopicker.getCurrentFileIndex() == -1)
{
//文件为空,自动退出
super.onBackPressed();
}
return;
}
if (mMsgBox_info != null && mMsgBox_info.isShown())
{
mMsgBox_info.hideAndRemove();
if (m_isplay_return)
{
contiuneMedia();
m_isplay_return = false;
}
hideButtonsWithDelay();
return;
}
if (mShareMenu != null && mShareMenu.isShown())
{
mShareMenu.hideAndRemove();
//m_popupLayout.removeView(mShareMenu);
// if (m_isplay_return)
// {
// contiuneMediaWithoutHideButtonsInDelay();
// m_isplay_return = false;
// }
mListPosition = -1;
mMenuListAdapter.notifyDataSetChanged();
return;
}
if (mSubMenuLayout.getVisibility() == View.VISIBLE)
{
mSubMenuLayout.setVisibility(View.INVISIBLE);
mListPosition = -1;
mMenuListAdapter.notifyDataSetChanged();
return;
}
if (mMenuLayout.getVisibility() == View.VISIBLE)
{
mMenuLayout.setVisibility(View.INVISIBLE);
if (m_isplay_return)
{
contiuneMedia();
m_isplay_return = false;
}
m_bt_more
.setBackgroundResource(R.drawable.gallery_more_btn_selector);
return;
}
super.onBackPressed();
}
/*
* @Override public void onBackPressed() { // TODO Auto-generated method
* stub m_csbtn_play.setEnable(true); m_csbtn_share.setEnable(true);
* m_csbtn_delete.setEnable(true); m_csbtn_set.setEnable(true); if
* (TDStaticData.g_msgbox != null) { TDStaticData.HideMsgBox(m_framelayout);
* return; } if (m_imageview.mode == 1) { stopsolidplay(); return; }
*
* super.onBackPressed(); }
*/
// handler????
public void setCtlable(boolean mbool)
{
// **********************???
if (mbool)
{
m_relativelayout_controlLayout.setVisibility(View.VISIBLE);
} else
{
m_relativelayout_controlLayout.setVisibility(View.GONE);
}
enterLightsOutMode(!mbool);
// if(mbool)
// {
// m_csbtn_back.setVisibility(View.VISIBLE);
// m_csbtn_home.setVisibility(View.VISIBLE);
// m_csbtn_set.setVisibility(View.VISIBLE);
// m_csbtn_delete.setVisibility(View.VISIBLE);
// m_csbtn_share.setVisibility(View.VISIBLE);
// m_csbtn_play_pause.setVisibility(View.VISIBLE);
// m_cstex_bottom.setVisibility(View.VISIBLE);
//
// m_cstxv_process.setVisibility(View.VISIBLE);
// m_cstxv_duration.setVisibility(View.VISIBLE);
// m_cssbr_process.setVisibility(View.VISIBLE);
// m_cstex_seekbarbottom.setVisibility(View.VISIBLE);
// m_cstex_videoname.setVisibility(View.VISIBLE);
// }
// else
// {
// m_csbtn_back.setVisibility(View.INVISIBLE);
// m_csbtn_home.setVisibility(View.INVISIBLE);
// m_csbtn_set.setVisibility(View.INVISIBLE);
// m_csbtn_delete.setVisibility(View.INVISIBLE);
// m_csbtn_share.setVisibility(View.INVISIBLE);
// m_csbtn_play_pause.setVisibility(View.INVISIBLE);
// m_cstex_bottom.setVisibility(View.INVISIBLE);
// m_cstxv_process.setVisibility(View.INVISIBLE);
// m_cstxv_duration.setVisibility(View.INVISIBLE);
// m_cssbr_process.setVisibility(View.INVISIBLE);
// m_cstex_seekbarbottom.setVisibility(View.INVISIBLE);
// m_cstex_videoname.setVisibility(View.INVISIBLE);
//
// }
// m_csviewgroup.invalidate();
}
public void enterLightsOutMode(boolean bool)
{
WindowManager.LayoutParams params = WiVideoViewerActivity.this
.getWindow().getAttributes();
int temp=params.systemUiVisibility;
if (bool)
{
if(temp!=View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)
{
params.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
WiVideoViewerActivity.this.getWindow().setAttributes(params);
}
} else
{
if(temp!=View.SYSTEM_UI_FLAG_VISIBLE)
{
params.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE;
WiVideoViewerActivity.this.getWindow().setAttributes(params);
}
}
}
// public void enterLightsOutMode(boolean bool)
// {
// WindowManager.LayoutParams params = WiVideoViewerActivity.this
// .getWindow().getAttributes();
// int temp=params.systemUiVisibility;
// if (bool)
// {
// params.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
// } else
// {
// params.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE;
// }
// WiVideoViewerActivity.this.getWindow().setAttributes(params);
// }
public void Tsetting()
{
if (m_state_playback == PLAYBACK_STATE_PLAY)
{
m_isplay_return = true;
pauseMedia(true);
}
SpannableString[] string = null;
VideoProvider m_videoProvider = new VideoProvider(
WiVideoViewerActivity.this);
String filepath=null;
if (isLaunchedFromInner) {
//从WiGallery启动
filepath=m_videopicker.getCurrentFileName();
}else {
//从sdcard启动
String temp=m_videopicker.getCurrentFileName();
int index = temp.indexOf("/sdcard/");
String mCaptionPath_temp = temp.substring(index,temp.length());
filepath = "/mnt/"+mCaptionPath_temp;
}
VideoInfo m_videoinfo = m_videoProvider.getVideoInfo(filepath);
mMsgBox_info = new FileInfoMsgBox(mContext);
if (m_videoinfo != null)
{
string = m_videoinfo.showInfoList();
mMsgBox_info.setMessage(string);
} else
{
mMsgBox_info.setMessage("Fail to get info!");
}
mMsgBox_info.setClickBlankHide(true);
mMsgBox_info.setTitle("Details");
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
400, LayoutParams.WRAP_CONTENT);
layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
layoutParams.setMargins(0, 80, 0, 20);
mMsgBox_info.setLayoutParams(layoutParams);
mMsgBox_info.addToLayout(m_popupLayout);
}
public void Tdeletefile()
{
if (m_state_playback == PLAYBACK_STATE_PLAY)
{
m_isplay_return = true;
pauseMedia(true);
}
mMsgBox = new MsgBox(mContext);
mMsgBox.setMessage(getResources().getText(R.string.gallery_delete_text));
mMsgBox.setBackgound(R.drawable.main_menu_window_portrait);
mMsgBox.setPositiveButton(
getResources().getText(R.string.gallery_delete_confirm),
new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
if (CSStaticData.DEBUG)
Log.e("AsyncFileHelper", "ok");
setControlEnable();
AsyncFileProvider asyncer = null;
if (WiGalleryOpenGLRenderer.mAsyncFileProvider == null)
{
asyncer = new AsyncFileProvider(mContext);
} else
{
asyncer = WiGalleryOpenGLRenderer.mAsyncFileProvider;
}
List<String> temp = new ArrayList<String>();
temp.add(m_videopicker.getCurrentFileName());
asyncer.deteleFiles(temp, false, true, WiVideoViewerActivityID);
if (WiCameraActivity.m_main_handle != null)
{
Message deletemesg = new Message();
if (FileTypeHelper.isVideoFile(m_videopicker
.getCurrentFileName()))
{
deletemesg.what= InterSurfaceView.CAMERA_VIDEOLIST_UPDATE;
} else
{
deletemesg.what = InterSurfaceView.CAMERA_PICLIST_UPDATE;
}
deletemesg.obj = m_videopicker.getCurrentFileName();
WiCameraActivity.m_main_handle
.sendMessage(deletemesg);
}
// if (WiGalleryOpenGLRenderer.mAsyncFileProvider !=
// null
// && WiGalleryOpenGLRenderer.mAsyncFileProvider !=
// null)
// {
// List<String> temp = new ArrayList<String>();
// temp.add(m_videopicker.getCurrentFileName());
// WiGalleryOpenGLRenderer.mAsyncFileProvider
// .deteleFiles(temp, false);
// }
mDeleteList.add(m_videopicker.getCurrentFileName());
m_videopicker.deleteFile();
mMsgBox.hide();
m_popupLayout.removeView(mMsgBox);
if (m_init_playmode == 0)
{
finish();
return;
}
if (m_videopicker.getCurrentFileIndex() == -1)
{
// {
// mMsgBox = new MsgBox(mContext);
// mMsgBox.setMessage(getResources().getText(
// R.string.gallery_delete_warn));
// mMsgBox.setBackgound(R.drawable.main_menu_window_portrait);
// mMsgBox.addToLayout(m_popupLayout);
// mMsgBox.show();
// m_bt_more.setClickable(false);
// }
finish();
} else
{
resetPlayer(true, false);
if (CSStaticData.DEBUG)
Toast.makeText(
WiVideoViewerActivity.this,
"当前文件列表信息"
+ (m_videopicker
.getCurrentFileIndex() + 1)
+ "/"
+ m_videopicker.getFileCounts(),
1000).show();
}
hideButtonsWithDelay();
}
});
mMsgBox.setNegativeButton(
getResources().getText(R.string.gallery_delete_cancel),
new OnClickListener()
{
@Override
public void onClick(View v)
{
mMsgBox.hide();
m_popupLayout.removeView(mMsgBox);
if (m_isplay_return)
{
contiuneMedia();
m_isplay_return = false;
}
setControlEnable();
hideButtonsWithDelay();
}
});
mMsgBox.addToLayout(m_popupLayout);
mMsgBox.show();
}
private void TsetScreenSize_()
{
android.view.ViewGroup.LayoutParams mLayoutParams = null;
if (!m_is3DVideo && CSStaticData.g_is_3D_mode)
{
mLayoutParams = m_videoview3D.getLayoutParams();
} else
{
mLayoutParams = m_videoview2D.getLayoutParams();
}
if (!isFullScreen)
{
if (m_video_width * m_video_height != 0)
{
mLayoutParams.width = m_video_width;
mLayoutParams.height = m_video_height;
m_bt_fullScreen
.setBackgroundResource(R.drawable.gallery_screen_wide_btn_selector);
}
} else
{
if (m_video_width * m_video_height != 0)
{
float rate_src = (float) m_video_width / (float) m_video_height;
float rate_screen = (float) m_screen_width
/ (float) m_screen_height;
if (rate_screen > rate_src)
{
mLayoutParams.width = (int) (m_screen_height * rate_src);
mLayoutParams.height = m_screen_height;
} else
{
mLayoutParams.width = m_screen_width;
mLayoutParams.height = (int) (m_screen_width / rate_src);
}
}
m_bt_fullScreen
.setBackgroundResource(R.drawable.gallery_screen_narrow_btn_selector);
}
if (!m_is3DVideo && CSStaticData.g_is_3D_mode)
{
m_videoview3D.setLayoutParams(mLayoutParams);
} else
{
m_videoview2D.setLayoutParams(mLayoutParams);
}
}
/**
* 根据当前播放器模式修改尺寸
*/
private void TsetScreenSize()
{
android.view.ViewGroup.LayoutParams mLayoutParams = m_relativelayout_content
.getLayoutParams();
int fullscreen_width = 0;
int fullscreen_height = 0;
if (m_video_width * m_video_height != 0)
{
float rate_src = (float) m_video_width / (float) m_video_height;
float rate_screen = (float) m_screen_width
/ (float) m_screen_height;
if (rate_screen > rate_src)
{
fullscreen_width = (int) (m_screen_height * rate_src);
fullscreen_height = m_screen_height;
} else
{
fullscreen_width = m_screen_width;
fullscreen_height = (int) (m_screen_width / rate_src);
}
if (isFullScreen)
{
mLayoutParams.width = fullscreen_width;
mLayoutParams.height = fullscreen_height;
m_bt_fullScreen
.setBackgroundResource(R.drawable.gallery_screen_narrow_btn_selector);
m_relativelayout_content.setLayoutParams(mLayoutParams);
} else
{
if (fullscreen_width >= m_video_width
&& fullscreen_height >= m_video_height)
{
mLayoutParams.width = m_video_width;
mLayoutParams.height = m_video_height;
m_bt_fullScreen
.setBackgroundResource(R.drawable.gallery_screen_wide_btn_selector);
m_relativelayout_content.setLayoutParams(mLayoutParams);
}
}
}
//
//
// if (!isFullScreen)
// {
// if(m_video_width*m_video_height!=0)
// {
// mLayoutParams.width = m_video_width;
// mLayoutParams.height = m_video_height;
// m_bt_fullScreen
// .setBackgroundResource(R.drawable.gallery_screen_wide_btn_selector);
// }
// } else
// {
// if (m_video_width * m_video_height != 0)
// {
// float rate_src = (float) m_video_width
// / (float) m_video_height;
// float rate_screen = (float) m_screen_width
// / (float) m_screen_height;
// if (rate_screen > rate_src)
// {
// mLayoutParams.width = (int) (m_screen_height * rate_src);
// mLayoutParams.height = m_screen_height;
// } else
// {
// mLayoutParams.width = m_screen_width;
// mLayoutParams.height = (int) (m_screen_width / rate_src);
// }
// }
// m_bt_fullScreen
// .setBackgroundResource(R.drawable.gallery_screen_narrow_btn_selector);
// }
// m_relativelayout_content.setLayoutParams(mLayoutParams);
// //m_relativelayout_content.requestLayout();
}
public void Tshare()
{
if (m_state_playback == PLAYBACK_STATE_PLAY)
{
m_isplay_return = true;
pauseMedia(true);
}
// mShareMenu = new ShareMenu(WiVideoViewerActivity.this,
// CSStaticData.g_screen_width - 300, 150);
mShareMenu = new ShareMenu(WiVideoViewerActivity.this,
0, 0);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(300, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
layoutParams.setMargins(0, 60, 0, 0);
mShareMenu.setShareLayoutParams(layoutParams);
mShareMenu.setAnchor(ShareMenu.ANCHOR_TOP_RIGHT);
String m_filePath_menuString;
if(isLaunchedFromInner)
{
m_filePath_menuString = "file:/"
+ m_videopicker.getCurrentFileName();
}
else
{
m_filePath_menuString = m_videopicker.getCurrentFileName();
}
ArrayList<String> m_ArrayList = new ArrayList<String>();
m_ArrayList.add(m_filePath_menuString);
mShareMenu.setVideoPath(m_ArrayList);
mShareMenu.addToLayout(mMenuLayout);
mShareMenu.show();
}
public void Tplay()
{
m_isplay_return = false;
if (m_state_playback == PLAYBACK_STATE_PLAY)
{
pauseMedia(true);
if (m_seekbar_mode == 1)
{
if (isLoadSubFrames(m_duration_process))
{
resetSubImageToGivenTime(m_current_process);
} else
{
m_relativelayout_frameseekbar_small
.setVisibility(View.INVISIBLE);
}
}
} else if (m_state_playback == PLAYBACK_STATE_PAUSE)
{
contiuneMedia();
}
}
private void initData()
{
mTextColorWhite = getResources().getXml(
R.drawable.textcolor_selector_white);
mTextColorGreen = getResources().getXml(
R.drawable.textcolor_selector_green);
try
{
COLORSTATELIST_WHITE = ColorStateList.createFromXml(getResources(),
mTextColorWhite);
COLORSTATELIST_GREEN = ColorStateList.createFromXml(getResources(),
mTextColorGreen);
} catch (XmlPullParserException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
mMoreMenuResId = new int[][]
{
{ R.drawable.gallery_more_share,
R.string.gallery_menu_item_share },
{ R.drawable.gallery_more_delete,
R.string.gallery_menu_item_delete },
// { R.drawable.gallery_more_move,
// R.string.gallery_menu_item_move },
{ R.drawable.gallery_more_set_as_favorite,
R.string.gallery_menu_item_setfavorite },
{ R.drawable.gallery_more_remove_favorite,
R.string.gallery_menu_item_removefavorite },
{ R.drawable.gallery_more_file_info,
R.string.gallery_menu_item_fileinfo },
{ R.drawable.gallery_seekbar_settings,
R.string.videoPalyer_menu_item_seekBarMode },
{ R.drawable.gallery_language_encording,
R.string.videoPalyer_menu_item_languageEncoding },
{ 0, R.string.gallery_menu_item_2Dto3D } };
mSeekBarModeResId = new int[][]
{
{ 0, R.string.videoPalyer_menu_item_normalSeekBar },
{ 0, R.string.videoPalyer_menu_item_frameSeekBar } };
mLanguageEcodingResId = new int[][]
{
{ 0, R.string.videoPalyer_menu_item_english_unitedKingdom },
{ 0, R.string.videoPalyer_menu_item_english_unitedStates },
{ 0, R.string.videoPalyer_menu_item_french },
{ 0, R.string.videoPalyer_menu_item_deutsch },
{ 0, R.string.videoPalyer_menu_item_spanish },
{ 0, R.string.videoPalyer_menu_item_italiano },
{ 0, R.string.videoPalyer_menu_item_simpleChinese },
{ 0, R.string.videoPalyer_menu_item_traditionalChinese }, };
// m_charset_string1 = {"UTF-8", "GBK",
// "GB2312","BIG5","BIG5_HKSCS","ISO-8859-1",
// "ISO-8859-2","ISO-8859-6","ISO-8859-4","ISO-8859-5","Cyrillic(KOI8-R)","ISO-8859-7","ISO-8859-8",
// "EUC-JP", "EUC-KR", "ISO-8859-9" };
mGalleryMoveToMenuResId = new int[][]
{
{ 0, R.string.gallery_menu_item_internal },
{ 0, R.string.gallery_menu_item_external }, };
mSubMenuStateMap = new HashMap<Integer, Integer>();
mSubMenuStateMap.put(SUBMENU_MOVETO_INTERNAL, -1);
mSubMenuStateMap.put(SUBMENU_SEEKBARMODE_START_ID, 0);
mSubMenuStateMap.put(SUBMENU_LANGUAGEENCODING_START_ID, -1);
mContext = WiVideoViewerActivity.this;
mMenuLayout = (RelativeLayout) findViewById(R.id.moreMenuLayout);
mSubMenuLayout = (RelativeLayout) findViewById(R.id.subMenuLayout);
mMenuListView = (ListView) findViewById(R.id.moreListView);
mSubMenuListView = (ListView) findViewById(R.id.subListView);
mSubListTitle = (TextView) findViewById(R.id.subListTitle);
mMenuListAdapter = new ViewerListAdapter(mContext, mMoreMenuResId);
mSubListAdapter = new ViewerListAdapter(mContext, null);
mMenuListAdapter
.setMenuType(ViewerListAdapter.MENU_TYPE_MAIN_MENU_VIDEOVIEWER);
mSubListAdapter
.setMenuType(ViewerListAdapter.MENU_TYPE_SUB_MENU_VIDEOVIEWER);
mSubListAdapter.setMap(mSubMenuStateMap);
mMenuListView.setAdapter(mMenuListAdapter);
mMenuLayout.setVisibility(View.INVISIBLE);// 设置为不可见
mSubMenuLayout.setVisibility(View.INVISIBLE);// 设置为不可见
// 初始化字幕解析
mCaptionsResolve = new CaptionsResolve(WiVideoViewerActivity.this);
mCaptionsResolve.addToLayout(m_captionLayout);
}
public void lookupFavoriteInfo()
{
FavoriteDBAdapter dbAdapter = new FavoriteDBAdapter(mContext);
mFavoriteInfoList = dbAdapter.getFavoriteFiles();
if (mFavoriteInfoList != null && mFavoriteInfoList.size() > 0)
{
mFavoriteListCount = mFavoriteInfoList.size();
} else
{
mFavoriteListCount = 0;
}
dbAdapter.dispose();
dbAdapter = null;
}
public void setFavoriteInfo(String fileString, boolean bool)
{
// 设置喜好
if (fileString != null)
{
{//LiuWei
// FavoriteDBAdapter dbAdapter = new FavoriteDBAdapter(
// WiVideoViewerActivity.this);
// List<String> selectedList = new ArrayList<String>();
// selectedList.add(fileString);
// if (bool)
// {
// dbAdapter.setAsFavorite(selectedList);
// } else
// {
// dbAdapter.removeFromFavorite(selectedList);
// }
// if (CSStaticData.DEBUG)
// Log.e(TAG, "[setFavoriteInfo]-->" + bool);
// dbAdapter.dispose();
// dbAdapter = null;
}
{//Cocoonshu
AsyncFileProvider asyncFileProvider = null;
if(WiGalleryOpenGLRenderer.mAsyncFileProvider == null){
asyncFileProvider = new AsyncFileProvider(WiVideoViewerActivity.this);
}else{
asyncFileProvider = WiGalleryOpenGLRenderer.mAsyncFileProvider;
}
List<String> selectedList = new ArrayList<String>();
selectedList.add(fileString);
if(bool){
asyncFileProvider.setFavoriteToDB(selectedList, WiVideoViewerActivityID);
}else{
asyncFileProvider.removeFavoriteFromDB(selectedList, WiVideoViewerActivityID);
}
asyncFileProvider = null;
}
}
}
public void updateMenuInfo(String filepath)
{
lookupFavoriteInfo();
boolean isFavorite = false;
boolean isInner = false;
for (int i = 0; i < mFavoriteListCount; i++)
{
if (mFavoriteInfoList.get(i).equals(filepath))
{
isFavorite = true;
}
}
if (filepath != null)
{
isInner = FileTypeHelper.isInternalFile(filepath);
} else
{
isInner = false;
}
if (isInner)
{
mSubMenuStateMap.put(SUBMENU_MOVETO_INTERNAL, 0);
} else
{
mSubMenuStateMap.put(SUBMENU_MOVETO_INTERNAL, 1);
}
if (isFavorite)
{
mMainListDisablePosition = 2;
} else
{
mMainListDisablePosition = 3;
}
}
private void initListViewListenner()
{
mMenuListView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3)
{
// TODO Auto-generated method stub
mListPosition = arg2;
int count = arg0.getChildCount();
for (int i = 0; i < count; i++)
{
if (((TextView) arg0.getChildAt(i).findViewById(
R.id.videoPlayerMenuText)).getCurrentTextColor() != Color.GRAY)
{
((TextView) arg0.getChildAt(i).findViewById(
R.id.videoPlayerMenuText))
.setTextColor(COLORSTATELIST_WHITE);
}
}
((TextView) arg1.findViewById(R.id.videoPlayerMenuText))
.setTextColor(COLORSTATELIST_GREEN);
switch (arg2)
{
case 0:
mSubMenuLayout.setVisibility(View.INVISIBLE);
if (mShareMenu != null && mShareMenu.isShown())
{
mShareMenu.hideAndRemove();
((TextView) arg1.findViewById(R.id.videoPlayerMenuText))
.setTextColor(COLORSTATELIST_WHITE);
return;
}
Tshare();
break;
case 1:
Tdeletefile();
mMenuLayout.setVisibility(View.INVISIBLE);
m_bt_more
.setBackgroundResource(R.drawable.gallery_more_btn_selector);
break;
// case 2:
// if (mSubMenuLayout.getVisibility() == View.VISIBLE &&
// mSubListTitle.getText() ==
// getResources().getText(R.string.gallery_menu_item_move)) {
// mSubMenuLayout.setVisibility(View.INVISIBLE);
// ((TextView)
// arg1.findViewById(R.id.videoPlayerMenuText)).setTextColor(COLORSTATELIST_WHITE);
// return;
// }
// mSubListAdapter.setItemStartId(SUBMENU_MOVETO_INTERNAL);
// mSubListAdapter.setResId(mGalleryMoveToMenuResId);
// mSubListTitle.setText(R.string.gallery_menu_item_move);
// mSubMenuLayout.setVisibility(View.VISIBLE);
//
//
// break;
case 2:
mMenuLayout.setVisibility(View.INVISIBLE);
if (m_isplay_return)
{
contiuneMedia();
m_isplay_return = false;
}
m_bt_more
.setBackgroundResource(R.drawable.gallery_more_btn_selector);
mMainListDisablePosition = 3;
setFavoriteInfo(m_videopicker.getCurrentFileName(), true);
String temp = m_videopicker.getCurFileName();
msgBox_disappearautoBox.updateMessage(temp
+ " has been set as favorite .");
msgBox_disappearautoBox.show();
msgBox_disappearautoBox.hideDelay(2000);
hideButtonsWithDelay();
break;
case 3:
mMenuLayout.setVisibility(View.INVISIBLE);
if (m_isplay_return)
{
contiuneMedia();
m_isplay_return = false;
}
m_bt_more
.setBackgroundResource(R.drawable.gallery_more_btn_selector);
mMainListDisablePosition = 2;
setFavoriteInfo(m_videopicker.getCurrentFileName(), false);
String temp1 = m_videopicker.getCurFileName();
msgBox_disappearautoBox
.updateMessage("Favorite tag has been removed.");
msgBox_disappearautoBox.show();
msgBox_disappearautoBox.hideDelay(2000);
hideButtonsWithDelay();
break;
case 4:
mMenuLayout.setVisibility(View.INVISIBLE);
m_bt_more
.setBackgroundResource(R.drawable.gallery_more_btn_selector);
Tsetting();
break;
case 5:
if (mSubMenuLayout.getVisibility() == View.VISIBLE
&& mSubListTitle.getText() == getResources()
.getText(
R.string.videoPalyer_menu_item_seekBarMode))
{
mSubMenuLayout.setVisibility(View.INVISIBLE);
((TextView) arg1.findViewById(R.id.videoPlayerMenuText))
.setTextColor(COLORSTATELIST_WHITE);
return;
}
mSubListAdapter
.setItemStartId(SUBMENU_SEEKBARMODE_START_ID);
mSubListAdapter.setResId(mSeekBarModeResId);
mSubListTitle.setText(getResources().getText(
R.string.videoPalyer_menu_item_seekBarMode));
mSubMenuLayout.setVisibility(View.VISIBLE);
break;
case 6:
if (mSubMenuLayout.getVisibility() == View.VISIBLE
&& mSubListTitle.getText() == getResources()
.getText(
R.string.videoPalyer_menu_item_languageEncoding))
{
mSubMenuLayout.setVisibility(View.INVISIBLE);
((TextView) arg1.findViewById(R.id.videoPlayerMenuText))
.setTextColor(COLORSTATELIST_WHITE);
return;
}
mSubListAdapter
.setItemStartId(SUBMENU_LANGUAGEENCODING_START_ID);
mSubListAdapter.setResId(mLanguageEcodingResId);
mSubListTitle.setText(getResources().getText(
R.string.videoPalyer_menu_item_languageEncoding));
mSubMenuLayout.setVisibility(View.VISIBLE);
break;
case 7:
mMenuLayout.setVisibility(View.INVISIBLE);
if (m_isplay_return)
{
contiuneMedia();
m_isplay_return = false;
}
m_bt_more
.setBackgroundResource(R.drawable.gallery_more_btn_selector);
hideButtonsWithDelay();
}
if (arg2 != 0)
{
if (mShareMenu != null && mShareMenu.isShown())
{
mShareMenu.hideAndRemove();
//m_popupLayout.removeView(mShareMenu);
}
}
if (arg2 == 0 || arg2 == 1 || arg2 == 3 || arg2 == 4)
{
return;
}
mSubMenuListView.setAdapter(mSubListAdapter);
}
});
mSubMenuListView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3)
{
// TODO Auto-generated method stub
WiImageViewerActivity.mSubListPosition = arg2;
if(CSStaticData.DEBUG)
Log.e(TAG, "[onItemClick] arg2"+arg2);
switch (arg1.getId())
{
// 进度条样式
case SUBMENU_SEEKBARMODE_START_ID:
m_seekbar_mode = 0;
mSubMenuStateMap.put(SUBMENU_SEEKBARMODE_START_ID, arg2);
m_relativelayout_normalseekbar.setVisibility(View.VISIBLE);
m_relativelayout_frameseekbar.setVisibility(View.INVISIBLE);
break;
case SUBMENU_SEEKBARMODE_START_ID + 1:
m_seekbar_mode = 1;
mSubMenuStateMap.put(SUBMENU_SEEKBARMODE_START_ID, arg2);
m_relativelayout_normalseekbar
.setVisibility(View.INVISIBLE);
m_relativelayout_frameseekbar.setVisibility(View.VISIBLE);
if (!isBaseFramebarHasShow)
{
// 加载图片
mFrameAdapter_base.resetBitmap();
LoadVideoFrameTask.Callback callback = new LoadVideoFrameTask.Callback()
{
@Override
public void onComplete(long time)
{
if (CSStaticData.DEBUG)
Log.e(TAG, "生成图片用时" + time);
}
};
LoadVideoFrameTask task = new LoadVideoFrameTask(
WiVideoViewerActivity.this, callback,
m_videopicker.getCurrentFileName(),
m_VideoFrameHandler);
if (m_isLandScape)
{
task.execute(m_duration_process, 8, 0, true, 0);
} else
{
task.execute(m_duration_process, 5, 0, true, 0);
}
isBaseFramebarHasShow = true;
}
if (isLoadSubFrames(m_duration_process))
{
resetSubImageToGivenTime(m_current_process);
} else
{
m_relativelayout_frameseekbar_small
.setVisibility(View.INVISIBLE);
}
break;
case SUBMENU_LANGUAGEENCODING_START_ID:
mSubMenuStateMap.put(SUBMENU_LANGUAGEENCODING_START_ID,
arg2);
// English (United Kingdom)
mCharSet = "ISO-8859-1";
break;
case SUBMENU_LANGUAGEENCODING_START_ID + 1:
mSubMenuStateMap.put(SUBMENU_LANGUAGEENCODING_START_ID,
arg2);
// /English (United States)
mCharSet = "ISO-8859-1";
break;
case SUBMENU_LANGUAGEENCODING_START_ID + 2:
// French
mSubMenuStateMap.put(SUBMENU_LANGUAGEENCODING_START_ID,
arg2);
mCharSet = "ISO-8859-1";
break;
case SUBMENU_LANGUAGEENCODING_START_ID + 3:
// Deutsch
mSubMenuStateMap.put(SUBMENU_LANGUAGEENCODING_START_ID,
arg2);
mCharSet = "ISO-8859-2";
break;
case SUBMENU_LANGUAGEENCODING_START_ID + 4:
// Spanish
mSubMenuStateMap.put(SUBMENU_LANGUAGEENCODING_START_ID,
arg2);
mCharSet = "ISO-8859-1";
break;
case SUBMENU_LANGUAGEENCODING_START_ID + 5:
// Italiano
mSubMenuStateMap.put(SUBMENU_LANGUAGEENCODING_START_ID,
arg2);
mCharSet = "ISO-8859-1";
break;
case SUBMENU_LANGUAGEENCODING_START_ID + 6:
// Simple Chinese gb18030
mCharSet = "gbk";
mSubMenuStateMap.put(SUBMENU_LANGUAGEENCODING_START_ID,
arg2);
break;
case SUBMENU_LANGUAGEENCODING_START_ID + 7:
// traditionalChinese BIG5
mCharSet = "BIG5";
mSubMenuStateMap.put(SUBMENU_LANGUAGEENCODING_START_ID,
arg2);
break;
// case SUBMENU_LANGUAGEENCODING_START_ID + 10:
// break;
// 移动文件
case SUBMENU_MOVETO_INTERNAL:
mSubMenuStateMap.put(SUBMENU_MOVETO_INTERNAL, arg2);
break;
case SUBMENU_MOVETO_INTERNAL + 1:
mSubMenuStateMap.put(SUBMENU_MOVETO_INTERNAL, arg2);
break;
}
hideButtonsWithDelay();
mSubMenuLayout.setVisibility(View.INVISIBLE);
if (m_isplay_return)
{
contiuneMedia();
m_isplay_return = false;
}
mMenuLayout.setVisibility(View.INVISIBLE);
m_bt_more
.setBackgroundResource(R.drawable.gallery_more_btn_selector);
if (mCharSet == null)
{
return;
}
mCaptionsResolve.setCharset(mCharSet);
startCaptionResolve();
if (CSStaticData.DEBUG)
{
Log.v(TAG, "mCaptionPath:" + mCaptionPath + "fileName:"
+ fileName);
}
}
});
}
public boolean isLoadSubFrames(int during)
{
if (during >= 10000)
{
return true;
} else
{
return false;
}
}
public void resetSubImageToGivenTime(int startTime)
{
if (CSStaticData.DEBUG)
Log.e(TAG, "[resetSubImageToGivenTime]");
m_duration_frameseek = startTime;
mFrameAdapter_sub.resetBitmap();
gv_sub.setSelection(10);
if (!isVideoFrameLoadComplete)
{
loadInnerFrametaskImageTask.cancel(true);
}
LoadVideoFrameTask.Callback callback2 = new LoadVideoFrameTask.Callback()
{
@Override
public void onComplete(long time)
{
if (CSStaticData.DEBUG)
Log.e(TAG, "生成图片用时" + time);
isVideoFrameLoadComplete = true;
}
};
loadInnerFrametaskImageTask = new LoadVideoFrameTask(
WiVideoViewerActivity.this, callback2,
m_videopicker.getCurrentFileName(), m_VideoFrameHandler);
loadInnerFrametaskImageTask.execute(m_duration_process, 7,
m_duration_frameseek, false, 9);
isVideoFrameLoadComplete = false;
}
/**
* 去掉文件扩展名
*
* @param filename
* @return
*/
public static String trimExtension(String filename)
{
if (filename != null && filename.length() > 0)
{
int i = filename.lastIndexOf(".");
if (i > -1 && i < filename.length())
{
return filename.substring(0, i);
}
}
return filename;
}
private void startCaptionResolve()
{
if (m_videopicker == null || mCaptionsResolve == null)
{
if (CSStaticData.DEBUG)
Log.e(TAG, "停止字幕解析");
return;
}
// String fileName = m_videopicker.getCurFileName();
// String videoName = trimExtension(fileName);
// mCaptionPath = CSStaticData.TMP_EXT_DIR + videoName;
// System.out.println("视频名:"+fileName);
// System.out.println("字幕路径"+mCaptionPath);
// mCaptionsResolve.readFile(mCaptionPath);
if (isLaunchedFromInner) {
//从WiGallery启动
mCaptionPath = trimExtension(m_videopicker.getCurrentFileName());
mCaptionsResolve.readFile(mCaptionPath);
}else {
//从sdcard启动
try
{
mCaptionPath = trimExtension(m_videopicker.getCurrentFileName());
int index = mCaptionPath.indexOf("/sdcard/");
String mCaptionPath_temp = mCaptionPath.substring(index,mCaptionPath.length());
String mCaptionPath_format = "/mnt/"+mCaptionPath_temp;
// String mCaptionPath1 = replace(mCaptionPath, "file://", "");
mCaptionsResolve.readFile(mCaptionPath_format);
} catch (Exception e)
{
// TODO: handle exception
mCaptionsResolve.readFile("");
}
}
}
/**
* Handler 控制按钮显示隐藏
*/
public Handler m_handle_control = new Handler()
{
int duration = 0;
int minute = 0, second = 0, hour = 0;
@Override
public void handleMessage(Message msg)
{
// TODO Auto-generated method stub
switch (msg.what)
{
case CONTROL_HANDLER_APPEAR_CTRLS:
// m_ctrl_layout.setVisibility(View.VISIBLE);
setCtlable(true);
m_control_isshow = true;
break;
case CONTROL_HANDLER_HIDE_CTRLS:
// m_ctrl_layout.setVisibility(View.INVISIBLE);
setCtlable(false);
m_control_isshow = false;
break;
case CONTROL_HANDLER_HIDEFRAMESEEKBAR_DELAY:
if (isLoadSubFrames(m_duration_process))
{
m_relativelayout_frameseekbar_small
.setVisibility(View.INVISIBLE);
Bitmap mBitmap = BitmapFactory.decodeResource(
getResources(), R.drawable.scrolling_bar_normal);
BitmapDrawable mBitmapDrawable = new BitmapDrawable(mBitmap);
m_sbr_FrameSeekBar.setThumb(mBitmapDrawable);
}
break;
case CONTROL_HANDLER_SHOWFRAMESEEKBAR:
if (isLoadSubFrames(m_duration_process))
{
m_relativelayout_frameseekbar_small
.setVisibility(View.VISIBLE);
Bitmap aBitmap = BitmapFactory.decodeResource(
getResources(),
R.drawable.scrolling_bar_with_thumb_base);
BitmapDrawable aBitmapDrawable = new BitmapDrawable(aBitmap);
m_sbr_FrameSeekBar.setThumb(aBitmapDrawable);
}
break;
case CONTROL_HANDLER_PROGRESS_CHANGED:
// 更新视频播放进度信息
if (m_media_player != null)
{
if (m_duration_process >= 100)
{
try
{
m_current_process = m_media_player
.getCurrentPosition();
} catch (Exception e)
{
// TODO: handle exception
Log.e(TAG, "fail to getCurrentPosition");
}
//
if (m_state_playback == PLAYBACK_STATE_PLAY)
{
Message message = new Message();
message.what = 1;
message.obj = m_current_process;
mCaptionsResolve.mHandler.sendMessage(message);
}
float rate = ((float) m_current_process)
/ ((float) m_duration_process);
int myprogress = (int) (rate * 100);
m_sbr_Normal.setProgress(myprogress);
m_sbr_FrameSeekBar.setProgress(myprogress);
updateTimeIndicator(false);
} else
{
m_sbr_Normal.setProgress(0);
m_sbr_FrameSeekBar.setProgress(0);
updateTimeIndicator(false);
}
}
sendEmptyMessageDelayed(CONTROL_HANDLER_PROGRESS_CHANGED, 300);// 重复回调
break;
case CONTROL_HANDLER_PROGRESS_STOP:
break;
case CONTROL_HANDLER_RESET_PROGRESS:
m_current_process = 0;
updateTimeIndicator(false);
m_sbr_Normal.setProgress(0);
m_sbr_FrameSeekBar.setProgress(0);
break;
case CONTROL_HANDLER_DISPLAY_VIDEO_INFO:
if (CSStaticData.DEBUG)
Log.e("info", "true");
break;
case CONTROL_HANDLER_HIDE_VIDEO_INFO:
if (CSStaticData.DEBUG)
Log.e("info", "false");
break;
}
super.handleMessage(msg);
}
};
private void doCleanUp()
{
mVideoWidth = 0;
mVideoHeight = 0;
mIsVideoReadyToBePlayed = false;
mIsVideoSizeKnown = false;
}
@Override
public boolean onDown(MotionEvent arg0)
{
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY)
{
if (CSStaticData.DEBUG)
Log.e(TAG, "onFling");
if (m_init_playmode == 0)
{
// 播放模式
} else if (m_init_playmode == 1)
{
float x1 = 0;
float x2 = 0;
float vx = 0;
x1 = e1.getX();
x2 = e2.getX();
vx = velocityX;
if (Math.abs(x1 - x2) > 100 && vx < -200)
{
if (m_videopicker.getCurrentFileIndex() < (m_videopicker
.getFileCounts() - 1))
{
m_videopicker.getNextBitmap();
resetPlayer(true, false);
if (CSStaticData.DEBUG)
Toast.makeText(
WiVideoViewerActivity.this,
"当前文件列表信息"
+ (m_videopicker.getCurrentFileIndex() + 1)
+ "/" + m_videopicker.getFileCounts(),
1000).show();
return true;
}
} else if (Math.abs(x2 - x1) > 100 && vx > 200)
{
if (m_videopicker.getCurrentFileIndex() > 0)
{
m_videopicker.getPreBitmap();
resetPlayer(true, false);
if (CSStaticData.DEBUG)
Toast.makeText(
WiVideoViewerActivity.this,
"当前文件列表信息"
+ (m_videopicker.getCurrentFileIndex() + 1)
+ "/" + m_videopicker.getFileCounts(),
1000).show();
return true;
}
}
}
return false;
}
@Override
public void onLongPress(MotionEvent e)
{
// TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY)
{
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e)
{
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e)
{
return false;
}
/**
* 横竖屏信息还原
*/
private void initStatusData()
{
VideoViewerStateInfo stateInfo = (VideoViewerStateInfo) getLastNonConfigurationInstance();
if (stateInfo != null)
{
m_videopicker = new MediaFilePicker(stateInfo.getmFileList(),
stateInfo.getmCurrentFileIndex());
m_init_playmode = stateInfo.getM_init_playmode();
m_state_playback = stateInfo.getPlayState();
m_interrupt_process = stateInfo.getmCurrentProgress();
isMute = stateInfo.isMute();
isFullScreen = stateInfo.isFullScreen();
m_duration_process = stateInfo.getmDuring();
if (stateInfo.isDeleteBoxShow())
{
Tdeletefile();
}
if (stateInfo.isFileInfoBoxShow())
Tsetting();
// 进度条样式保存
if (stateInfo.getmSeekbarMode() == 1)
{
isFrameSeekbarModeChanged = true;
}
}
}
/**
* 横竖屏状态保存
*/
@Override
public Object onRetainNonConfigurationInstance()
{
Log.w(TAG, "[onRetainNonConfigurationInstance]");
boolean isDelete = false;
boolean isInfo = false;
if (mMsgBox != null && mMsgBox.isShown())
{
isDelete = true;
}
if (mMsgBox_info != null && mMsgBox_info.isShown())
{
isInfo = true;
}
VideoViewerStateInfo tempStateInfo = new VideoViewerStateInfo(
m_videopicker.getCurrentFileIndex(), m_interrupt_process,
m_state_playback, false, m_videopicker.getfilepathList(),
isMute, isFullScreen, m_init_playmode, isDelete, isInfo,
m_seekbar_mode, m_duration_process);
return tempStateInfo;
}
public static String replace(String strSource, String strFrom, String strTo) {
if (strSource == null) {
return null;
}
int i = 0;
if ((i = strSource.indexOf(strFrom, i)) >= 0) {
char[] cSrc = strSource.toCharArray();
char[] cTo = strTo.toCharArray();
int len = strFrom.length();
StringBuffer buf = new StringBuffer(cSrc.length);
buf.append(cSrc, 0, i).append(cTo);
i += len;
int j = i;
while ((i = strSource.indexOf(strFrom, i)) > 0) {
buf.append(cSrc, j, i - j).append(cTo);
i += len;
j = i;
}
buf.append(cSrc, j, cSrc.length - j);
return buf.toString();
}
return strSource;
}
}