diff --git a/Clover/app/src/main/java/org/floens/chan/Chan.java b/Clover/app/src/main/java/org/floens/chan/Chan.java index b38accd4..6c9d49b6 100644 --- a/Clover/app/src/main/java/org/floens/chan/Chan.java +++ b/Clover/app/src/main/java/org/floens/chan/Chan.java @@ -22,7 +22,6 @@ import android.content.Context; import android.content.pm.PackageManager; import android.os.Build; import android.os.StrictMode; -import android.webkit.WebView; import com.android.volley.RequestQueue; import com.android.volley.toolbox.ImageLoader; @@ -149,7 +148,7 @@ public class Chan extends Application { //noinspection PointlessBooleanExpression if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - WebView.setWebContentsDebuggingEnabled(true); +// WebView.setWebContentsDebuggingEnabled(true); } } } 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 76d061e2..a0aa103c 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 @@ -68,9 +68,27 @@ public class ChanSettings { } } + public enum LayoutMode implements OptionSettingItem { + AUTO("auto"), + PHONE("phone"), + SPLIT("split"); + + String name; + + LayoutMode(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } + } + private static Proxy proxy; private static final StringSetting theme; + public static final OptionsSetting layoutMode; public static final StringSetting fontSize; public static final BooleanSetting fontCondensed; public static final BooleanSetting openLinkConfirmation; @@ -94,7 +112,6 @@ public class ChanSettings { public static final BooleanSetting saveOriginalFilename; public static final BooleanSetting shareUrl; public static final BooleanSetting networkHttps; - public static final BooleanSetting forcePhoneLayout; public static final BooleanSetting enableReplyFab; public static final BooleanSetting anonymize; public static final BooleanSetting anonymizeIds; @@ -156,6 +173,8 @@ public class ChanSettings { theme = new StringSetting(p, "preference_theme", "light"); + layoutMode = new OptionsSetting<>(p, "preference_layout_mode", LayoutMode.values(), LayoutMode.AUTO); + boolean tablet = AndroidUtils.getRes().getBoolean(R.bool.is_tablet); fontSize = new StringSetting(p, "preference_font", tablet ? "16" : "14"); @@ -181,7 +200,6 @@ public class ChanSettings { saveOriginalFilename = new BooleanSetting(p, "preference_image_save_original", false); shareUrl = new BooleanSetting(p, "preference_image_share_url", false); networkHttps = new BooleanSetting(p, "preference_network_https", true); - forcePhoneLayout = new BooleanSetting(p, "preference_force_phone_layout", false); enableReplyFab = new BooleanSetting(p, "preference_enable_reply_fab", true); anonymize = new BooleanSetting(p, "preference_anonymize", false); anonymizeIds = new BooleanSetting(p, "preference_anonymize_ids", false); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java index 3ec0784c..fd1f80bc 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java @@ -97,17 +97,29 @@ public class StartActivity extends AppCompatActivity implements NfcAdapter.Creat StyledToolbarNavigationController toolbarNavigationController = new StyledToolbarNavigationController(this); - if (AndroidUtils.isTablet(this) && !ChanSettings.forcePhoneLayout.get()) { - SplitNavigationController splitNavigationController = new SplitNavigationController(this); - splitNavigationController.setEmptyView((ViewGroup) LayoutInflater.from(this).inflate(R.layout.layout_split_empty, null)); + ChanSettings.LayoutMode layoutMode = ChanSettings.layoutMode.get(); + if (layoutMode == ChanSettings.LayoutMode.AUTO) { + if (AndroidUtils.isTablet(this)) { + layoutMode = ChanSettings.LayoutMode.SPLIT; + } else { + layoutMode = ChanSettings.LayoutMode.PHONE; + } + } - drawerController.setChildController(splitNavigationController); + switch (layoutMode) { + case SPLIT: + SplitNavigationController splitNavigationController = new SplitNavigationController(this); + splitNavigationController.setEmptyView((ViewGroup) LayoutInflater.from(this).inflate(R.layout.layout_split_empty, null)); - splitNavigationController.setLeftController(toolbarNavigationController); - mainNavigationController = toolbarNavigationController; - } else { - drawerController.setChildController(toolbarNavigationController); - mainNavigationController = toolbarNavigationController; + drawerController.setChildController(splitNavigationController); + + splitNavigationController.setLeftController(toolbarNavigationController); + mainNavigationController = toolbarNavigationController; + break; + case PHONE: + drawerController.setChildController(toolbarNavigationController); + mainNavigationController = toolbarNavigationController; + break; } browseController = new BrowseController(this); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java index 584e2dbb..2449ad08 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java @@ -46,7 +46,6 @@ public class AdvancedSettingsController extends SettingsController { private boolean needRestart; private LinkSettingView saveLocation; private SettingView newCaptcha; - private SettingView forcePhoneLayoutSetting; private SettingView enableReplyFab; private SettingView neverHideToolbar; private SettingView controllersSwipeable; @@ -84,7 +83,7 @@ public class AdvancedSettingsController extends SettingsController { public void onPreferenceChange(SettingView item) { super.onPreferenceChange(item); - if (item == forcePhoneLayoutSetting || item == enableReplyFab || item == newCaptcha || item == neverHideToolbar || item == controllersSwipeable) { + if (item == enableReplyFab || item == newCaptcha || item == neverHideToolbar || item == controllersSwipeable) { needRestart = true; } else { EventBus.getDefault().post(new RefreshUIMessage("postui")); @@ -120,7 +119,6 @@ public class AdvancedSettingsController extends SettingsController { controllersSwipeable = settings.add(new BooleanSettingView(this, ChanSettings.controllerSwipeable, R.string.setting_controller_swipeable, 0)); settings.add(new BooleanSettingView(this, ChanSettings.shareUrl, R.string.setting_share_url, R.string.setting_share_url_description)); settings.add(new BooleanSettingView(this, ChanSettings.networkHttps, R.string.setting_network_https, R.string.setting_network_https_description)); - forcePhoneLayoutSetting = settings.add(new BooleanSettingView(this, ChanSettings.forcePhoneLayout, R.string.setting_force_phone_layout, 0)); enableReplyFab = settings.add(new BooleanSettingView(this, ChanSettings.enableReplyFab, R.string.setting_enable_reply_fab, R.string.setting_enable_reply_fab_description)); settings.add(new BooleanSettingView(this, ChanSettings.anonymize, R.string.setting_anonymize, 0)); settings.add(new BooleanSettingView(this, ChanSettings.anonymizeIds, R.string.setting_anonymize_ids, 0)); 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 07b75e39..c100c19c 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 @@ -31,6 +31,7 @@ import android.widget.Toast; import org.floens.chan.Chan; import org.floens.chan.R; import org.floens.chan.core.settings.ChanSettings; +import org.floens.chan.ui.activity.StartActivity; import org.floens.chan.ui.helper.HintPopup; import org.floens.chan.ui.helper.RefreshUIMessage; import org.floens.chan.ui.settings.BooleanSettingView; @@ -64,10 +65,13 @@ public class MainSettingsController extends SettingsController implements Toolba private int clickCount; private SettingView developerView; private SettingView fontView; + private SettingView layoutModeView; private SettingView fontCondensed; private SettingView gridColumnsView; private ToolbarMenuItem overflow; + private ChanSettings.LayoutMode previousLayoutMode; + private PopupWindow advancedSettingsHint; public MainSettingsController(Context context) { @@ -87,6 +91,8 @@ public class MainSettingsController extends SettingsController implements Toolba view = inflateRes(R.layout.settings_layout); content = (LinearLayout) view.findViewById(R.id.scrollview_content); + previousLayoutMode = ChanSettings.layoutMode.get(); + populatePreferences(); onWatchEnabledChanged(ChanSettings.watchEnabled.get()); @@ -117,6 +123,15 @@ public class MainSettingsController extends SettingsController implements Toolba } } + @Override + public void onDestroy() { + super.onDestroy(); + + if (previousLayoutMode != ChanSettings.layoutMode.get()) { + ((StartActivity) context).restart(); + } + } + @Override public void onMenuItemClicked(ToolbarMenuItem item) { } @@ -179,6 +194,26 @@ public class MainSettingsController extends SettingsController implements Toolba } })); + List layoutModes = new ArrayList<>(); + for (ChanSettings.LayoutMode mode : ChanSettings.LayoutMode.values()) { + int name = 0; + switch (mode) { + case AUTO: + name = R.string.setting_layout_mode_auto; + break; + case PHONE: + name = R.string.setting_layout_mode_phone; + break; + case SPLIT: + name = R.string.setting_layout_mode_split; + break; + } + layoutModes.add(new ListSettingView.Item<>(getString(name), mode)); + } + + layoutModeView = new ListSettingView<>(this, ChanSettings.layoutMode, R.string.setting_layout_mode, layoutModes); + appearance.add(layoutModeView); + List fontSizes = new ArrayList<>(); for (int size = 10; size <= 19; size++) { String name = size + (String.valueOf(size).equals(ChanSettings.fontSize.getDefault()) ? " " + getString(R.string.setting_font_size_default) : ""); @@ -225,8 +260,8 @@ public class MainSettingsController extends SettingsController implements Toolba break; } - imageAutoLoadTypes.add(new ListSettingView.Item(getString(name), mode)); - videoAutoLoadTypes.add(new ListSettingView.Item(getString(name), mode)); + imageAutoLoadTypes.add(new ListSettingView.Item<>(getString(name), mode)); + videoAutoLoadTypes.add(new ListSettingView.Item<>(getString(name), mode)); } imageAutoLoadView = new ListSettingView<>(this, ChanSettings.imageAutoLoadNetwork, R.string.setting_image_auto_load, imageAutoLoadTypes); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/PopupControllerContainer.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/PopupControllerContainer.java index fff307ba..72919467 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/PopupControllerContainer.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/PopupControllerContainer.java @@ -45,6 +45,12 @@ public class PopupControllerContainer extends FrameLayout { FrameLayout.LayoutParams child = (LayoutParams) getChildAt(0).getLayoutParams(); + if (widthMode == MeasureSpec.EXACTLY && widthSize < dp(600)) { + child.width = widthSize; + } else { + child.width = dp(600); + } + if (heightMode == MeasureSpec.EXACTLY && heightSize < dp(600)) { child.height = heightSize; } else { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/SplitNavigationControllerLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/SplitNavigationControllerLayout.java index f5f0bd1c..a1c01e44 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/SplitNavigationControllerLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/SplitNavigationControllerLayout.java @@ -84,7 +84,8 @@ public class SplitNavigationControllerLayout extends LinearLayout { throw new IllegalArgumentException(); } - int leftWidth = Math.max(minimumLeftWidth, (int) (widthSize * ratio)); + int minWidth = Math.min(minimumLeftWidth, widthSize / 2); + int leftWidth = Math.max(minWidth, (int) (widthSize * ratio)); int rightWidth = widthSize - dividerWidth - leftWidth; leftView.getLayoutParams().width = leftWidth; rightView.getLayoutParams().width = rightWidth; diff --git a/Clover/app/src/main/res/values/strings.xml b/Clover/app/src/main/res/values/strings.xml index 706f9f76..8cb0818b 100644 --- a/Clover/app/src/main/res/values/strings.xml +++ b/Clover/app/src/main/res/values/strings.xml @@ -355,6 +355,10 @@ along with this program. If not, see . Theme Swipe to change the theme.\nTap the toolbar to change its color.\n Click here to change the FAB color + Layout mode + Auto + Phone layout + Split mode Font size (default) Use condensed font @@ -400,7 +404,6 @@ along with this program. If not, see . Share the url to the image instead of the image itself Use HTTPS Use HTTPS for all network requests - Force phone layout Enable the reply FAB Disabling replaces it with a menu option Make everyone Anonymous