From aeb568bcf4a1c80963dda556504ba759357a2633 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 11 Mar 2022 09:44:47 -0400 Subject: [PATCH] Fix crash when recreating conversation react with any emoji fragment. --- ...WithAnyEmojiBottomSheetDialogFragment.java | 72 +++++++++---------- .../res/layout/react_with_any_emoji_tabs.xml | 1 + 2 files changed, 34 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiBottomSheetDialogFragment.java b/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiBottomSheetDialogFragment.java index c2c213952..d493ecbb8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiBottomSheetDialogFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiBottomSheetDialogFragment.java @@ -41,9 +41,9 @@ import org.thoughtcrime.securesms.keyboard.emoji.EmojiKeyboardPageCategoryMappin import org.thoughtcrime.securesms.keyboard.emoji.KeyboardPageSearchView; import org.thoughtcrime.securesms.reactions.edit.EditReactionsActivity; import org.thoughtcrime.securesms.util.LifecycleDisposable; -import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.ViewUtil; +import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel; import java.util.Optional; @@ -196,50 +196,44 @@ public final class ReactWithAnyEmojiBottomSheetDialogFragment extends BottomShee emojiPageView.addOnScrollListener(categoryUpdateOnScroll); search = view.findViewById(R.id.react_with_any_emoji_search); - search.setCallbacks(new SearchCallbacks()); initializeViewModel(); - } - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); + EmojiKeyboardPageCategoriesAdapter categoriesAdapter = new EmojiKeyboardPageCategoriesAdapter(key -> { + scrollTo(key); + viewModel.selectPage(key); + }); - if (savedInstanceState == null) { - EmojiKeyboardPageCategoriesAdapter categoriesAdapter = new EmojiKeyboardPageCategoriesAdapter(key -> { - scrollTo(key); - viewModel.selectPage(key); - }); + FrameLayout container = requireDialog().findViewById(R.id.container); + tabBar = LayoutInflater.from(requireContext()) + .inflate(R.layout.react_with_any_emoji_tabs, + container, + false); + RecyclerView categoriesRecycler = tabBar.findViewById(R.id.emoji_categories_recycler); + categoriesRecycler.setAdapter(categoriesAdapter); - FrameLayout container = requireDialog().findViewById(R.id.container); - tabBar = LayoutInflater.from(requireContext()) - .inflate(R.layout.react_with_any_emoji_tabs, - container, - false); - RecyclerView categoriesRecycler = tabBar.findViewById(R.id.emoji_categories_recycler); - categoriesRecycler.setAdapter(categoriesAdapter); - - if (requireArguments().getBoolean(ARG_EDIT, false)) { - View customizeReactions = tabBar.findViewById(R.id.customize_reactions_frame); - customizeReactions.setVisibility(View.VISIBLE); - customizeReactions.setOnClickListener(v -> startActivity(new Intent(requireContext(), EditReactionsActivity.class))); - } - - container.addView(tabBar); - - emojiPageView.addOnScrollListener(new TopAndBottomShadowHelper(requireView().findViewById(R.id.react_with_any_emoji_top_shadow), - tabBar.findViewById(R.id.react_with_any_emoji_bottom_shadow))); - - disposables.add(viewModel.getEmojiList().subscribe(pages -> emojiPageView.setList(pages, null))); - disposables.add(viewModel.getCategories().subscribe(categoriesAdapter::submitList)); - disposables.add(viewModel.getSelectedKey().subscribe(key -> categoriesRecycler.post(() -> { - int index = categoriesAdapter.indexOfFirst(EmojiKeyboardPageCategoryMappingModel.class, m -> m.getKey().equals(key)); - - if (index != -1) { - categoriesRecycler.smoothScrollToPosition(index); - } - }))); + if (requireArguments().getBoolean(ARG_EDIT, false)) { + View customizeReactions = tabBar.findViewById(R.id.customize_reactions_frame); + customizeReactions.setVisibility(View.VISIBLE); + customizeReactions.setOnClickListener(v -> startActivity(new Intent(requireContext(), EditReactionsActivity.class))); } + + container.addView(tabBar); + + emojiPageView.addOnScrollListener(new TopAndBottomShadowHelper(requireView().findViewById(R.id.react_with_any_emoji_top_shadow), + tabBar.findViewById(R.id.react_with_any_emoji_bottom_shadow))); + + disposables.add(viewModel.getEmojiList().subscribe(pages -> emojiPageView.setList(pages, null))); + disposables.add(viewModel.getCategories().subscribe(categoriesAdapter::submitList)); + disposables.add(viewModel.getSelectedKey().subscribe(key -> categoriesRecycler.post(() -> { + int index = categoriesAdapter.indexOfFirst(EmojiKeyboardPageCategoryMappingModel.class, m -> m.getKey().equals(key)); + + if (index != -1) { + categoriesRecycler.smoothScrollToPosition(index); + } + }))); + + search.setCallbacks(new SearchCallbacks()); } private void scrollTo(@NonNull String key) { diff --git a/app/src/main/res/layout/react_with_any_emoji_tabs.xml b/app/src/main/res/layout/react_with_any_emoji_tabs.xml index df3315592..f6baf7526 100644 --- a/app/src/main/res/layout/react_with_any_emoji_tabs.xml +++ b/app/src/main/res/layout/react_with_any_emoji_tabs.xml @@ -2,6 +2,7 @@