From 50f1b50ea3a156f96430171240d7af04f63d13e8 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Wed, 17 Jul 2024 08:43:11 +0200 Subject: [PATCH] Offline support for conversations and chats Signed-off-by: Marcel Hibbe --- .idea/inspectionProfiles/ktlint.xml | 3 +- app/build.gradle | 29 +- .../10.json | 531 +++++++++++++++++- .../data/database/dao/ChatMessagesDaoTest.kt | 207 +++++++ .../talk/adapters/items/ConversationItem.kt | 150 ++++- .../messages/CallStartedViewHolder.kt | 2 +- .../messages/CommonMessageInterface.kt | 2 +- .../IncomingLinkPreviewMessageViewHolder.kt | 15 +- .../IncomingLocationMessageViewHolder.kt | 15 +- .../messages/IncomingPollMessageViewHolder.kt | 14 +- .../IncomingPreviewMessageViewHolder.java | 2 +- .../messages/IncomingTextMessageViewHolder.kt | 80 +-- .../IncomingVoiceMessageViewHolder.kt | 15 +- .../talk/adapters/messages/LinkPreview.kt | 2 +- .../OutcomingLinkPreviewMessageViewHolder.kt | 15 +- .../OutcomingLocationMessageViewHolder.kt | 15 +- .../OutcomingPollMessageViewHolder.kt | 14 +- .../OutcomingPreviewMessageViewHolder.java | 2 +- .../OutcomingTextMessageViewHolder.kt | 71 ++- .../OutcomingVoiceMessageViewHolder.kt | 15 +- .../messages/PreviewMessageInterface.kt | 2 +- .../messages/PreviewMessageViewHolder.kt | 2 +- .../talk/adapters/messages/Reaction.kt | 2 +- .../messages/SystemMessageInterface.kt | 2 +- .../messages/SystemMessageViewHolder.kt | 2 +- .../messages/TalkMessagesListAdapter.java | 4 +- .../UnreadNoticeMessageViewHolder.java | 2 +- .../messages/VoiceMessageInterface.kt | 2 +- .../application/NextcloudTalkApplication.kt | 4 +- .../com/nextcloud/talk/chat/ChatActivity.kt | 374 ++++++------ .../talk/chat/MessageInputFragment.kt | 77 ++- .../talk/chat/data/ChatMessageRepository.kt | 62 ++ .../chat => chat/data/model}/ChatMessage.kt | 134 +---- .../ChatNetworkDataSource.kt} | 4 +- .../network/OfflineFirstChatRepository.kt | 461 +++++++++++++++ ...positoryImpl.kt => RetrofitChatNetwork.kt} | 7 +- .../talk/chat/viewmodels/ChatViewModel.kt | 248 ++++---- .../chat/viewmodels/MessageInputViewModel.kt | 53 +- .../talk/contacts/ContactsActivity.kt | 10 +- .../CreateConversationDialogFragment.kt | 4 +- .../repository/ConversationRepository.kt | 7 +- .../repository/ConversationRepositoryImpl.kt | 43 +- .../viewmodel/ConversationViewModel.kt | 4 +- .../ConversationInfoActivity.kt | 31 +- .../conversationinfo/GuestAccessHelper.kt | 4 +- .../viewmodel/ConversationInfoViewModel.kt | 10 +- .../ConversationInfoEditActivity.kt | 15 +- .../ConversationInfoEditRepositoryImpl.kt | 6 +- .../ConversationInfoEditViewModel.kt | 4 +- .../ConversationsListActivity.kt | 327 ++++++----- .../data/ConversationsListRepository.kt | 9 - .../data/ConversationsListRepositoryImpl.kt | 11 - .../data/OfflineConversationsRepository.kt | 40 ++ .../network/ConversationsNetworkDataSource.kt | 16 + .../OfflineFirstConversationsRepository.kt | 117 ++++ .../network/RetrofitConversationsNetwork.kt | 28 + .../viewmodels/ConversationsListViewModel.kt | 31 +- .../talk/dagger/modules/DaosModule.kt | 27 + .../talk/dagger/modules/DatabaseModule.java | 8 + .../talk/dagger/modules/RepositoryModule.kt | 55 +- .../data/changeListVersion/SyncableModel.kt | 25 + .../talk/data/database/dao/ChatBlocksDao.kt | 62 ++ .../talk/data/database/dao/ChatMessagesDao.kt | 107 ++++ .../data/database/dao/ConversationsDao.kt | 41 ++ .../database/mappers/ChatMessageMapUtils.kt | 90 +++ .../database/mappers/ConversationMapUtils.kt | 157 ++++++ .../data/database/model/ChatBlockEntity.kt | 30 + .../data/database/model/ChatMessageEntity.kt | 63 +++ .../data/database/model/ConversationEntity.kt | 91 +++ .../talk/data/network/NetworkMonitor.kt | 17 + .../talk/data/network/NetworkMonitorImpl.kt | 83 +++ .../talk/data/source/local/TalkDatabase.kt | 29 +- .../local/converters/ArrayListConverter.kt | 32 ++ .../converters/HashMapHashMapConverter.kt | 6 +- .../converters/LinkedHashMapConverter.kt | 47 ++ .../LinkedHashMapStringIntConverter.kt | 50 ++ .../com/nextcloud/talk/data/sync/SyncUtils.kt | 93 +++ .../talk/extensions/ImageViewExtensions.kt | 14 +- .../nextcloud/talk/jobs/NotificationWorker.kt | 10 +- .../talk/models/domain/ConversationModel.kt | 128 +++-- .../talk/models/domain/ReactionAddedModel.kt | 2 +- .../models/domain/ReactionDeletedModel.kt | 2 +- .../DomainEnumNotificationLevelConverter.kt | 26 +- .../talk/models/json/chat/ChatMessageJson.kt | 49 ++ .../talk/models/json/chat/ChatOCS.kt | 2 +- .../models/json/chat/ChatOCSSingleMessage.kt | 2 +- .../talk/models/json/chat/ChatShareOCS.kt | 3 +- .../talk/models/json/chat/ChatUtils.kt | 2 +- .../models/json/conversations/Conversation.kt | 78 +-- .../json/conversations/ConversationEnums.kt | 48 ++ .../ConversationObjectTypeConverter.kt | 22 +- .../converters/EnumLobbyStateConverter.java | 13 +- .../EnumNotificationLevelConverter.java | 17 +- .../EnumReadOnlyConversationConverter.java | 13 +- .../converters/EnumRoomTypeConverter.java | 22 +- .../EnumSystemMessageTypeConverter.kt | 120 ++-- .../RoomPropertiesWebSocketMessage.kt | 4 +- .../ConversationsRepositoryImpl.kt | 5 +- .../reactions/ReactionsRepository.kt | 2 +- .../reactions/ReactionsRepositoryImpl.kt | 2 +- .../repositories/SharedItemsRepositoryImpl.kt | 5 +- .../ui/bottom/sheet/ProfileBottomSheet.kt | 2 +- .../dialog/ConversationsListBottomDialog.kt | 19 +- .../talk/ui/dialog/MessageActionsDialog.kt | 17 +- .../talk/ui/dialog/ShowReactionsDialog.kt | 6 +- .../nextcloud/talk/utils/ConversationUtils.kt | 31 +- .../nextcloud/talk/utils/FileViewerUtils.kt | 6 +- .../talk/utils/ParticipantPermissions.kt | 8 - .../nextcloud/talk/utils/bundle/BundleKeys.kt | 3 + .../talk/utils/message/MessageUtils.kt | 2 +- .../talk/utils/power/PowerManagerUtils.kt | 2 +- .../utils/preferences/AppPreferences.java | 13 + .../utils/preferences/AppPreferencesImpl.kt | 59 ++ .../res/layout/fragment_message_input.xml | 12 + app/src/main/res/values/strings.xml | 2 + .../talk/utils/ParticipantPermissionsTest.kt | 2 +- gradle/verification-metadata.xml | 65 +++ 117 files changed, 4181 insertions(+), 1130 deletions(-) create mode 100644 app/src/androidTest/java/com/nextcloud/talk/data/database/dao/ChatMessagesDaoTest.kt create mode 100644 app/src/main/java/com/nextcloud/talk/chat/data/ChatMessageRepository.kt rename app/src/main/java/com/nextcloud/talk/{models/json/chat => chat/data/model}/ChatMessage.kt (68%) rename app/src/main/java/com/nextcloud/talk/chat/data/{ChatRepository.kt => network/ChatNetworkDataSource.kt} (97%) create mode 100644 app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt rename app/src/main/java/com/nextcloud/talk/chat/data/network/{NetworkChatRepositoryImpl.kt => RetrofitChatNetwork.kt} (97%) delete mode 100644 app/src/main/java/com/nextcloud/talk/conversationlist/data/ConversationsListRepository.kt delete mode 100644 app/src/main/java/com/nextcloud/talk/conversationlist/data/ConversationsListRepositoryImpl.kt create mode 100644 app/src/main/java/com/nextcloud/talk/conversationlist/data/OfflineConversationsRepository.kt create mode 100644 app/src/main/java/com/nextcloud/talk/conversationlist/data/network/ConversationsNetworkDataSource.kt create mode 100644 app/src/main/java/com/nextcloud/talk/conversationlist/data/network/OfflineFirstConversationsRepository.kt create mode 100644 app/src/main/java/com/nextcloud/talk/conversationlist/data/network/RetrofitConversationsNetwork.kt create mode 100644 app/src/main/java/com/nextcloud/talk/dagger/modules/DaosModule.kt create mode 100644 app/src/main/java/com/nextcloud/talk/data/changeListVersion/SyncableModel.kt create mode 100644 app/src/main/java/com/nextcloud/talk/data/database/dao/ChatBlocksDao.kt create mode 100644 app/src/main/java/com/nextcloud/talk/data/database/dao/ChatMessagesDao.kt create mode 100644 app/src/main/java/com/nextcloud/talk/data/database/dao/ConversationsDao.kt create mode 100644 app/src/main/java/com/nextcloud/talk/data/database/mappers/ChatMessageMapUtils.kt create mode 100644 app/src/main/java/com/nextcloud/talk/data/database/mappers/ConversationMapUtils.kt create mode 100644 app/src/main/java/com/nextcloud/talk/data/database/model/ChatBlockEntity.kt create mode 100644 app/src/main/java/com/nextcloud/talk/data/database/model/ChatMessageEntity.kt create mode 100644 app/src/main/java/com/nextcloud/talk/data/database/model/ConversationEntity.kt create mode 100644 app/src/main/java/com/nextcloud/talk/data/network/NetworkMonitor.kt create mode 100644 app/src/main/java/com/nextcloud/talk/data/network/NetworkMonitorImpl.kt create mode 100644 app/src/main/java/com/nextcloud/talk/data/source/local/converters/ArrayListConverter.kt create mode 100644 app/src/main/java/com/nextcloud/talk/data/source/local/converters/LinkedHashMapConverter.kt create mode 100644 app/src/main/java/com/nextcloud/talk/data/source/local/converters/LinkedHashMapStringIntConverter.kt create mode 100644 app/src/main/java/com/nextcloud/talk/data/sync/SyncUtils.kt create mode 100644 app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessageJson.kt create mode 100644 app/src/main/java/com/nextcloud/talk/models/json/conversations/ConversationEnums.kt diff --git a/.idea/inspectionProfiles/ktlint.xml b/.idea/inspectionProfiles/ktlint.xml index 7d04a74be8..9fe6dc454e 100644 --- a/.idea/inspectionProfiles/ktlint.xml +++ b/.idea/inspectionProfiles/ktlint.xml @@ -3,5 +3,6 @@