package io.jari.dumpert.activities;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.nispok.snackbar.Snackbar;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
import io.jari.dumpert.R;
import org.apache.http.util.ByteArrayBuffer;
import pl.droidsonroids.gif.GifDrawable;
import pl.droidsonroids.gif.GifImageView;
import uk.co.senab.photoview.PhotoViewAttacher;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
/**
* JARI.IO
* Date: 12-12-14
* Time: 14:50
*/
public class ImageActivity extends BaseActivity {
void setTheme() {
String theme = preferences.getString("theme", "green");
if(theme.equals("green")) {
//default theme, do nothing
} else if(theme.equals("blue")) {
super.setTheme(R.style.Theme_Dumpert_NoActionBar_Blue);
} else if(theme.equals("red")) {
super.setTheme(R.style.Theme_Dumpert_NoActionBar_Red);
} else if(theme.equals("pink")) {
super.setTheme(R.style.Theme_Dumpert_NoActionBar_Pink);
} else if(theme.equals("orange")) {
super.setTheme(R.style.Theme_Dumpert_NoActionBar_Orange);
} else if(theme.equals("bluegray")) {
super.setTheme(R.style.Theme_Dumpert_NoActionBar_BlueGray);
} else if(theme.equals("webartisans")) {
super.setTheme(R.style.Theme_Dumpert_NoActionBar_WebArtisans);
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//wait until data has loaded
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
this.postponeEnterTransition();
setContentView(R.layout.image);
final String[] images = getIntent().getStringArrayExtra("images");
ViewPager pager = (ViewPager)findViewById(R.id.viewpager);
PagerAdapter pagerAdapter = new ImageAdapter(images);
pager.setAdapter(pagerAdapter);
this.tip();
}
public void download(String url, String fileName) throws IOException { //this is the downloader method
URLConnection ucon = new URL(url).openConnection();
File file = new File(fileName);
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
FileOutputStream fos = new FileOutputStream(file);
fos.write(baf.toByteArray());
fos.close();
}
public void tip() {
SharedPreferences sharedPreferences = getSharedPreferences("dumpert", 0);
if(!sharedPreferences.getBoolean("seenImageTip", false)) {
sharedPreferences.edit().putBoolean("seenImageTip", true).apply();
Snackbar.with(getApplicationContext())
.text(getResources().getText(R.string.tip_touch_to_enlarge))
.actionLabel(getResources().getString(R.string.tip_close))
.actionColor(Color.parseColor("#D32F2F"))
.duration(4000)
.show(this);
}
}
public static void launch(Activity activity, View transitionView, String[] images) {
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionView, "image");
Intent intent = new Intent(activity, ImageActivity.class);
intent.putExtra("images", images);
ActivityCompat.startActivity(activity, intent, options.toBundle());
}
class ImageAdapter extends PagerAdapter {
public String[] urls;
public ImageAdapter(String[] urls) {
this.urls = urls;
}
@Override
public int getCount() {
return urls.length;
}
@Override
public View instantiateItem(ViewGroup container, int position) {
final View view = LayoutInflater.from(ImageActivity.this)
.inflate(R.layout.image_image, container, false);
final GifImageView imageView = (GifImageView)view.findViewById(R.id.image_image);
if(position == 0) {
ViewCompat.setTransitionName(imageView, "image");
}
final String image = urls[position];
Picasso
.with(ImageActivity.this)
.load(image)
.into(imageView, new Callback() {
@Override
public void onSuccess() {
//attach photoview
new PhotoViewAttacher(imageView);
//the only way we can check if this is a gif, probably not more needed
if(image.endsWith(".gif")) {
final View loader = view.findViewById(R.id.image_loader);
loader.setVisibility(View.VISIBLE);
new Thread(new Runnable() {
@Override
public void run() {
try {
String file = getCacheDir().getPath() + "/" + Uri.parse(image).getLastPathSegment();
download(image, file);
final GifDrawable gif = new GifDrawable(file);
//clean up
new File(file).delete();
runOnUiThread(new Runnable() {
@Override
public void run() {
imageView.setImageDrawable(gif);
}
});
} catch (Exception e) {
e.printStackTrace();
Snackbar.with(ImageActivity.this)
.text(R.string.gif_failed)
.textColor(Color.parseColor("#FFCDD2"))
.show(ImageActivity.this);
}
finally {
runOnUiThread(new Runnable() {
@Override
public void run() {
loader.setVisibility(View.GONE);
}
});
}
}
}).start();
}
}
@Override
public void onError() {
}
});
container.addView(view);
if(Build.VERSION.SDK_INT >= 21 && position == 0)
startPostponedEnterTransition();
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
}