From 1e3795170118dd50bb2e27f5ded7e12270dd4398 Mon Sep 17 00:00:00 2001 From: Fumiaki Yoshimatsu Date: Sat, 29 Aug 2020 10:45:11 -0400 Subject: [PATCH] Use onCreateOptionsMenu when to inflate a menu in order for menu items to appear correctly in RTL languages. The bug was reported in https://community.signalusers.org/t/beta-feedback-for-the-upcoming-android-4-70-release/16449/20?u=alan-signal, but it was not necessarily a regression caused by the commit suggested in the forum post. It is more like that the bug was finally exposed by the commit. Before the commit the menu items were not properly aligned nor translated upon configuration changes in RTL languages. --- .../thoughtcrime/securesms/MediaPreviewActivity.java | 11 ++++++++--- .../securesms/NewConversationActivity.java | 4 ++-- .../securesms/PassphrasePromptActivity.java | 5 +++-- .../securesms/conversation/ConversationActivity.java | 6 +++--- .../conversationlist/ConversationListFragment.java | 8 +++++--- 5 files changed, 21 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java index acd5e510bf..7c1287bc1b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java @@ -431,13 +431,17 @@ public final class MediaPreviewActivity extends PassphraseRequiredActivity } @Override - public boolean onPrepareOptionsMenu(Menu menu) { - super.onPrepareOptionsMenu(menu); - + public boolean onCreateOptionsMenu(Menu menu) { menu.clear(); MenuInflater inflater = this.getMenuInflater(); inflater.inflate(R.menu.media_preview, menu); + super.onCreateOptionsMenu(menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { if (!isMediaInDb()) { menu.findItem(R.id.media_preview__overview).setVisible(false); menu.findItem(R.id.delete).setVisible(false); @@ -447,6 +451,7 @@ public final class MediaPreviewActivity extends PassphraseRequiredActivity menu.findItem(R.id.media_preview__overview).setVisible(false); } + super.onPrepareOptionsMenu(menu); return true; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java index d77b48bfb4..9caa5662b4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java @@ -138,11 +138,11 @@ public class NewConversationActivity extends ContactSelectionActivity } @Override - public boolean onPrepareOptionsMenu(Menu menu) { + public boolean onCreateOptionsMenu(Menu menu) { menu.clear(); getMenuInflater().inflate(R.menu.new_conversation_activity, menu); - super.onPrepareOptionsMenu(menu); + super.onCreateOptionsMenu(menu); return true; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java b/app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java index 8a047f0712..c459877901 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java @@ -132,12 +132,13 @@ public class PassphrasePromptActivity extends PassphraseActivity { } @Override - public boolean onPrepareOptionsMenu(Menu menu) { + public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = this.getMenuInflater(); menu.clear(); inflater.inflate(R.menu.log_submit, menu); - super.onPrepareOptionsMenu(menu); + + super.onCreateOptionsMenu(menu); return true; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java index 59aee28783..76cb4a365f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -766,7 +766,7 @@ public class ConversationActivity extends PassphraseRequiredActivity } @Override - public boolean onPrepareOptionsMenu(Menu menu) { + public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = this.getMenuInflater(); menu.clear(); @@ -785,7 +785,7 @@ public class ConversationActivity extends PassphraseRequiredActivity if (recipient != null && recipient.get().isMuted()) inflater.inflate(R.menu.conversation_muted, menu); else inflater.inflate(R.menu.conversation_unmuted, menu); - super.onPrepareOptionsMenu(menu); + super.onCreateOptionsMenu(menu); return true; } @@ -921,7 +921,7 @@ public class ConversationActivity extends PassphraseRequiredActivity } }); - super.onPrepareOptionsMenu(menu); + super.onCreateOptionsMenu(menu); return true; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java index b6bcb40b2e..e8021604f5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java @@ -54,6 +54,7 @@ import androidx.appcompat.view.ActionMode; import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.TooltipCompat; import androidx.core.content.res.ResourcesCompat; +import androidx.core.view.ViewCompat; import androidx.lifecycle.DefaultLifecycleObserver; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.ProcessLifecycleOwner; @@ -283,12 +284,13 @@ public class ConversationListFragment extends MainFragment implements ActionMode } @Override - public void onPrepareOptionsMenu(Menu menu) { - MenuInflater inflater = requireActivity().getMenuInflater(); + public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { menu.clear(); - inflater.inflate(R.menu.text_secure_normal, menu); + } + @Override + public void onPrepareOptionsMenu(Menu menu) { menu.findItem(R.id.menu_insights).setVisible(TextSecurePreferences.isSmsEnabled(requireContext())); menu.findItem(R.id.menu_clear_passphrase).setVisible(!TextSecurePreferences.isPasswordDisabled(requireContext())); }