package com.smartisanos.sidebar.view;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Looper;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.onestep.OneStepDragUtils;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.smartisanos.sidebar.R;
import com.smartisanos.sidebar.util.BitmapUtils;
import com.smartisanos.sidebar.util.ImageInfo;
import com.smartisanos.sidebar.util.ImageLoader;
import com.smartisanos.sidebar.util.Tracker;
import com.smartisanos.sidebar.util.Utils;
import java.io.File;
public class PhotoLineSubView extends FrameLayout {
private static final int IMAGE_COLOR = Color.parseColor("#9a404040");
ImageView photoImageView;
TextView loadFailedText;
RelativeLayout openGallery;
RelativeLayout showMorePhoto;
private ImageInfo imageInfo;
private ImageLoader mImageLoader;
private ImageLoaderCallBack mCallBack;
private Handler mHandler;
public PhotoLineSubView(Context context) {
this(context, null);
}
public PhotoLineSubView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public PhotoLineSubView(Context context, AttributeSet attrs,
int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
public PhotoLineSubView(Context context, AttributeSet attrs,
int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
mHandler = new Handler(Looper.getMainLooper());
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
photoImageView = (ImageView) findViewById(R.id.image);
loadFailedText = (TextView) findViewById(R.id.load_fail);
openGallery = (RelativeLayout) findViewById(R.id.open_gallery);
showMorePhoto = (RelativeLayout) findViewById(R.id.show_more);
openGallery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Utils.openGallery(v.getContext());
}
});
}
@Override
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
TextView openText = (TextView)findViewById(R.id.open_gallery_text);
openText.setText(R.string.open_gallery);
TextView moreText = (TextView)findViewById(R.id.show_more_text);
moreText.setText(R.string.load_more);
loadFailedText.setText(R.string.fail_to_load_image);
}
public void setImageLoader(ImageLoader imageLoader) {
mImageLoader = imageLoader;
}
public void reset() {
photoImageView.setVisibility(View.INVISIBLE);
loadFailedText.setVisibility(View.INVISIBLE);
openGallery.setVisibility(View.INVISIBLE);
showMorePhoto.setVisibility(View.INVISIBLE);
}
public void showPhoto(ImageInfo info) {
photoImageView.setVisibility(View.VISIBLE);
if (imageInfo != null && imageInfo.filePath.equals(info.filePath)) {
return ;
}
imageInfo = info;
photoImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Utils.openPhotoWithGallery(v.getContext(), imageInfo);
Tracker.onClick(Tracker.EVENT_OPEN_PIC, "type", "1");
}
});
photoImageView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
OneStepDragUtils.dragImage(v, mContext, new File(imageInfo.filePath), imageInfo.mimeType);
return true;
}
});
if(mCallBack != null) {
mCallBack.setValid(false);
}
Drawable oldBg = photoImageView.getBackground();
photoImageView.setBackgroundColor(IMAGE_COLOR);
if (oldBg != null && (oldBg instanceof BitmapDrawable)) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) oldBg;
bitmapDrawable.setCallback(null);
Bitmap oldBitmap = bitmapDrawable.getBitmap();
if (oldBitmap != null) {
oldBitmap.recycle();
}
}
mImageLoader.loadImage(imageInfo.filePath, mCallBack = new ImageLoaderCallBack());
}
public void showMorePhoto(View.OnClickListener listener) {
reset();
showMorePhoto.setVisibility(View.VISIBLE);
showMorePhoto.setOnClickListener(listener);
}
public void showOpenGallery() {
if (openGallery.getVisibility() != View.VISIBLE) {
openGallery.setVisibility(View.VISIBLE);
}
}
public void updateBitmap(Bitmap bmp) {
if (photoImageView.getVisibility() != View.VISIBLE) {
bmp.recycle();
return;
}
String path = imageInfo.filePath;
Drawable oldBg = photoImageView.getBackground();
photoImageView.setBackground(new BitmapDrawable(mContext.getResources(), bmp));
if (oldBg != null && (oldBg instanceof BitmapDrawable)) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) oldBg;
bitmapDrawable.setCallback(null);
Bitmap oldBitmap = bitmapDrawable.getBitmap();
if (oldBitmap != null) {
oldBitmap.recycle();
}
}
}
class ImageLoaderCallBack implements ImageLoader.Callback {
private boolean mValid = true;
public void setValid(boolean valid) {
mValid = valid;
}
@Override
public boolean valid() {
return mValid;
}
@Override
public void onLoadComplete(final String filePath, Bitmap bitmap) {
if (imageInfo.filePath == null || !imageInfo.filePath.equals(filePath)) {
return ;
}
Bitmap newBitmap = BitmapUtils.allNewBitmap(bitmap);
if(newBitmap == null) {
return ;
}
mHandler.post(new SetBitmapTask(newBitmap, imageInfo.filePath));
}
}
class SetBitmapTask implements Runnable {
private Bitmap mBitmap;
private String mFilePath;
public SetBitmapTask(Bitmap newBitmap, String filePath) {
mBitmap = newBitmap;
mFilePath = filePath;
}
@Override
public void run() {
if (imageInfo.filePath != null && imageInfo.filePath.equals(mFilePath)) {
updateBitmap(mBitmap);
} else {
mBitmap.recycle();
}
}
}
}