From 5ca833b70c90a811ade0124d4de0c8b780cc9d02 Mon Sep 17 00:00:00 2001 From: Filipe de Lima Brito Date: Thu, 2 May 2019 18:26:05 -0300 Subject: [PATCH 1/3] Fix chat list now showing. --- app/build.gradle | 2 +- .../chat.rocket.android.db.RCDatabase/11.json | 12 +- .../chat.rocket.android.db.RCDatabase/12.json | 1111 +++++++++++++++++ .../android/chatroom/uimodel/UiModelMapper.kt | 26 +- .../chatrooms/adapter/RoomUiModelMapper.kt | 8 +- .../chat/rocket/android/db/DatabaseManager.kt | 15 +- .../java/chat/rocket/android/db/RCDatabase.kt | 19 +- .../chat/rocket/android/db/model/Messages.kt | 65 +- .../chat/rocket/android/db/model/Reactions.kt | 22 +- .../infraestructure/DatabaseMessageMapper.kt | 3 +- dependencies.gradle | 2 +- 11 files changed, 1213 insertions(+), 72 deletions(-) create mode 100644 app/schemas/chat.rocket.android.db.RCDatabase/12.json diff --git a/app/build.gradle b/app/build.gradle index 06cfd3f3ee..4a51677394 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,7 +18,7 @@ android { applicationId "chat.rocket.android" minSdkVersion versions.minSdk targetSdkVersion versions.targetSdk - versionCode 2060 + versionCode 2061 versionName "3.3.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true diff --git a/app/schemas/chat.rocket.android.db.RCDatabase/11.json b/app/schemas/chat.rocket.android.db.RCDatabase/11.json index 1c2b7c60a1..0d58ffcfba 100644 --- a/app/schemas/chat.rocket.android.db.RCDatabase/11.json +++ b/app/schemas/chat.rocket.android.db.RCDatabase/11.json @@ -2,7 +2,7 @@ "formatVersion": 1, "database": { "version": 11, - "identityHash": "fb9f1c815809b0217d326452aeb34e92", + "identityHash": "1984b5661945bd83607d9a7043ed87b0", "entities": [ { "tableName": "users", @@ -1013,7 +1013,7 @@ }, { "tableName": "reactions", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`reaction` TEXT NOT NULL, `messageId` TEXT NOT NULL, `count` INTEGER NOT NULL, `usernames` TEXT NOT NULL, PRIMARY KEY(`reaction`), FOREIGN KEY(`messageId`) REFERENCES `messages`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`reaction` TEXT NOT NULL, `messageId` TEXT NOT NULL, `count` INTEGER NOT NULL, `usernames` TEXT NOT NULL, `names` TEXT NOT NULL, PRIMARY KEY(`reaction`), FOREIGN KEY(`messageId`) REFERENCES `messages`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", "fields": [ { "fieldPath": "reaction", @@ -1038,6 +1038,12 @@ "columnName": "usernames", "affinity": "TEXT", "notNull": true + }, + { + "fieldPath": "names", + "columnName": "names", + "affinity": "TEXT", + "notNull": true } ], "primaryKey": { @@ -1099,7 +1105,7 @@ ], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"fb9f1c815809b0217d326452aeb34e92\")" + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"1984b5661945bd83607d9a7043ed87b0\")" ] } } \ No newline at end of file diff --git a/app/schemas/chat.rocket.android.db.RCDatabase/12.json b/app/schemas/chat.rocket.android.db.RCDatabase/12.json new file mode 100644 index 0000000000..8b1da2129d --- /dev/null +++ b/app/schemas/chat.rocket.android.db.RCDatabase/12.json @@ -0,0 +1,1111 @@ +{ + "formatVersion": 1, + "database": { + "version": 12, + "identityHash": "1984b5661945bd83607d9a7043ed87b0", + "entities": [ + { + "tableName": "users", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `username` TEXT, `name` TEXT, `status` TEXT NOT NULL, `utcOffset` REAL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "username", + "columnName": "username", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "status", + "columnName": "status", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "utcOffset", + "columnName": "utcOffset", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": false + }, + "indices": [ + { + "name": "index_users_username", + "unique": false, + "columnNames": [ + "username" + ], + "createSql": "CREATE INDEX `index_users_username` ON `${TABLE_NAME}` (`username`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "chatrooms", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `subscriptionId` TEXT NOT NULL, `type` TEXT NOT NULL, `name` TEXT NOT NULL, `fullname` TEXT, `userId` TEXT, `ownerId` TEXT, `readonly` INTEGER, `isDefault` INTEGER, `favorite` INTEGER, `topic` TEXT, `announcement` TEXT, `description` TEXT, `open` INTEGER NOT NULL, `alert` INTEGER NOT NULL, `unread` INTEGER NOT NULL, `userMentions` INTEGER, `groupMentions` INTEGER, `updatedAt` INTEGER, `timestamp` INTEGER, `lastSeen` INTEGER, `lastMessageText` TEXT, `lastMessageUserId` TEXT, `lastMessageTimestamp` INTEGER, `broadcast` INTEGER, `muted` TEXT, PRIMARY KEY(`id`), FOREIGN KEY(`ownerId`) REFERENCES `users`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION , FOREIGN KEY(`userId`) REFERENCES `users`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION , FOREIGN KEY(`lastMessageUserId`) REFERENCES `users`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "subscriptionId", + "columnName": "subscriptionId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "fullname", + "columnName": "fullname", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "userId", + "columnName": "userId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "ownerId", + "columnName": "ownerId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "readonly", + "columnName": "readonly", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "isDefault", + "columnName": "isDefault", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "favorite", + "columnName": "favorite", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "topic", + "columnName": "topic", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "announcement", + "columnName": "announcement", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "description", + "columnName": "description", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "open", + "columnName": "open", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "alert", + "columnName": "alert", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "unread", + "columnName": "unread", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "userMentions", + "columnName": "userMentions", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "groupMentions", + "columnName": "groupMentions", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "updatedAt", + "columnName": "updatedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastSeen", + "columnName": "lastSeen", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastMessageText", + "columnName": "lastMessageText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lastMessageUserId", + "columnName": "lastMessageUserId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lastMessageTimestamp", + "columnName": "lastMessageTimestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "broadcast", + "columnName": "broadcast", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "muted", + "columnName": "muted", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": false + }, + "indices": [ + { + "name": "index_chatrooms_userId", + "unique": false, + "columnNames": [ + "userId" + ], + "createSql": "CREATE INDEX `index_chatrooms_userId` ON `${TABLE_NAME}` (`userId`)" + }, + { + "name": "index_chatrooms_ownerId", + "unique": false, + "columnNames": [ + "ownerId" + ], + "createSql": "CREATE INDEX `index_chatrooms_ownerId` ON `${TABLE_NAME}` (`ownerId`)" + }, + { + "name": "index_chatrooms_subscriptionId", + "unique": true, + "columnNames": [ + "subscriptionId" + ], + "createSql": "CREATE UNIQUE INDEX `index_chatrooms_subscriptionId` ON `${TABLE_NAME}` (`subscriptionId`)" + }, + { + "name": "index_chatrooms_updatedAt", + "unique": false, + "columnNames": [ + "updatedAt" + ], + "createSql": "CREATE INDEX `index_chatrooms_updatedAt` ON `${TABLE_NAME}` (`updatedAt`)" + }, + { + "name": "index_chatrooms_lastMessageUserId", + "unique": false, + "columnNames": [ + "lastMessageUserId" + ], + "createSql": "CREATE INDEX `index_chatrooms_lastMessageUserId` ON `${TABLE_NAME}` (`lastMessageUserId`)" + } + ], + "foreignKeys": [ + { + "table": "users", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "ownerId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "users", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "userId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "users", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "lastMessageUserId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "messages", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `roomId` TEXT NOT NULL, `message` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `senderId` TEXT, `updatedAt` INTEGER, `editedAt` INTEGER, `editedBy` TEXT, `senderAlias` TEXT, `avatar` TEXT, `type` TEXT, `groupable` INTEGER NOT NULL, `parseUrls` INTEGER NOT NULL, `pinned` INTEGER NOT NULL, `role` TEXT, `synced` INTEGER NOT NULL, `unread` INTEGER, PRIMARY KEY(`id`), FOREIGN KEY(`senderId`) REFERENCES `users`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION , FOREIGN KEY(`editedBy`) REFERENCES `users`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "roomId", + "columnName": "roomId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "message", + "columnName": "message", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "senderId", + "columnName": "senderId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "updatedAt", + "columnName": "updatedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "editedAt", + "columnName": "editedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "editedBy", + "columnName": "editedBy", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "senderAlias", + "columnName": "senderAlias", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "avatar", + "columnName": "avatar", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "groupable", + "columnName": "groupable", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "parseUrls", + "columnName": "parseUrls", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "pinned", + "columnName": "pinned", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "role", + "columnName": "role", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synced", + "columnName": "synced", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "unread", + "columnName": "unread", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "users", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "senderId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "users", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "editedBy" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "message_favorites", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`messageId` TEXT NOT NULL, `userId` TEXT NOT NULL, PRIMARY KEY(`messageId`, `userId`), FOREIGN KEY(`messageId`) REFERENCES `messages`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`userId`) REFERENCES `users`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION )", + "fields": [ + { + "fieldPath": "messageId", + "columnName": "messageId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "userId", + "columnName": "userId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "messageId", + "userId" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "messages", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "messageId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "users", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "userId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "message_mentions", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`messageId` TEXT NOT NULL, `userId` TEXT NOT NULL, PRIMARY KEY(`messageId`, `userId`), FOREIGN KEY(`messageId`) REFERENCES `messages`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`userId`) REFERENCES `users`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION )", + "fields": [ + { + "fieldPath": "messageId", + "columnName": "messageId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "userId", + "columnName": "userId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "messageId", + "userId" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "messages", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "messageId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "users", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "userId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "message_channels", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`messageId` TEXT NOT NULL, `roomId` TEXT NOT NULL, `roomName` TEXT, PRIMARY KEY(`messageId`, `roomId`), FOREIGN KEY(`messageId`) REFERENCES `messages`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "messageId", + "columnName": "messageId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "roomId", + "columnName": "roomId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "roomName", + "columnName": "roomName", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "messageId", + "roomId" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "messages", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "messageId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "attachments", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` TEXT NOT NULL, `message_id` TEXT NOT NULL, `title` TEXT, `type` TEXT, `description` TEXT, `text` TEXT, `author_name` TEXT, `author_icon` TEXT, `author_link` TEXT, `thumb_url` TEXT, `color` TEXT, `fallback` TEXT, `title_link` TEXT, `title_link_download` INTEGER NOT NULL, `image_url` TEXT, `image_type` TEXT, `image_size` INTEGER, `video_url` TEXT, `video_type` TEXT, `video_size` INTEGER, `audio_url` TEXT, `audio_type` TEXT, `audio_size` INTEGER, `message_link` TEXT, `timestamp` INTEGER, `has_actions` INTEGER NOT NULL, `has_fields` INTEGER NOT NULL, `button_alignment` TEXT, PRIMARY KEY(`_id`), FOREIGN KEY(`message_id`) REFERENCES `messages`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "_id", + "columnName": "_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "messageId", + "columnName": "message_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "description", + "columnName": "description", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "text", + "columnName": "text", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorName", + "columnName": "author_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorIcon", + "columnName": "author_icon", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorLink", + "columnName": "author_link", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbUrl", + "columnName": "thumb_url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "color", + "columnName": "color", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "fallback", + "columnName": "fallback", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "titleLink", + "columnName": "title_link", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "titleLinkDownload", + "columnName": "title_link_download", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "imageUrl", + "columnName": "image_url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "imageType", + "columnName": "image_type", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "imageSize", + "columnName": "image_size", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "videoUrl", + "columnName": "video_url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "videoType", + "columnName": "video_type", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "videoSize", + "columnName": "video_size", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "audioUrl", + "columnName": "audio_url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "audioType", + "columnName": "audio_type", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "audioSize", + "columnName": "audio_size", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "messageLink", + "columnName": "message_link", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "hasActions", + "columnName": "has_actions", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "hasFields", + "columnName": "has_fields", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "buttonAlignment", + "columnName": "button_alignment", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "messages", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "message_id" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "attachment_fields", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `attachmentId` TEXT NOT NULL, `title` TEXT NOT NULL, `value` TEXT NOT NULL, FOREIGN KEY(`attachmentId`) REFERENCES `attachments`(`_id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "attachmentId", + "columnName": "attachmentId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "value", + "columnName": "value", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_attachment_fields_attachmentId", + "unique": false, + "columnNames": [ + "attachmentId" + ], + "createSql": "CREATE INDEX `index_attachment_fields_attachmentId` ON `${TABLE_NAME}` (`attachmentId`)" + } + ], + "foreignKeys": [ + { + "table": "attachments", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "attachmentId" + ], + "referencedColumns": [ + "_id" + ] + } + ] + }, + { + "tableName": "attachment_action", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `attachmentId` TEXT NOT NULL, `type` TEXT NOT NULL, `text` TEXT, `url` TEXT, `isWebView` INTEGER, `webViewHeightRatio` TEXT, `imageUrl` TEXT, `message` TEXT, `isMessageInChatWindow` INTEGER, FOREIGN KEY(`attachmentId`) REFERENCES `attachments`(`_id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "attachmentId", + "columnName": "attachmentId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "text", + "columnName": "text", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "url", + "columnName": "url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "isWebView", + "columnName": "isWebView", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "webViewHeightRatio", + "columnName": "webViewHeightRatio", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "imageUrl", + "columnName": "imageUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "message", + "columnName": "message", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "isMessageInChatWindow", + "columnName": "isMessageInChatWindow", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_attachment_action_attachmentId", + "unique": false, + "columnNames": [ + "attachmentId" + ], + "createSql": "CREATE INDEX `index_attachment_action_attachmentId` ON `${TABLE_NAME}` (`attachmentId`)" + } + ], + "foreignKeys": [ + { + "table": "attachments", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "attachmentId" + ], + "referencedColumns": [ + "_id" + ] + } + ] + }, + { + "tableName": "urls", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`urlId` INTEGER PRIMARY KEY AUTOINCREMENT, `messageId` TEXT NOT NULL, `url` TEXT NOT NULL, `hostname` TEXT, `title` TEXT, `description` TEXT, `imageUrl` TEXT, FOREIGN KEY(`messageId`) REFERENCES `messages`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "urlId", + "columnName": "urlId", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "messageId", + "columnName": "messageId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "url", + "columnName": "url", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "hostname", + "columnName": "hostname", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "description", + "columnName": "description", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "imageUrl", + "columnName": "imageUrl", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "urlId" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_urls_messageId", + "unique": false, + "columnNames": [ + "messageId" + ], + "createSql": "CREATE INDEX `index_urls_messageId` ON `${TABLE_NAME}` (`messageId`)" + } + ], + "foreignKeys": [ + { + "table": "messages", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "messageId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "reactions", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`reaction` TEXT NOT NULL, `messageId` TEXT NOT NULL, `count` INTEGER NOT NULL, `usernames` TEXT NOT NULL, `names` TEXT NOT NULL, PRIMARY KEY(`reaction`), FOREIGN KEY(`messageId`) REFERENCES `messages`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "reaction", + "columnName": "reaction", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "messageId", + "columnName": "messageId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "count", + "columnName": "count", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "usernames", + "columnName": "usernames", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "names", + "columnName": "names", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "reaction" + ], + "autoGenerate": false + }, + "indices": [ + { + "name": "index_reactions_messageId", + "unique": false, + "columnNames": [ + "messageId" + ], + "createSql": "CREATE INDEX `index_reactions_messageId` ON `${TABLE_NAME}` (`messageId`)" + } + ], + "foreignKeys": [ + { + "table": "messages", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "messageId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "messages_sync", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`roomId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, PRIMARY KEY(`roomId`))", + "fields": [ + { + "fieldPath": "roomId", + "columnName": "roomId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "roomId" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [] + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"1984b5661945bd83607d9a7043ed87b0\")" + ] + } +} \ No newline at end of file diff --git a/app/src/main/java/chat/rocket/android/chatroom/uimodel/UiModelMapper.kt b/app/src/main/java/chat/rocket/android/chatroom/uimodel/UiModelMapper.kt index 3d46720f41..cf75690cc8 100644 --- a/app/src/main/java/chat/rocket/android/chatroom/uimodel/UiModelMapper.kt +++ b/app/src/main/java/chat/rocket/android/chatroom/uimodel/UiModelMapper.kt @@ -472,18 +472,20 @@ class UiModelMapper @Inject constructor( val list = mutableListOf() val customEmojis = EmojiRepository.getCustomEmojis() it.getShortNames().forEach { shortname -> - val usernames = it.getUsernames(shortname).orEmpty() - val count = usernames.size - val custom = customEmojis.firstOrNull { emoji -> emoji.shortname == shortname } - list.add( - ReactionUiModel(messageId = message.id, - shortname = shortname, - unicode = EmojiParser.parse(context, shortname), - count = count, - usernames = usernames, - url = custom?.url, - isCustom = custom != null) - ) + it.getUsernames(shortname)?.let { usernames -> + val count = usernames.size + val custom = customEmojis.firstOrNull { emoji -> emoji.shortname == shortname } + list.add( + ReactionUiModel(messageId = message.id, + shortname = shortname, + unicode = EmojiParser.parse(context, shortname), + count = count, + usernames = usernames, + url = custom?.url, + isCustom = custom != null) + ) + + } } list } diff --git a/app/src/main/java/chat/rocket/android/chatrooms/adapter/RoomUiModelMapper.kt b/app/src/main/java/chat/rocket/android/chatrooms/adapter/RoomUiModelMapper.kt index 8407c6a4ad..0dc298d137 100644 --- a/app/src/main/java/chat/rocket/android/chatrooms/adapter/RoomUiModelMapper.kt +++ b/app/src/main/java/chat/rocket/android/chatrooms/adapter/RoomUiModelMapper.kt @@ -101,9 +101,11 @@ class RoomUiModelMapper( avatar = serverUrl.avatarUrl(name!!, isGroupOrChannel = true), lastMessage = if (showLastMessage) { mapLastMessage( - lastMessage?.sender?.id, lastMessage?.sender?.username, - lastMessage?.sender?.name, lastMessage?.message, - isDirectMessage = type is RoomType.DirectMessage + lastMessage?.sender?.id, + lastMessage?.sender?.username, + lastMessage?.sender?.name, + lastMessage?.message, + isDirectMessage = type is RoomType.DirectMessage ) } else { null diff --git a/app/src/main/java/chat/rocket/android/db/DatabaseManager.kt b/app/src/main/java/chat/rocket/android/db/DatabaseManager.kt index 2d3c60f381..0dffbf8f16 100644 --- a/app/src/main/java/chat/rocket/android/db/DatabaseManager.kt +++ b/app/src/main/java/chat/rocket/android/db/DatabaseManager.kt @@ -31,7 +31,6 @@ import chat.rocket.core.model.ChatRoom import chat.rocket.core.model.Message import chat.rocket.core.model.Myself import chat.rocket.core.model.Room -import chat.rocket.core.model.attachment.Attachment import chat.rocket.core.model.userId import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job @@ -237,7 +236,8 @@ class DatabaseManager(val context: Application, val serverUrl: String) { reaction, message.id, size, - reactionValue.joinToString() + reactionValue.first.joinToString(), + reactionValue.second.joinToString() ) ) } @@ -383,17 +383,14 @@ class DatabaseManager(val context: Application, val serverUrl: String) { } } - private fun mapLastMessageText(message: Message?): String? = message?.run { - if (this.message.isEmpty() && attachments?.isNotEmpty() == true) { - message.attachments?.let { mapAttachmentText(it[0]) } + private fun mapLastMessageText(message: Message?): String? = message?.let { lastMessage -> + if (lastMessage.message.isEmpty() && lastMessage.attachments?.isNotEmpty() == true) { + context.getString(R.string.msg_sent_attachment) } else { - this.message + lastMessage.message } } - private fun mapAttachmentText(attachment: Attachment): String = - context.getString(R.string.msg_sent_attachment) - private suspend fun updateSubscription(data: Subscription): ChatRoomEntity? { return retryDB("getRoom(${data.roomId}") { chatRoomDao().getSync(data.roomId) }?.let { current -> with(data) { diff --git a/app/src/main/java/chat/rocket/android/db/RCDatabase.kt b/app/src/main/java/chat/rocket/android/db/RCDatabase.kt index c2c31492c4..96084c7ff6 100644 --- a/app/src/main/java/chat/rocket/android/db/RCDatabase.kt +++ b/app/src/main/java/chat/rocket/android/db/RCDatabase.kt @@ -19,13 +19,20 @@ import chat.rocket.android.emoji.internal.db.StringListConverter @Database( entities = [ - UserEntity::class, ChatRoomEntity::class, MessageEntity::class, - MessageFavoritesRelation::class, MessageMentionsRelation::class, - MessageChannels::class, AttachmentEntity::class, - AttachmentFieldEntity::class, AttachmentActionEntity::class, UrlEntity::class, - ReactionEntity::class, MessagesSync::class + UserEntity::class, + ChatRoomEntity::class, + MessageEntity::class, + MessageFavoritesRelation::class, + MessageMentionsRelation::class, + MessageChannels::class, + AttachmentEntity::class, + AttachmentFieldEntity::class, + AttachmentActionEntity::class, + UrlEntity::class, + ReactionEntity::class, + MessagesSync::class ], - version = 11, + version = 12, exportSchema = true ) @TypeConverters(StringListConverter::class) diff --git a/app/src/main/java/chat/rocket/android/db/model/Messages.kt b/app/src/main/java/chat/rocket/android/db/model/Messages.kt index 03f696dfa9..70d3fee313 100644 --- a/app/src/main/java/chat/rocket/android/db/model/Messages.kt +++ b/app/src/main/java/chat/rocket/android/db/model/Messages.kt @@ -8,11 +8,13 @@ import androidx.room.Relation interface BaseMessageEntity -@Entity(tableName = "messages", - foreignKeys = [ - ForeignKey(entity = UserEntity::class, parentColumns = ["id"], childColumns = ["senderId"]), - ForeignKey(entity = UserEntity::class, parentColumns = ["id"], childColumns = ["editedBy"]) - ]) +@Entity( + tableName = "messages", + foreignKeys = [ + ForeignKey(entity = UserEntity::class, parentColumns = ["id"], childColumns = ["senderId"]), + ForeignKey(entity = UserEntity::class, parentColumns = ["id"], childColumns = ["editedBy"]) + ] +) data class MessageEntity( @PrimaryKey val id: String, val roomId: String, @@ -33,36 +35,47 @@ data class MessageEntity( val unread: Boolean? = null ) : BaseMessageEntity -@Entity(tableName = "message_favorites", - primaryKeys = ["messageId", "userId"], - foreignKeys = [ - ForeignKey(entity = MessageEntity::class, parentColumns = ["id"], - childColumns = ["messageId"], onDelete = ForeignKey.CASCADE), - ForeignKey(entity = UserEntity::class, parentColumns = ["id"], childColumns = ["userId"]) - ]) +@Entity( + tableName = "message_favorites", + primaryKeys = ["messageId", "userId"], + foreignKeys = [ + ForeignKey( + entity = MessageEntity::class, parentColumns = ["id"], + childColumns = ["messageId"], onDelete = ForeignKey.CASCADE + ), + ForeignKey(entity = UserEntity::class, parentColumns = ["id"], childColumns = ["userId"]) + ] +) data class MessageFavoritesRelation( val messageId: String, val userId: String ) : BaseMessageEntity -@Entity(tableName = "message_mentions", - primaryKeys = ["messageId", "userId"], - foreignKeys = [ - ForeignKey(entity = MessageEntity::class, parentColumns = ["id"], - childColumns = ["messageId"], onDelete = ForeignKey.CASCADE), - ForeignKey(entity = UserEntity::class, parentColumns = ["id"], childColumns = ["userId"]) - ]) +@Entity( + tableName = "message_mentions", + primaryKeys = ["messageId", "userId"], + foreignKeys = [ + ForeignKey( + entity = MessageEntity::class, parentColumns = ["id"], + childColumns = ["messageId"], onDelete = ForeignKey.CASCADE + ), + ForeignKey(entity = UserEntity::class, parentColumns = ["id"], childColumns = ["userId"]) + ] +) data class MessageMentionsRelation( val messageId: String, val userId: String ) : BaseMessageEntity -@Entity(tableName = "message_channels", - primaryKeys = ["messageId", "roomId"], - foreignKeys = [ - ForeignKey(entity = MessageEntity::class, parentColumns = ["id"], - childColumns = ["messageId"], onDelete = ForeignKey.CASCADE) - ] +@Entity( + tableName = "message_channels", + primaryKeys = ["messageId", "roomId"], + foreignKeys = [ + ForeignKey( + entity = MessageEntity::class, parentColumns = ["id"], + childColumns = ["messageId"], onDelete = ForeignKey.CASCADE + ) + ] ) data class MessageChannels( val messageId: String, @@ -95,8 +108,6 @@ data class PartialMessage( override fun toString(): String { return "PartialMessage(message=$message, senderName=$senderName, senderUsername=$senderUsername, editName=$editName, editUsername=$editUsername, urls=$urls, attachments=$attachments, reactions=$reactions, channels=$channels)" } - - } data class FullMessage( diff --git a/app/src/main/java/chat/rocket/android/db/model/Reactions.kt b/app/src/main/java/chat/rocket/android/db/model/Reactions.kt index f9012acc84..5a6e6d35fb 100644 --- a/app/src/main/java/chat/rocket/android/db/model/Reactions.kt +++ b/app/src/main/java/chat/rocket/android/db/model/Reactions.kt @@ -5,18 +5,22 @@ import androidx.room.ForeignKey import androidx.room.Index import androidx.room.PrimaryKey -@Entity(tableName = "reactions", - foreignKeys = [ - ForeignKey(entity = MessageEntity::class, parentColumns = ["id"], - childColumns = ["messageId"], onDelete = ForeignKey.CASCADE) - ], - indices = [ - Index(value = ["messageId"]) - ] +@Entity( + tableName = "reactions", + foreignKeys = [ + ForeignKey( + entity = MessageEntity::class, + parentColumns = ["id"], + childColumns = ["messageId"], + onDelete = ForeignKey.CASCADE + ) + ], + indices = [Index(value = ["messageId"])] ) data class ReactionEntity( @PrimaryKey val reaction: String, val messageId: String, val count: Int, - val usernames: String + val usernames: String, + val names: String ) : BaseMessageEntity \ No newline at end of file diff --git a/app/src/main/java/chat/rocket/android/server/infraestructure/DatabaseMessageMapper.kt b/app/src/main/java/chat/rocket/android/server/infraestructure/DatabaseMessageMapper.kt index c66cb3a860..75eb8ea8fe 100644 --- a/app/src/main/java/chat/rocket/android/server/infraestructure/DatabaseMessageMapper.kt +++ b/app/src/main/java/chat/rocket/android/server/infraestructure/DatabaseMessageMapper.kt @@ -89,7 +89,8 @@ class DatabaseMessageMapper(private val dbManager: DatabaseManager) { val map = Reactions() reactions.forEach { reaction -> val usernames = reaction.usernames.split(",").map { it.trim() } - map[reaction.reaction] = usernames + val names = reaction.names.split(",").map { it.trim() } + map[reaction.reaction] = Pair(usernames, names) } return map diff --git a/dependencies.gradle b/dependencies.gradle index b30ff64e52..fcb940c395 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -56,7 +56,7 @@ ext { glide : '4.8.0', glideTransformations : '4.0.0', - jitsi : '+', // TODO Avoid using + (https://github.com/jitsi/jitsi-meet/issues/3987) + jitsi : '1.21.0', // For testing junit : '4.12', From 3e7ee4e0e03ede5a30303dc80cc5df2a566d23c7 Mon Sep 17 00:00:00 2001 From: Filipe de Lima Brito Date: Thu, 2 May 2019 18:29:17 -0300 Subject: [PATCH 2/3] Update version name --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 4a51677394..4fd1352e55 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,7 +19,7 @@ android { minSdkVersion versions.minSdk targetSdkVersion versions.targetSdk versionCode 2061 - versionName "3.3.0" + versionName "3.3.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true From 142b6c413ea3d139d1caf1559c9fddf0d7e3ceeb Mon Sep 17 00:00:00 2001 From: Filipe de Lima Brito Date: Fri, 3 May 2019 01:02:26 -0300 Subject: [PATCH 3/3] Update app version --- app/build.gradle | 2 +- .../chatdetails/ui/ChatDetailsFragment.kt | 27 ++++++++----------- .../chatinformation/ui/MessageInfoFragment.kt | 6 ++--- .../android/chatroom/uimodel/UiModelMapper.kt | 2 +- .../server/domain/SettingsRepository.kt | 2 +- 5 files changed, 16 insertions(+), 23 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4fd1352e55..8896268c55 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,7 +18,7 @@ android { applicationId "chat.rocket.android" minSdkVersion versions.minSdk targetSdkVersion versions.targetSdk - versionCode 2061 + versionCode 2064 versionName "3.3.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true diff --git a/app/src/main/java/chat/rocket/android/chatdetails/ui/ChatDetailsFragment.kt b/app/src/main/java/chat/rocket/android/chatdetails/ui/ChatDetailsFragment.kt index 09ac8cac2e..87de3850e0 100644 --- a/app/src/main/java/chat/rocket/android/chatdetails/ui/ChatDetailsFragment.kt +++ b/app/src/main/java/chat/rocket/android/chatdetails/ui/ChatDetailsFragment.kt @@ -60,17 +60,12 @@ private const val BUNDLE_IS_FAVORITE = "BUNDLE_IS_FAVORITE" private const val BUNDLE_DISABLE_MENU = "BUNDLE_DISABLE_MENU" class ChatDetailsFragment : Fragment(), ChatDetailsView { - @Inject - lateinit var presenter: ChatDetailsPresenter - @Inject - lateinit var factory: ChatDetailsViewModelFactory - @Inject - lateinit var serverUrl: CurrentServerRepository - @Inject - lateinit var settings: GetSettingsInteractor + @Inject lateinit var presenter: ChatDetailsPresenter + @Inject lateinit var factory: ChatDetailsViewModelFactory + @Inject lateinit var serverUrl: CurrentServerRepository + @Inject lateinit var settings: GetSettingsInteractor private var adapter: ChatDetailsAdapter? = null private lateinit var viewModel: ChatDetailsViewModel - internal lateinit var chatRoomId: String internal lateinit var chatRoomType: String private var isSubscribed: Boolean = true @@ -154,19 +149,19 @@ class ChatDetailsFragment : Fragment(), ChatDetailsView { adapter?.let { if (!disableMenu) { it.addOption(getString(R.string.title_files), R.drawable.ic_files_24dp) { - presenter.toFiles(chatRoomId!!) + presenter.toFiles(chatRoomId) } } if (chatRoomType != RoomType.DIRECT_MESSAGE && !disableMenu) { it.addOption(getString(R.string.msg_mentions), R.drawable.ic_at_black_20dp) { - presenter.toMentions(chatRoomId!!) + presenter.toMentions(chatRoomId) } it.addOption( getString(R.string.title_members), R.drawable.ic_people_outline_black_24dp ) { - presenter.toMembers(chatRoomId!!) + presenter.toMembers(chatRoomId) } } @@ -174,13 +169,13 @@ class ChatDetailsFragment : Fragment(), ChatDetailsView { getString(R.string.title_favorite_messages), R.drawable.ic_star_border_white_24dp ) { - presenter.toFavorites(chatRoomId!!) + presenter.toFavorites(chatRoomId) } it.addOption( getString(R.string.title_pinned_messages), R.drawable.ic_action_message_pin_24dp ) { - presenter.toPinned(chatRoomId!!) + presenter.toPinned(chatRoomId) } } } @@ -206,11 +201,11 @@ class ChatDetailsFragment : Fragment(), ChatDetailsView { private fun getDetails() { if (isSubscribed) - viewModel.getDetails(chatRoomId!!).observe(viewLifecycleOwner, Observer { details -> + viewModel.getDetails(chatRoomId).observe(viewLifecycleOwner, Observer { details -> displayDetails(details) }) else - presenter.getDetails(chatRoomId!!, chatRoomType!!) + presenter.getDetails(chatRoomId, chatRoomType) } private fun setupOptions() { diff --git a/app/src/main/java/chat/rocket/android/chatinformation/ui/MessageInfoFragment.kt b/app/src/main/java/chat/rocket/android/chatinformation/ui/MessageInfoFragment.kt index 3de1ff2812..8f6d881a6d 100644 --- a/app/src/main/java/chat/rocket/android/chatinformation/ui/MessageInfoFragment.kt +++ b/app/src/main/java/chat/rocket/android/chatinformation/ui/MessageInfoFragment.kt @@ -34,10 +34,8 @@ internal const val TAG_MESSAGE_INFO_FRAGMENT = "MessageInfoFragment" private const val BUNDLE_MESSAGE_ID = "message_id" class MessageInfoFragment : Fragment(), MessageInfoView { - @Inject - lateinit var presenter: MessageInfoPresenter - @Inject - lateinit var analyticsManager: AnalyticsManager + @Inject lateinit var presenter: MessageInfoPresenter + @Inject lateinit var analyticsManager: AnalyticsManager private lateinit var adapter: ReadReceiptAdapter private lateinit var messageId: String diff --git a/app/src/main/java/chat/rocket/android/chatroom/uimodel/UiModelMapper.kt b/app/src/main/java/chat/rocket/android/chatroom/uimodel/UiModelMapper.kt index cf75690cc8..3cdd187d40 100644 --- a/app/src/main/java/chat/rocket/android/chatroom/uimodel/UiModelMapper.kt +++ b/app/src/main/java/chat/rocket/android/chatroom/uimodel/UiModelMapper.kt @@ -401,7 +401,7 @@ class UiModelMapper @Inject constructor( private fun attachmentUrl(url: String?): String? { if (url.isNullOrEmpty()) return null - if (url!!.startsWith("http")) return url + if (url.startsWith("http")) return url val fullUrl = "$baseUrl$url" val httpUrl = HttpUrl.parse(fullUrl) diff --git a/app/src/main/java/chat/rocket/android/server/domain/SettingsRepository.kt b/app/src/main/java/chat/rocket/android/server/domain/SettingsRepository.kt index e2155e249f..21327bd0ea 100644 --- a/app/src/main/java/chat/rocket/android/server/domain/SettingsRepository.kt +++ b/app/src/main/java/chat/rocket/android/server/domain/SettingsRepository.kt @@ -116,7 +116,7 @@ fun PublicSettings.messageReadReceiptStoreUsers(): Boolean = this[MESSAGE_READ_R fun PublicSettings.uploadMimeTypeFilter(): Array? { val values = this[UPLOAD_WHITELIST_MIMETYPES]?.value as String? if (!values.isNullOrBlank()) { - return values!!.split(",").mapToTypedArray { it.trim() } + return values.split(",").mapToTypedArray { it.trim() } } return null }