mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-03-02 07:23:38 +00:00
Prevent menu creation slowing data load performance in CFv2.
This commit is contained in:
@@ -291,7 +291,6 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
|
||||
super.onCreate(icicle);
|
||||
this.locale = Locale.getDefault();
|
||||
startupStopwatch = new Stopwatch("conversation-open");
|
||||
SignalLocalMetrics.ConversationOpen.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -32,10 +32,17 @@ internal object ConversationOptionsMenu {
|
||||
*/
|
||||
class Provider(
|
||||
private val callback: Callback,
|
||||
private val lifecycleDisposable: LifecycleDisposable
|
||||
private val lifecycleDisposable: LifecycleDisposable,
|
||||
var afterFirstRenderMode: Boolean = false
|
||||
) : MenuProvider {
|
||||
|
||||
private var createdPreRenderMenu = false
|
||||
|
||||
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
|
||||
if (createdPreRenderMenu && !afterFirstRenderMode) {
|
||||
return
|
||||
}
|
||||
|
||||
menu.clear()
|
||||
|
||||
val (
|
||||
@@ -57,6 +64,27 @@ internal object ConversationOptionsMenu {
|
||||
return
|
||||
}
|
||||
|
||||
if (!afterFirstRenderMode) {
|
||||
createdPreRenderMenu = true
|
||||
if (recipient.isSelf) {
|
||||
return
|
||||
}
|
||||
|
||||
menuInflater.inflate(R.menu.conversation_first_render, menu)
|
||||
|
||||
if (recipient.isGroup) {
|
||||
hideMenuItem(menu, R.id.menu_call_secure)
|
||||
if (!isActiveV2Group) {
|
||||
hideMenuItem(menu, R.id.menu_video_secure)
|
||||
}
|
||||
} else if (!isPushAvailable) {
|
||||
hideMenuItem(menu, R.id.menu_call_secure)
|
||||
hideMenuItem(menu, R.id.menu_video_secure)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if (isInMessageRequest && !recipient.isBlocked) {
|
||||
if (isActiveGroup) {
|
||||
menuInflater.inflate(R.menu.conversation_message_requests_group, menu)
|
||||
|
||||
@@ -484,6 +484,12 @@ public class ConversationParentFragment extends Fragment
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
SignalLocalMetrics.ConversationOpen.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.conversation_activity, container, false);
|
||||
@@ -2095,7 +2101,7 @@ public class ConversationParentFragment extends Fragment
|
||||
}
|
||||
|
||||
protected void initializeActionBar() {
|
||||
toolbar.addMenuProvider(new ConversationOptionsMenu.Provider(this, disposables));
|
||||
toolbar.addMenuProvider(new ConversationOptionsMenu.Provider(this, disposables, true));
|
||||
invalidateOptionsMenu();
|
||||
toolbar.setNavigationContentDescription(R.string.ConversationFragment__content_description_back_button);
|
||||
if (isInBubble()) {
|
||||
|
||||
@@ -434,6 +434,7 @@ class ConversationFragment :
|
||||
private lateinit var threadHeaderMarginDecoration: ThreadHeaderMarginDecoration
|
||||
private lateinit var conversationItemDecorations: ConversationItemDecorations
|
||||
private lateinit var optionsMenuCallback: ConversationOptionsMenuCallback
|
||||
private lateinit var menuProvider: ConversationOptionsMenu.Provider
|
||||
private lateinit var typingIndicatorDecoration: TypingIndicatorDecoration
|
||||
private lateinit var backPressedCallback: BackPressedDelegate
|
||||
|
||||
@@ -778,6 +779,8 @@ class ConversationFragment :
|
||||
backPressedCallback = BackPressedDelegate()
|
||||
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, backPressedCallback)
|
||||
|
||||
menuProvider.afterFirstRenderMode = true
|
||||
|
||||
attachmentManager = AttachmentManager(requireContext(), requireView(), AttachmentManagerListener())
|
||||
|
||||
EventBus.getDefault().registerForLifecycle(groupCallViewModel, viewLifecycleOwner)
|
||||
@@ -1105,7 +1108,8 @@ class ConversationFragment :
|
||||
|
||||
private fun presentActionBarMenu() {
|
||||
optionsMenuCallback = ConversationOptionsMenuCallback()
|
||||
binding.toolbar.addMenuProvider(ConversationOptionsMenu.Provider(optionsMenuCallback, disposables))
|
||||
menuProvider = ConversationOptionsMenu.Provider(optionsMenuCallback, disposables)
|
||||
binding.toolbar.addMenuProvider(menuProvider)
|
||||
invalidateOptionsMenu()
|
||||
|
||||
when (args.conversationScreenType) {
|
||||
|
||||
Reference in New Issue
Block a user