Added fail-safe

pull/209/head
M66B 2 years ago
parent 4ba6518b3b
commit 24f6c1b4ff

@ -5015,223 +5015,231 @@ public class FragmentMessages extends FragmentBase
@Override @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_messages, menu); try {
inflater.inflate(R.menu.menu_messages, menu);
final Context context = getContext();
PopupMenuLifecycle.insertIcons(context, menu, false);
LayoutInflater infl = LayoutInflater.from(context); final Context context = getContext();
ImageButton ib = (ImageButton) infl.inflate(R.layout.action_button, null); PopupMenuLifecycle.insertIcons(context, menu, false);
ib.setId(View.generateViewId());
ib.setImageResource(R.drawable.twotone_folder_24); LayoutInflater infl = LayoutInflater.from(context);
ib.setContentDescription(getString(R.string.title_legend_section_folders)); ImageButton ib = (ImageButton) infl.inflate(R.layout.action_button, null);
ib.setOnClickListener(new View.OnClickListener() { ib.setId(View.generateViewId());
@Override ib.setImageResource(R.drawable.twotone_folder_24);
public void onClick(View v) { ib.setContentDescription(getString(R.string.title_legend_section_folders));
onMenuFolders(primary); ib.setOnClickListener(new View.OnClickListener() {
} @Override
}); public void onClick(View v) {
ib.setOnLongClickListener(new View.OnLongClickListener() { onMenuFolders(primary);
@Override }
public boolean onLongClick(View v) { });
FragmentDialogSelectAccount fragment = new FragmentDialogSelectAccount(); ib.setOnLongClickListener(new View.OnLongClickListener() {
fragment.setArguments(new Bundle()); @Override
fragment.setTargetFragment(FragmentMessages.this, REQUEST_ACCOUNT); public boolean onLongClick(View v) {
fragment.show(getParentFragmentManager(), "messages:accounts"); FragmentDialogSelectAccount fragment = new FragmentDialogSelectAccount();
return true; fragment.setArguments(new Bundle());
} fragment.setTargetFragment(FragmentMessages.this, REQUEST_ACCOUNT);
}); fragment.show(getParentFragmentManager(), "messages:accounts");
menu.findItem(R.id.menu_folders).setActionView(ib); return true;
}
});
menu.findItem(R.id.menu_folders).setActionView(ib);
MenuCompat.setGroupDividerEnabled(menu, true); MenuCompat.setGroupDividerEnabled(menu, true);
super.onCreateOptionsMenu(menu, inflater); super.onCreateOptionsMenu(menu, inflater);
} catch (Throwable ex) {
Log.e(ex);
}
} }
@Override @Override
public void onPrepareOptionsMenu(Menu menu) { public void onPrepareOptionsMenu(Menu menu) {
boolean drafts = EntityFolder.DRAFTS.equals(type); try {
boolean outbox = EntityFolder.OUTBOX.equals(type); boolean drafts = EntityFolder.DRAFTS.equals(type);
boolean sent = EntityFolder.SENT.equals(type); boolean outbox = EntityFolder.OUTBOX.equals(type);
boolean sent = EntityFolder.SENT.equals(type);
final Context context = getContext();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String sort = prefs.getString(getSort(context, viewType, type), "time");
boolean ascending = prefs.getBoolean(getSortOrder(context, viewType, type), outbox);
boolean filter_seen = prefs.getBoolean(getFilter(context, "seen", viewType, type), false);
boolean filter_unflagged = prefs.getBoolean(getFilter(context, "unflagged", viewType, type), false);
boolean filter_unknown = prefs.getBoolean(getFilter(context, "unknown", viewType, type), false);
boolean filter_snoozed = prefs.getBoolean(getFilter(context, "snoozed", viewType, type), true);
boolean filter_deleted = prefs.getBoolean(getFilter(context, "deleted", viewType, type), false);
boolean filter_duplicates = prefs.getBoolean("filter_duplicates", true);
boolean filter_trash = prefs.getBoolean("filter_trash", false);
boolean language_detection = prefs.getBoolean("language_detection", false);
String filter_language = prefs.getString("filter_language", null);
boolean perform_expunge = prefs.getBoolean("perform_expunge", true);
boolean compact = prefs.getBoolean("compact", false);
boolean confirm_links = prefs.getBoolean("confirm_links", true);
int zoom = prefs.getInt("view_zoom", compact ? 0 : 1);
int padding = prefs.getInt("view_padding", compact || !cards ? 0 : 1);
boolean quick_filter = prefs.getBoolean("quick_filter", false);
boolean folder = final Context context = getContext();
(viewType == AdapterMessage.ViewType.UNIFIED || SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
(viewType == AdapterMessage.ViewType.FOLDER && !outbox)); String sort = prefs.getString(getSort(context, viewType, type), "time");
boolean ascending = prefs.getBoolean(getSortOrder(context, viewType, type), outbox);
boolean filter_active = (filter_seen || filter_unflagged || filter_unknown || boolean filter_seen = prefs.getBoolean(getFilter(context, "seen", viewType, type), false);
(language_detection && !TextUtils.isEmpty(filter_language))); boolean filter_unflagged = prefs.getBoolean(getFilter(context, "unflagged", viewType, type), false);
int filterColor = Helper.resolveColor(context, R.attr.colorAccent); boolean filter_unknown = prefs.getBoolean(getFilter(context, "unknown", viewType, type), false);
float filterLighten = 0.7f - (float) ColorUtils.calculateLuminance(filterColor); boolean filter_snoozed = prefs.getBoolean(getFilter(context, "snoozed", viewType, type), true);
if (filterLighten > 0) boolean filter_deleted = prefs.getBoolean(getFilter(context, "deleted", viewType, type), false);
filterColor = ColorUtils.blendARGB(filterColor, Color.WHITE, filterLighten); boolean filter_duplicates = prefs.getBoolean("filter_duplicates", true);
MenuItem menuFilter = menu.findItem(R.id.menu_filter); boolean filter_trash = prefs.getBoolean("filter_trash", false);
menuFilter.setShowAsAction(folder && filter_active boolean language_detection = prefs.getBoolean("language_detection", false);
? MenuItem.SHOW_AS_ACTION_ALWAYS String filter_language = prefs.getString("filter_language", null);
: MenuItem.SHOW_AS_ACTION_NEVER); boolean perform_expunge = prefs.getBoolean("perform_expunge", true);
MenuItemCompat.setIconTintList(menuFilter, folder && filter_active boolean compact = prefs.getBoolean("compact", false);
? ColorStateList.valueOf(filterColor) : null); boolean confirm_links = prefs.getBoolean("confirm_links", true);
menuFilter.setIcon(folder && filter_active ? R.drawable.twotone_filter_alt_24 : R.drawable.twotone_filter_list_24); int zoom = prefs.getInt("view_zoom", compact ? 0 : 1);
int padding = prefs.getInt("view_padding", compact || !cards ? 0 : 1);
MenuItem menuSearch = menu.findItem(R.id.menu_search); boolean quick_filter = prefs.getBoolean("quick_filter", false);
menuSearch.setVisible(folder);
boolean folder =
menu.findItem(R.id.menu_save_search).setVisible( (viewType == AdapterMessage.ViewType.UNIFIED ||
viewType == AdapterMessage.ViewType.SEARCH && (viewType == AdapterMessage.ViewType.FOLDER && !outbox));
criteria != null && criteria.id == null);
menu.findItem(R.id.menu_edit_search).setVisible( boolean filter_active = (filter_seen || filter_unflagged || filter_unknown ||
viewType == AdapterMessage.ViewType.SEARCH && (language_detection && !TextUtils.isEmpty(filter_language)));
criteria != null && criteria.id != null); int filterColor = Helper.resolveColor(context, R.attr.colorAccent);
float filterLighten = 0.7f - (float) ColorUtils.calculateLuminance(filterColor);
menu.findItem(R.id.menu_folders).setVisible( if (filterLighten > 0)
viewType == AdapterMessage.ViewType.UNIFIED && filterColor = ColorUtils.blendARGB(filterColor, Color.WHITE, filterLighten);
type == null && primary >= 0); MenuItem menuFilter = menu.findItem(R.id.menu_filter);
ImageButton ib = (ImageButton) menu.findItem(R.id.menu_folders).getActionView(); menuFilter.setShowAsAction(folder && filter_active
ib.setImageResource(connected ? MenuItem.SHOW_AS_ACTION_ALWAYS
? R.drawable.twotone_folder_special_24 : R.drawable.twotone_folder_24); : MenuItem.SHOW_AS_ACTION_NEVER);
MenuItemCompat.setIconTintList(menuFilter, folder && filter_active
menu.findItem(R.id.menu_sort_on).setVisible(viewType != AdapterMessage.ViewType.SEARCH); ? ColorStateList.valueOf(filterColor) : null);
menuFilter.setIcon(folder && filter_active ? R.drawable.twotone_filter_alt_24 : R.drawable.twotone_filter_list_24);
MenuItem menuSearch = menu.findItem(R.id.menu_search);
menuSearch.setVisible(folder);
menu.findItem(R.id.menu_save_search).setVisible(
viewType == AdapterMessage.ViewType.SEARCH &&
criteria != null && criteria.id == null);
menu.findItem(R.id.menu_edit_search).setVisible(
viewType == AdapterMessage.ViewType.SEARCH &&
criteria != null && criteria.id != null);
menu.findItem(R.id.menu_folders).setVisible(
viewType == AdapterMessage.ViewType.UNIFIED &&
type == null && primary >= 0);
ImageButton ib = (ImageButton) menu.findItem(R.id.menu_folders).getActionView();
ib.setImageResource(connected
? R.drawable.twotone_folder_special_24 : R.drawable.twotone_folder_24);
menu.findItem(R.id.menu_sort_on).setVisible(viewType != AdapterMessage.ViewType.SEARCH);
if (viewType == AdapterMessage.ViewType.THREAD) { if (viewType == AdapterMessage.ViewType.THREAD) {
menu.findItem(R.id.menu_sort_on_time).setVisible(false); menu.findItem(R.id.menu_sort_on_time).setVisible(false);
menu.findItem(R.id.menu_sort_on_unread).setVisible(false); menu.findItem(R.id.menu_sort_on_unread).setVisible(false);
menu.findItem(R.id.menu_sort_on_priority).setVisible(false); menu.findItem(R.id.menu_sort_on_priority).setVisible(false);
menu.findItem(R.id.menu_sort_on_starred).setVisible(false); menu.findItem(R.id.menu_sort_on_starred).setVisible(false);
menu.findItem(R.id.menu_sort_on_sender).setVisible(false); menu.findItem(R.id.menu_sort_on_sender).setVisible(false);
menu.findItem(R.id.menu_sort_on_subject).setVisible(false); menu.findItem(R.id.menu_sort_on_subject).setVisible(false);
menu.findItem(R.id.menu_sort_on_size).setVisible(false); menu.findItem(R.id.menu_sort_on_size).setVisible(false);
menu.findItem(R.id.menu_sort_on_attachments).setVisible(false); menu.findItem(R.id.menu_sort_on_attachments).setVisible(false);
menu.findItem(R.id.menu_sort_on_snoozed).setVisible(false); menu.findItem(R.id.menu_sort_on_snoozed).setVisible(false);
} }
boolean unselected = (selectionTracker == null || !selectionTracker.hasSelection()); boolean unselected = (selectionTracker == null || !selectionTracker.hasSelection());
menu.findItem(R.id.menu_empty_trash).setVisible(EntityFolder.TRASH.equals(type) && folder && unselected); menu.findItem(R.id.menu_empty_trash).setVisible(EntityFolder.TRASH.equals(type) && folder && unselected);
menu.findItem(R.id.menu_empty_spam).setVisible(EntityFolder.JUNK.equals(type) && folder && unselected); menu.findItem(R.id.menu_empty_spam).setVisible(EntityFolder.JUNK.equals(type) && folder && unselected);
if ("time".equals(sort)) if ("time".equals(sort))
menu.findItem(R.id.menu_sort_on_time).setChecked(true); menu.findItem(R.id.menu_sort_on_time).setChecked(true);
else if ("unread".equals(sort)) else if ("unread".equals(sort))
menu.findItem(R.id.menu_sort_on_unread).setChecked(true); menu.findItem(R.id.menu_sort_on_unread).setChecked(true);
else if ("starred".equals(sort)) else if ("starred".equals(sort))
menu.findItem(R.id.menu_sort_on_starred).setChecked(true); menu.findItem(R.id.menu_sort_on_starred).setChecked(true);
else if ("priority".equals(sort)) else if ("priority".equals(sort))
menu.findItem(R.id.menu_sort_on_priority).setChecked(true); menu.findItem(R.id.menu_sort_on_priority).setChecked(true);
else if ("sender".equals(sort)) else if ("sender".equals(sort))
menu.findItem(R.id.menu_sort_on_sender).setChecked(true); menu.findItem(R.id.menu_sort_on_sender).setChecked(true);
else if ("subject".equals(sort)) else if ("subject".equals(sort))
menu.findItem(R.id.menu_sort_on_subject).setChecked(true); menu.findItem(R.id.menu_sort_on_subject).setChecked(true);
else if ("size".equals(sort)) else if ("size".equals(sort))
menu.findItem(R.id.menu_sort_on_size).setChecked(true); menu.findItem(R.id.menu_sort_on_size).setChecked(true);
else if ("attachments".equals(sort)) else if ("attachments".equals(sort))
menu.findItem(R.id.menu_sort_on_attachments).setChecked(true); menu.findItem(R.id.menu_sort_on_attachments).setChecked(true);
else if ("snoozed".equals(sort)) else if ("snoozed".equals(sort))
menu.findItem(R.id.menu_sort_on_snoozed).setChecked(true); menu.findItem(R.id.menu_sort_on_snoozed).setChecked(true);
menu.findItem(R.id.menu_ascending).setChecked(ascending); menu.findItem(R.id.menu_ascending).setChecked(ascending);
menu.findItem(R.id.menu_filter).setVisible(viewType != AdapterMessage.ViewType.SEARCH && !outbox); menu.findItem(R.id.menu_filter).setVisible(viewType != AdapterMessage.ViewType.SEARCH && !outbox);
menu.findItem(R.id.menu_filter_seen).setVisible(folder); menu.findItem(R.id.menu_filter_seen).setVisible(folder);
menu.findItem(R.id.menu_filter_unflagged).setVisible(folder); menu.findItem(R.id.menu_filter_unflagged).setVisible(folder);
menu.findItem(R.id.menu_filter_unknown).setVisible(folder && !drafts && !sent); menu.findItem(R.id.menu_filter_unknown).setVisible(folder && !drafts && !sent);
menu.findItem(R.id.menu_filter_snoozed).setVisible(folder && !drafts); menu.findItem(R.id.menu_filter_snoozed).setVisible(folder && !drafts);
menu.findItem(R.id.menu_filter_deleted).setVisible(folder && !perform_expunge); menu.findItem(R.id.menu_filter_deleted).setVisible(folder && !perform_expunge);
menu.findItem(R.id.menu_filter_duplicates).setVisible(viewType == AdapterMessage.ViewType.THREAD); menu.findItem(R.id.menu_filter_duplicates).setVisible(viewType == AdapterMessage.ViewType.THREAD);
menu.findItem(R.id.menu_filter_trash).setVisible(viewType == AdapterMessage.ViewType.THREAD); menu.findItem(R.id.menu_filter_trash).setVisible(viewType == AdapterMessage.ViewType.THREAD);
menu.findItem(R.id.menu_filter_seen).setChecked(filter_seen); menu.findItem(R.id.menu_filter_seen).setChecked(filter_seen);
menu.findItem(R.id.menu_filter_unflagged).setChecked(filter_unflagged); menu.findItem(R.id.menu_filter_unflagged).setChecked(filter_unflagged);
menu.findItem(R.id.menu_filter_unknown).setChecked(filter_unknown); menu.findItem(R.id.menu_filter_unknown).setChecked(filter_unknown);
menu.findItem(R.id.menu_filter_snoozed).setChecked(filter_snoozed); menu.findItem(R.id.menu_filter_snoozed).setChecked(filter_snoozed);
menu.findItem(R.id.menu_filter_deleted).setChecked(filter_deleted); menu.findItem(R.id.menu_filter_deleted).setChecked(filter_deleted);
menu.findItem(R.id.menu_filter_language).setVisible(language_detection && folder); menu.findItem(R.id.menu_filter_language).setVisible(language_detection && folder);
menu.findItem(R.id.menu_filter_duplicates).setChecked(filter_duplicates); menu.findItem(R.id.menu_filter_duplicates).setChecked(filter_duplicates);
menu.findItem(R.id.menu_filter_trash).setChecked(filter_trash); menu.findItem(R.id.menu_filter_trash).setChecked(filter_trash);
SpannableStringBuilder ssbZoom = new SpannableStringBuilder(getString(R.string.title_zoom)); SpannableStringBuilder ssbZoom = new SpannableStringBuilder(getString(R.string.title_zoom));
ssbZoom.append(' '); ssbZoom.append(' ');
for (int i = 0; i <= zoom; i++) for (int i = 0; i <= zoom; i++)
ssbZoom.append('+'); ssbZoom.append('+');
SpannableStringBuilder ssbPadding = new SpannableStringBuilder(getString(R.string.title_padding)); SpannableStringBuilder ssbPadding = new SpannableStringBuilder(getString(R.string.title_padding));
ssbPadding.append(' '); ssbPadding.append(' ');
for (int i = 0; i <= padding; i++) for (int i = 0; i <= padding; i++)
ssbPadding.append('+'); ssbPadding.append('+');
menu.findItem(R.id.menu_compact).setChecked(compact); menu.findItem(R.id.menu_compact).setChecked(compact);
menu.findItem(R.id.menu_zoom).setTitle(ssbZoom); menu.findItem(R.id.menu_zoom).setTitle(ssbZoom);
PopupMenuLifecycle.insertIcon(context, menu.findItem(R.id.menu_zoom), false); PopupMenuLifecycle.insertIcon(context, menu.findItem(R.id.menu_zoom), false);
menu.findItem(R.id.menu_padding).setTitle(ssbPadding); menu.findItem(R.id.menu_padding).setTitle(ssbPadding);
PopupMenuLifecycle.insertIcon(context, menu.findItem(R.id.menu_padding), false); PopupMenuLifecycle.insertIcon(context, menu.findItem(R.id.menu_padding), false);
menu.findItem(R.id.menu_theme).setVisible(viewType == AdapterMessage.ViewType.UNIFIED); menu.findItem(R.id.menu_theme).setVisible(viewType == AdapterMessage.ViewType.UNIFIED);
menu.findItem(R.id.menu_confirm_links) menu.findItem(R.id.menu_confirm_links)
.setChecked(confirm_links) .setChecked(confirm_links)
.setVisible(viewType == AdapterMessage.ViewType.THREAD); .setVisible(viewType == AdapterMessage.ViewType.THREAD);
menu.findItem(R.id.menu_select_all).setVisible(folder); menu.findItem(R.id.menu_select_all).setVisible(folder);
menu.findItem(R.id.menu_select_found).setVisible(viewType == AdapterMessage.ViewType.SEARCH); menu.findItem(R.id.menu_select_found).setVisible(viewType == AdapterMessage.ViewType.SEARCH);
menu.findItem(R.id.menu_mark_all_read).setVisible(folder); menu.findItem(R.id.menu_mark_all_read).setVisible(folder);
menu.findItem(R.id.menu_view_thread).setVisible(viewType == AdapterMessage.ViewType.THREAD && !threading); menu.findItem(R.id.menu_view_thread).setVisible(viewType == AdapterMessage.ViewType.THREAD && !threading);
MenuItem menuSync = menu.findItem(R.id.menu_sync); MenuItem menuSync = menu.findItem(R.id.menu_sync);
if (lastSync == null) if (lastSync == null)
menuSync.setVisible(false); menuSync.setVisible(false);
else { else {
CharSequence title = DateUtils.getRelativeTimeSpanString( CharSequence title = DateUtils.getRelativeTimeSpanString(
lastSync, lastSync,
new Date().getTime(), new Date().getTime(),
DateUtils.MINUTE_IN_MILLIS, DateUtils.MINUTE_IN_MILLIS,
DateUtils.FORMAT_ABBREV_RELATIVE); DateUtils.FORMAT_ABBREV_RELATIVE);
menuSync.setTitle(title) menuSync.setTitle(title)
.setVisible(true); .setVisible(true);
PopupMenuLifecycle.insertIcon(context, menuSync, false); PopupMenuLifecycle.insertIcon(context, menuSync, false);
} }
menu.findItem(R.id.menu_sync_more).setVisible(folder); menu.findItem(R.id.menu_sync_more).setVisible(folder);
menu.findItem(R.id.menu_force_sync).setVisible(viewType == AdapterMessage.ViewType.UNIFIED); menu.findItem(R.id.menu_force_sync).setVisible(viewType == AdapterMessage.ViewType.UNIFIED);
menu.findItem(R.id.menu_force_send).setVisible(outbox); menu.findItem(R.id.menu_force_send).setVisible(outbox);
menu.findItem(R.id.menu_edit_properties).setVisible(viewType == AdapterMessage.ViewType.FOLDER && !outbox); menu.findItem(R.id.menu_edit_properties).setVisible(viewType == AdapterMessage.ViewType.FOLDER && !outbox);
// In some cases onPrepareOptionsMenu can be called before onCreateView // In some cases onPrepareOptionsMenu can be called before onCreateView
if (ibSeen == null) if (ibSeen == null)
ibSeen = view.findViewById(R.id.ibSeen); ibSeen = view.findViewById(R.id.ibSeen);
if (ibUnflagged == null) if (ibUnflagged == null)
ibUnflagged = view.findViewById(R.id.ibUnflagged); ibUnflagged = view.findViewById(R.id.ibUnflagged);
if (ibSnoozed == null) if (ibSnoozed == null)
ibSnoozed = view.findViewById(R.id.ibSnoozed); ibSnoozed = view.findViewById(R.id.ibSnoozed);
ibSeen.setImageResource(filter_seen ? R.drawable.twotone_drafts_24 : R.drawable.twotone_mail_24); ibSeen.setImageResource(filter_seen ? R.drawable.twotone_drafts_24 : R.drawable.twotone_mail_24);
ibUnflagged.setImageResource(filter_unflagged ? R.drawable.twotone_star_border_24 : R.drawable.baseline_star_24); ibUnflagged.setImageResource(filter_unflagged ? R.drawable.twotone_star_border_24 : R.drawable.baseline_star_24);
ibSnoozed.setImageResource(filter_snoozed ? R.drawable.twotone_visibility_off_24 : R.drawable.twotone_visibility_24); ibSnoozed.setImageResource(filter_snoozed ? R.drawable.twotone_visibility_off_24 : R.drawable.twotone_visibility_24);
ibSeen.setVisibility(quick_filter && folder ? View.VISIBLE : View.GONE); ibSeen.setVisibility(quick_filter && folder ? View.VISIBLE : View.GONE);
ibUnflagged.setVisibility(quick_filter && folder ? View.VISIBLE : View.GONE); ibUnflagged.setVisibility(quick_filter && folder ? View.VISIBLE : View.GONE);
ibSnoozed.setVisibility(quick_filter && folder && !drafts ? View.VISIBLE : View.GONE); ibSnoozed.setVisibility(quick_filter && folder && !drafts ? View.VISIBLE : View.GONE);
super.onPrepareOptionsMenu(menu); super.onPrepareOptionsMenu(menu);
} catch (Throwable ex) {
Log.e(ex);
}
} }
@Override @Override

Loading…
Cancel
Save