From b382f93abb6e9aaf0f9740dff9583de6a17ad59a Mon Sep 17 00:00:00 2001 From: Gabby Gurdin Date: Thu, 22 Feb 2024 15:45:33 -0500 Subject: [PATCH 1/2] activate trial from toolbar --- lib/pangea/widgets/chat/message_toolbar.dart | 2 ++ .../chat/message_unsubscribed_card.dart | 33 +++++++++++++++---- lib/pangea/widgets/igc/paywall_card.dart | 16 +++++++-- 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/lib/pangea/widgets/chat/message_toolbar.dart b/lib/pangea/widgets/chat/message_toolbar.dart index 0b27f41e2..a17e5b1e4 100644 --- a/lib/pangea/widgets/chat/message_toolbar.dart +++ b/lib/pangea/widgets/chat/message_toolbar.dart @@ -186,6 +186,8 @@ class MessageToolbarState extends State { if (!subscribed) { child = MessageUnsubscribedCard( languageTool: getModeTitle(newMode), + mode: newMode, + toolbarModeStream: widget.toolbarModeStream, ); } else { switch (currentMode) { diff --git a/lib/pangea/widgets/chat/message_unsubscribed_card.dart b/lib/pangea/widgets/chat/message_unsubscribed_card.dart index 542fb85e6..8219e2355 100644 --- a/lib/pangea/widgets/chat/message_unsubscribed_card.dart +++ b/lib/pangea/widgets/chat/message_unsubscribed_card.dart @@ -1,19 +1,40 @@ +import 'dart:async'; + import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/utils/bot_style.dart'; +import 'package:fluffychat/pangea/widgets/chat/message_toolbar.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; class MessageUnsubscribedCard extends StatelessWidget { final String languageTool; + final MessageMode mode; + final StreamController toolbarModeStream; const MessageUnsubscribedCard({ super.key, required this.languageTool, + required this.mode, + required this.toolbarModeStream, }); @override Widget build(BuildContext context) { + final bool inTrialWindow = + MatrixState.pangeaController.userController.inTrialWindow; + + void onButtonPress() { + if (inTrialWindow) { + MatrixState.pangeaController.subscriptionController + .activateNewUserTrial(); + toolbarModeStream.add(mode); + } else { + MatrixState.pangeaController.subscriptionController + .showPaywall(context); + } + } + return Padding( padding: const EdgeInsets.fromLTRB(10, 10, 10, 0), child: Column( @@ -27,17 +48,17 @@ class MessageUnsubscribedCard extends StatelessWidget { SizedBox( width: double.infinity, child: TextButton( - onPressed: () { - MatrixState.pangeaController.subscriptionController - .showPaywall(context); - MatrixState.pAnyState.closeOverlay(); - }, + onPressed: onButtonPress, style: ButtonStyle( backgroundColor: MaterialStateProperty.all( (AppConfig.primaryColor).withOpacity(0.1), ), ), - child: Text(L10n.of(context)!.getAccess), + child: Text( + inTrialWindow + ? L10n.of(context)!.activateTrial + : L10n.of(context)!.getAccess, + ), ), ), ], diff --git a/lib/pangea/widgets/igc/paywall_card.dart b/lib/pangea/widgets/igc/paywall_card.dart index 9b6cfd1b0..a9dc1a86d 100644 --- a/lib/pangea/widgets/igc/paywall_card.dart +++ b/lib/pangea/widgets/igc/paywall_card.dart @@ -14,6 +14,9 @@ class PaywallCard extends StatelessWidget { @override Widget build(BuildContext context) { + final bool inTrialWindow = + MatrixState.pangeaController.userController.inTrialWindow; + return Column( mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.center, @@ -40,8 +43,11 @@ class PaywallCard extends StatelessWidget { width: double.infinity, child: TextButton( onPressed: () { - MatrixState.pangeaController.subscriptionController - .showPaywall(context); + inTrialWindow + ? MatrixState.pangeaController.subscriptionController + .activateNewUserTrial() + : MatrixState.pangeaController.subscriptionController + .showPaywall(context); MatrixState.pAnyState.closeOverlay(); }, style: ButtonStyle( @@ -49,7 +55,11 @@ class PaywallCard extends StatelessWidget { (AppConfig.primaryColor).withOpacity(0.1), ), ), - child: Text(L10n.of(context)!.seeOptions), + child: Text( + inTrialWindow + ? L10n.of(context)!.activateTrial + : L10n.of(context)!.seeOptions, + ), ), ), const SizedBox(height: 5.0), From 87992d55818d36c28f04c31f320bba0255d601e1 Mon Sep 17 00:00:00 2001 From: Gabby Gurdin Date: Fri, 23 Feb 2024 10:14:54 -0500 Subject: [PATCH 2/2] toolbbar tooltips --- assets/l10n/intl_en.arb | 9 ++-- assets/l10n/intl_es.arb | 53 ++++++-------------- lib/pangea/widgets/chat/message_toolbar.dart | 42 ++++++++++++---- 3 files changed, 53 insertions(+), 51 deletions(-) diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index 533af850b..368cad4fc 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -3934,8 +3934,11 @@ "continuedWithoutSubscription": "Continue without subscribing", "trialPeriodExpired": "Your trial period has expired", "selectToDefine": "To define a word in this message, just select it!", - "translation": "translation", - "audio": "message audio", + "translations": "translations", + "messageAudio": "message audio", "definitions": "definitions", - "subscribedToUnlockTools": "Subscribe to unlock language tools, including" + "subscribedToUnlockTools": "Subscribe to unlock language tools, including", + "more": "More", + "translationTooltip": "Translate", + "audioTooltip": "Play Audio" } \ No newline at end of file diff --git a/assets/l10n/intl_es.arb b/assets/l10n/intl_es.arb index f2452d581..c249f8a41 100644 --- a/assets/l10n/intl_es.arb +++ b/assets/l10n/intl_es.arb @@ -4550,54 +4550,33 @@ "showDefinition": "Mostrar definición", "acceptedKeyVerification": "{sender} verificación de clave aceptada", "@acceptedKeyVerification": { - "type": "text", - "placeholders": { - "sender": {} - } - }, + "type": "text", + "placeholders": { + "sender": {} + } + }, "canceledKeyVerification": "{sender} canceló la verificación de claves", "@canceledKeyVerification": { - "type": "text", - "placeholders": { - "sender": {} - } - }, + "type": "text", + "placeholders": { + "sender": {} + } + }, "completedKeyVerification": "{sender} verificación de claves completada", - "@canceledKeyVerification": { - "type": "text", - "placeholders": { - "sender": {} - } - }, "isReadyForKeyVerification": "{sender} está listo para la verificación de claves", - "@canceledKeyVerification": { - "type": "text", - "placeholders": { - "sender": {} - } - }, "requestedKeyVerification": "{sender} solicitó verificación de claves", - "@canceledKeyVerification": { - "type": "text", - "placeholders": { - "sender": {} - } - }, "startedKeyVerification": "{sender} ha iniciado la verificación de claves", - "@canceledKeyVerification": { - "type": "text", - "placeholders": { - "sender": {} - } - }, "subscriptionPopupTitle": "Esta frase podría tener un error gramatical...", "subscriptionPopupDesc": "Suscríbase hoy mismo para desbloquear la traducción y la corrección gramatical.", "seeOptions": "Ver opciones", "continuedWithoutSubscription": "Continuar sin suscribirse", "trialPeriodExpired": "Su periodo de prueba ha expirado", "selectToDefine": "Para definir una palabra en este mensaje, ¡sólo tiene que seleccionarla!", - "translation": "traducción", - "audio": "mensaje de audio", + "translations": "traducciónes", + "messageAudio": "mensaje de audio", "definitions": "definiciones", - "subscribedToUnlockTools": "Suscríbase para desbloquear herramientas lingüísticas, como" + "subscribedToUnlockTools": "Suscríbase para desbloquear herramientas lingüísticas, como", + "more": "Más", + "translationTooltip": "Traducir", + "audioTooltip": "Reproducir audio" } diff --git a/lib/pangea/widgets/chat/message_toolbar.dart b/lib/pangea/widgets/chat/message_toolbar.dart index a17e5b1e4..206f6dbb3 100644 --- a/lib/pangea/widgets/chat/message_toolbar.dart +++ b/lib/pangea/widgets/chat/message_toolbar.dart @@ -167,9 +167,9 @@ class MessageToolbarState extends State { String getModeTitle(MessageMode mode) { switch (mode) { case MessageMode.translation: - return L10n.of(context)!.translation; + return L10n.of(context)!.translations; case MessageMode.play: - return L10n.of(context)!.audio; + return L10n.of(context)!.messageAudio; case MessageMode.definition: return L10n.of(context)!.definitions; default: @@ -178,6 +178,20 @@ class MessageToolbarState extends State { } } + String getModeTooltip(MessageMode mode) { + switch (mode) { + case MessageMode.translation: + return L10n.of(context)!.translationTooltip; + case MessageMode.play: + return L10n.of(context)!.audioTooltip; + case MessageMode.definition: + return L10n.of(context)!.define; + default: + return L10n.of(context)! + .oopsSomethingWentWrong; // Title to indicate an error or unsupported mode + } + } + void updateMode(MessageMode newMode) { debugPrint("updating toolbar mode"); final bool subscribed = @@ -320,18 +334,24 @@ class MessageToolbarState extends State { Row( mainAxisSize: MainAxisSize.min, children: MessageMode.values.map((mode) { - return IconButton( - icon: Icon(getIconData(mode)), - color: currentMode == mode - ? Theme.of(context).colorScheme.primary - : null, - onPressed: () => updateMode(mode), + return Tooltip( + message: getModeTooltip(mode), + child: IconButton( + icon: Icon(getIconData(mode)), + color: currentMode == mode + ? Theme.of(context).colorScheme.primary + : null, + onPressed: () => updateMode(mode), + ), ); }).toList() + [ - IconButton( - icon: Icon(Icons.adaptive.more_outlined), - onPressed: showMore, + Tooltip( + message: L10n.of(context)!.more, + child: IconButton( + icon: Icon(Icons.adaptive.more_outlined), + onPressed: showMore, + ), ), ], ),