diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java
index 6adc3f043e..68992f241e 100644
--- a/app/src/main/java/eu/faircode/email/ActivityView.java
+++ b/app/src/main/java/eu/faircode/email/ActivityView.java
@@ -31,6 +31,7 @@ import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
+import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.Uri;
@@ -40,6 +41,7 @@ import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
+import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.ScrollView;
import android.widget.Toast;
@@ -78,6 +80,8 @@ import java.util.List;
import javax.net.ssl.HttpsURLConnection;
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
+import static androidx.drawerlayout.widget.DrawerLayout.LOCK_MODE_LOCKED_OPEN;
+import static androidx.drawerlayout.widget.DrawerLayout.LOCK_MODE_UNLOCKED;
public class ActivityView extends ActivityBilling implements FragmentManager.OnBackStackChangedListener {
private String startup;
@@ -138,8 +142,10 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
Configuration config = getResources().getConfiguration();
boolean normal = config.isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_NORMAL);
- boolean landscape = prefs.getBoolean("landscape", true);
- Log.i("Orientation=" + config.orientation + " normal=" + normal + " landscape=" + landscape);
+ final boolean landscape = prefs.getBoolean("landscape", true);
+ final boolean landscape3 = prefs.getBoolean("landscape3", true);
+ Log.i("Orientation=" + config.orientation + " normal=" + normal +
+ " landscape=" + landscape + "/" + landscape3);
view = LayoutInflater.from(this).inflate(
config.orientation == ORIENTATION_PORTRAIT || !normal || !landscape
@@ -154,13 +160,34 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
drawerLayout = findViewById(R.id.drawer_layout);
+ final ViewGroup childContent = (ViewGroup) drawerLayout.getChildAt(0);
+ final ViewGroup childDrawer = (ViewGroup) drawerLayout.getChildAt(1);
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.app_name, R.string.app_name) {
public void onDrawerClosed(View view) {
+ if (landscape && landscape3 &&
+ config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
+ drawerLayout.setDrawerLockMode(LOCK_MODE_UNLOCKED);
+ drawerLayout.setScrimColor(Helper.resolveColor(ActivityView.this, R.attr.colorDrawerScrim));
+ }
super.onDrawerClosed(view);
}
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
+ if (landscape && landscape3 &&
+ config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
+ drawerLayout.setDrawerLockMode(LOCK_MODE_LOCKED_OPEN);
+ drawerLayout.setScrimColor(Color.TRANSPARENT);
+ }
+ }
+
+ @Override
+ public void onDrawerSlide(View drawerView, float slideOffset) {
+ super.onDrawerSlide(drawerView, slideOffset);
+ if (landscape && landscape3 &&
+ config.orientation == Configuration.ORIENTATION_LANDSCAPE)
+ childContent.setPaddingRelative(
+ Math.round(slideOffset * childDrawer.getLayoutParams().width), 0, 0, 0);
}
};
drawerLayout.addDrawerListener(drawerToggle);
@@ -262,7 +289,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
final NavMenuItem navOperations = new NavMenuItem(R.drawable.baseline_dns_24, R.string.menu_operations, new Runnable() {
@Override
public void run() {
- drawerLayout.closeDrawer(drawerContainer);
+ if (!drawerLayout.isLocked(drawerContainer))
+ drawerLayout.closeDrawer(drawerContainer);
onMenuOperations();
}
});
@@ -272,7 +300,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
menus.add(new NavMenuItem(R.drawable.baseline_list_24, R.string.title_log, new Runnable() {
@Override
public void run() {
- drawerLayout.closeDrawer(drawerContainer);
+ if (!drawerLayout.isLocked(drawerContainer))
+ drawerLayout.closeDrawer(drawerContainer);
onShowLog();
}
}));
@@ -280,7 +309,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
menus.add(new NavMenuItem(R.drawable.baseline_reply_24, R.string.menu_answers, new Runnable() {
@Override
public void run() {
- drawerLayout.closeDrawer(drawerContainer);
+ if (!drawerLayout.isLocked(drawerContainer))
+ drawerLayout.closeDrawer(drawerContainer);
onMenuAnswers();
}
}));
@@ -288,7 +318,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
menus.add(new NavMenuItem(R.drawable.baseline_settings_applications_24, R.string.menu_setup, new Runnable() {
@Override
public void run() {
- drawerLayout.closeDrawer(drawerContainer);
+ if (!drawerLayout.isLocked(drawerContainer))
+ drawerLayout.closeDrawer(drawerContainer);
onMenuSetup();
}
}));
@@ -302,7 +333,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
extra.add(new NavMenuItem(R.drawable.baseline_help_24, R.string.menu_legend, new Runnable() {
@Override
public void run() {
- drawerLayout.closeDrawer(drawerContainer);
+ if (!drawerLayout.isLocked(drawerContainer))
+ drawerLayout.closeDrawer(drawerContainer);
onMenuLegend();
}
}));
@@ -310,13 +342,15 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
extra.add(new NavMenuItem(R.drawable.baseline_question_answer_24, R.string.menu_faq, new Runnable() {
@Override
public void run() {
- drawerLayout.closeDrawer(drawerContainer);
+ if (!drawerLayout.isLocked(drawerContainer))
+ drawerLayout.closeDrawer(drawerContainer);
onMenuFAQ();
}
}, new Runnable() {
@Override
public void run() {
- drawerLayout.closeDrawer(drawerContainer);
+ if (!drawerLayout.isLocked(drawerContainer))
+ drawerLayout.closeDrawer(drawerContainer);
onDebugInfo();
}
}).setExternal(true));
@@ -325,7 +359,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
extra.add(new NavMenuItem(R.drawable.baseline_feedback_24, R.string.menu_issue, new Runnable() {
@Override
public void run() {
- drawerLayout.closeDrawer(drawerContainer);
+ if (!drawerLayout.isLocked(drawerContainer))
+ drawerLayout.closeDrawer(drawerContainer);
onMenuIssue();
}
}).setExternal(true));
@@ -334,7 +369,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
extra.add(new NavMenuItem(R.drawable.baseline_bug_report_24, R.string.menu_test, new Runnable() {
@Override
public void run() {
- drawerLayout.closeDrawer(drawerContainer);
+ if (!drawerLayout.isLocked(drawerContainer))
+ drawerLayout.closeDrawer(drawerContainer);
onMenuTest();
}
}).setExternal(true));
@@ -342,7 +378,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
extra.add(new NavMenuItem(R.drawable.baseline_account_box_24, R.string.menu_privacy, new Runnable() {
@Override
public void run() {
- drawerLayout.closeDrawer(drawerContainer);
+ if (!drawerLayout.isLocked(drawerContainer))
+ drawerLayout.closeDrawer(drawerContainer);
onMenuPrivacy();
}
}));
@@ -356,7 +393,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
@Override
public void run() {
if (!Helper.isPlayStoreInstall()) {
- drawerLayout.closeDrawer(drawerContainer);
+ if (!drawerLayout.isLocked(drawerContainer))
+ drawerLayout.closeDrawer(drawerContainer);
checkUpdate(true);
}
}
@@ -365,7 +403,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
extra.add(new NavMenuItem(R.drawable.baseline_monetization_on_24, R.string.menu_pro, new Runnable() {
@Override
public void run() {
- drawerLayout.closeDrawer(drawerContainer);
+ if (!drawerLayout.isLocked(drawerContainer))
+ drawerLayout.closeDrawer(drawerContainer);
startActivity(new Intent(ActivityView.this, ActivityBilling.class));
}
}));
@@ -374,7 +413,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
extra.add(new NavMenuItem(R.drawable.baseline_people_24, R.string.menu_invite, new Runnable() {
@Override
public void run() {
- drawerLayout.closeDrawer(drawerContainer);
+ if (!drawerLayout.isLocked(drawerContainer))
+ drawerLayout.closeDrawer(drawerContainer);
onMenuInvite();
}
}).setExternal(true));
@@ -384,7 +424,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
extra.add(new NavMenuItem(R.drawable.baseline_star_24, R.string.menu_rate, new Runnable() {
@Override
public void run() {
- drawerLayout.closeDrawer(drawerContainer);
+ if (!drawerLayout.isLocked(drawerContainer))
+ drawerLayout.closeDrawer(drawerContainer);
onMenuRate();
}
}).setExternal(true));
@@ -393,7 +434,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
extra.add(new NavMenuItem(R.drawable.baseline_get_app_24, R.string.menu_other, new Runnable() {
@Override
public void run() {
- drawerLayout.closeDrawer(drawerContainer);
+ if (!drawerLayout.isLocked(drawerContainer))
+ drawerLayout.closeDrawer(drawerContainer);
onMenuOtherApps();
}
}).setExternal(true));
@@ -546,10 +588,11 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
@Override
public void onBackPressed() {
- if (drawerLayout.isDrawerOpen(drawerContainer))
+ int count = getSupportFragmentManager().getBackStackEntryCount();
+ if (drawerLayout.isDrawerOpen(drawerContainer) &&
+ !drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
else {
- int count = getSupportFragmentManager().getBackStackEntryCount();
if (exit || count > 1)
super.onBackPressed();
else if (!backHandled()) {
@@ -577,7 +620,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
if (count == 0)
finish();
else {
- if (drawerLayout.isDrawerOpen(drawerContainer))
+ if (drawerLayout.isDrawerOpen(drawerContainer) &&
+ !drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
drawerToggle.setDrawerIndicatorEnabled(count == 1);
@@ -591,8 +635,12 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- if (drawerToggle.onOptionsItemSelected(item))
+ if (drawerToggle.onOptionsItemSelected(item)) {
+ int count = getSupportFragmentManager().getBackStackEntryCount();
+ if (count == 1 && drawerLayout.isLocked(drawerContainer))
+ drawerLayout.closeDrawer(drawerContainer);
return true;
+ }
return super.onOptionsItemSelected(item);
}
diff --git a/app/src/main/java/eu/faircode/email/DrawerLayoutEx.java b/app/src/main/java/eu/faircode/email/DrawerLayoutEx.java
index d354eb2df3..0a1986f5d3 100644
--- a/app/src/main/java/eu/faircode/email/DrawerLayoutEx.java
+++ b/app/src/main/java/eu/faircode/email/DrawerLayoutEx.java
@@ -20,24 +20,17 @@ package eu.faircode.email;
*/
import android.content.Context;
-import android.content.SharedPreferences;
import android.content.res.Configuration;
-import android.graphics.Color;
-import android.os.Parcelable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
-import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.drawerlayout.widget.DrawerLayout;
-import androidx.preference.PreferenceManager;
public class DrawerLayoutEx extends DrawerLayout {
- private boolean locked = false;
-
public DrawerLayoutEx(@NonNull Context context) {
super(context);
}
@@ -52,32 +45,14 @@ public class DrawerLayoutEx extends DrawerLayout {
void setup(Configuration config, View drawerContainer) {
setScrimColor(Helper.resolveColor(getContext(), R.attr.colorDrawerScrim));
-
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
- boolean landscape = prefs.getBoolean("landscape", true);
- boolean landscape3 = prefs.getBoolean("landscape3", false);
- if (landscape && landscape3) {
- ViewGroup childContent = (ViewGroup) getChildAt(0);
- ViewGroup childDrawer = (ViewGroup) getChildAt(1);
- if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
- locked = true;
- setDrawerLockMode(LOCK_MODE_LOCKED_OPEN);
- setScrimColor(Color.TRANSPARENT);
- childContent.setPaddingRelative(childDrawer.getLayoutParams().width, 0, 0, 0);
- } else {
- locked = false;
- setDrawerLockMode(LOCK_MODE_UNLOCKED);
- setScrimColor(Helper.resolveColor(getContext(), R.attr.colorDrawerScrim));
- childContent.setPaddingRelative(0, 0, 0, 0);
- closeDrawer(drawerContainer, false);
- }
+ if (config.orientation != Configuration.ORIENTATION_LANDSCAPE) {
+ setDrawerLockMode(LOCK_MODE_UNLOCKED);
+ closeDrawer(drawerContainer, false);
}
}
- @Override
- protected void onRestoreInstanceState(Parcelable state) {
- super.onRestoreInstanceState(state);
- locked = isLocked();
+ public boolean isLocked(View view) {
+ return (getDrawerLockMode(view) != LOCK_MODE_UNLOCKED);
}
public boolean isLocked() {
@@ -85,24 +60,8 @@ public class DrawerLayoutEx extends DrawerLayout {
getDrawerLockMode(Gravity.RIGHT) == LOCK_MODE_LOCKED_OPEN);
}
- @Override
- public boolean isDrawerOpen(@NonNull View drawer) {
- return (!locked && super.isDrawerOpen(drawer));
- }
-
- @Override
- public boolean isDrawerOpen(int drawerGravity) {
- return (!locked && super.isDrawerOpen(drawerGravity));
- }
-
@Override
public boolean onInterceptTouchEvent(final MotionEvent ev) {
- return (!locked && super.onInterceptTouchEvent(ev));
- }
-
- @Override
- public void closeDrawer(@NonNull View drawerView) {
- if (!locked)
- super.closeDrawer(drawerView);
+ return (!isLocked() && super.onInterceptTouchEvent(ev));
}
}
diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java b/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java
index 76f6ddfa81..c4550fbbd9 100644
--- a/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java
+++ b/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java
@@ -569,7 +569,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer
swLandscape.setChecked(prefs.getBoolean("landscape", true));
swLandscape.setEnabled(normal);
- swLandscape3.setChecked(prefs.getBoolean("landscape3", false));
+ swLandscape3.setChecked(prefs.getBoolean("landscape3", true));
swLandscape3.setEnabled(normal && swLandscape.isChecked());
String startup = prefs.getString("startup", "unified");
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 72e2b61c8b..3cf64d7549 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -263,7 +263,7 @@
Manage connectivity
Use two columns in landscape mode
- Always show navigation menu in landscape mode
+ Allow fixed navigation menu in landscape mode
Show on start screen
Show cards
Group by date