diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index b9bef0f..0d05c9e 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -20,6 +20,7 @@ "enableGradient": "Enable bubble background gradient", "translationDisabledInE2e": "Cloud translation is disabled in encrypted rooms to preserve privacy. Select specific words and use system context menu to translate with apps that support it.", "remove": "Remove", + "@remove": { "type": "String", "placeholders": {} @@ -3003,6 +3004,7 @@ } } }, + "customReaction": "Add reaction", "canceledKeyVerification": "{sender} canceled key verification", "@canceledKeyVerification": { "type": "String", diff --git a/assets/l10n/intl_ru.arb b/assets/l10n/intl_ru.arb index 72934ea..412e494 100644 --- a/assets/l10n/intl_ru.arb +++ b/assets/l10n/intl_ru.arb @@ -26,6 +26,7 @@ "displayNavigationRail": "Всегда показывать боковую панель", "enableGradient": "Фоновый градиент для сообщений", "translationDisabledInE2e": "Облачные переводы недоступны в зашифрованных комнатах для защиты конфиденциальности. Выбирайте отдельные слова и переводите их через другие приложения.", + "customReaction": "Добавить реакцию", "@importEmojis": {}, "importFromZipFile": "Импортировать из ZIP-файла", "@importFromZipFile": {}, diff --git a/lib/config/app_config.dart b/lib/config/app_config.dart index be6757e..87e24a6 100644 --- a/lib/config/app_config.dart +++ b/lib/config/app_config.dart @@ -78,6 +78,7 @@ abstract class AppConfig { host: 'servers.joinmatrix.org', path: 'servers.json', ); + static const Set defaultReactions = {'👍', '❤️', '😂', '😮', '😢'}; static void loadFromJson(Map json) { if (json['chat_color'] != null) { diff --git a/lib/generated/l10n/l10n.dart b/lib/generated/l10n/l10n.dart index e9198ae..a95959c 100644 --- a/lib/generated/l10n/l10n.dart +++ b/lib/generated/l10n/l10n.dart @@ -4095,6 +4095,12 @@ abstract class L10n { /// **'{sender} accepted key verification'** String acceptedKeyVerification(String sender); + /// No description provided for @customReaction. + /// + /// In en, this message translates to: + /// **'Add reaction'** + String get customReaction; + /// No description provided for @canceledKeyVerification. /// /// In en, this message translates to: diff --git a/lib/generated/l10n/l10n_ar.dart b/lib/generated/l10n/l10n_ar.dart index c06ba58..0e13eab 100644 --- a/lib/generated/l10n/l10n_ar.dart +++ b/lib/generated/l10n/l10n_ar.dart @@ -2254,6 +2254,9 @@ class L10nAr extends L10n { return 'وافق $sender على التحقق من المفتاح'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return 'قام $sender بإلغاء التحقق من المفتاح'; diff --git a/lib/generated/l10n/l10n_be.dart b/lib/generated/l10n/l10n_be.dart index 46b3bd7..95dac35 100644 --- a/lib/generated/l10n/l10n_be.dart +++ b/lib/generated/l10n/l10n_be.dart @@ -2269,6 +2269,9 @@ class L10nBe extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_bn.dart b/lib/generated/l10n/l10n_bn.dart index 30f20bb..e9ed867 100644 --- a/lib/generated/l10n/l10n_bn.dart +++ b/lib/generated/l10n/l10n_bn.dart @@ -2269,6 +2269,9 @@ class L10nBn extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_bo.dart b/lib/generated/l10n/l10n_bo.dart index 20e09a5..15c0071 100644 --- a/lib/generated/l10n/l10n_bo.dart +++ b/lib/generated/l10n/l10n_bo.dart @@ -2269,6 +2269,9 @@ class L10nBo extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_ca.dart b/lib/generated/l10n/l10n_ca.dart index cc8f6ac..55bcc57 100644 --- a/lib/generated/l10n/l10n_ca.dart +++ b/lib/generated/l10n/l10n_ca.dart @@ -2292,6 +2292,9 @@ class L10nCa extends L10n { return '$sender ha acceptat la verificació de claus'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender ha canceŀlat la verificació de claus'; diff --git a/lib/generated/l10n/l10n_cs.dart b/lib/generated/l10n/l10n_cs.dart index c37e063..349ce99 100644 --- a/lib/generated/l10n/l10n_cs.dart +++ b/lib/generated/l10n/l10n_cs.dart @@ -2273,6 +2273,9 @@ class L10nCs extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_de.dart b/lib/generated/l10n/l10n_de.dart index 415aac6..cdb0608 100644 --- a/lib/generated/l10n/l10n_de.dart +++ b/lib/generated/l10n/l10n_de.dart @@ -2287,6 +2287,9 @@ class L10nDe extends L10n { return '$sender hat die Schlüsselverifikation akzeptiert'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender hat die Schlüsselverifikation abgebrochen'; diff --git a/lib/generated/l10n/l10n_el.dart b/lib/generated/l10n/l10n_el.dart index 29f7a3d..1c36a36 100644 --- a/lib/generated/l10n/l10n_el.dart +++ b/lib/generated/l10n/l10n_el.dart @@ -2270,6 +2270,9 @@ class L10nEl extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_en.dart b/lib/generated/l10n/l10n_en.dart index 5a4c89e..3ee5a5b 100644 --- a/lib/generated/l10n/l10n_en.dart +++ b/lib/generated/l10n/l10n_en.dart @@ -2269,6 +2269,9 @@ class L10nEn extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_eo.dart b/lib/generated/l10n/l10n_eo.dart index 4a3d946..91ab35f 100644 --- a/lib/generated/l10n/l10n_eo.dart +++ b/lib/generated/l10n/l10n_eo.dart @@ -2276,6 +2276,9 @@ class L10nEo extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_es.dart b/lib/generated/l10n/l10n_es.dart index 0d17d9b..641c889 100644 --- a/lib/generated/l10n/l10n_es.dart +++ b/lib/generated/l10n/l10n_es.dart @@ -2292,6 +2292,9 @@ class L10nEs extends L10n { return '$sender aceptó la verificación de clave'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceló la verificación de clave'; diff --git a/lib/generated/l10n/l10n_et.dart b/lib/generated/l10n/l10n_et.dart index 11541a6..b92ba16 100644 --- a/lib/generated/l10n/l10n_et.dart +++ b/lib/generated/l10n/l10n_et.dart @@ -2286,6 +2286,9 @@ class L10nEt extends L10n { return '$sender nõustus krüptovõtmete verifitseerimisega'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender katkestas krüptovõtmete verifitseerimise'; diff --git a/lib/generated/l10n/l10n_eu.dart b/lib/generated/l10n/l10n_eu.dart index 0cd8210..03c1ae1 100644 --- a/lib/generated/l10n/l10n_eu.dart +++ b/lib/generated/l10n/l10n_eu.dart @@ -2279,6 +2279,9 @@ class L10nEu extends L10n { return '$sender(e)k gakoaren egiaztapena onartu du'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender(e)k gakoen egiaztapena ezeztatu du'; diff --git a/lib/generated/l10n/l10n_fa.dart b/lib/generated/l10n/l10n_fa.dart index ed4bceb..834e581 100644 --- a/lib/generated/l10n/l10n_fa.dart +++ b/lib/generated/l10n/l10n_fa.dart @@ -2272,6 +2272,9 @@ class L10nFa extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_fi.dart b/lib/generated/l10n/l10n_fi.dart index e6c98f0..d4a6793 100644 --- a/lib/generated/l10n/l10n_fi.dart +++ b/lib/generated/l10n/l10n_fi.dart @@ -2278,6 +2278,9 @@ class L10nFi extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_fil.dart b/lib/generated/l10n/l10n_fil.dart index 1915c34..c7a65ab 100644 --- a/lib/generated/l10n/l10n_fil.dart +++ b/lib/generated/l10n/l10n_fil.dart @@ -2275,6 +2275,9 @@ class L10nFil extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_fr.dart b/lib/generated/l10n/l10n_fr.dart index f98774f..6d49eb5 100644 --- a/lib/generated/l10n/l10n_fr.dart +++ b/lib/generated/l10n/l10n_fr.dart @@ -2312,6 +2312,9 @@ class L10nFr extends L10n { return '$sender a accepté la vérification de clé'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender a annulé la vérification de clé'; diff --git a/lib/generated/l10n/l10n_ga.dart b/lib/generated/l10n/l10n_ga.dart index 60ac381..efc9279 100644 --- a/lib/generated/l10n/l10n_ga.dart +++ b/lib/generated/l10n/l10n_ga.dart @@ -2297,6 +2297,9 @@ class L10nGa extends L10n { return '$sender glacadh le fíorú eochair'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender cealaithe fíorú eochrach'; diff --git a/lib/generated/l10n/l10n_gl.dart b/lib/generated/l10n/l10n_gl.dart index e0519bd..1f6b441 100644 --- a/lib/generated/l10n/l10n_gl.dart +++ b/lib/generated/l10n/l10n_gl.dart @@ -2281,6 +2281,9 @@ class L10nGl extends L10n { return '$sender aceptou a verificación da chave'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender desbotou a verificación da chave'; diff --git a/lib/generated/l10n/l10n_he.dart b/lib/generated/l10n/l10n_he.dart index f6df6bd..6c31208 100644 --- a/lib/generated/l10n/l10n_he.dart +++ b/lib/generated/l10n/l10n_he.dart @@ -2264,6 +2264,9 @@ class L10nHe extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_hi.dart b/lib/generated/l10n/l10n_hi.dart index 2a0ae3f..499114d 100644 --- a/lib/generated/l10n/l10n_hi.dart +++ b/lib/generated/l10n/l10n_hi.dart @@ -2269,6 +2269,9 @@ class L10nHi extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_hr.dart b/lib/generated/l10n/l10n_hr.dart index 57ff215..19d9b17 100644 --- a/lib/generated/l10n/l10n_hr.dart +++ b/lib/generated/l10n/l10n_hr.dart @@ -2277,6 +2277,9 @@ class L10nHr extends L10n { return '$sender je prihvatio/la potvrđivanje ključa'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender je prekinuo/la potvrđivanje ključa'; diff --git a/lib/generated/l10n/l10n_hu.dart b/lib/generated/l10n/l10n_hu.dart index 245a9aa..f394060 100644 --- a/lib/generated/l10n/l10n_hu.dart +++ b/lib/generated/l10n/l10n_hu.dart @@ -2279,6 +2279,9 @@ class L10nHu extends L10n { return '$sender elfogadta a kulcs megerősítést'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender nem fogadta el a kulcs megerősítést'; diff --git a/lib/generated/l10n/l10n_ia.dart b/lib/generated/l10n/l10n_ia.dart index 9b96953..073f1c1 100644 --- a/lib/generated/l10n/l10n_ia.dart +++ b/lib/generated/l10n/l10n_ia.dart @@ -2269,6 +2269,9 @@ class L10nIa extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_id.dart b/lib/generated/l10n/l10n_id.dart index 5771ba7..72717f5 100644 --- a/lib/generated/l10n/l10n_id.dart +++ b/lib/generated/l10n/l10n_id.dart @@ -2285,6 +2285,9 @@ class L10nId extends L10n { return '$sender menerima verifikasi kunci'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender membatalkan verifikasi kunci'; diff --git a/lib/generated/l10n/l10n_ie.dart b/lib/generated/l10n/l10n_ie.dart index d5baac1..d042c56 100644 --- a/lib/generated/l10n/l10n_ie.dart +++ b/lib/generated/l10n/l10n_ie.dart @@ -2268,6 +2268,9 @@ class L10nIe extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_it.dart b/lib/generated/l10n/l10n_it.dart index af62fe0..a2caf87 100644 --- a/lib/generated/l10n/l10n_it.dart +++ b/lib/generated/l10n/l10n_it.dart @@ -2293,6 +2293,9 @@ class L10nIt extends L10n { return '$sender ha accettato la verifica della chiave'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender ha annullato la verifica della chiave'; diff --git a/lib/generated/l10n/l10n_ja.dart b/lib/generated/l10n/l10n_ja.dart index 4918df1..8cba9bd 100644 --- a/lib/generated/l10n/l10n_ja.dart +++ b/lib/generated/l10n/l10n_ja.dart @@ -2238,6 +2238,9 @@ class L10nJa extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_ka.dart b/lib/generated/l10n/l10n_ka.dart index c7f61a9..e90e569 100644 --- a/lib/generated/l10n/l10n_ka.dart +++ b/lib/generated/l10n/l10n_ka.dart @@ -2271,6 +2271,9 @@ class L10nKa extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_ko.dart b/lib/generated/l10n/l10n_ko.dart index de740ad..7294bff 100644 --- a/lib/generated/l10n/l10n_ko.dart +++ b/lib/generated/l10n/l10n_ko.dart @@ -2221,6 +2221,9 @@ class L10nKo extends L10n { return '$sender가 키 검증을 수락함'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender가 키 검증을 취소함'; diff --git a/lib/generated/l10n/l10n_lt.dart b/lib/generated/l10n/l10n_lt.dart index 1e76f21..5810996 100644 --- a/lib/generated/l10n/l10n_lt.dart +++ b/lib/generated/l10n/l10n_lt.dart @@ -2275,6 +2275,9 @@ class L10nLt extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_lv.dart b/lib/generated/l10n/l10n_lv.dart index 77d090a..d3b9731 100644 --- a/lib/generated/l10n/l10n_lv.dart +++ b/lib/generated/l10n/l10n_lv.dart @@ -2286,6 +2286,9 @@ class L10nLv extends L10n { return '$sender apstiprināja atslēgas apliecināšanu'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender atcēla atslēgas apliecināšanu'; diff --git a/lib/generated/l10n/l10n_nb.dart b/lib/generated/l10n/l10n_nb.dart index d4283c2..be50ecd 100644 --- a/lib/generated/l10n/l10n_nb.dart +++ b/lib/generated/l10n/l10n_nb.dart @@ -2272,6 +2272,9 @@ class L10nNb extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_nl.dart b/lib/generated/l10n/l10n_nl.dart index 4728600..e2f64e3 100644 --- a/lib/generated/l10n/l10n_nl.dart +++ b/lib/generated/l10n/l10n_nl.dart @@ -2275,6 +2275,9 @@ class L10nNl extends L10n { return '$sender accepteerde de sleutelverificatie'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender annuleerde de sleutelverificatie'; diff --git a/lib/generated/l10n/l10n_pl.dart b/lib/generated/l10n/l10n_pl.dart index 2b53310..1142e56 100644 --- a/lib/generated/l10n/l10n_pl.dart +++ b/lib/generated/l10n/l10n_pl.dart @@ -2284,6 +2284,9 @@ class L10nPl extends L10n { return '$sender zaakceptował/-a weryfikację kluczy'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender anulował/-a weryfikację kluczy'; diff --git a/lib/generated/l10n/l10n_pt.dart b/lib/generated/l10n/l10n_pt.dart index 172f97f..3d00c08 100644 --- a/lib/generated/l10n/l10n_pt.dart +++ b/lib/generated/l10n/l10n_pt.dart @@ -2269,6 +2269,9 @@ class L10nPt extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_ro.dart b/lib/generated/l10n/l10n_ro.dart index 1449ff4..467abc4 100644 --- a/lib/generated/l10n/l10n_ro.dart +++ b/lib/generated/l10n/l10n_ro.dart @@ -2286,6 +2286,9 @@ class L10nRo extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_ru.dart b/lib/generated/l10n/l10n_ru.dart index 126152a..c490240 100644 --- a/lib/generated/l10n/l10n_ru.dart +++ b/lib/generated/l10n/l10n_ru.dart @@ -2274,6 +2274,9 @@ class L10nRu extends L10n { return '$sender принял(а) подтверждение ключей'; } + @override + String get customReaction => 'Добавить реакцию'; + @override String canceledKeyVerification(String sender) { return '$sender отклонил(а) подтверждение ключей'; diff --git a/lib/generated/l10n/l10n_sk.dart b/lib/generated/l10n/l10n_sk.dart index ab2c24c..f2e0f5b 100644 --- a/lib/generated/l10n/l10n_sk.dart +++ b/lib/generated/l10n/l10n_sk.dart @@ -2270,6 +2270,9 @@ class L10nSk extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_sl.dart b/lib/generated/l10n/l10n_sl.dart index d8dde81..51c4c05 100644 --- a/lib/generated/l10n/l10n_sl.dart +++ b/lib/generated/l10n/l10n_sl.dart @@ -2273,6 +2273,9 @@ class L10nSl extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_sr.dart b/lib/generated/l10n/l10n_sr.dart index 82c8acc..bbbc5ea 100644 --- a/lib/generated/l10n/l10n_sr.dart +++ b/lib/generated/l10n/l10n_sr.dart @@ -2265,6 +2265,9 @@ class L10nSr extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_sv.dart b/lib/generated/l10n/l10n_sv.dart index 5e2786c..75e5530 100644 --- a/lib/generated/l10n/l10n_sv.dart +++ b/lib/generated/l10n/l10n_sv.dart @@ -2279,6 +2279,9 @@ class L10nSv extends L10n { return '$sender accepterade nyckelverifieringen'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender avbröt nyckelverifieringen'; diff --git a/lib/generated/l10n/l10n_ta.dart b/lib/generated/l10n/l10n_ta.dart index 05063be..c58cdab 100644 --- a/lib/generated/l10n/l10n_ta.dart +++ b/lib/generated/l10n/l10n_ta.dart @@ -2298,6 +2298,9 @@ class L10nTa extends L10n { return '$sender ஏற்றுக்கொள்ளப்பட்ட விசை சரிபார்ப்பு'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender ரத்து செய்யப்பட்ட விசை சரிபார்ப்பு'; diff --git a/lib/generated/l10n/l10n_te.dart b/lib/generated/l10n/l10n_te.dart index 903397d..052fff8 100644 --- a/lib/generated/l10n/l10n_te.dart +++ b/lib/generated/l10n/l10n_te.dart @@ -2269,6 +2269,9 @@ class L10nTe extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_th.dart b/lib/generated/l10n/l10n_th.dart index bcd6521..d67916c 100644 --- a/lib/generated/l10n/l10n_th.dart +++ b/lib/generated/l10n/l10n_th.dart @@ -2271,6 +2271,9 @@ class L10nTh extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_tr.dart b/lib/generated/l10n/l10n_tr.dart index 446dbc0..ee9ec55 100644 --- a/lib/generated/l10n/l10n_tr.dart +++ b/lib/generated/l10n/l10n_tr.dart @@ -2278,6 +2278,9 @@ class L10nTr extends L10n { return '$sender anahtar doğrulamayı kabul etti'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender anahtar doğrulamayı iptal etti'; diff --git a/lib/generated/l10n/l10n_uk.dart b/lib/generated/l10n/l10n_uk.dart index 676d81a..8146f22 100644 --- a/lib/generated/l10n/l10n_uk.dart +++ b/lib/generated/l10n/l10n_uk.dart @@ -2282,6 +2282,9 @@ class L10nUk extends L10n { return '$sender погоджується звірити ключі'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender скасовує звірення ключів'; diff --git a/lib/generated/l10n/l10n_vi.dart b/lib/generated/l10n/l10n_vi.dart index 04b4983..6f203a5 100644 --- a/lib/generated/l10n/l10n_vi.dart +++ b/lib/generated/l10n/l10n_vi.dart @@ -2268,6 +2268,9 @@ class L10nVi extends L10n { return '$sender accepted key verification'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender canceled key verification'; diff --git a/lib/generated/l10n/l10n_zh.dart b/lib/generated/l10n/l10n_zh.dart index b18bcbd..a938a85 100644 --- a/lib/generated/l10n/l10n_zh.dart +++ b/lib/generated/l10n/l10n_zh.dart @@ -2195,6 +2195,9 @@ class L10nZh extends L10n { return '$sender 接受了密钥验证'; } + @override + String get customReaction => 'Add reaction'; + @override String canceledKeyVerification(String sender) { return '$sender 取消了密钥验证'; diff --git a/lib/pages/chat/chat_event_list.dart b/lib/pages/chat/chat_event_list.dart index e9e89f0..20290bc 100644 --- a/lib/pages/chat/chat_event_list.dart +++ b/lib/pages/chat/chat_event_list.dart @@ -131,6 +131,8 @@ class ChatEventList extends StatelessWidget { resetAnimateIn: () { controller.animateInEventIndex = null; }, + singleSelected: controller.selectedEvents.length == 1 + && controller.selectedEvents.first.eventId == event.eventId, onSwipe: () => controller.replyAction(replyTo: event), onInfoTab: controller.showEventInfo, onMention: () => controller.sendController.text += diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index 564597e..1c6419b 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -373,7 +373,7 @@ class ChatView extends StatelessWidget { : Column( mainAxisSize: MainAxisSize.min, children: [ - ReactionsPicker(controller), + // ReactionsPicker(controller), ReplyDisplay(controller), ChatInputRow(controller), ChatEmojiPicker(controller), diff --git a/lib/pages/chat/events/message.dart b/lib/pages/chat/events/message.dart index 2125b23..5a8157c 100644 --- a/lib/pages/chat/events/message.dart +++ b/lib/pages/chat/events/message.dart @@ -1,5 +1,7 @@ import 'dart:ui' as ui; +import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; +import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; import 'package:fluffychat/utils/poll_events.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -42,6 +44,7 @@ class Message extends StatelessWidget { final ScrollController? scrollController; final List colors; final bool gradient; + final bool singleSelected; const Message( this.event, { @@ -50,6 +53,7 @@ class Message extends StatelessWidget { this.displayReadMarker = false, this.longPressSelect = false, this.gradient = false, + this.singleSelected = false, required this.onSelect, required this.onInfoTab, required this.scrollToEventId, @@ -162,6 +166,34 @@ class Message extends StatelessWidget { final resetAnimateIn = this.resetAnimateIn; var animateIn = this.animateIn; + final sentReactions = {}; + if (singleSelected) { + sentReactions.addAll( + event + .aggregatedEvents( + timeline, + RelationshipTypes.reaction, + ) + .where( + (event) => + event.senderId == event.room.client.userID && + event.type == 'm.reaction', + ) + .map( + (event) => event.content + .tryGetMap('m.relates_to') + ?.tryGet('key'), + ) + .whereType(), + ); + } + + final showReceiptsRow = + event.hasAggregatedEvents(timeline, RelationshipTypes.reaction); + + final showReactionPicker = + singleSelected && event.room.canSendDefaultMessages; + final row = StatefulBuilder( builder: (context, setState) { if (animateIn && resetAnimateIn != null) { @@ -330,7 +362,9 @@ class Message extends StatelessWidget { clipBehavior: Clip.antiAlias, child: BubbleBackground( colors: colors, - ignore: noBubble || !ownMessage || !gradient, + ignore: noBubble || + !ownMessage || + !gradient, scrollController: scrollController, child: Container( decoration: BoxDecoration( @@ -465,6 +499,194 @@ class Message extends StatelessWidget { ), ), ), + Align( + alignment: ownMessage + ? Alignment.bottomRight + : Alignment.bottomLeft, + child: AnimatedSize( + duration: FluffyThemes.animationDuration, + curve: FluffyThemes.animationCurve, + child: showReactionPicker + ? Padding( + padding: const EdgeInsets.only( + top: 4.0, + bottom: 4.0, + left: 8.0, + ), + child: Material( + elevation: 4, + borderRadius: BorderRadius.circular( + AppConfig.borderRadius, + ), + shadowColor: theme + .colorScheme.surface + .withAlpha(128), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + ...AppConfig.defaultReactions + .map( + (emoji) => IconButton( + padding: EdgeInsets.zero, + icon: Center( + child: Opacity( + opacity: sentReactions + .contains( + emoji, + ) + ? 0.33 + : 1, + child: Text( + emoji, + style: + const TextStyle( + fontSize: 20, + ), + textAlign: + TextAlign.center, + ), + ), + ), + onPressed: + sentReactions.contains( + emoji, + ) + ? null + : () { + onSelect( + event, + ); + event.room + .sendReaction( + event.eventId, + emoji, + ); + }, + ), + ), + IconButton( + icon: const Icon( + Icons.add_reaction_outlined, + ), + tooltip: L10n.of( + context, + ).customReaction, + onPressed: () async { + final emoji = + await showAdaptiveBottomSheet< + String>( + context: context, + builder: (context) => + Scaffold( + appBar: AppBar( + title: Text( + L10n.of(context) + .customReaction, + ), + leading: CloseButton( + onPressed: () => + Navigator.of( + context, + ).pop( + null, + ), + ), + ), + body: SizedBox( + height: + double.infinity, + child: EmojiPicker( + onEmojiSelected: ( + _, + emoji, + ) => + Navigator.of( + context, + ).pop( + emoji.emoji, + ), + config: Config( + emojiViewConfig: + const EmojiViewConfig( + backgroundColor: + Colors + .transparent, + ), + bottomActionBarConfig: + const BottomActionBarConfig( + enabled: false, + ), + categoryViewConfig: + CategoryViewConfig( + initCategory: + Category + .SMILEYS, + backspaceColor: theme + .colorScheme + .primary, + iconColor: theme + .colorScheme + .primary + .withAlpha( + 128, + ), + iconColorSelected: + theme + .colorScheme + .primary, + indicatorColor: theme + .colorScheme + .primary, + backgroundColor: + theme + .colorScheme + .surface, + ), + skinToneConfig: + SkinToneConfig( + dialogBackgroundColor: + Color.lerp( + theme + .colorScheme + .surface, + theme + .colorScheme + .primaryContainer, + 0.75, + )!, + indicatorColor: theme + .colorScheme + .onSurface, + ), + ), + ), + ), + ), + ); + if (emoji == null) { + return; + } + if (sentReactions.contains( + emoji, + )) { + return; + } + onSelect(event); + + await event.room + .sendReaction( + event.eventId, + emoji, + ); + }, + ), + ], + ), + ), + ) + : const SizedBox.shrink(), + ), + ), ], ), ), @@ -476,8 +698,6 @@ class Message extends StatelessWidget { }, ); Widget container; - final showReceiptsRow = - event.hasAggregatedEvents(timeline, RelationshipTypes.reaction); if (showReceiptsRow || displayTime || selected || displayReadMarker) { container = Column( mainAxisSize: MainAxisSize.min, diff --git a/pubspec.lock b/pubspec.lock index fe2de68..bae79a6 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1170,10 +1170,10 @@ packages: dependency: "direct main" description: name: matrix - sha256: "127cc89a030e1555fc02c3434f443feca942320af6248122b36c56448e59fb19" + sha256: "996e3b1560959afaa3118ec2b5a06734ad29acf64f9c3c09a605c3ddef22039f" url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.1" meta: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index c3fddd3..1bc1ae9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -63,7 +63,7 @@ dependencies: latlong2: ^0.9.1 linkify: ^5.0.0 material: ^1.0.0+2 - matrix: ^1.0.0 + matrix: ^1.0.1 mime: ^1.0.6 native_imaging: ^0.2.0 opus_caf_converter_dart: ^1.0.1