diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index a69c9da7e1..d2867b4355 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -213,11 +213,21 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB Configuration config = getResources().getConfiguration(); boolean portrait2 = prefs.getBoolean("portrait2", false); boolean portrait2c = prefs.getBoolean("portrait2c", false); + int portrait_min_size = prefs.getInt("portrait_min_size", 0); boolean landscape = prefs.getBoolean("landscape", true); - Log.i("Orientation=" + config.orientation + - " portrait rows=" + portrait2 + " cols=" + portrait2c + " landscape cols=" + landscape); - - if (config.orientation == ORIENTATION_PORTRAIT && portrait2c) + int landscape_min_size = prefs.getInt("landscape_min_size", 0); + int layout = (config.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK); + Log.i("Orientation=" + config.orientation + " layout=" + layout + + " portrait rows=" + portrait2 + " cols=" + portrait2c + " min=" + portrait_min_size + + " landscape cols=" + landscape + " min=" + landscape); + + // 1=small, 2=normal, 3=large, 4=xlarge + if (layout > 0) + layout--; + + if (layout < (config.orientation == ORIENTATION_PORTRAIT ? portrait_min_size : landscape_min_size)) + layoutId = R.layout.activity_view_portrait; + else if (config.orientation == ORIENTATION_PORTRAIT && portrait2c) layoutId = R.layout.activity_view_landscape_split; else if (config.orientation == ORIENTATION_PORTRAIT || !landscape) layoutId = (portrait2 ? R.layout.activity_view_portrait_split : R.layout.activity_view_portrait); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptions.java b/app/src/main/java/eu/faircode/email/FragmentOptions.java index 265104c3a1..a98d6959f2 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptions.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptions.java @@ -126,7 +126,8 @@ public class FragmentOptions extends FragmentBase { "check_authentication", "check_reply_domain", "check_mx", "check_blocklist", "send_pending", "startup", "cards", "beige", "tabular_card_bg", "shadow_unread", "shadow_highlight", - "portrait2", "portrait2c", "landscape", "nav_count", "nav_unseen_drafts", "navbar_colorize", + "portrait2", "portrait2c", "portrait_min_size", "landscape", "landscape_min_size", + "nav_count", "nav_unseen_drafts", "navbar_colorize", "indentation", "date", "date_fixed", "date_bold", "threading", "threading_unread", "highlight_unread", "highlight_color", "color_stripe", "color_stripe_wide", "avatars", "bimi", "gravatars", "favicons", "generated_icons", "identicons", "circular", "saturation", "brightness", "threshold", diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java b/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java index 9a4e8fd4a9..529da694ec 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java @@ -70,7 +70,9 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer private SwitchCompat swNavBarColorize; private SwitchCompat swPortrait2; private SwitchCompat swPortrait2c; + private Spinner spPortraitMinSize; private SwitchCompat swLandscape; + private Spinner spLandscapeMinSize; private SwitchCompat swNavOptions; private SwitchCompat swNavMessageCount; private SwitchCompat swNavUnseenDrafts; @@ -203,7 +205,9 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer swDateBold = view.findViewById(R.id.swDateBold); swPortrait2 = view.findViewById(R.id.swPortrait2); swPortrait2c = view.findViewById(R.id.swPortrait2c); + spPortraitMinSize = view.findViewById(R.id.spPortraitMinSize); swLandscape = view.findViewById(R.id.swLandscape); + spLandscapeMinSize = view.findViewById(R.id.spLandscapeMinSize); swNavOptions = view.findViewById(R.id.swNavOptions); swNavMessageCount = view.findViewById(R.id.swNavMessageCount); swNavUnseenDrafts = view.findViewById(R.id.swNavUnseenDrafts); @@ -404,6 +408,18 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer } }); + spPortraitMinSize.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int position, long id) { + prefs.edit().putInt("portrait_min_size", position).apply(); + } + + @Override + public void onNothingSelected(AdapterView parent) { + prefs.edit().remove("portrait_min_size").apply(); + } + }); + swLandscape.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -411,6 +427,18 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer } }); + spLandscapeMinSize.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int position, long id) { + prefs.edit().putInt("landscape_min_size", position).apply(); + } + + @Override + public void onNothingSelected(AdapterView parent) { + prefs.edit().remove("landscape_min_size").apply(); + } + }); + swNavOptions.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -1114,7 +1142,9 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer swDateBold.setEnabled(swDate.isChecked() || swDateFixed.isChecked()); swPortrait2.setChecked(prefs.getBoolean("portrait2", false)); swPortrait2c.setChecked(prefs.getBoolean("portrait2c", false) && !swPortrait2.isChecked()); + spPortraitMinSize.setSelection(prefs.getInt("portrait_min_size", 0)); swLandscape.setChecked(prefs.getBoolean("landscape", true)); + spLandscapeMinSize.setSelection(prefs.getInt("landscape_min_size", 0)); swNavOptions.setChecked(prefs.getBoolean("nav_options", true)); swNavMessageCount.setChecked(prefs.getBoolean("nav_count", false)); swNavUnseenDrafts.setChecked(prefs.getBoolean("nav_unseen_drafts", false)); diff --git a/app/src/main/res/layout/fragment_options_display.xml b/app/src/main/res/layout/fragment_options_display.xml index cefad08e1a..66de4da18c 100644 --- a/app/src/main/res/layout/fragment_options_display.xml +++ b/app/src/main/res/layout/fragment_options_display.xml @@ -294,6 +294,44 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/swPortrait2c" /> + + + + + + + app:layout_constraintTop_toBottomOf="@id/tvPortraitSplitMinHint" /> + + + + + + Landscape mode Use two rows Use two columns + Minimum screen size for splitting the screen Show navigation menu options Pin navigation menu Hide navigation menu options? @@ -746,6 +747,7 @@ Messages are only grouped by date if they are sorted by time Whether this works depends on the Android version and variant This will split the screen into parts + This is a condition intended for foldable devices Group messages related to each other The accent color of the theme will be used for highlighting There might be a privacy risk @@ -2144,6 +2146,13 @@ AES-256 + + Small + Medium + Large + Extra large + + 17BA15C1AF55D925F98B99CEA4375D4CDF4C174B 200D0AA43A8ADBC7BB8237023C1553F4753CA7D2 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtFbxEbzL8u5accPGgBw/XdyiSS5BBE6ZQ9ELpKyJ/OQN+kdYniCAOw3lsQ/GuJScy4Y2HobqbBgLL8GLHG+Yu2EHC9dLjA3v2Mc25vvnfn86BsrpQvz1poN2n+roTBdq09FWbtebJ8m0hDBVmtfRi7RhTKIL4No3kodLhksdnucKjcFheubebWKgpmvbmw7NwuELhaZmyhw8WTtnQ4rZPMhjY1JJZgzwNExXgD7zzg4pJPkuQlfkuRkkvBpHpi3C7VDnYjrBlLHngI4wv3wxQBVwJqlvAT9PmX8dOVnTsWWdJdLQBZVWphuqVY54kjBIovN+o8w03WjsV9QiOQq+XwIDAQAB