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