mirror of https://github.com/M66B/FairEmail.git
Navigation menu item separators
This commit is contained in:
parent
ed5ee4ff04
commit
b4092d5c5e
|
@ -29,6 +29,8 @@ import android.content.SharedPreferences;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.res.AssetFileDescriptor;
|
import android.content.res.AssetFileDescriptor;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
|
import android.graphics.Rect;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
@ -50,6 +52,7 @@ import androidx.lifecycle.Lifecycle;
|
||||||
import androidx.lifecycle.Observer;
|
import androidx.lifecycle.Observer;
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
|
import androidx.recyclerview.widget.DividerItemDecoration;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
@ -134,10 +137,24 @@ public class ActivitySetup extends ActivityBilling implements FragmentManager.On
|
||||||
|
|
||||||
drawerContainer = findViewById(R.id.drawer_container);
|
drawerContainer = findViewById(R.id.drawer_container);
|
||||||
rvMenu = drawerContainer.findViewById(R.id.rvMenu);
|
rvMenu = drawerContainer.findViewById(R.id.rvMenu);
|
||||||
rvMenu.setLayoutManager(new LinearLayoutManager(this));
|
LinearLayoutManager llm = new LinearLayoutManager(this);
|
||||||
|
rvMenu.setLayoutManager(llm);
|
||||||
final AdapterNavMenu adapter = new AdapterNavMenu(this, this);
|
final AdapterNavMenu adapter = new AdapterNavMenu(this, this);
|
||||||
rvMenu.setAdapter(adapter);
|
rvMenu.setAdapter(adapter);
|
||||||
|
|
||||||
|
final Drawable d = getDrawable(R.drawable.divider);
|
||||||
|
DividerItemDecoration itemDecorator = new DividerItemDecoration(this, llm.getOrientation()) {
|
||||||
|
@Override
|
||||||
|
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
|
||||||
|
int pos = parent.getChildAdapterPosition(view);
|
||||||
|
NavMenuItem menu = adapter.get(pos);
|
||||||
|
Log.i("pos=" + pos + " separated=" + menu.isSeparated());
|
||||||
|
outRect.set(0, 0, 0, menu.isSeparated() ? d.getIntrinsicHeight() : 0);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
itemDecorator.setDrawable(d);
|
||||||
|
rvMenu.addItemDecoration(itemDecorator);
|
||||||
|
|
||||||
PackageManager pm = getPackageManager();
|
PackageManager pm = getPackageManager();
|
||||||
final List<NavMenuItem> menus = new ArrayList<>();
|
final List<NavMenuItem> menus = new ArrayList<>();
|
||||||
|
|
||||||
|
@ -155,7 +172,7 @@ public class ActivitySetup extends ActivityBilling implements FragmentManager.On
|
||||||
drawerLayout.closeDrawer(drawerContainer);
|
drawerLayout.closeDrawer(drawerContainer);
|
||||||
onMenuImport();
|
onMenuImport();
|
||||||
}
|
}
|
||||||
}));
|
}).setSeparated());
|
||||||
|
|
||||||
menus.add(new NavMenuItem(R.drawable.baseline_palette_24, R.string.title_setup_theme, new Runnable() {
|
menus.add(new NavMenuItem(R.drawable.baseline_palette_24, R.string.title_setup_theme, new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -188,7 +205,7 @@ public class ActivitySetup extends ActivityBilling implements FragmentManager.On
|
||||||
drawerLayout.closeDrawer(drawerContainer);
|
drawerLayout.closeDrawer(drawerContainer);
|
||||||
onMenuContacts();
|
onMenuContacts();
|
||||||
}
|
}
|
||||||
}));
|
}).setSeparated());
|
||||||
|
|
||||||
menus.add(new NavMenuItem(R.drawable.baseline_help_24, R.string.menu_legend, new Runnable() {
|
menus.add(new NavMenuItem(R.drawable.baseline_help_24, R.string.menu_legend, new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -29,6 +29,8 @@ import android.content.IntentFilter;
|
||||||
import android.content.IntentSender;
|
import android.content.IntentSender;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
|
import android.graphics.Rect;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
@ -60,6 +62,7 @@ import androidx.lifecycle.Lifecycle;
|
||||||
import androidx.lifecycle.Observer;
|
import androidx.lifecycle.Observer;
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
|
import androidx.recyclerview.widget.DividerItemDecoration;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
@ -106,8 +109,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
|
||||||
private RecyclerView rvFolder;
|
private RecyclerView rvFolder;
|
||||||
private RecyclerView rvMenu;
|
private RecyclerView rvMenu;
|
||||||
private ImageView ivExpander;
|
private ImageView ivExpander;
|
||||||
private RecyclerView rvMenuExtra1;
|
private RecyclerView rvMenuExtra;
|
||||||
private RecyclerView rvMenuExtra2;
|
|
||||||
|
|
||||||
private long message = -1;
|
private long message = -1;
|
||||||
private long attachment = -1;
|
private long attachment = -1;
|
||||||
|
@ -197,19 +199,27 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
|
||||||
|
|
||||||
ivExpander = drawerContainer.findViewById(R.id.ivExpander);
|
ivExpander = drawerContainer.findViewById(R.id.ivExpander);
|
||||||
|
|
||||||
rvMenuExtra1 = drawerContainer.findViewById(R.id.rvMenuExtra1);
|
rvMenuExtra = drawerContainer.findViewById(R.id.rvMenuExtra);
|
||||||
rvMenuExtra1.setLayoutManager(new LinearLayoutManager(this));
|
LinearLayoutManager llm = new LinearLayoutManager(this);
|
||||||
final AdapterNavMenu e1adapter = new AdapterNavMenu(this, this);
|
rvMenuExtra.setLayoutManager(llm);
|
||||||
rvMenuExtra1.setAdapter(e1adapter);
|
final AdapterNavMenu eadapter = new AdapterNavMenu(this, this);
|
||||||
|
rvMenuExtra.setAdapter(eadapter);
|
||||||
|
|
||||||
rvMenuExtra2 = drawerContainer.findViewById(R.id.rvMenuExtra2);
|
final Drawable d = getDrawable(R.drawable.divider);
|
||||||
rvMenuExtra2.setLayoutManager(new LinearLayoutManager(this));
|
DividerItemDecoration itemDecorator = new DividerItemDecoration(this, llm.getOrientation()) {
|
||||||
final AdapterNavMenu e2adapter = new AdapterNavMenu(this, this);
|
@Override
|
||||||
rvMenuExtra2.setAdapter(e2adapter);
|
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
|
||||||
|
int pos = parent.getChildAdapterPosition(view);
|
||||||
|
NavMenuItem menu = eadapter.get(pos);
|
||||||
|
Log.i("pos=" + pos + " separated=" + menu.isSeparated());
|
||||||
|
outRect.set(0, 0, 0, menu.isSeparated() ? d.getIntrinsicHeight() : 0);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
itemDecorator.setDrawable(d);
|
||||||
|
rvMenuExtra.addItemDecoration(itemDecorator);
|
||||||
|
|
||||||
boolean minimal = prefs.getBoolean("minimal", false);
|
boolean minimal = prefs.getBoolean("minimal", false);
|
||||||
rvMenuExtra1.setVisibility(minimal ? View.GONE : View.VISIBLE);
|
rvMenuExtra.setVisibility(minimal ? View.GONE : View.VISIBLE);
|
||||||
rvMenuExtra2.setVisibility(minimal ? View.GONE : View.VISIBLE);
|
|
||||||
ivExpander.setImageLevel(minimal ? 1 /* more */ : 0 /* less */);
|
ivExpander.setImageLevel(minimal ? 1 /* more */ : 0 /* less */);
|
||||||
|
|
||||||
ivExpander.setOnClickListener(new View.OnClickListener() {
|
ivExpander.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@ -217,8 +227,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
boolean minimal = !prefs.getBoolean("minimal", false);
|
boolean minimal = !prefs.getBoolean("minimal", false);
|
||||||
prefs.edit().putBoolean("minimal", minimal).apply();
|
prefs.edit().putBoolean("minimal", minimal).apply();
|
||||||
rvMenuExtra1.setVisibility(minimal ? View.GONE : View.VISIBLE);
|
rvMenuExtra.setVisibility(minimal ? View.GONE : View.VISIBLE);
|
||||||
rvMenuExtra2.setVisibility(minimal ? View.GONE : View.VISIBLE);
|
|
||||||
ivExpander.setImageLevel(minimal ? 1 /* more */ : 0 /* less */);
|
ivExpander.setImageLevel(minimal ? 1 /* more */ : 0 /* less */);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -267,9 +276,9 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
|
||||||
|
|
||||||
madapter.set(menus);
|
madapter.set(menus);
|
||||||
|
|
||||||
List<NavMenuItem> extra1 = new ArrayList<>();
|
List<NavMenuItem> extra = new ArrayList<>();
|
||||||
|
|
||||||
extra1.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);
|
drawerLayout.closeDrawer(drawerContainer);
|
||||||
|
@ -278,7 +287,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
|
||||||
}));
|
}));
|
||||||
|
|
||||||
if (Helper.getIntentFAQ().resolveActivity(getPackageManager()) != null)
|
if (Helper.getIntentFAQ().resolveActivity(getPackageManager()) != null)
|
||||||
extra1.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);
|
drawerLayout.closeDrawer(drawerContainer);
|
||||||
|
@ -293,7 +302,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
|
||||||
}));
|
}));
|
||||||
|
|
||||||
if (Helper.getIntentPrivacy().resolveActivity(getPackageManager()) != null)
|
if (Helper.getIntentPrivacy().resolveActivity(getPackageManager()) != null)
|
||||||
extra1.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);
|
drawerLayout.closeDrawer(drawerContainer);
|
||||||
|
@ -307,7 +316,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
extra1.add(new NavMenuItem(R.drawable.baseline_info_24, R.string.menu_about, new Runnable() {
|
extra.add(new NavMenuItem(R.drawable.baseline_info_24, R.string.menu_about, new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
onMenuAbout();
|
onMenuAbout();
|
||||||
|
@ -320,14 +329,10 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
|
||||||
checkUpdate(true);
|
checkUpdate(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}));
|
}).setSeparated());
|
||||||
|
|
||||||
e1adapter.set(extra1);
|
|
||||||
|
|
||||||
List<NavMenuItem> extra2 = new ArrayList<>();
|
|
||||||
|
|
||||||
if (getIntentPro() == null || getIntentPro().resolveActivity(getPackageManager()) != null)
|
if (getIntentPro() == null || getIntentPro().resolveActivity(getPackageManager()) != null)
|
||||||
extra2.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);
|
drawerLayout.closeDrawer(drawerContainer);
|
||||||
|
@ -336,7 +341,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
|
||||||
}));
|
}));
|
||||||
|
|
||||||
if ((getIntentInvite().resolveActivity(getPackageManager()) != null))
|
if ((getIntentInvite().resolveActivity(getPackageManager()) != null))
|
||||||
extra2.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);
|
drawerLayout.closeDrawer(drawerContainer);
|
||||||
|
@ -345,7 +350,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
|
||||||
}));
|
}));
|
||||||
|
|
||||||
if (getIntentRate().resolveActivity(getPackageManager()) != null)
|
if (getIntentRate().resolveActivity(getPackageManager()) != null)
|
||||||
extra2.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);
|
drawerLayout.closeDrawer(drawerContainer);
|
||||||
|
@ -354,7 +359,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
|
||||||
}));
|
}));
|
||||||
|
|
||||||
if (getIntentOtherApps().resolveActivity(getPackageManager()) != null)
|
if (getIntentOtherApps().resolveActivity(getPackageManager()) != null)
|
||||||
extra2.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);
|
drawerLayout.closeDrawer(drawerContainer);
|
||||||
|
@ -362,7 +367,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
e2adapter.set(extra2);
|
eadapter.set(extra);
|
||||||
|
|
||||||
DB db = DB.getInstance(this);
|
DB db = DB.getInstance(this);
|
||||||
|
|
||||||
|
|
|
@ -140,6 +140,10 @@ public class AdapterNavMenu extends RecyclerView.Adapter<AdapterNavMenu.ViewHold
|
||||||
diff.dispatchUpdatesTo(this);
|
diff.dispatchUpdatesTo(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NavMenuItem get(int pos) {
|
||||||
|
return items.get(pos);
|
||||||
|
}
|
||||||
|
|
||||||
private class DiffCallback extends DiffUtil.Callback {
|
private class DiffCallback extends DiffUtil.Callback {
|
||||||
private List<NavMenuItem> prev = new ArrayList<>();
|
private List<NavMenuItem> prev = new ArrayList<>();
|
||||||
private List<NavMenuItem> next = new ArrayList<>();
|
private List<NavMenuItem> next = new ArrayList<>();
|
||||||
|
|
|
@ -8,6 +8,7 @@ public class NavMenuItem {
|
||||||
private int icon;
|
private int icon;
|
||||||
private int title;
|
private int title;
|
||||||
private Integer count = null;
|
private Integer count = null;
|
||||||
|
private boolean separated = false;
|
||||||
private Runnable click;
|
private Runnable click;
|
||||||
private Runnable longClick;
|
private Runnable longClick;
|
||||||
|
|
||||||
|
@ -30,6 +31,11 @@ public class NavMenuItem {
|
||||||
this.count = count;
|
this.count = count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NavMenuItem setSeparated() {
|
||||||
|
this.separated = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
int getIcon() {
|
int getIcon() {
|
||||||
return this.icon;
|
return this.icon;
|
||||||
}
|
}
|
||||||
|
@ -42,6 +48,10 @@ public class NavMenuItem {
|
||||||
return this.count;
|
return this.count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean isSeparated() {
|
||||||
|
return this.separated;
|
||||||
|
}
|
||||||
|
|
||||||
void onClick() {
|
void onClick() {
|
||||||
click.run();
|
click.run();
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,26 +62,10 @@
|
||||||
app:layout_constraintTop_toBottomOf="@id/vSeparatorMenu" />
|
app:layout_constraintTop_toBottomOf="@id/vSeparatorMenu" />
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/rvMenuExtra1"
|
android:id="@+id/rvMenuExtra"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:nestedScrollingEnabled="false"
|
android:nestedScrollingEnabled="false"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/ivExpander" />
|
app:layout_constraintTop_toBottomOf="@id/ivExpander" />
|
||||||
|
|
||||||
<View
|
|
||||||
android:id="@+id/vSeparatorMenuExtra"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="1dp"
|
|
||||||
android:background="?attr/colorSeparator"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/rvMenuExtra1" />
|
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
|
||||||
android:id="@+id/rvMenuExtra2"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:nestedScrollingEnabled="false"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/vSeparatorMenuExtra" />
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/colorDrawerBackground">
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:id="@+id/clItem"
|
android:id="@+id/clItem"
|
||||||
|
|
Loading…
Reference in New Issue