mirror of https://github.com/M66B/FairEmail.git
Added option to group messages by week
This commit is contained in:
parent
55cadb8dce
commit
dabc89bc27
|
@ -341,6 +341,7 @@ public class FragmentMessages extends FragmentBase
|
||||||
private boolean dividers;
|
private boolean dividers;
|
||||||
private boolean category;
|
private boolean category;
|
||||||
private boolean date;
|
private boolean date;
|
||||||
|
private boolean date_week;
|
||||||
private boolean date_fixed;
|
private boolean date_fixed;
|
||||||
private boolean date_bold;
|
private boolean date_bold;
|
||||||
private boolean threading;
|
private boolean threading;
|
||||||
|
@ -481,6 +482,7 @@ public class FragmentMessages extends FragmentBase
|
||||||
dividers = prefs.getBoolean("dividers", true);
|
dividers = prefs.getBoolean("dividers", true);
|
||||||
category = prefs.getBoolean("group_category", false);
|
category = prefs.getBoolean("group_category", false);
|
||||||
date = prefs.getBoolean("date", true);
|
date = prefs.getBoolean("date", true);
|
||||||
|
date_week = prefs.getBoolean("date_week", false);
|
||||||
date_fixed = (!date && prefs.getBoolean("date_fixed", false));
|
date_fixed = (!date && prefs.getBoolean("date_fixed", false));
|
||||||
date_bold = prefs.getBoolean("date_bold", false);
|
date_bold = prefs.getBoolean("date_bold", false);
|
||||||
threading = (prefs.getBoolean("threading", true) ||
|
threading = (prefs.getBoolean("threading", true) ||
|
||||||
|
@ -946,8 +948,8 @@ public class FragmentMessages extends FragmentBase
|
||||||
cal1.setTimeInMillis(message.received);
|
cal1.setTimeInMillis(message.received);
|
||||||
int year0 = cal0.get(Calendar.YEAR);
|
int year0 = cal0.get(Calendar.YEAR);
|
||||||
int year1 = cal1.get(Calendar.YEAR);
|
int year1 = cal1.get(Calendar.YEAR);
|
||||||
int day0 = cal0.get(Calendar.DAY_OF_YEAR);
|
int day0 = cal0.get(date_week ? Calendar.WEEK_OF_YEAR : Calendar.DAY_OF_YEAR);
|
||||||
int day1 = cal1.get(Calendar.DAY_OF_YEAR);
|
int day1 = cal1.get(date_week ? Calendar.WEEK_OF_YEAR : Calendar.DAY_OF_YEAR);
|
||||||
if (year0 == year1 && day0 == day1)
|
if (year0 == year1 && day0 == day1)
|
||||||
dh = false;
|
dh = false;
|
||||||
}
|
}
|
||||||
|
@ -980,7 +982,9 @@ public class FragmentMessages extends FragmentBase
|
||||||
vSeparator.setVisibility(View.GONE);
|
vSeparator.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
tvDate.setText(getRelativeDate(message.received, parent.getContext()));
|
tvDate.setText(date_week
|
||||||
|
? getWeek(message.received, parent.getContext())
|
||||||
|
: getRelativeDate(message.received, parent.getContext()));
|
||||||
|
|
||||||
view.setContentDescription(tvDate.getText().toString());
|
view.setContentDescription(tvDate.getText().toString());
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
|
||||||
|
@ -1016,6 +1020,17 @@ public class FragmentMessages extends FragmentBase
|
||||||
DAY_IN_MILLIS, 0);
|
DAY_IN_MILLIS, 0);
|
||||||
return (rtime == null ? "" : rtime.toString());
|
return (rtime == null ? "" : rtime.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
String getWeek(long time, Context context) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
Calendar cal = Calendar.getInstance();
|
||||||
|
cal.setTimeInMillis(time);
|
||||||
|
sb.append(cal.get(Calendar.YEAR)).append('-').append(cal.get(Calendar.WEEK_OF_YEAR));
|
||||||
|
cal.set(Calendar.DAY_OF_WEEK, 1);
|
||||||
|
sb.append(' ').append(Helper.getDateInstance(context).format(cal.getTimeInMillis()));
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
rvMessage.addItemDecoration(dateDecorator);
|
rvMessage.addItemDecoration(dateDecorator);
|
||||||
|
|
||||||
|
|
|
@ -136,7 +136,7 @@ public class FragmentOptions extends FragmentBase {
|
||||||
"portrait2", "portrait2c", "portrait_min_size", "landscape", "landscape_min_size",
|
"portrait2", "portrait2c", "portrait_min_size", "landscape", "landscape_min_size",
|
||||||
"column_width",
|
"column_width",
|
||||||
"nav_categories", "nav_count", "nav_unseen_drafts", "nav_count_pinned", "navbar_colorize",
|
"nav_categories", "nav_count", "nav_unseen_drafts", "nav_count_pinned", "navbar_colorize",
|
||||||
"indentation", "date", "date_fixed", "date_bold", "threading", "threading_unread",
|
"indentation", "date", "date_week", "date_fixed", "date_bold", "threading", "threading_unread",
|
||||||
"highlight_unread", "highlight_color", "color_stripe", "color_stripe_wide",
|
"highlight_unread", "highlight_color", "color_stripe", "color_stripe_wide",
|
||||||
"avatars", "bimi", "favicons", "generated_icons", "identicons", "circular", "saturation", "brightness", "threshold",
|
"avatars", "bimi", "favicons", "generated_icons", "identicons", "circular", "saturation", "brightness", "threshold",
|
||||||
"authentication", "authentication_indicator",
|
"authentication", "authentication_indicator",
|
||||||
|
|
|
@ -68,6 +68,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer
|
||||||
private Button btnTheme;
|
private Button btnTheme;
|
||||||
private Spinner spStartup;
|
private Spinner spStartup;
|
||||||
private SwitchCompat swDate;
|
private SwitchCompat swDate;
|
||||||
|
private SwitchCompat swDateWeek;
|
||||||
private SwitchCompat swDateFixed;
|
private SwitchCompat swDateFixed;
|
||||||
private SwitchCompat swDateBold;
|
private SwitchCompat swDateBold;
|
||||||
private SwitchCompat swCategory;
|
private SwitchCompat swCategory;
|
||||||
|
@ -190,7 +191,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",
|
"theme", "startup",
|
||||||
"date", "date_fixed", "date_bold", "group_category",
|
"date", "date_week", "date_fixed", "date_bold", "group_category",
|
||||||
"cards", "beige", "tabular_card_bg", "shadow_unread", "shadow_highlight", "dividers",
|
"cards", "beige", "tabular_card_bg", "shadow_unread", "shadow_highlight", "dividers",
|
||||||
"portrait2", "portrait2c", "landscape", "close_pane", "column_width",
|
"portrait2", "portrait2c", "landscape", "close_pane", "column_width",
|
||||||
"nav_options", "nav_categories", "nav_count", "nav_unseen_drafts", "nav_count_pinned", "navbar_colorize",
|
"nav_options", "nav_categories", "nav_count", "nav_unseen_drafts", "nav_count_pinned", "navbar_colorize",
|
||||||
|
@ -228,6 +229,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer
|
||||||
btnTheme = view.findViewById(R.id.btnTheme);
|
btnTheme = view.findViewById(R.id.btnTheme);
|
||||||
spStartup = view.findViewById(R.id.spStartup);
|
spStartup = view.findViewById(R.id.spStartup);
|
||||||
swDate = view.findViewById(R.id.swDate);
|
swDate = view.findViewById(R.id.swDate);
|
||||||
|
swDateWeek = view.findViewById(R.id.swDateWeek);
|
||||||
swDateFixed = view.findViewById(R.id.swDateFixed);
|
swDateFixed = view.findViewById(R.id.swDateFixed);
|
||||||
swDateBold = view.findViewById(R.id.swDateBold);
|
swDateBold = view.findViewById(R.id.swDateBold);
|
||||||
swCategory = view.findViewById(R.id.swCategory);
|
swCategory = view.findViewById(R.id.swCategory);
|
||||||
|
@ -401,11 +403,19 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer
|
||||||
@Override
|
@Override
|
||||||
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
|
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
|
||||||
prefs.edit().putBoolean("date", checked).apply();
|
prefs.edit().putBoolean("date", checked).apply();
|
||||||
|
swDateWeek.setEnabled(checked);
|
||||||
swDateFixed.setEnabled(!checked);
|
swDateFixed.setEnabled(!checked);
|
||||||
swDateBold.setEnabled(checked || swDateFixed.isChecked());
|
swDateBold.setEnabled(checked || swDateFixed.isChecked());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
swDateWeek.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
|
||||||
|
prefs.edit().putBoolean("date_week", checked).apply();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
swDateFixed.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
swDateFixed.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
|
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
|
||||||
|
@ -1347,6 +1357,8 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer
|
||||||
}
|
}
|
||||||
|
|
||||||
swDate.setChecked(prefs.getBoolean("date", true));
|
swDate.setChecked(prefs.getBoolean("date", true));
|
||||||
|
swDateWeek.setChecked(prefs.getBoolean("date_week", false));
|
||||||
|
swDateWeek.setEnabled(swDate.isChecked());
|
||||||
swDateFixed.setChecked(prefs.getBoolean("date_fixed", false));
|
swDateFixed.setChecked(prefs.getBoolean("date_fixed", false));
|
||||||
swDateFixed.setEnabled(!swDate.isChecked());
|
swDateFixed.setEnabled(!swDate.isChecked());
|
||||||
swDateBold.setChecked(prefs.getBoolean("date_bold", false));
|
swDateBold.setChecked(prefs.getBoolean("date_bold", false));
|
||||||
|
|
|
@ -158,6 +158,18 @@
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/swDate" />
|
app:layout_constraintTop_toBottomOf="@id/swDate" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.SwitchCompat
|
||||||
|
android:id="@+id/swDateWeek"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="12dp"
|
||||||
|
android:layout_marginTop="12dp"
|
||||||
|
android:text="@string/title_advanced_date_week"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/tvDateHint"
|
||||||
|
app:switchPadding="12dp" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.SwitchCompat
|
<androidx.appcompat.widget.SwitchCompat
|
||||||
android:id="@+id/swDateFixed"
|
android:id="@+id/swDateFixed"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
|
@ -167,7 +179,7 @@
|
||||||
android:text="@string/title_advanced_date_fixed"
|
android:text="@string/title_advanced_date_fixed"
|
||||||
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/tvDateHint"
|
app:layout_constraintTop_toBottomOf="@id/swDateWeek"
|
||||||
app:switchPadding="12dp" />
|
app:switchPadding="12dp" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.SwitchCompat
|
<androidx.appcompat.widget.SwitchCompat
|
||||||
|
|
|
@ -514,6 +514,7 @@
|
||||||
<string name="title_advanced_cards_shadow_highlight">Use highlight color instead of accent color</string>
|
<string name="title_advanced_cards_shadow_highlight">Use highlight color instead of accent color</string>
|
||||||
<string name="title_advanced_tabular_dividers">Use divider lines when using tabular style</string>
|
<string name="title_advanced_tabular_dividers">Use divider lines when using tabular style</string>
|
||||||
<string name="title_advanced_date_header">Group by date</string>
|
<string name="title_advanced_date_header">Group by date</string>
|
||||||
|
<string name="title_advanced_date_week">Group by week instead of day</string>
|
||||||
<string name="title_advanced_date_fixed">Show fixed date header at the top</string>
|
<string name="title_advanced_date_fixed">Show fixed date header at the top</string>
|
||||||
<string name="title_advanced_date_bold">Show date in bold</string>
|
<string name="title_advanced_date_bold">Show date in bold</string>
|
||||||
<string name="title_advanced_threading">Conversation threading</string>
|
<string name="title_advanced_threading">Conversation threading</string>
|
||||||
|
|
Loading…
Reference in New Issue