Added nav menu settings

pull/203/head
M66B 4 years ago
parent a55230f36b
commit 802edc8553

@ -54,6 +54,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.PopupMenu;
import androidx.constraintlayout.widget.Group; import androidx.constraintlayout.widget.Group;
import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationCompat;
import androidx.core.widget.NestedScrollView; import androidx.core.widget.NestedScrollView;
@ -91,6 +92,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
private String startup; private String startup;
private boolean nav_pinned; private boolean nav_pinned;
private boolean nav_expanded; private boolean nav_expanded;
private boolean nav_options;
private int colorDrawerScrim; private int colorDrawerScrim;
private int layoutId; private int layoutId;
@ -106,6 +108,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
private ImageButton ibExpanderNav; private ImageButton ibExpanderNav;
private ImageButton ibPin; private ImageButton ibPin;
private ImageButton ibSettings; private ImageButton ibSettings;
private View vSeparatorOptions;
private ImageButton ibExpanderAccount; private ImageButton ibExpanderAccount;
private RecyclerView rvAccount; private RecyclerView rvAccount;
private ImageButton ibExpanderUnified; private ImageButton ibExpanderUnified;
@ -187,6 +190,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
startup = prefs.getString("startup", "unified"); startup = prefs.getString("startup", "unified");
nav_pinned = getDrawerPinned(); nav_pinned = getDrawerPinned();
nav_expanded = prefs.getBoolean("nav_expanded", true); nav_expanded = prefs.getBoolean("nav_expanded", true);
nav_options = prefs.getBoolean("nav_options", true);
Configuration config = getResources().getConfiguration(); Configuration config = getResources().getConfiguration();
boolean portrait2 = prefs.getBoolean("portrait2", false); boolean portrait2 = prefs.getBoolean("portrait2", false);
@ -273,6 +277,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
ibExpanderNav = drawerContainer.findViewById(R.id.ibExpanderNav); ibExpanderNav = drawerContainer.findViewById(R.id.ibExpanderNav);
ibPin = drawerContainer.findViewById(R.id.ibPin); ibPin = drawerContainer.findViewById(R.id.ibPin);
ibSettings = drawerContainer.findViewById(R.id.ibSettings); ibSettings = drawerContainer.findViewById(R.id.ibSettings);
vSeparatorOptions = drawerContainer.findViewById(R.id.vSeparatorOptions);
grpOptions = drawerContainer.findViewById(R.id.grpOptions); grpOptions = drawerContainer.findViewById(R.id.grpOptions);
ibExpanderAccount = drawerContainer.findViewById(R.id.ibExpanderAccount); ibExpanderAccount = drawerContainer.findViewById(R.id.ibExpanderAccount);
rvAccount = drawerContainer.findViewById(R.id.rvAccount); rvAccount = drawerContainer.findViewById(R.id.rvAccount);
@ -344,15 +349,45 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
ibSettings.setOnClickListener(new View.OnClickListener() { ibSettings.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Intent privacy = new Intent(v.getContext(), ActivitySetup.class) PopupMenuLifecycle popupMenu = new PopupMenuLifecycle(ActivityView.this, owner, ibSettings);
.setAction("display") popupMenu.inflate(R.menu.popup_nav);
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) popupMenu.insertIcons(ActivityView.this);
.putExtra("tab", "display");
v.getContext().startActivity(privacy); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
int itemId = item.getItemId();
if (itemId == R.id.menu_hide) {
View dview = LayoutInflater.from(ActivityView.this).inflate(R.layout.dialog_nav_options, null);
new AlertDialog.Builder(ActivityView.this)
.setView(dview)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
prefs.edit().putBoolean("nav_options", false).apply();
}
})
.setNegativeButton(android.R.string.cancel, null)
.show();
return true;
} else if (itemId != R.id.menu_settings) {
String tab = FragmentOptions.TAB_LABELS.get(item.getOrder());
startActivity(new Intent(ActivityView.this, ActivitySetup.class)
.setAction(tab)
.putExtra("tab", tab));
return true;
}
return false;
}
});
popupMenu.show();
} }
}); });
grpOptions.setVisibility(nav_expanded ? View.VISIBLE : View.GONE); ibExpanderNav.setVisibility(nav_options ? View.VISIBLE : View.GONE);
grpOptions.setVisibility(nav_expanded && nav_options ? View.VISIBLE : View.GONE);
vSeparatorOptions.setVisibility(nav_options ? View.VISIBLE : View.GONE);
// Accounts // Accounts
rvAccount.setLayoutManager(new LinearLayoutManager(this)); rvAccount.setLayoutManager(new LinearLayoutManager(this));
@ -789,6 +824,17 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
drawerToggle.onConfigurationChanged(newConfig); drawerToggle.onConfigurationChanged(newConfig);
} }
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
super.onSharedPreferenceChanged(prefs, key);
if ("nav_options".equals(key)) {
nav_options = prefs.getBoolean(key, true);
ibExpanderNav.setVisibility(nav_options ? View.VISIBLE : View.GONE);
grpOptions.setVisibility(nav_expanded && nav_options ? View.VISIBLE : View.GONE);
vSeparatorOptions.setVisibility(nav_options ? View.VISIBLE : View.GONE);
}
}
private void setupDrawer() { private void setupDrawer() {
if (nav_pinned) { if (nav_pinned) {
drawerLayout.setScrimColor(Color.TRANSPARENT); drawerLayout.setScrimColor(Color.TRANSPARENT);

@ -59,6 +59,10 @@ import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayout;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class FragmentOptions extends FragmentBase { public class FragmentOptions extends FragmentBase {
private ViewPager pager; private ViewPager pager;
private PagerAdapter adapter; private PagerAdapter adapter;
@ -103,6 +107,19 @@ public class FragmentOptions extends FragmentBase {
R.drawable.twotone_more_24 R.drawable.twotone_more_24
}; };
static final List<String> TAB_LABELS = Collections.unmodifiableList(Arrays.asList(
"main",
"sync",
"send",
"connection",
"display",
"behavior",
"privacy",
"encryption",
"notifications",
"misc"
));
static String[] OPTIONS_RESTART = new String[]{ static String[] OPTIONS_RESTART = new String[]{
"first", "app_support", "notify_archive", "message_swipe", "message_select", "folder_actions", "folder_sync", "first", "app_support", "notify_archive", "message_swipe", "message_select", "folder_actions", "folder_sync",
"subscriptions", "subscriptions",
@ -212,17 +229,12 @@ public class FragmentOptions extends FragmentBase {
} }
String tab = getActivity().getIntent().getStringExtra("tab"); String tab = getActivity().getIntent().getStringExtra("tab");
if ("connection".equals(tab)) if (!TextUtils.isEmpty(tab)) {
pager.setCurrentItem(3); int index = TAB_LABELS.indexOf(tab);
else if ("display".equals(tab)) if (index >= 0)
pager.setCurrentItem(4); pager.setCurrentItem(index);
else if ("privacy".equals(tab)) getActivity().getIntent().removeExtra("tab");
pager.setCurrentItem(6); }
else if ("encryption".equals(tab))
pager.setCurrentItem(7);
else if ("misc".equals(tab))
pager.setCurrentItem(9);
getActivity().getIntent().removeExtra("tab");
} }
@Override @Override

@ -69,6 +69,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer
private SwitchCompat swPortrait2; private SwitchCompat swPortrait2;
private SwitchCompat swPortrait2c; private SwitchCompat swPortrait2c;
private SwitchCompat swLandscape; private SwitchCompat swLandscape;
private SwitchCompat swNavOptions;
private SwitchCompat swNavMessageCount; private SwitchCompat swNavMessageCount;
private SwitchCompat swThreading; private SwitchCompat swThreading;
@ -154,7 +155,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer
private final static String[] RESET_OPTIONS = new String[]{ private final static String[] RESET_OPTIONS = new String[]{
"theme", "startup", "cards", "beige", "tabular_card_bg", "shadow_unread", "theme", "startup", "cards", "beige", "tabular_card_bg", "shadow_unread",
"date", "date_bold", "date", "date_bold",
"portrait2", "portrait2c", "landscape", "nav_count", "navbar_colorize", "portrait2", "portrait2c", "landscape", "nav_options", "nav_count", "navbar_colorize",
"threading", "threading_unread", "indentation", "seekbar", "actionbar", "actionbar_color", "threading", "threading_unread", "indentation", "seekbar", "actionbar", "actionbar_color",
"highlight_unread", "highlight_color", "color_stripe", "highlight_unread", "highlight_color", "color_stripe",
"avatars", "bimi", "gravatars", "favicons", "generated_icons", "identicons", "circular", "saturation", "brightness", "threshold", "avatars", "bimi", "gravatars", "favicons", "generated_icons", "identicons", "circular", "saturation", "brightness", "threshold",
@ -191,6 +192,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer
swPortrait2 = view.findViewById(R.id.swPortrait2); swPortrait2 = view.findViewById(R.id.swPortrait2);
swPortrait2c = view.findViewById(R.id.swPortrait2c); swPortrait2c = view.findViewById(R.id.swPortrait2c);
swLandscape = view.findViewById(R.id.swLandscape); swLandscape = view.findViewById(R.id.swLandscape);
swNavOptions = view.findViewById(R.id.swNavOptions);
swNavMessageCount = view.findViewById(R.id.swNavMessageCount); swNavMessageCount = view.findViewById(R.id.swNavMessageCount);
swNavBarColorize = view.findViewById(R.id.swNavBarColorize); swNavBarColorize = view.findViewById(R.id.swNavBarColorize);
@ -368,6 +370,13 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer
} }
}); });
swNavOptions.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
prefs.edit().putBoolean("nav_options", checked).apply();
}
});
swNavMessageCount.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { swNavMessageCount.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override @Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
@ -1025,6 +1034,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer
swPortrait2.setChecked(prefs.getBoolean("portrait2", false)); swPortrait2.setChecked(prefs.getBoolean("portrait2", false));
swPortrait2c.setChecked(prefs.getBoolean("portrait2c", false) && !swPortrait2.isChecked()); swPortrait2c.setChecked(prefs.getBoolean("portrait2c", false) && !swPortrait2.isChecked());
swLandscape.setChecked(prefs.getBoolean("landscape", true)); swLandscape.setChecked(prefs.getBoolean("landscape", true));
swNavOptions.setChecked(prefs.getBoolean("nav_options", true));
swNavMessageCount.setChecked(prefs.getBoolean("nav_count", false)); swNavMessageCount.setChecked(prefs.getBoolean("nav_count", false));
swNavBarColorize.setChecked(prefs.getBoolean("navbar_colorize", false)); swNavBarColorize.setChecked(prefs.getBoolean("navbar_colorize", false));

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<eu.faircode.email.ScrollViewEx xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="24dp"
android:scrollbarStyle="outsideOverlay">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<eu.faircode.email.FixedTextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title_advanced_nav_hide_title"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="?android:textColorPrimary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/ivExpanderNav"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:padding="6dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTitle"
app:srcCompat="@drawable/expander_hor" />
<ImageView
android:id="@+id/ivPin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:padding="6dp"
app:layout_constraintStart_toEndOf="@id/ivExpanderNav"
app:layout_constraintTop_toBottomOf="@id/tvTitle"
app:srcCompat="@drawable/pin" />
<ImageView
android:id="@+id/ivSettings"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:padding="6dp"
app:layout_constraintStart_toEndOf="@id/ivPin"
app:layout_constraintTop_toBottomOf="@id/tvTitle"
app:srcCompat="@drawable/twotone_settings_24" />
<View
android:id="@+id/vDash"
android:layout_width="0dp"
android:layout_height="2dp"
android:background="?attr/colorWarning"
app:layout_constraintBottom_toBottomOf="@id/ivExpanderNav"
app:layout_constraintEnd_toEndOf="@id/ivSettings"
app:layout_constraintStart_toStartOf="@id/ivExpanderNav"
app:layout_constraintTop_toTopOf="@id/ivExpanderNav" />
<eu.faircode.email.FixedTextView
android:id="@+id/tMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/title_advanced_nav_hide_message"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="italic"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivExpanderNav" />
</androidx.constraintlayout.widget.ConstraintLayout>
</eu.faircode.email.ScrollViewEx>

@ -310,6 +310,17 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/swLandscape" /> app:layout_constraintTop_toBottomOf="@id/swLandscape" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/swNavOptions"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/title_advanced_nav_options"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvLandscapeHint"
app:switchPadding="12dp" />
<androidx.appcompat.widget.SwitchCompat <androidx.appcompat.widget.SwitchCompat
android:id="@+id/swNavMessageCount" android:id="@+id/swNavMessageCount"
android:layout_width="0dp" android:layout_width="0dp"
@ -318,7 +329,7 @@
android:text="@string/title_advanced_nav_message_count" android:text="@string/title_advanced_nav_message_count"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvLandscapeHint" app:layout_constraintTop_toBottomOf="@id/swNavOptions"
app:switchPadding="12dp" /> app:switchPadding="12dp" />
<androidx.appcompat.widget.SwitchCompat <androidx.appcompat.widget.SwitchCompat

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_hide"
android:icon="@drawable/twotone_visibility_off_24"
android:title="@string/title_hide" />
<item
android:id="@+id/menu_settings"
android:icon="@drawable/twotone_settings_24"
android:title="@string/menu_setup">
<menu>
<item
android:id="@+id/menu_settings_main"
android:icon="@drawable/twotone_home_24"
android:orderInCategory="0"
android:title="@string/title_advanced_section_main" />
<item
android:id="@+id/menu_settings_sync"
android:icon="@drawable/twotone_sync_24"
android:orderInCategory="1"
android:title="@string/title_advanced_section_synchronize" />
<item
android:id="@+id/menu_settings_send"
android:icon="@drawable/twotone_send_24"
android:orderInCategory="2"
android:title="@string/title_advanced_section_send" />
<item
android:id="@+id/menu_settings_connection"
android:icon="@drawable/twotone_cloud_24"
android:orderInCategory="3"
android:title="@string/title_advanced_section_connection" />
<item
android:id="@+id/menu_settings_display"
android:icon="@drawable/twotone_monitor_24"
android:orderInCategory="4"
android:title="@string/title_advanced_section_display" />
<item
android:id="@+id/menu_settings_behavior"
android:icon="@drawable/twotone_psychology_24"
android:orderInCategory="5"
android:title="@string/title_advanced_section_behavior" />
<item
android:id="@+id/menu_settings_privacy"
android:icon="@drawable/twotone_account_circle_24"
android:orderInCategory="6"
android:title="@string/title_advanced_section_privacy" />
<item
android:id="@+id/menu_settings_encryption"
android:icon="@drawable/twotone_lock_24"
android:orderInCategory="7"
android:title="@string/title_advanced_section_encryption" />
<item
android:id="@+id/menu_settings_notification"
android:icon="@drawable/twotone_notifications_24"
android:orderInCategory="8"
android:title="@string/title_advanced_section_notifications" />
<item
android:id="@+id/menu_settings_misc"
android:icon="@drawable/twotone_more_24"
android:orderInCategory="9"
android:title="@string/title_advanced_section_misc" />
</menu>
</item>
</menu>

@ -400,7 +400,9 @@
<string name="title_advanced_landscape">Landscape mode</string> <string name="title_advanced_landscape">Landscape mode</string>
<string name="title_advanced_two_row">Use two rows</string> <string name="title_advanced_two_row">Use two rows</string>
<string name="title_advanced_two_col">Use two columns</string> <string name="title_advanced_two_col">Use two columns</string>
<string name="title_advanced_default_nav">Show navigation menu by default</string> <string name="title_advanced_nav_options">Show navigation menu options</string>
<string name="title_advanced_nav_hide_title">Hide navigation menu options?</string>
<string name="title_advanced_nav_hide_message">You can enable the options again in the display settings</string>
<string name="title_advanced_nav_message_count">Show number of locally stored messages in the navigation menu</string> <string name="title_advanced_nav_message_count">Show number of locally stored messages in the navigation menu</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">Use card style instead of tabular style</string> <string name="title_advanced_cards">Use card style instead of tabular style</string>

Loading…
Cancel
Save