From 4c471989778eddfaf54b86d49c39adbabc8bbefb Mon Sep 17 00:00:00 2001 From: Dan Ballard Date: Tue, 8 Feb 2022 16:54:17 -0500 Subject: [PATCH] notification policy work, translations, even for notifications --- .../kotlin/im/cwtch/flwtch/FlwtchWorker.kt | 18 +++++++++------- lib/cwtch/cwtch.dart | 4 ++++ lib/cwtch/cwtchNotifier.dart | 19 ++++++++++++----- lib/cwtch/ffi.dart | 12 +++++++++++ lib/cwtch/gomobile.dart | 13 ++++++++++++ lib/l10n/intl_de.arb | 21 ++++++++++++++++++- lib/l10n/intl_en.arb | 21 ++++++++++++++++++- lib/l10n/intl_es.arb | 21 ++++++++++++++++++- lib/l10n/intl_fr.arb | 21 ++++++++++++++++++- lib/l10n/intl_it.arb | 21 ++++++++++++++++++- lib/l10n/intl_pl.arb | 21 ++++++++++++++++++- lib/l10n/intl_pt.arb | 21 ++++++++++++++++++- lib/l10n/intl_ru.arb | 21 ++++++++++++++++++- lib/main.dart | 1 - lib/models/contact.dart | 10 +++++---- lib/settings.dart | 10 ++++----- lib/views/globalsettingsview.dart | 12 ++++++----- lib/views/groupsettingsview.dart | 6 +++--- lib/views/peersettingsview.dart | 6 +++--- lib/views/splashView.dart | 8 +++++++ 20 files changed, 245 insertions(+), 42 deletions(-) diff --git a/android/app/src/main/kotlin/im/cwtch/flwtch/FlwtchWorker.kt b/android/app/src/main/kotlin/im/cwtch/flwtch/FlwtchWorker.kt index d9575127..f1664f78 100644 --- a/android/app/src/main/kotlin/im/cwtch/flwtch/FlwtchWorker.kt +++ b/android/app/src/main/kotlin/im/cwtch/flwtch/FlwtchWorker.kt @@ -29,6 +29,9 @@ class FlwtchWorker(context: Context, parameters: WorkerParameters) : private var notificationID: MutableMap = mutableMapOf() private var notificationIDnext: Int = 1 + private var notificationSimple: String? = null + private var notificationConversationInfo: String? = null + override suspend fun doWork(): Result { val method = inputData.getString(KEY_METHOD) ?: return Result.failure() @@ -67,14 +70,8 @@ class FlwtchWorker(context: Context, parameters: WorkerParameters) : val data = JSONObject(evt.Data) val handle = if (evt.EventType == "NewMessageFromPeer") data.getString("RemotePeer") else data.getString("GroupID"); if (data["RemotePeer"] != data["ProfileOnion"]) { - - - val notification = data["notification"] - - - if (notification == "SimpleEvent") { val channelId = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { @@ -92,7 +89,7 @@ class FlwtchWorker(context: Context, parameters: WorkerParameters) : val newNotification = NotificationCompat.Builder(applicationContext, channelId) .setContentTitle("Cwtch") - .setContentText("New message")//todo: translate + .setContentText(notificationSimple ?: "New Message") .setSmallIcon(R.mipmap.knott_transparent) .setContentIntent(PendingIntent.getActivity(applicationContext, 1, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT)) .setAutoCancel(true) @@ -121,7 +118,7 @@ class FlwtchWorker(context: Context, parameters: WorkerParameters) : val newNotification = NotificationCompat.Builder(applicationContext, channelId) .setContentTitle(data.getString("Nick")) - .setContentText("New message")//todo: translate + .setContentText((notificationConversationInfo ?: "New Message From %1").replace("%1", data.getString("Nick"))) .setLargeIcon(BitmapFactory.decodeStream(fh)) .setSmallIcon(R.mipmap.knott_transparent) .setContentIntent(PendingIntent.getActivity(applicationContext, 1, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT)) @@ -397,6 +394,11 @@ class FlwtchWorker(context: Context, parameters: WorkerParameters) : val v = (a.get("Val") as? String) ?: "" Cwtch.setServerAttribute(serverOnion, key, v) } + "L10nInit" -> { + notificationSimple = (a.get("notificationSimple") as? String) ?: "New Message" + notificationConversationInfo = (a.get("notificationConversationInfo") as? String) + ?: "New Message From " + } else -> { Log.i("FlwtchWorker", "unknown command: " + method); return Result.failure() diff --git a/lib/cwtch/cwtch.dart b/lib/cwtch/cwtch.dart index 8577b2a5..ca1a4521 100644 --- a/lib/cwtch/cwtch.dart +++ b/lib/cwtch/cwtch.dart @@ -105,5 +105,9 @@ abstract class Cwtch { // non-ffi String defaultDownloadPath(); + bool isL10nInit(); + + void l10nInit(String notificationSimple, String notificationConversationInfo); + void dispose(); } diff --git a/lib/cwtch/cwtchNotifier.dart b/lib/cwtch/cwtchNotifier.dart index 2f22b89c..0fe92f61 100644 --- a/lib/cwtch/cwtchNotifier.dart +++ b/lib/cwtch/cwtchNotifier.dart @@ -9,6 +9,7 @@ import 'package:cwtch/models/remoteserver.dart'; import 'package:cwtch/models/servers.dart'; import 'package:cwtch/notification_manager.dart'; import 'package:flutter/services.dart'; +import 'package:flutter/widgets.dart'; import 'package:provider/provider.dart'; import 'package:cwtch/torstatus.dart'; @@ -28,8 +29,11 @@ class CwtchNotifier { late AppState appState; late ServerListState serverListState; + String? notificationSimple; + String? notificationConversationInfo; + CwtchNotifier( - ProfileListState pcn, Settings settingsCN, ErrorHandler errorCN, TorStatus torStatusCN, NotificationsManager notificationManagerP, AppState appStateCN, ServerListState serverListStateCN) { + ProfileListState pcn, Settings settingsCN, ErrorHandler errorCN, TorStatus torStatusCN, NotificationsManager notificationManagerP, AppState appStateCN, ServerListState serverListStateCN) { profileCN = pcn; settings = settingsCN; error = errorCN; @@ -39,6 +43,11 @@ class CwtchNotifier { serverListState = serverListStateCN; } + void l10nInit(String notificationSimple, String notificationConversationInfo) { + this.notificationSimple = notificationSimple; + this.notificationConversationInfo = notificationConversationInfo; + } + void handleMessage(String type, dynamic data) { //EnvironmentConfig.debugLog("NewEvent $type $data"); switch (type) { @@ -160,10 +169,10 @@ class CwtchNotifier { var notification = data["notification"]; if (notification == "SimpleEvent") { - notificationManager.notify(/*TODO l10n */ "New Message"); + notificationManager.notify(notificationSimple ?? "New Message"); } else if (notification == "ContactInfo") { var contact = profileCN.getProfile(data["ProfileOnion"])?.contactList.getContact(identifier); - notificationManager.notify(/*TODO l10n */ "New Message from " + (contact?.nickname ?? senderHandle.toString())); + notificationManager.notify((notificationConversationInfo ?? "New Message from %1").replaceFirst("%1", (contact?.nickname ?? senderHandle.toString()))); } profileCN.getProfile(data["ProfileOnion"])?.newMessage( @@ -237,10 +246,10 @@ class CwtchNotifier { profileCN.getProfile(data["ProfileOnion"])?.newMessage(identifier, idx, timestampSent, senderHandle, senderImage, isAuto, data["Data"], contenthash, selectedProfile, selectedConversation); if (notification == "SimpleEvent") { - notificationManager.notify(/*TODO l10n */ "New Message"); + notificationManager.notify(notificationSimple ?? "New Message"); } else if (notification == "ContactInfo") { var contact = profileCN.getProfile(data["ProfileOnion"])?.contactList.getContact(identifier); - notificationManager.notify(/*TODO l10n */ "New Message from " + (contact?.nickname ?? senderHandle.toString())); + notificationManager.notify( (notificationConversationInfo ?? "New Message from %1").replaceFirst("%1", (contact?.nickname ?? senderHandle.toString()))); } appState.notifyProfileUnread(); } diff --git a/lib/cwtch/ffi.dart b/lib/cwtch/ffi.dart index baafc04e..c5e56206 100644 --- a/lib/cwtch/ffi.dart +++ b/lib/cwtch/ffi.dart @@ -100,6 +100,7 @@ class CwtchFfi implements Cwtch { late CwtchNotifier cwtchNotifier; late Isolate cwtchIsolate; ReceivePort _receivePort = ReceivePort(); + bool _isL10nInit = false; static String getLibraryPath() { if (Platform.isWindows) { @@ -744,4 +745,15 @@ class CwtchFfi implements Cwtch { malloc.free(utf8newpass); malloc.free(utf8newpasssagain); } + + @override + bool isL10nInit() { + return _isL10nInit; + } + + @override + void l10nInit(String notificationSimple, String notificationConversationInfo) { + cwtchNotifier.l10nInit(notificationSimple, notificationConversationInfo); + _isL10nInit = true; + } } diff --git a/lib/cwtch/gomobile.dart b/lib/cwtch/gomobile.dart index 73d30bec..07501e17 100644 --- a/lib/cwtch/gomobile.dart +++ b/lib/cwtch/gomobile.dart @@ -30,6 +30,7 @@ class CwtchGomobile implements Cwtch { late Future androidHomeDirectory; String androidHomeDirectoryStr = ""; late CwtchNotifier cwtchNotifier; + bool _isL10nInit = false; CwtchGomobile(CwtchNotifier _cwtchNotifier) { print("gomobile.dart: CwtchGomobile()"); @@ -295,4 +296,16 @@ class CwtchGomobile implements Cwtch { void ChangePassword(String profile, String pass, String newpass, String newpassAgain) { cwtchPlatform.invokeMethod("ChangePassword", {"ProfileOnion": profile, "OldPass": pass, "NewPass": newpass, "NewPassAgain": newpassAgain}); } + + @override + bool isL10nInit() { + return _isL10nInit; + } + + @override + void l10nInit(String notificationSimple, String notificationConversationInfo) { + cwtchNotifier.l10nInit(notificationSimple, notificationConversationInfo); + cwtchPlatform.invokeMethod("L10nInit", {"notificationSimple": notificationSimple, "notificationConversationInfo": notificationConversationInfo}); + _isL10nInit = true; + } } diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index cbea3bfd..385316b1 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -1,6 +1,25 @@ { "@@locale": "de", - "@@last_modified": "2022-02-07T21:17:01+01:00", + "@@last_modified": "2022-02-08T20:13:50+01:00", + "newMessageNotificationConversationInfo": "New Message From %1", + "newMessageNotificationSimple": "New Message", + "notificationContentContactInfo": "Conversation Information", + "notificationContentSimpleEvent": "Plain Event", + "conversationNotificationPolicySettingDescription": "Control this conversation's notification behaviour", + "conversationNotificationPolicySettingLabel": "Conversation Notification Policy", + "settingsGroupExperiments": "Experiments", + "settingsGroupAppearance": "Appearance", + "settingGroupBehaviour": "Behaviour", + "notificationContentSettingDescription": "Controls the contents of conversation notifications", + "notificationPolicySettingDescription": "Controls the default application notification behaviour", + "notificationContentSettingLabel": "Notification Content", + "notificationPolicySettingLabel": "Notification Policy", + "conversationNotificationPolicyNever": "Never", + "conversationNotificationPolicyOptIn": "Opt In", + "conversationNotificationPolicyDefault": "Default", + "notificationPolicyDefaultAll": "Default All", + "notificationPolicyOptIn": "Opt In", + "notificationPolicyMute": "Mute", "tooltipSelectACustomProfileImage": "Select a Custom Profile Image", "torSettingsEnabledCacheDescription": "Cache the current downloaded Tor consensus to reuse next time Cwtch is opened. This will allow Tor to start faster. When disabled, Cwtch will purge cached data on start up.", "torSettingsEnableCache": "Cache Tor Consensus", diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 6f481895..f9d4df28 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -1,6 +1,25 @@ { "@@locale": "en", - "@@last_modified": "2022-02-07T21:17:01+01:00", + "@@last_modified": "2022-02-08T20:13:50+01:00", + "newMessageNotificationConversationInfo": "New Message From %1", + "newMessageNotificationSimple": "New Message", + "notificationContentContactInfo": "Conversation Information", + "notificationContentSimpleEvent": "Plain Event", + "conversationNotificationPolicySettingDescription": "Control this conversation's notification behaviour", + "conversationNotificationPolicySettingLabel": "Conversation Notification Policy", + "settingsGroupExperiments": "Experiments", + "settingsGroupAppearance": "Appearance", + "settingGroupBehaviour": "Behaviour", + "notificationContentSettingDescription": "Controls the contents of conversation notifications", + "notificationPolicySettingDescription": "Controls the default application notification behaviour", + "notificationContentSettingLabel": "Notification Content", + "notificationPolicySettingLabel": "Notification Policy", + "conversationNotificationPolicyNever": "Never", + "conversationNotificationPolicyOptIn": "Opt In", + "conversationNotificationPolicyDefault": "Default", + "notificationPolicyDefaultAll": "Default All", + "notificationPolicyOptIn": "Opt In", + "notificationPolicyMute": "Mute", "tooltipSelectACustomProfileImage": "Select a Custom Profile Image", "editProfile": "Edit Profile", "torSettingsEnabledCacheDescription": "Cache the current downloaded Tor consensus to reuse next time Cwtch is opened. This will allow Tor to start faster. When disabled, Cwtch will purge cached data on start up.", diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb index ff93defc..3f24d8eb 100644 --- a/lib/l10n/intl_es.arb +++ b/lib/l10n/intl_es.arb @@ -1,6 +1,25 @@ { "@@locale": "es", - "@@last_modified": "2022-02-07T21:17:01+01:00", + "@@last_modified": "2022-02-08T20:13:50+01:00", + "newMessageNotificationConversationInfo": "New Message From %1", + "newMessageNotificationSimple": "New Message", + "notificationContentContactInfo": "Conversation Information", + "notificationContentSimpleEvent": "Plain Event", + "conversationNotificationPolicySettingDescription": "Control this conversation's notification behaviour", + "conversationNotificationPolicySettingLabel": "Conversation Notification Policy", + "settingsGroupExperiments": "Experiments", + "settingsGroupAppearance": "Appearance", + "settingGroupBehaviour": "Behaviour", + "notificationContentSettingDescription": "Controls the contents of conversation notifications", + "notificationPolicySettingDescription": "Controls the default application notification behaviour", + "notificationContentSettingLabel": "Notification Content", + "notificationPolicySettingLabel": "Notification Policy", + "conversationNotificationPolicyNever": "Never", + "conversationNotificationPolicyOptIn": "Opt In", + "conversationNotificationPolicyDefault": "Default", + "notificationPolicyDefaultAll": "Default All", + "notificationPolicyOptIn": "Opt In", + "notificationPolicyMute": "Mute", "tooltipSelectACustomProfileImage": "Select a Custom Profile Image", "torSettingsEnabledCacheDescription": "Cache the current downloaded Tor consensus to reuse next time Cwtch is opened. This will allow Tor to start faster. When disabled, Cwtch will purge cached data on start up.", "torSettingsEnableCache": "Cache Tor Consensus", diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index 7e8e365b..7418bea7 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -1,6 +1,25 @@ { "@@locale": "fr", - "@@last_modified": "2022-02-07T21:17:01+01:00", + "@@last_modified": "2022-02-08T20:13:50+01:00", + "newMessageNotificationConversationInfo": "New Message From %1", + "newMessageNotificationSimple": "New Message", + "notificationContentContactInfo": "Conversation Information", + "notificationContentSimpleEvent": "Plain Event", + "conversationNotificationPolicySettingDescription": "Control this conversation's notification behaviour", + "conversationNotificationPolicySettingLabel": "Conversation Notification Policy", + "settingsGroupExperiments": "Experiments", + "settingsGroupAppearance": "Appearance", + "settingGroupBehaviour": "Behaviour", + "notificationContentSettingDescription": "Controls the contents of conversation notifications", + "notificationPolicySettingDescription": "Controls the default application notification behaviour", + "notificationContentSettingLabel": "Notification Content", + "notificationPolicySettingLabel": "Notification Policy", + "conversationNotificationPolicyNever": "Never", + "conversationNotificationPolicyOptIn": "Opt In", + "conversationNotificationPolicyDefault": "Default", + "notificationPolicyDefaultAll": "Default All", + "notificationPolicyOptIn": "Opt In", + "notificationPolicyMute": "Mute", "tooltipSelectACustomProfileImage": "Select a Custom Profile Image", "editProfile": "Modifier le profil", "settingTheme": "Utilisez des thèmes clairs", diff --git a/lib/l10n/intl_it.arb b/lib/l10n/intl_it.arb index ac17d6b7..56e59cc7 100644 --- a/lib/l10n/intl_it.arb +++ b/lib/l10n/intl_it.arb @@ -1,6 +1,25 @@ { "@@locale": "it", - "@@last_modified": "2022-02-07T21:17:01+01:00", + "@@last_modified": "2022-02-08T20:13:50+01:00", + "newMessageNotificationConversationInfo": "New Message From %1", + "newMessageNotificationSimple": "New Message", + "notificationContentContactInfo": "Conversation Information", + "notificationContentSimpleEvent": "Plain Event", + "conversationNotificationPolicySettingDescription": "Control this conversation's notification behaviour", + "conversationNotificationPolicySettingLabel": "Conversation Notification Policy", + "settingsGroupExperiments": "Experiments", + "settingsGroupAppearance": "Appearance", + "settingGroupBehaviour": "Behaviour", + "notificationContentSettingDescription": "Controls the contents of conversation notifications", + "notificationPolicySettingDescription": "Controls the default application notification behaviour", + "notificationContentSettingLabel": "Notification Content", + "notificationPolicySettingLabel": "Notification Policy", + "conversationNotificationPolicyNever": "Never", + "conversationNotificationPolicyOptIn": "Opt In", + "conversationNotificationPolicyDefault": "Default", + "notificationPolicyDefaultAll": "Default All", + "notificationPolicyOptIn": "Opt In", + "notificationPolicyMute": "Mute", "tooltipSelectACustomProfileImage": "Select a Custom Profile Image", "torSettingsEnabledCacheDescription": "Cache the current downloaded Tor consensus to reuse next time Cwtch is opened. This will allow Tor to start faster. When disabled, Cwtch will purge cached data on start up.", "torSettingsEnableCache": "Cache Tor Consensus", diff --git a/lib/l10n/intl_pl.arb b/lib/l10n/intl_pl.arb index cf32bf98..3699ccb8 100644 --- a/lib/l10n/intl_pl.arb +++ b/lib/l10n/intl_pl.arb @@ -1,6 +1,25 @@ { "@@locale": "pl", - "@@last_modified": "2022-02-07T21:17:01+01:00", + "@@last_modified": "2022-02-08T20:13:50+01:00", + "newMessageNotificationConversationInfo": "New Message From %1", + "newMessageNotificationSimple": "New Message", + "notificationContentContactInfo": "Conversation Information", + "notificationContentSimpleEvent": "Plain Event", + "conversationNotificationPolicySettingDescription": "Control this conversation's notification behaviour", + "conversationNotificationPolicySettingLabel": "Conversation Notification Policy", + "settingsGroupExperiments": "Experiments", + "settingsGroupAppearance": "Appearance", + "settingGroupBehaviour": "Behaviour", + "notificationContentSettingDescription": "Controls the contents of conversation notifications", + "notificationPolicySettingDescription": "Controls the default application notification behaviour", + "notificationContentSettingLabel": "Notification Content", + "notificationPolicySettingLabel": "Notification Policy", + "conversationNotificationPolicyNever": "Never", + "conversationNotificationPolicyOptIn": "Opt In", + "conversationNotificationPolicyDefault": "Default", + "notificationPolicyDefaultAll": "Default All", + "notificationPolicyOptIn": "Opt In", + "notificationPolicyMute": "Mute", "tooltipSelectACustomProfileImage": "Select a Custom Profile Image", "torSettingsEnabledCacheDescription": "Cache the current downloaded Tor consensus to reuse next time Cwtch is opened. This will allow Tor to start faster. When disabled, Cwtch will purge cached data on start up.", "torSettingsEnableCache": "Cache Tor Consensus", diff --git a/lib/l10n/intl_pt.arb b/lib/l10n/intl_pt.arb index a8350528..c96e62f2 100644 --- a/lib/l10n/intl_pt.arb +++ b/lib/l10n/intl_pt.arb @@ -1,6 +1,25 @@ { "@@locale": "pt", - "@@last_modified": "2022-02-07T21:17:01+01:00", + "@@last_modified": "2022-02-08T20:13:50+01:00", + "newMessageNotificationConversationInfo": "New Message From %1", + "newMessageNotificationSimple": "New Message", + "notificationContentContactInfo": "Conversation Information", + "notificationContentSimpleEvent": "Plain Event", + "conversationNotificationPolicySettingDescription": "Control this conversation's notification behaviour", + "conversationNotificationPolicySettingLabel": "Conversation Notification Policy", + "settingsGroupExperiments": "Experiments", + "settingsGroupAppearance": "Appearance", + "settingGroupBehaviour": "Behaviour", + "notificationContentSettingDescription": "Controls the contents of conversation notifications", + "notificationPolicySettingDescription": "Controls the default application notification behaviour", + "notificationContentSettingLabel": "Notification Content", + "notificationPolicySettingLabel": "Notification Policy", + "conversationNotificationPolicyNever": "Never", + "conversationNotificationPolicyOptIn": "Opt In", + "conversationNotificationPolicyDefault": "Default", + "notificationPolicyDefaultAll": "Default All", + "notificationPolicyOptIn": "Opt In", + "notificationPolicyMute": "Mute", "tooltipSelectACustomProfileImage": "Select a Custom Profile Image", "torSettingsEnabledCacheDescription": "Cache the current downloaded Tor consensus to reuse next time Cwtch is opened. This will allow Tor to start faster. When disabled, Cwtch will purge cached data on start up.", "torSettingsEnableCache": "Cache Tor Consensus", diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb index be2172b4..e9dc255c 100644 --- a/lib/l10n/intl_ru.arb +++ b/lib/l10n/intl_ru.arb @@ -1,6 +1,25 @@ { "@@locale": "ru", - "@@last_modified": "2022-02-07T21:17:01+01:00", + "@@last_modified": "2022-02-08T20:13:50+01:00", + "newMessageNotificationConversationInfo": "New Message From %1", + "newMessageNotificationSimple": "New Message", + "notificationContentContactInfo": "Conversation Information", + "notificationContentSimpleEvent": "Plain Event", + "conversationNotificationPolicySettingDescription": "Control this conversation's notification behaviour", + "conversationNotificationPolicySettingLabel": "Conversation Notification Policy", + "settingsGroupExperiments": "Experiments", + "settingsGroupAppearance": "Appearance", + "settingGroupBehaviour": "Behaviour", + "notificationContentSettingDescription": "Controls the contents of conversation notifications", + "notificationPolicySettingDescription": "Controls the default application notification behaviour", + "notificationContentSettingLabel": "Notification Content", + "notificationPolicySettingLabel": "Notification Policy", + "conversationNotificationPolicyNever": "Never", + "conversationNotificationPolicyOptIn": "Opt In", + "conversationNotificationPolicyDefault": "Default", + "notificationPolicyDefaultAll": "Default All", + "notificationPolicyOptIn": "Opt In", + "notificationPolicyMute": "Mute", "tooltipSelectACustomProfileImage": "Select a Custom Profile Image", "torSettingsEnabledCacheDescription": "Cache the current downloaded Tor consensus to reuse next time Cwtch is opened. This will allow Tor to start faster. When disabled, Cwtch will purge cached data on start up.", "torSettingsEnableCache": "Cache Tor Consensus", diff --git a/lib/main.dart b/lib/main.dart index c9e06c77..e9f1b98d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -37,7 +37,6 @@ Future main() async { WidgetsFlutterBinding.ensureInitialized(); print("runApp()"); runApp(Flwtch()); - sleep(Duration(seconds: 1)); } class Flwtch extends StatefulWidget { diff --git a/lib/models/contact.dart b/lib/models/contact.dart index 78ac97b8..94319c33 100644 --- a/lib/models/contact.dart +++ b/lib/models/contact.dart @@ -1,5 +1,7 @@ import 'package:cwtch/widgets/messagerow.dart'; import 'package:flutter/widgets.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + import 'message.dart'; import 'messagecache.dart'; @@ -11,14 +13,14 @@ enum ConversationNotificationPolicy { } extension Nameable on ConversationNotificationPolicy { - String get toName { + String toName(BuildContext context) { switch (this) { case ConversationNotificationPolicy.Default: - return "Default"; + return AppLocalizations.of(context)!.conversationNotificationPolicyDefault; case ConversationNotificationPolicy.OptIn: - return "Opt In"; + return AppLocalizations.of(context)!.conversationNotificationPolicyOptIn; case ConversationNotificationPolicy.Never: - return "Never"; + return AppLocalizations.of(context)!.conversationNotificationPolicyNever; } } } diff --git a/lib/settings.dart b/lib/settings.dart index 154af0b9..2462cbb3 100644 --- a/lib/settings.dart +++ b/lib/settings.dart @@ -296,16 +296,16 @@ class Settings extends ChangeNotifier { static String notificationPolicyToString(NotificationPolicy np, BuildContext context) { switch (np) { - case NotificationPolicy.Mute: return "Mute"; - case NotificationPolicy.OptIn: return "OptIn"; - case NotificationPolicy.DefaultAll: return "DefaultAll"; + case NotificationPolicy.Mute: return AppLocalizations.of(context)!.notificationPolicyMute; + case NotificationPolicy.OptIn: return AppLocalizations.of(context)!.notificationPolicyOptIn; + case NotificationPolicy.DefaultAll: return AppLocalizations.of(context)!.notificationPolicyDefaultAll; } } static String notificationContentToString(NotificationContent nc, BuildContext context) { switch (nc) { - case NotificationContent.SimpleEvent: return "SimpleEvent"; - case NotificationContent.ContactInfo: return "ContactInfo"; + case NotificationContent.SimpleEvent: return AppLocalizations.of(context)!.notificationContentSimpleEvent; + case NotificationContent.ContactInfo: return AppLocalizations.of(context)!.notificationContentContactInfo; } } diff --git a/lib/views/globalsettingsview.dart b/lib/views/globalsettingsview.dart index 368ab329..3d14065e 100644 --- a/lib/views/globalsettingsview.dart +++ b/lib/views/globalsettingsview.dart @@ -59,7 +59,7 @@ class _GlobalSettingsViewState extends State { minHeight: viewportConstraints.maxHeight, ), child: Column(children: [ - Row(mainAxisAlignment: MainAxisAlignment.center, children: [Text("Apperance", style: TextStyle(fontWeight: FontWeight.bold))]), + Row(mainAxisAlignment: MainAxisAlignment.center, children: [Text(AppLocalizations.of(context)!.settingsGroupAppearance, style: TextStyle(fontWeight: FontWeight.bold))]), ListTile( title: Text(AppLocalizations.of(context)!.settingLanguage, style: TextStyle(color: settings.current().mainTextColor)), leading: Icon(CwtchIcons.change_language, color: settings.current().mainTextColor), @@ -168,9 +168,10 @@ class _GlobalSettingsViewState extends State { SizedBox( height: 40, ), - Row(mainAxisAlignment: MainAxisAlignment.center, children: [Text("Behaviour", style: TextStyle(fontWeight: FontWeight.bold))]), + Row(mainAxisAlignment: MainAxisAlignment.center, children: [Text(AppLocalizations.of(context)!.settingGroupBehaviour, style: TextStyle(fontWeight: FontWeight.bold))]), ListTile( - title: Text(/*AppLocalizations.of(context)!.themeColorLabel*/ "Notification Policy"), + title: Text(AppLocalizations.of(context)!.notificationPolicySettingLabel), + subtitle: Text(AppLocalizations.of(context)!.notificationPolicySettingDescription), trailing: DropdownButton( value: settings.notificationPolicy, onChanged: (NotificationPolicy? newValue) { @@ -189,7 +190,8 @@ class _GlobalSettingsViewState extends State { leading: Icon(CwtchIcons.chat_bubble_empty_24px, color: settings.current().mainTextColor), ), ListTile( - title: Text(/*AppLocalizations.of(context)!.themeColorLabel*/ "Notification Content"), + title: Text(AppLocalizations.of(context)!.notificationContentSettingLabel), + subtitle: Text(AppLocalizations.of(context)!.notificationContentSettingDescription), trailing: DropdownButton( value: settings.notificationContent, onChanged: (NotificationContent? newValue) { @@ -228,7 +230,7 @@ class _GlobalSettingsViewState extends State { SizedBox( height: 40, ), - Row(mainAxisAlignment: MainAxisAlignment.center, children: [Text("Experiments", style: TextStyle(fontWeight: FontWeight.bold))]), + Row(mainAxisAlignment: MainAxisAlignment.center, children: [Text(AppLocalizations.of(context)!.settingsGroupExperiments, style: TextStyle(fontWeight: FontWeight.bold))]), SwitchListTile( title: Text(AppLocalizations.of(context)!.experimentsEnabled, style: TextStyle(color: settings.current().mainTextColor)), subtitle: Text(AppLocalizations.of(context)!.descriptionExperiments), diff --git a/lib/views/groupsettingsview.dart b/lib/views/groupsettingsview.dart index 6d31535d..989e1bba 100644 --- a/lib/views/groupsettingsview.dart +++ b/lib/views/groupsettingsview.dart @@ -131,15 +131,15 @@ class _GroupSettingsViewState extends State { height: 20, ), ListTile( - title: Text(/*AppLocalizations.of(context)!.savePeerHistory*/ "Conversation Notification Policy", style: TextStyle(color: settings.current().mainTextColor)), - subtitle: Text(/*AppLocalizations.of(context)!.savePeerHistoryDescription*/ "The system blah blah..."), + title: Text(AppLocalizations.of(context)!.conversationNotificationPolicySettingLabel, style: TextStyle(color: settings.current().mainTextColor)), + subtitle: Text(AppLocalizations.of(context)!.conversationNotificationPolicySettingDescription), leading: Icon(CwtchIcons.chat_bubble_empty_24px, color: settings.current().mainTextColor), trailing: DropdownButton( value: Provider.of(context).notificationsPolicy, items: ConversationNotificationPolicy.values.map>((ConversationNotificationPolicy value) { return DropdownMenuItem( value: value, - child: Text(value.toName), + child: Text(value.toName(context)), ); }).toList(), onChanged: (ConversationNotificationPolicy? newVal) { diff --git a/lib/views/peersettingsview.dart b/lib/views/peersettingsview.dart index 112c2c3a..304e5749 100644 --- a/lib/views/peersettingsview.dart +++ b/lib/views/peersettingsview.dart @@ -202,15 +202,15 @@ class _PeerSettingsViewState extends State { ); }).toList())), ListTile( - title: Text(/*AppLocalizations.of(context)!.savePeerHistory*/ "Conversation Notification Policy", style: TextStyle(color: settings.current().mainTextColor)), - subtitle: Text(/*AppLocalizations.of(context)!.savePeerHistoryDescription*/ "The system blah blah..."), + title: Text(AppLocalizations.of(context)!.conversationNotificationPolicySettingLabel, style: TextStyle(color: settings.current().mainTextColor)), + subtitle: Text(AppLocalizations.of(context)!.conversationNotificationPolicySettingDescription), leading: Icon(CwtchIcons.chat_bubble_empty_24px, color: settings.current().mainTextColor), trailing: DropdownButton( value: Provider.of(context).notificationsPolicy, items: ConversationNotificationPolicy.values.map>((ConversationNotificationPolicy value) { return DropdownMenuItem( value: value, - child: Text(value.toName), + child: Text(value.toName(context)), ); }).toList(), onChanged: (ConversationNotificationPolicy? newVal) { diff --git a/lib/views/splashView.dart b/lib/views/splashView.dart index 2d5d14f5..47b504ed 100644 --- a/lib/views/splashView.dart +++ b/lib/views/splashView.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import '../main.dart'; import '../settings.dart'; class SplashView extends StatefulWidget { @@ -14,6 +15,13 @@ class SplashView extends StatefulWidget { class _SplashViewState extends State { @override Widget build(BuildContext context) { + var cwtch = Provider.of(context, listen: false).cwtch; + if (!cwtch.isL10nInit()) { + if (AppLocalizations.of(context) != null && AppLocalizations.of(context)!.newMessageNotificationSimple.isNotEmpty ) { + cwtch.l10nInit(AppLocalizations.of(context)!.newMessageNotificationSimple, AppLocalizations.of(context)!.newMessageNotificationConversationInfo); + } + } + return Consumer( builder: (context, appState, child) => Scaffold( key: Key("SplashView"),