/**
* @auth geniuseoe2012
* @blog http://blog.csdn.net/geniuseoe2012
* @date 2013-1-6
* @description nothing to say
*/
package com.talent.allshare;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.List;
import org.cybergarage.util.CommonLog;
import org.cybergarage.util.LogFactory;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Toast;
import com.talent.allshare.network.Item;
import com.talent.allshare.network.ItemFactory;
import com.talent.allshare.player.DownLoadHelper;
import com.talent.allshare.player.FileManager;
import com.talent.allshare.player.MediaManager;
import com.talent.allshare.util.CommonUtil;
import com.talent.allshare.util.FileHelper;
import com.youplayer.player.R;
public class PicturePlayerActivity extends Activity implements DownLoadHelper.IDownLoadCallback,OnTouchListener{
private static final CommonLog log = LogFactory.createLog();
public static final String PLAY_INDEX = "player_index";
private UIManager mUIManager;
private DelCacheFileManager mDelCacheFileManager;
private int mScreenWidth = 0;
private int mScreenHeight = 0;
private Item item;
private List<Item> mItemsList;
private int mCurIndex = 0;
private DownLoadHelper mDownLoadHelper;
private GestureDetector mGestureDetector;
@SuppressLint("NewApi") @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.picture_player_layout);
mGestureDetector = new GestureDetector(PicturePlayerActivity.this, new PicOnGestureListener(PicturePlayerActivity.this,PicturePlayerActivity.this));
initView();
initData(getIntent());
mUIManager.mImageView.setOnTouchListener(this);
// initData();
}
private void initView(){
mUIManager = new UIManager();
mDelCacheFileManager = new DelCacheFileManager();
}
private void initData(Intent intent){
int index = 0;
if (intent != null){
mCurIndex = intent.getIntExtra(PLAY_INDEX, 0);
item = ItemFactory.getItemFromIntent(intent);
}
mItemsList = MediaManager.getInstance().getPictureList();
mScreenWidth = CommonUtil.getScreenWidth(this);
mScreenHeight = CommonUtil.getScreenHeight(this);
mDownLoadHelper = new DownLoadHelper();
mDownLoadHelper.init();
play(mCurIndex);
}
@Override
protected void onDestroy() {
mDelCacheFileManager.start(FileManager.getSaveIconPath());
mDownLoadHelper.unInit();
super.onDestroy();
}
private void play(int pos){
log.e("play pos = " + pos);
mCurIndex = pos;
mCurIndex = reviceIndex(mCurIndex);
String requestUrl = mItemsList.get(mCurIndex).getRes();
mDownLoadHelper.syncDownLoadFile(requestUrl, FileManager.mkSaveIconPath(requestUrl), this);
mUIManager.showProgress(true);
}
public void pre(){
if (mItemsList.size() == 0){
return ;
}
mCurIndex--;
mCurIndex = reviceIndex(mCurIndex);
String requestUrl = mItemsList.get(mCurIndex).getRes();
mDownLoadHelper.syncDownLoadFile(requestUrl, FileManager.mkSaveIconPath(requestUrl), this);
mUIManager.showProgress(true);
}
public void next(){
if (mItemsList.size() == 0){
return ;
}
mCurIndex++;
mCurIndex = reviceIndex(mCurIndex);
String requestUrl = mItemsList.get(mCurIndex).getRes();
mDownLoadHelper.syncDownLoadFile(requestUrl, FileManager.mkSaveIconPath(requestUrl), this);
mUIManager.showProgress(true);
}
private int reviceIndex(int index){
if (index < 0){
return mItemsList.size() - 1;
}else if (index >= mItemsList.size()){
return 0;
}
return index;
}
class UIManager implements OnClickListener{
public ImageView mImageView;
public ImageButton mBtnPre;
public ImageButton mBtnNext;
public View mLoadView;
public Bitmap recycleBitmap;
public boolean mIsScalBitmap = false;
public UIManager(){
initView();
}
private void initView() {
mImageView = (ImageView) findViewById(R.id.imageview);
mLoadView = findViewById(R.id.show_load_progress);
mBtnPre = (ImageButton) findViewById(R.id.btn_playpre);
mBtnNext = (ImageButton) findViewById(R.id.btn_playnext);
mBtnPre.setOnClickListener(this);
mBtnNext.setOnClickListener(this);
}
public void setBitmap(Bitmap bitmap){
if (recycleBitmap != null && !recycleBitmap.isRecycled()) {
mImageView.setImageBitmap(null);
recycleBitmap.recycle();
recycleBitmap = null;
}
if (mIsScalBitmap) {
mImageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
} else {
mImageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
}
recycleBitmap = bitmap;
mImageView.setImageBitmap(recycleBitmap);
// log.e(" mImageView.setImageBitmap over...");
}
public void showProgress(boolean bShow)
{
if (bShow){
mLoadView.setVisibility(View.VISIBLE);
} else{
mLoadView.setVisibility(View.GONE);
}
}
public void showLoadFailTip(){
showToask(R.string.load_image_fail);
}
public void showParseFailTip(){
showToask(R.string.parse_image_fail);
}
private void showToask(int tip) {
Toast.makeText(PicturePlayerActivity.this, tip, Toast.LENGTH_SHORT).show();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_playpre:
pre();
break;
case R.id.btn_playnext:
next();
break;
default:
break;
}
}
}
class DelCacheFileManager implements Runnable
{
private Thread mThread;
private String mFilePath;
public DelCacheFileManager()
{
}
@Override
public void run() {
long time = System.currentTimeMillis();
log.e("DelCacheFileManager run...");
try {
FileHelper.deleteDirectory(mFilePath);
} catch (Exception e) {
e.printStackTrace();
}
long interval = System.currentTimeMillis() - time;
log.e("DelCacheFileManager del over, cost time = " + interval);
}
public boolean start(String directory)
{
if (mThread != null)
{
if (mThread.isAlive())
{
return false;
}
}
mFilePath = directory;
mThread = new Thread(this);
mThread.start();
return true;
}
}
@Override
public void downLoadResult(boolean isSuccess, String savePath) {
onTransDelLoadResult(isSuccess, savePath);
}
private void onTransDelLoadResult(final boolean isSuccess,final String savePath){
runOnUiThread(new Runnable() {
@Override
public void run() {
mUIManager.showProgress(false);
if (!isSuccess){
mUIManager.showLoadFailTip();
return ;
}
Bitmap bitmap = decodeOptionsFile(savePath);
if (bitmap == null){
mUIManager.showParseFailTip();
return ;
}
mUIManager.setBitmap(bitmap);
}
});
}
public Bitmap decodeOptionsFile(String filePath) {
try {
File file = new File(filePath);
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(file),null,o);
int width_tmp=o.outWidth, height_tmp=o.outHeight;
int scale = 1;
if (width_tmp <= mScreenWidth && height_tmp <= mScreenHeight)
{
scale = 1;
mUIManager.mIsScalBitmap = false;
}else{
double widthFit = width_tmp * 1.0 / mScreenWidth;
double heightFit = height_tmp * 1.0 / mScreenHeight;
double fit = widthFit > heightFit ? widthFit : heightFit;
scale = (int) (fit + 0.5);
mUIManager.mIsScalBitmap = true;
}
Bitmap bitmap = null;
if(scale == 1)
{
bitmap = BitmapFactory.decodeStream(new FileInputStream(file));
}else{
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
bitmap = BitmapFactory.decodeStream(new FileInputStream(file), null, o2);
}
return bitmap;
} catch (FileNotFoundException e) {
log.e("fileNotFoundException, e: " + e.toString());
}
return null;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
mGestureDetector.onTouchEvent(event);
return true;
}
}