diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java index 141e4ee14..65b2db669 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java @@ -108,6 +108,7 @@ import org.thoughtcrime.securesms.PromptMmsActivity; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.ShortcutLauncherActivity; import org.thoughtcrime.securesms.TransportOption; +import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel; import org.thoughtcrime.securesms.verify.VerifyIdentityActivity; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.TombstoneAttachment; @@ -441,8 +442,9 @@ public class ConversationParentFragment extends Fragment private volatile boolean screenInitialized = false; - private IdentityRecordList identityRecords = new IdentityRecordList(Collections.emptyList()); - private Callback callback; + private IdentityRecordList identityRecords = new IdentityRecordList(Collections.emptyList()); + private Callback callback; + private RecentEmojiPageModel recentEmojis; @Override public @NonNull View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { @@ -3409,6 +3411,10 @@ public class ConversationParentFragment extends Fragment public void onEmojiSelected(String emoji) { if (inputPanel != null) { inputPanel.onEmojiSelected(emoji); + if (recentEmojis == null) { + recentEmojis = new RecentEmojiPageModel(ApplicationDependencies.getApplication(), TextSecurePreferences.RECENT_STORAGE_KEY); + } + recentEmojis.onCodePointSelected(emoji); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyboard/KeyboardPageSelected.kt b/app/src/main/java/org/thoughtcrime/securesms/keyboard/KeyboardPageSelected.kt new file mode 100644 index 000000000..e4cba4467 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/keyboard/KeyboardPageSelected.kt @@ -0,0 +1,5 @@ +package org.thoughtcrime.securesms.keyboard + +interface KeyboardPageSelected { + fun onPageSelected() +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyboard/KeyboardPagerFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/keyboard/KeyboardPagerFragment.kt index 47748f04f..126caf038 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyboard/KeyboardPagerFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyboard/KeyboardPagerFragment.kt @@ -79,6 +79,7 @@ class KeyboardPagerFragment : Fragment() { private inline fun displayPage(fragmentFactory: () -> F) { if (currentFragment is F) { + (currentFragment as? KeyboardPageSelected)?.onPageSelected() return } @@ -92,6 +93,7 @@ class KeyboardPagerFragment : Fragment() { transaction.add(R.id.fragment_container, fragment) fragments[F::class] = fragment } else { + (fragment as? KeyboardPageSelected)?.onPageSelected() transaction.show(fragment) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/EmojiKeyboardPageFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/EmojiKeyboardPageFragment.kt index d31aa492e..c20ee7707 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/EmojiKeyboardPageFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/EmojiKeyboardPageFragment.kt @@ -16,6 +16,7 @@ import org.thoughtcrime.securesms.components.emoji.EmojiEventListener import org.thoughtcrime.securesms.components.emoji.EmojiPageView import org.thoughtcrime.securesms.components.emoji.EmojiPageViewGridAdapter import org.thoughtcrime.securesms.components.emoji.EmojiPageViewGridAdapter.EmojiHeader +import org.thoughtcrime.securesms.keyboard.KeyboardPageSelected import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.util.ThemedFragment.themedInflate import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel @@ -24,7 +25,7 @@ import java.util.Optional private val DELETE_KEY_EVENT: KeyEvent = KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL) -class EmojiKeyboardPageFragment : Fragment(), EmojiEventListener, EmojiPageViewGridAdapter.VariationSelectorListener { +class EmojiKeyboardPageFragment : Fragment(), EmojiEventListener, EmojiPageViewGridAdapter.VariationSelectorListener, KeyboardPageSelected { private lateinit var viewModel: EmojiKeyboardPageViewModel private lateinit var emojiPageView: EmojiPageView @@ -95,6 +96,15 @@ class EmojiKeyboardPageFragment : Fragment(), EmojiEventListener, EmojiPageViewG eventListener = requireListener() } + override fun onResume() { + super.onResume() + viewModel.refreshRecentEmoji() + } + + override fun onPageSelected() { + viewModel.refreshRecentEmoji() + } + private fun updateCategoryTab(key: String) { emojiCategoriesRecycler.post { val index: Int = categoriesAdapter.indexOfFirst(EmojiKeyboardPageCategoryMappingModel::class.java) { it.key == key } @@ -119,7 +129,6 @@ class EmojiKeyboardPageFragment : Fragment(), EmojiEventListener, EmojiPageViewG override fun onEmojiSelected(emoji: String) { SignalStore.emojiValues().setPreferredVariation(emoji) eventListener.onEmojiSelected(emoji) - viewModel.addToRecents(emoji) } override fun onKeyEvent(keyEvent: KeyEvent?) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/EmojiKeyboardPageRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/EmojiKeyboardPageRepository.kt index 150cd9610..093d44aaf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/EmojiKeyboardPageRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/EmojiKeyboardPageRepository.kt @@ -8,14 +8,11 @@ import org.thoughtcrime.securesms.emoji.EmojiSource.Companion.latest import org.thoughtcrime.securesms.util.TextSecurePreferences import java.util.function.Consumer -class EmojiKeyboardPageRepository(context: Context) { - - private val recentEmojiPageModel: RecentEmojiPageModel = RecentEmojiPageModel(context, TextSecurePreferences.RECENT_STORAGE_KEY) - +class EmojiKeyboardPageRepository(private val context: Context) { fun getEmoji(consumer: Consumer>) { SignalExecutors.BOUNDED.execute { val list = mutableListOf() - list += recentEmojiPageModel + list += RecentEmojiPageModel(context, TextSecurePreferences.RECENT_STORAGE_KEY) list += latest.displayPages consumer.accept(list) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/EmojiKeyboardPageViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/EmojiKeyboardPageViewModel.kt index 684ae9028..c36958749 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/EmojiKeyboardPageViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/EmojiKeyboardPageViewModel.kt @@ -17,7 +17,7 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList import org.thoughtcrime.securesms.util.livedata.LiveDataUtil -class EmojiKeyboardPageViewModel(repository: EmojiKeyboardPageRepository) : ViewModel() { +class EmojiKeyboardPageViewModel(private val repository: EmojiKeyboardPageRepository) : ViewModel() { private val internalSelectedKey = DefaultValueLiveData(getStartingTab()) @@ -29,19 +29,17 @@ class EmojiKeyboardPageViewModel(repository: EmojiKeyboardPageRepository) : View val categories: LiveData init { - repository.getEmoji(allEmojiModels::postValue) - pages = LiveDataUtil.mapAsync(allEmojiModels) { models -> val list = MappingModelList() models.forEach { pageModel -> - list += if (RecentEmojiPageModel.KEY == pageModel.key) { - EmojiHeader(pageModel.key, R.string.ReactWithAnyEmojiBottomSheetDialogFragment__recently_used) - } else { + if (RecentEmojiPageModel.KEY != pageModel.key) { val category = EmojiCategory.forKey(pageModel.key) - EmojiHeader(pageModel.key, category.getCategoryLabel()) + list += EmojiHeader(pageModel.key, category.getCategoryLabel()) + list += pageModel.toMappingModels() + } else if (pageModel.displayEmoji.isNotEmpty()) { + list += EmojiHeader(pageModel.key, R.string.ReactWithAnyEmojiBottomSheetDialogFragment__recently_used) + list += pageModel.toMappingModels() } - - list += pageModel.toMappingModels() } list @@ -65,8 +63,8 @@ class EmojiKeyboardPageViewModel(repository: EmojiKeyboardPageRepository) : View internalSelectedKey.value = key } - fun addToRecents(emoji: String) { - RecentEmojiPageModel(ApplicationDependencies.getApplication(), TextSecurePreferences.RECENT_STORAGE_KEY).onCodePointSelected(emoji) + fun refreshRecentEmoji() { + repository.getEmoji(allEmojiModels::postValue) } companion object {