diff --git a/Clover/app/src/main/AndroidManifest.xml b/Clover/app/src/main/AndroidManifest.xml
index 75d89b03..86bb2077 100644
--- a/Clover/app/src/main/AndroidManifest.xml
+++ b/Clover/app/src/main/AndroidManifest.xml
@@ -22,6 +22,7 @@ along with this program. If not, see .
+
images;
@@ -178,12 +178,12 @@ public class ImageViewerPresenter implements MultiImageView.Callback, ViewPager.
private void onLowResInCenter() {
PostImage postImage = images.get(selectedPosition);
- if (imageAutoLoad && !postImage.spoiler) {
+ if (imageAutoLoad() && !postImage.spoiler) {
if (postImage.type == PostImage.Type.STATIC) {
callback.setImageMode(postImage, MultiImageView.Mode.BIGIMAGE);
} else if (postImage.type == PostImage.Type.GIF) {
callback.setImageMode(postImage, MultiImageView.Mode.GIF);
- } else if (postImage.type == PostImage.Type.MOVIE && movieAutoLoad) {
+ } else if (postImage.type == PostImage.Type.MOVIE && videoAutoLoad()) {
callback.setImageMode(postImage, MultiImageView.Mode.MOVIE);
}
}
@@ -194,8 +194,8 @@ public class ImageViewerPresenter implements MultiImageView.Callback, ViewPager.
// Don't mistake a swipe when the pager is disabled as a tap
if (viewPagerVisible) {
PostImage postImage = images.get(selectedPosition);
- if (imageAutoLoad && !postImage.spoiler) {
- if (movieAutoLoad) {
+ if (imageAutoLoad() && !postImage.spoiler) {
+ if (videoAutoLoad()) {
onExit();
} else {
if (postImage.type == PostImage.Type.MOVIE) {
@@ -257,6 +257,24 @@ public class ImageViewerPresenter implements MultiImageView.Callback, ViewPager.
callback.onVideoError(multiImageView);
}
+ private boolean imageAutoLoad() {
+ String autoLoadMode = ChanSettings.imageAutoLoadNetwork.get();
+ if (autoLoadMode.equals(ChanSettings.ImageAutoLoadMode.NONE.name)) {
+ return false;
+ } else if (autoLoadMode.equals(ChanSettings.ImageAutoLoadMode.WIFI.name)) {
+ return isConnected(ConnectivityManager.TYPE_WIFI);
+ } else if (autoLoadMode.equals(ChanSettings.ImageAutoLoadMode.ALL.name)) {
+ return true;
+ }
+
+ // Not connected or unrecognized
+ return false;
+ }
+
+ private boolean videoAutoLoad() {
+ return imageAutoLoad() && ChanSettings.videoAutoLoad.get();
+ }
+
private void setTitle(PostImage postImage, int position) {
callback.setTitle(postImage, position, images.size(),
postImage.spoiler && callback.getImageMode(postImage) == MultiImageView.Mode.LOWRES);
diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java b/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java
index aa949380..4f6ae8b4 100644
--- a/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java
+++ b/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java
@@ -30,11 +30,36 @@ import org.floens.chan.utils.AndroidUtils;
import java.io.File;
public class ChanSettings {
+ public enum ImageAutoLoadMode {
+ // ALways auto load, either wifi or mobile
+ ALL("all"),
+ // Only auto load if on wifi
+ WIFI("wifi"),
+ // Never auto load
+ NONE("none");
+
+ public String name;
+
+ ImageAutoLoadMode(String name) {
+ this.name = name;
+ }
+
+ public static ImageAutoLoadMode find(String name) {
+ for (ImageAutoLoadMode mode : ImageAutoLoadMode.values()) {
+ if (mode.name.equals(name)) {
+ return mode;
+ }
+ }
+ return null;
+ }
+ }
+
private static final StringSetting theme;
public static final StringSetting fontSize;
public static final BooleanSetting openLinkConfirmation;
public static final BooleanSetting autoRefreshThread;
- public static final BooleanSetting imageAutoLoad;
+ // public static final BooleanSetting imageAutoLoad;
+ public static final StringSetting imageAutoLoadNetwork;
public static final BooleanSetting videoAutoLoad;
public static final BooleanSetting videoOpenExternal;
public static final BooleanSetting videoErrorIgnore;
@@ -79,7 +104,8 @@ public class ChanSettings {
fontSize = new StringSetting(p, "preference_font", tablet ? "16" : "14");
openLinkConfirmation = new BooleanSetting(p, "preference_open_link_confirmation", true);
autoRefreshThread = new BooleanSetting(p, "preference_auto_refresh_thread", true);
- imageAutoLoad = new BooleanSetting(p, "preference_image_auto_load", true);
+// imageAutoLoad = new BooleanSetting(p, "preference_image_auto_load", true);
+ imageAutoLoadNetwork = new StringSetting(p, "preference_image_auto_load_network", ImageAutoLoadMode.WIFI.name);
videoAutoLoad = new BooleanSetting(p, "preference_autoplay", false);
videoOpenExternal = new BooleanSetting(p, "preference_video_external", false);
videoErrorIgnore = new BooleanSetting(p, "preference_video_error_ignore", false);
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java
index 84d6673d..bb583f07 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java
@@ -102,7 +102,7 @@ public class MainSettingsController extends SettingsController implements Toolba
super.onPreferenceChange(item);
if (item == imageAutoLoadView) {
- videoAutoLoadView.setEnabled(ChanSettings.imageAutoLoad.get());
+ videoAutoLoadView.setEnabled(!ChanSettings.imageAutoLoadNetwork.get().equals(ChanSettings.ImageAutoLoadMode.NONE.name));
} else if (item == fontView) {
EventBus.getDefault().post(new RefreshUIMessage("fontsize"));
}
@@ -161,8 +161,27 @@ public class MainSettingsController extends SettingsController implements Toolba
browsing.add(new BooleanSettingView(this, ChanSettings.openLinkConfirmation, s(R.string.setting_open_link_confirmation), null));
browsing.add(new BooleanSettingView(this, ChanSettings.autoRefreshThread, s(R.string.setting_auto_refresh_thread), null));
- imageAutoLoadView = browsing.add(new BooleanSettingView(this, ChanSettings.imageAutoLoad, s(R.string.setting_image_auto_load), null));
- videoAutoLoadView = browsing.add(new BooleanSettingView(this, ChanSettings.videoAutoLoad, s(R.string.setting_video_auto_load), null));
+
+ List imageAutoLoadTypes = new ArrayList<>();
+ for (ChanSettings.ImageAutoLoadMode mode : ChanSettings.ImageAutoLoadMode.values()) {
+ String name = "";
+ switch(mode) {
+ case ALL:
+ name = string(R.string.setting_image_auto_load_all);
+ break;
+ case WIFI:
+ name = string(R.string.setting_image_auto_load_wifi);
+ break;
+ case NONE:
+ name = string(R.string.setting_image_auto_load_none);
+ break;
+ }
+
+ imageAutoLoadTypes.add(new ListSettingView.Item(name, mode.name));
+ }
+
+ imageAutoLoadView = browsing.add(new ListSettingView(this, ChanSettings.imageAutoLoadNetwork, s(R.string.setting_image_auto_load), imageAutoLoadTypes.toArray(new ListSettingView.Item[imageAutoLoadTypes.size()])));
+ videoAutoLoadView = browsing.add(new BooleanSettingView(this, ChanSettings.videoAutoLoad, s(R.string.setting_video_auto_load), s(R.string.setting_video_auto_load_description)));
browsing.add(new BooleanSettingView(this, ChanSettings.videoOpenExternal, s(R.string.setting_video_open_external), s(R.string.setting_video_open_external_description)));
browsing.add(new LinkSettingView(this, string(R.string.setting_clear_thread_hides), null, new View.OnClickListener() {
@Override
diff --git a/Clover/app/src/main/java/org/floens/chan/utils/AndroidUtils.java b/Clover/app/src/main/java/org/floens/chan/utils/AndroidUtils.java
index e55e2fe0..bb9ed5f4 100644
--- a/Clover/app/src/main/java/org/floens/chan/utils/AndroidUtils.java
+++ b/Clover/app/src/main/java/org/floens/chan/utils/AndroidUtils.java
@@ -29,6 +29,8 @@ import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Handler;
@@ -58,9 +60,13 @@ public class AndroidUtils {
public static Typeface ROBOTO_MEDIUM;
public static Typeface ROBOTO_MEDIUM_ITALIC;
+ private static ConnectivityManager connectivityManager;
+
public static void init() {
ROBOTO_MEDIUM = getTypeface("Roboto-Medium.ttf");
ROBOTO_MEDIUM_ITALIC = getTypeface("Roboto-MediumItalic.ttf");
+
+ connectivityManager = (ConnectivityManager) getAppRes().getSystemService(Context.CONNECTIVITY_SERVICE);
}
public static Resources getRes() {
@@ -308,4 +314,13 @@ public class AndroidUtils {
((TextView) snackbar.getView().findViewById(R.id.snackbar_text)).setTextColor(0xffffffff);
snackbar.setActionTextColor(getAttrColor(context, R.attr.colorAccent));
}
+
+ public static ConnectivityManager getConnectivityManager() {
+ return connectivityManager;
+ }
+
+ public static boolean isConnected(int type) {
+ NetworkInfo networkInfo = connectivityManager.getNetworkInfo(type);
+ return networkInfo != null && networkInfo.isConnected();
+ }
}
diff --git a/Clover/app/src/main/res/values/strings.xml b/Clover/app/src/main/res/values/strings.xml
index 0f44ba28..34215898 100644
--- a/Clover/app/src/main/res/values/strings.xml
+++ b/Clover/app/src/main/res/values/strings.xml
@@ -200,7 +200,13 @@ along with this program. If not, see .
Ask before opening links
Auto refresh threads
Auto load images
+
+ Always
+ Wi-Fi only
+ Never
+
Auto load videos
+ Depends on auto load images
Open videos external
Open videos in an external media player
Clear all thread hides