diff --git a/Chan/res/menu/image_view.xml b/Chan/res/menu/image_view.xml
index 43b8f929..265faee8 100644
--- a/Chan/res/menu/image_view.xml
+++ b/Chan/res/menu/image_view.xml
@@ -12,18 +12,20 @@
android:orderInCategory="2"
android:showAsAction="never"
android:title="@string/image_save"/>
-
-
-
+
-
+ android:title="@string/action_share"/>
+
\ No newline at end of file
diff --git a/Chan/res/values/strings.xml b/Chan/res/values/strings.xml
index c51e6ccd..fedd57f8 100644
--- a/Chan/res/values/strings.xml
+++ b/Chan/res/values/strings.xml
@@ -20,6 +20,7 @@
Open in browser
Open catalog
Share
+ Download album
Unsupported link
Chan can\'t open this link. Opening it in your browser instead.
@@ -150,6 +151,8 @@
Using 4chan pass
Off
Using 4chan pass
+
+ COUNT images will be downloaded to FOLDER
diff --git a/Chan/src/org/floens/chan/ui/activity/ImageViewActivity.java b/Chan/src/org/floens/chan/ui/activity/ImageViewActivity.java
index aeb029b1..dc63caaa 100644
--- a/Chan/src/org/floens/chan/ui/activity/ImageViewActivity.java
+++ b/Chan/src/org/floens/chan/ui/activity/ImageViewActivity.java
@@ -18,16 +18,19 @@
package org.floens.chan.ui.activity;
import java.util.ArrayList;
+import java.util.List;
import org.floens.chan.R;
import org.floens.chan.core.model.Post;
import org.floens.chan.ui.adapter.ImageViewAdapter;
import org.floens.chan.ui.adapter.PostAdapter;
import org.floens.chan.ui.fragment.ImageViewFragment;
+import org.floens.chan.utils.ImageSaver;
import org.floens.chan.utils.Logger;
import android.app.ActionBar;
import android.app.Activity;
+import android.net.Uri;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.Menu;
@@ -160,6 +163,24 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
+ return true;
+ } else if (item.getItemId() == R.id.action_download_album) {
+ List uris = new ArrayList();
+ Post aPost = null;
+ for (Post post : adapter.getList()) {
+ uris.add(Uri.parse(post.imageUrl));
+ aPost = post;
+ }
+
+ if (uris.size() > 0) {
+ String name = "downloaded";
+ if (aPost != null) {
+ name = aPost.board + "_" + aPost.resto;
+ }
+
+ ImageSaver.saveAll(this, name, uris);
+ }
+
return true;
} else {
ImageViewFragment fragment = getFragment(currentPosition);
diff --git a/Chan/src/org/floens/chan/ui/adapter/ImageViewAdapter.java b/Chan/src/org/floens/chan/ui/adapter/ImageViewAdapter.java
index 601fb0ec..d6dab31f 100644
--- a/Chan/src/org/floens/chan/ui/adapter/ImageViewAdapter.java
+++ b/Chan/src/org/floens/chan/ui/adapter/ImageViewAdapter.java
@@ -18,6 +18,7 @@
package org.floens.chan.ui.adapter;
import java.util.ArrayList;
+import java.util.List;
import org.floens.chan.core.model.Post;
import org.floens.chan.ui.activity.ImageViewActivity;
@@ -68,4 +69,8 @@ public class ImageViewAdapter extends FragmentStatePagerAdapter {
notifyDataSetChanged();
}
+
+ public List getList() {
+ return postList;
+ }
}
diff --git a/Chan/src/org/floens/chan/ui/fragment/ImageViewFragment.java b/Chan/src/org/floens/chan/ui/fragment/ImageViewFragment.java
index 0de9e79c..fa67cb9a 100644
--- a/Chan/src/org/floens/chan/ui/fragment/ImageViewFragment.java
+++ b/Chan/src/org/floens/chan/ui/fragment/ImageViewFragment.java
@@ -132,7 +132,7 @@ public class ImageViewFragment extends Fragment implements ThumbnailImageViewCal
}
public void onDeselected() {
- if (imageView != null && imageView.getVideoView() != null && imageView.getVideoView().isPlaying()) {
+ if (imageView != null && imageView.getVideoView() != null) {
imageView.getVideoView().pause();
}
}
diff --git a/Chan/src/org/floens/chan/utils/ImageSaver.java b/Chan/src/org/floens/chan/utils/ImageSaver.java
index e195af37..53659795 100644
--- a/Chan/src/org/floens/chan/utils/ImageSaver.java
+++ b/Chan/src/org/floens/chan/utils/ImageSaver.java
@@ -20,13 +20,17 @@ package org.floens.chan.utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.util.List;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.net.ByteArrayRequest;
+import android.app.AlertDialog;
+import android.app.DownloadManager;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.media.MediaScannerConnection;
import android.net.Uri;
@@ -39,6 +43,43 @@ import com.android.volley.VolleyError;
public class ImageSaver {
private static final String TAG = "ImageSaver";
+ public static void saveAll(Context context, String folderName, final List list) {
+ final DownloadManager dm = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
+
+ String folderPath = ChanPreferences.getImageSaveDirectory() + File.separator + folderName;
+ File folder = Environment.getExternalStoragePublicDirectory(folderPath);
+ int nextFileNameNumber = 0;
+ while (folder.exists() || folder.isFile()) {
+ folderPath = ChanPreferences.getImageSaveDirectory() + File.separator + folderName + "_"
+ + Integer.toString(nextFileNameNumber++);
+ folder = Environment.getExternalStoragePublicDirectory(folderPath);
+ }
+
+ final String finalFolderPath = folderPath;
+ String text = context.getString(R.string.download_confirm).replace("COUNT", Integer.toString(list.size()))
+ .replace("FOLDER", folderPath);
+ new AlertDialog.Builder(context).setMessage(text).setNegativeButton(R.string.cancel, null)
+ .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ for (Uri uri : list) {
+ DownloadManager.Request request = null;
+ try {
+ request = new DownloadManager.Request(uri);
+ } catch (IllegalArgumentException e) {
+ continue;
+ }
+
+ request.setDestinationInExternalPublicDir(finalFolderPath, uri.getLastPathSegment());
+ request.setVisibleInDownloadsUi(false);
+ request.allowScanningByMediaScanner();
+
+ dm.enqueue(request);
+ }
+ }
+ }).show();
+ }
+
public static void save(final Context context, String imageUrl, final String name, final String extension,
final boolean share) {
ChanApplication.getVolleyRequestQueue().add(new ByteArrayRequest(imageUrl, new Response.Listener() {