Improved three columns implementation

pull/172/head
M66B 6 years ago
parent 9530fca776
commit 68e2df562b

@ -31,6 +31,7 @@ import android.content.IntentFilter;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.graphics.Color;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.net.Uri; import android.net.Uri;
@ -40,6 +41,7 @@ import android.text.TextUtils;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.ScrollView; import android.widget.ScrollView;
import android.widget.Toast; import android.widget.Toast;
@ -78,6 +80,8 @@ import java.util.List;
import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.HttpsURLConnection;
import static android.content.res.Configuration.ORIENTATION_PORTRAIT; 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 { public class ActivityView extends ActivityBilling implements FragmentManager.OnBackStackChangedListener {
private String startup; private String startup;
@ -138,8 +142,10 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
Configuration config = getResources().getConfiguration(); Configuration config = getResources().getConfiguration();
boolean normal = config.isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_NORMAL); boolean normal = config.isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_NORMAL);
boolean landscape = prefs.getBoolean("landscape", true); final boolean landscape = prefs.getBoolean("landscape", true);
Log.i("Orientation=" + config.orientation + " normal=" + normal + " landscape=" + landscape); final boolean landscape3 = prefs.getBoolean("landscape3", true);
Log.i("Orientation=" + config.orientation + " normal=" + normal +
" landscape=" + landscape + "/" + landscape3);
view = LayoutInflater.from(this).inflate( view = LayoutInflater.from(this).inflate(
config.orientation == ORIENTATION_PORTRAIT || !normal || !landscape config.orientation == ORIENTATION_PORTRAIT || !normal || !landscape
@ -154,13 +160,34 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
drawerLayout = findViewById(R.id.drawer_layout); 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) { drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.app_name, R.string.app_name) {
public void onDrawerClosed(View view) { 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); super.onDrawerClosed(view);
} }
public void onDrawerOpened(View drawerView) { public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(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); 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() { final NavMenuItem navOperations = new NavMenuItem(R.drawable.baseline_dns_24, R.string.menu_operations, new Runnable() {
@Override @Override
public void run() { public void run() {
drawerLayout.closeDrawer(drawerContainer); if (!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
onMenuOperations(); 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() { menus.add(new NavMenuItem(R.drawable.baseline_list_24, R.string.title_log, new Runnable() {
@Override @Override
public void run() { public void run() {
drawerLayout.closeDrawer(drawerContainer); if (!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
onShowLog(); 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() { menus.add(new NavMenuItem(R.drawable.baseline_reply_24, R.string.menu_answers, new Runnable() {
@Override @Override
public void run() { public void run() {
drawerLayout.closeDrawer(drawerContainer); if (!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
onMenuAnswers(); 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() { menus.add(new NavMenuItem(R.drawable.baseline_settings_applications_24, R.string.menu_setup, new Runnable() {
@Override @Override
public void run() { public void run() {
drawerLayout.closeDrawer(drawerContainer); if (!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
onMenuSetup(); 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() { extra.add(new NavMenuItem(R.drawable.baseline_help_24, R.string.menu_legend, new Runnable() {
@Override @Override
public void run() { public void run() {
drawerLayout.closeDrawer(drawerContainer); if (!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
onMenuLegend(); 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() { extra.add(new NavMenuItem(R.drawable.baseline_question_answer_24, R.string.menu_faq, new Runnable() {
@Override @Override
public void run() { public void run() {
drawerLayout.closeDrawer(drawerContainer); if (!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
onMenuFAQ(); onMenuFAQ();
} }
}, new Runnable() { }, new Runnable() {
@Override @Override
public void run() { public void run() {
drawerLayout.closeDrawer(drawerContainer); if (!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
onDebugInfo(); onDebugInfo();
} }
}).setExternal(true)); }).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() { extra.add(new NavMenuItem(R.drawable.baseline_feedback_24, R.string.menu_issue, new Runnable() {
@Override @Override
public void run() { public void run() {
drawerLayout.closeDrawer(drawerContainer); if (!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
onMenuIssue(); onMenuIssue();
} }
}).setExternal(true)); }).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() { extra.add(new NavMenuItem(R.drawable.baseline_bug_report_24, R.string.menu_test, new Runnable() {
@Override @Override
public void run() { public void run() {
drawerLayout.closeDrawer(drawerContainer); if (!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
onMenuTest(); onMenuTest();
} }
}).setExternal(true)); }).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() { extra.add(new NavMenuItem(R.drawable.baseline_account_box_24, R.string.menu_privacy, new Runnable() {
@Override @Override
public void run() { public void run() {
drawerLayout.closeDrawer(drawerContainer); if (!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
onMenuPrivacy(); onMenuPrivacy();
} }
})); }));
@ -356,7 +393,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
@Override @Override
public void run() { public void run() {
if (!Helper.isPlayStoreInstall()) { if (!Helper.isPlayStoreInstall()) {
drawerLayout.closeDrawer(drawerContainer); if (!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
checkUpdate(true); 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() { extra.add(new NavMenuItem(R.drawable.baseline_monetization_on_24, R.string.menu_pro, new Runnable() {
@Override @Override
public void run() { public void run() {
drawerLayout.closeDrawer(drawerContainer); if (!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
startActivity(new Intent(ActivityView.this, ActivityBilling.class)); 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() { extra.add(new NavMenuItem(R.drawable.baseline_people_24, R.string.menu_invite, new Runnable() {
@Override @Override
public void run() { public void run() {
drawerLayout.closeDrawer(drawerContainer); if (!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
onMenuInvite(); onMenuInvite();
} }
}).setExternal(true)); }).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() { extra.add(new NavMenuItem(R.drawable.baseline_star_24, R.string.menu_rate, new Runnable() {
@Override @Override
public void run() { public void run() {
drawerLayout.closeDrawer(drawerContainer); if (!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
onMenuRate(); onMenuRate();
} }
}).setExternal(true)); }).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() { extra.add(new NavMenuItem(R.drawable.baseline_get_app_24, R.string.menu_other, new Runnable() {
@Override @Override
public void run() { public void run() {
drawerLayout.closeDrawer(drawerContainer); if (!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer);
onMenuOtherApps(); onMenuOtherApps();
} }
}).setExternal(true)); }).setExternal(true));
@ -546,10 +588,11 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if (drawerLayout.isDrawerOpen(drawerContainer)) int count = getSupportFragmentManager().getBackStackEntryCount();
if (drawerLayout.isDrawerOpen(drawerContainer) &&
!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer); drawerLayout.closeDrawer(drawerContainer);
else { else {
int count = getSupportFragmentManager().getBackStackEntryCount();
if (exit || count > 1) if (exit || count > 1)
super.onBackPressed(); super.onBackPressed();
else if (!backHandled()) { else if (!backHandled()) {
@ -577,7 +620,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
if (count == 0) if (count == 0)
finish(); finish();
else { else {
if (drawerLayout.isDrawerOpen(drawerContainer)) if (drawerLayout.isDrawerOpen(drawerContainer) &&
!drawerLayout.isLocked(drawerContainer))
drawerLayout.closeDrawer(drawerContainer); drawerLayout.closeDrawer(drawerContainer);
drawerToggle.setDrawerIndicatorEnabled(count == 1); drawerToggle.setDrawerIndicatorEnabled(count == 1);
@ -591,8 +635,12 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { 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 true;
}
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }

@ -20,24 +20,17 @@ package eu.faircode.email;
*/ */
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.graphics.Color;
import android.os.Parcelable;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.Gravity; import android.view.Gravity;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.drawerlayout.widget.DrawerLayout; import androidx.drawerlayout.widget.DrawerLayout;
import androidx.preference.PreferenceManager;
public class DrawerLayoutEx extends DrawerLayout { public class DrawerLayoutEx extends DrawerLayout {
private boolean locked = false;
public DrawerLayoutEx(@NonNull Context context) { public DrawerLayoutEx(@NonNull Context context) {
super(context); super(context);
} }
@ -52,32 +45,14 @@ public class DrawerLayoutEx extends DrawerLayout {
void setup(Configuration config, View drawerContainer) { void setup(Configuration config, View drawerContainer) {
setScrimColor(Helper.resolveColor(getContext(), R.attr.colorDrawerScrim)); setScrimColor(Helper.resolveColor(getContext(), R.attr.colorDrawerScrim));
if (config.orientation != Configuration.ORIENTATION_LANDSCAPE) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); setDrawerLockMode(LOCK_MODE_UNLOCKED);
boolean landscape = prefs.getBoolean("landscape", true); closeDrawer(drawerContainer, false);
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);
}
} }
} }
@Override public boolean isLocked(View view) {
protected void onRestoreInstanceState(Parcelable state) { return (getDrawerLockMode(view) != LOCK_MODE_UNLOCKED);
super.onRestoreInstanceState(state);
locked = isLocked();
} }
public boolean isLocked() { public boolean isLocked() {
@ -85,24 +60,8 @@ public class DrawerLayoutEx extends DrawerLayout {
getDrawerLockMode(Gravity.RIGHT) == LOCK_MODE_LOCKED_OPEN); 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 @Override
public boolean onInterceptTouchEvent(final MotionEvent ev) { public boolean onInterceptTouchEvent(final MotionEvent ev) {
return (!locked && super.onInterceptTouchEvent(ev)); return (!isLocked() && super.onInterceptTouchEvent(ev));
}
@Override
public void closeDrawer(@NonNull View drawerView) {
if (!locked)
super.closeDrawer(drawerView);
} }
} }

@ -569,7 +569,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer
swLandscape.setChecked(prefs.getBoolean("landscape", true)); swLandscape.setChecked(prefs.getBoolean("landscape", true));
swLandscape.setEnabled(normal); swLandscape.setEnabled(normal);
swLandscape3.setChecked(prefs.getBoolean("landscape3", false)); swLandscape3.setChecked(prefs.getBoolean("landscape3", true));
swLandscape3.setEnabled(normal && swLandscape.isChecked()); swLandscape3.setEnabled(normal && swLandscape.isChecked());
String startup = prefs.getString("startup", "unified"); String startup = prefs.getString("startup", "unified");

@ -263,7 +263,7 @@
<string name="title_advanced_manage_connectivity">Manage connectivity</string> <string name="title_advanced_manage_connectivity">Manage connectivity</string>
<string name="title_advanced_landscape">Use two columns in landscape mode</string> <string name="title_advanced_landscape">Use two columns in landscape mode</string>
<string name="title_advanced_landscape3">Always show navigation menu in landscape mode</string> <string name="title_advanced_landscape3">Allow fixed navigation menu in landscape mode</string>
<string name="title_advanced_startup">Show on start screen</string> <string name="title_advanced_startup">Show on start screen</string>
<string name="title_advanced_cards">Show cards</string> <string name="title_advanced_cards">Show cards</string>
<string name="title_advanced_date_header">Group by date</string> <string name="title_advanced_date_header">Group by date</string>

Loading…
Cancel
Save