From 631d751887e457957400e77680d406f768119816 Mon Sep 17 00:00:00 2001 From: William Jordan-Cooley Date: Wed, 19 Jun 2024 15:33:52 -0400 Subject: [PATCH 01/11] documentation in choreo record --- lib/pangea/models/choreo_record.dart | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/lib/pangea/models/choreo_record.dart b/lib/pangea/models/choreo_record.dart index 3422a76a2..413f00716 100644 --- a/lib/pangea/models/choreo_record.dart +++ b/lib/pangea/models/choreo_record.dart @@ -247,22 +247,27 @@ class ChoreoRecord { choreoSteps.isNotEmpty ? choreoSteps.last.text : ""; } -/// new step are saved +/// A new ChoreoRecordStep is saved in the following cases: /// 1) before every system-provided text is accepted, if final text is different /// from last step /// 2) on the acceptance of system-provided text /// 3) on message send, if final text is different from last step +/// 4) on the acceptance of an it step +/// 5) on the start of it /// -/// user edit -/// "hey ther" +/// Example 1: +/// the user types "hey ther" +/// IGC suggests "there" /// user accepts "there" correction -/// "hey there" -/// step made for user edits and step made for system suggestion -/// user goes through IT, chooses "hola" -/// "hola" -/// step saved -/// adds "amigo" -/// step saved +/// text is now "hey there" +/// A step is made for the original input 'hey there' and a step is made for system suggestion +/// +/// Example 2: +/// user write "hi friend" +/// a step is made for the original input 'hi friend' +/// the user selects IT and a step is made +/// the user chooses "hola" and a step is saved +/// adds "amigo" and a step saved class ChoreoRecordStep { /// text after changes have been made String text; From 17c95baacbfc550e26dc2eea11eb4327b5bf6c71 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Thu, 20 Jun 2024 00:28:07 +0200 Subject: [PATCH 02/11] Sentry using dart --- .github/workflows/main_deploy.yaml | 43 +++++++----------------------- pubspec.yaml | 1 + scripts/upload-sentry.sh | 23 ---------------- sentry.properties | 6 +++++ 4 files changed, 17 insertions(+), 56 deletions(-) delete mode 100755 scripts/upload-sentry.sh create mode 100644 sentry.properties diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index bb3bdf93d..03f80fedf 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -28,55 +28,32 @@ jobs: run: ./scripts/prepare-web.sh - name: Build Release Web run: ./scripts/build-web.sh + - name: Upload files uses: actions/upload-artifact@v3 with: name: web path: build/web - deploy_web: - runs-on: ubuntu-latest - needs: build_web - environment: staging - steps: - - name: Download web - uses: actions/download-artifact@v3 - with: - name: web - path: build/web - - name: Update Website files - run: | - mv build/web public - touch public/.env - echo "$WEB_APP_ENV" >> public/.env - cp public/.env public/assets/.env - - name: Deploy to GitHub Pages - uses: peaceiris/actions-gh-pages@v3 - with: - personal_token: ${{ secrets.PAGES_DEPLOY_TOKEN }} - publish_dir: ./public - publish_branch: gh-pages - cname: app.staging.pangea.chat - update_sentry: runs-on: ubuntu-latest needs: build_web environment: staging env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - SENTRY_BASE_TOKEN: ${{ secrets.SENTRY_BASE_TOKEN }} - SENTRY_ORG: ${{ secrets.SENTRY_ORG }} - SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} - CI_COMMIT_SHA: ${{ github.sha }} + SENTRY_RELEASE: ${{ github.sha }} + SENTRY_PROJECT: ${{ vars.SENTRY_PROJECT }} + SENTRY_ORG: ${{ vars.SENTRY_ORG }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 + - run: cat .github/workflows/versions.env >> $GITHUB_ENV + - uses: subosito/flutter-action@v2 + with: + flutter-version: ${{ env.FLUTTER_VERSION }} - name: Download web uses: actions/download-artifact@v3 with: name: web path: build/web - - name: Install sentry CLI - run: | - curl -sL https://sentry.io/get-cli/ | bash - name: Update sentry - run: ./scripts/upload-sentry.sh + run: flutter packages pub run sentry_dart_plugin diff --git a/pubspec.yaml b/pubspec.yaml index 0c3b2faac..da58c6ac8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -136,6 +136,7 @@ dev_dependencies: sdk: flutter license_checker: ^1.6.0 msix: ^3.6.2 + sentry_dart_plugin: ^1.0.0 translations_cleaner: ^0.0.5 flutter_native_splash: diff --git a/scripts/upload-sentry.sh b/scripts/upload-sentry.sh deleted file mode 100755 index 13f6f47d3..000000000 --- a/scripts/upload-sentry.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -ve - -# Build a release version of the app for a platform and upload symbols -export OUTPUT_FOLDER_WEB=./build/web/ -export SENTRY_RELEASE=$CI_COMMIT_SHA -export SENTRY_PROJECT="${SENTRY_PROJECT:-client}" -export SENTRY_ORG="${SENTRY_ORG:-pangea-chat}" - -echo "[run] Uploading sourcemaps for $SENTRY_RELEASE" -echo "[run] $SENTRY_PROJECT @ $SENTRY_ORG / $OUTPUT_FOLDER_WEB" -sentry-cli releases new $SENTRY_RELEASE --org $SENTRY_ORG -sentry-cli releases set-commits $CI_COMMIT_SHA --auto -sentry-cli releases files $SENTRY_RELEASE upload-sourcemaps . \ - --ext dart \ - --rewrite - -(cd $OUTPUT_FOLDER_WEB -sentry-cli releases files $SENTRY_RELEASE upload-sourcemaps . \ - --ext map \ - --ext js \ - --rewrite) - -sentry-cli releases finalize $SENTRY_RELEASE diff --git a/sentry.properties b/sentry.properties new file mode 100644 index 000000000..876598ba5 --- /dev/null +++ b/sentry.properties @@ -0,0 +1,6 @@ +upload_debug_symbols=true +upload_source_maps=true +upload_sources=true +wait_for_processing=false +log_level=info +commits=auto From 5b923ca0555d2ac9179f7764ffe70ff414facd2e Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Thu, 20 Jun 2024 00:28:59 +0200 Subject: [PATCH 03/11] added back deploy web --- .github/workflows/main_deploy.yaml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index 03f80fedf..4dade8221 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -35,6 +35,30 @@ jobs: name: web path: build/web + deploy_web: + runs-on: ubuntu-latest + needs: build_web + environment: staging + steps: + - name: Download web + uses: actions/download-artifact@v3 + with: + name: web + path: build/web + - name: Update Website files + run: | + mv build/web public + touch public/.env + echo "$WEB_APP_ENV" >> public/.env + cp public/.env public/assets/.env + - name: Deploy to GitHub Pages + uses: peaceiris/actions-gh-pages@v3 + with: + personal_token: ${{ secrets.PAGES_DEPLOY_TOKEN }} + publish_dir: ./public + publish_branch: gh-pages + cname: app.staging.pangea.chat + update_sentry: runs-on: ubuntu-latest needs: build_web From f1281d744f02a3caf222d56a398b7a3885f55c87 Mon Sep 17 00:00:00 2001 From: Kelrap Date: Thu, 20 Jun 2024 17:06:26 -0400 Subject: [PATCH 04/11] Fixed subscription card overflow --- lib/pangea/widgets/igc/paywall_card.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pangea/widgets/igc/paywall_card.dart b/lib/pangea/widgets/igc/paywall_card.dart index a6707222b..78f7b6985 100644 --- a/lib/pangea/widgets/igc/paywall_card.dart +++ b/lib/pangea/widgets/igc/paywall_card.dart @@ -25,7 +25,7 @@ class PaywallCard extends StatelessWidget { botExpression: BotExpression.addled, ), Padding( - padding: const EdgeInsets.all(20), + padding: const EdgeInsets.all(17), child: Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -54,7 +54,7 @@ class PaywallCard extends StatelessWidget { MatrixState.pAnyState.closeOverlay(); }, style: ButtonStyle( - backgroundColor: MaterialStateProperty.all( + backgroundColor: WidgetStateProperty.all( (AppConfig.primaryColor).withOpacity(0.1), ), ), @@ -70,7 +70,7 @@ class PaywallCard extends StatelessWidget { width: double.infinity, child: TextButton( style: ButtonStyle( - backgroundColor: MaterialStateProperty.all( + backgroundColor: WidgetStateProperty.all( AppConfig.primaryColor.withOpacity(0.1), ), ), From cbadc1999a702c2ed876fa203cff9dc53d27ef4e Mon Sep 17 00:00:00 2001 From: Kelrap Date: Fri, 21 Jun 2024 09:26:41 -0400 Subject: [PATCH 05/11] Remove topic when selecting space --- lib/pages/chat_list/space_view.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/pages/chat_list/space_view.dart b/lib/pages/chat_list/space_view.dart index 6a1b93889..e6c85a617 100644 --- a/lib/pages/chat_list/space_view.dart +++ b/lib/pages/chat_list/space_view.dart @@ -239,7 +239,9 @@ class _SpaceViewState extends State { room?.getLocalizedDisplayname( MatrixLocals(L10n.of(context)!), ), - message: spaceChild?.topic ?? room?.topic, + // #Pangea + // message: spaceChild?.topic ?? room?.topic, + // Pangea# actions: [ // #Pangea // if (room == null) From 651b7514ed5d563f3a5a623a5c4cf44aecb4ada2 Mon Sep 17 00:00:00 2001 From: Kelrap Date: Fri, 21 Jun 2024 09:35:30 -0400 Subject: [PATCH 06/11] Fix list concurrently edited error --- .../client_extension/client_analytics_extension.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/pangea/extensions/client_extension/client_analytics_extension.dart b/lib/pangea/extensions/client_extension/client_analytics_extension.dart index 6057b5a87..d7c97e38c 100644 --- a/lib/pangea/extensions/client_extension/client_analytics_extension.dart +++ b/lib/pangea/extensions/client_extension/client_analytics_extension.dart @@ -133,7 +133,8 @@ extension AnalyticsClientExtension on Client { // Checks for invites to any student analytics rooms // Handles case of analytics rooms that can't be added to some space(s) Future _joinInvitedAnalyticsRooms() async { - for (final Room room in rooms) { + final List allRooms = List.from(rooms); + for (final Room room in allRooms) { if (room.membership == Membership.invite && room.isAnalyticsRoom) { try { await room.join(); From 3ffdd6f26476b725609043af203028a30af16b3c Mon Sep 17 00:00:00 2001 From: Kelrap Date: Fri, 21 Jun 2024 11:49:35 -0400 Subject: [PATCH 07/11] Use more readable text and selection color --- lib/pangea/pages/p_user_age/p_user_age_view.dart | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/pangea/pages/p_user_age/p_user_age_view.dart b/lib/pangea/pages/p_user_age/p_user_age_view.dart index e3eac4d12..1438cf0fe 100644 --- a/lib/pangea/pages/p_user_age/p_user_age_view.dart +++ b/lib/pangea/pages/p_user_age/p_user_age_view.dart @@ -1,3 +1,4 @@ +import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/pages/p_user_age/p_user_age.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; @@ -18,11 +19,15 @@ class PUserAgeView extends StatelessWidget { children: [ Container( margin: const EdgeInsets.only(top: 10), - padding: const EdgeInsets.all(12), + padding: const EdgeInsets.all(15), child: Text( L10n.of(context)!.yourBirthdayPlease, textAlign: TextAlign.justify, - style: const TextStyle(color: Colors.white), + style: const TextStyle( + color: Colors.black, + fontSize: 14, + fontWeight: FontWeight.bold, + ), ), ), const SizedBox( @@ -41,23 +46,25 @@ class PUserAgeView extends StatelessWidget { ListTile( title: Text( L10n.of(context)!.certifyAge(13), - style: const TextStyle(color: Colors.white, fontSize: 14), + style: const TextStyle(color: Colors.black, fontSize: 14), ), leading: Radio( value: 13, groupValue: controller.selectedAge, onChanged: controller.setSelectedAge, + activeColor: AppConfig.primaryColor, ), ), ListTile( title: Text( L10n.of(context)!.certifyAge(18), - style: const TextStyle(color: Colors.white, fontSize: 14), + style: const TextStyle(color: Colors.black, fontSize: 14), ), leading: Radio( value: 18, groupValue: controller.selectedAge, onChanged: controller.setSelectedAge, + activeColor: AppConfig.primaryColor, ), ), ], From 0ae37cba93ce9b8795e290af290ea3902e3692eb Mon Sep 17 00:00:00 2001 From: WilsonLe Date: Fri, 21 Jun 2024 12:27:34 -0400 Subject: [PATCH 08/11] add discussion topic and keywords min max lines with max length --- assets/l10n/intl_en.arb | 2 +- assets/l10n/intl_es.arb | 2 +- ...rsation_bot_discussion_keywords_input.dart | 3 + ...nversation_bot_discussion_topic_input.dart | 3 + .../conversation_bot_discussion_zone.dart | 131 +----------------- .../conversation_bot_settings.dart | 68 --------- 6 files changed, 10 insertions(+), 199 deletions(-) diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index a96dc4484..92f1b2b4a 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -4020,7 +4020,7 @@ "conversationBotDiscussionZone_discussionKeywordsHintText": "Comma separated list of keywords to guide the discussion", "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Send discussion prompt on a schedule", "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Hours between discussion prompts", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Send discussion prompt when user reacts ⏩ to bot message", + "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Responds on ⏩ reaction", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reaction to send discussion prompt", "studentAnalyticsNotAvailable": "Student data not currently available", "roomDataMissing": "Some data may be missing from rooms in which you are not a member.", diff --git a/assets/l10n/intl_es.arb b/assets/l10n/intl_es.arb index c8eba31b8..44a03f0e1 100644 --- a/assets/l10n/intl_es.arb +++ b/assets/l10n/intl_es.arb @@ -4648,7 +4648,7 @@ "conversationBotDiscussionZone_discussionKeywordsHintText": "Lista de palabras clave separadas por comas para orientar el debate", "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Enviar mensajes de debate según un calendario", "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Horas entre temas de debate", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Enviar aviso de discusión cuando el usuario reacciona ⏩ al mensaje del bot.", + "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Responde a la reacción de ⏩", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reacción al envío del aviso de debate", "studentAnalyticsNotAvailable": "Datos de los estudiantes no disponibles actualmente", "roomDataMissing": "Es posible que falten algunos datos de las salas de las que no es miembro.", diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_keywords_input.dart b/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_keywords_input.dart index 9024e41bb..fa08a860d 100644 --- a/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_keywords_input.dart +++ b/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_keywords_input.dart @@ -30,6 +30,9 @@ class ConversationBotDiscussionKeywordsInput extends StatelessWidget { .conversationBotDiscussionZone_discussionKeywordsLabel, ), content: TextField( + minLines: 1, + maxLines: 10, + maxLength: 1000, controller: textFieldController, onChanged: (value) { discussionKeywords = value; diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_topic_input.dart b/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_topic_input.dart index 72caa3839..c2d4eefcc 100644 --- a/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_topic_input.dart +++ b/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_topic_input.dart @@ -30,6 +30,9 @@ class ConversationBotDiscussionTopicInput extends StatelessWidget { .conversationBotDiscussionZone_discussionTopicLabel, ), content: TextField( + minLines: 1, + maxLines: 10, + maxLength: 1000, controller: textFieldController, onChanged: (value) { discussionTopic = value; diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_zone.dart b/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_zone.dart index 57c25e133..ed642a391 100644 --- a/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_zone.dart +++ b/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_zone.dart @@ -17,14 +17,6 @@ class ConversationBotDiscussionZone extends StatelessWidget { @override Widget build(BuildContext context) { - final String discussionTopic = initialBotOptions.discussionTopic ?? ""; - final String discussionKeywords = - initialBotOptions.discussionKeywords ?? ""; - // int discussionTriggerScheduleHourInterval = - // initialBotOptions.discussionTriggerScheduleHourInterval ?? 24; - // String discussionTriggerReactionKey = - // initialBotOptions.discussionTriggerReactionKey ?? "⏩"; - // List reactionKeyOptions = ["⏩"]; return Column( children: [ const SizedBox(height: 12), @@ -84,56 +76,12 @@ class ConversationBotDiscussionZone extends StatelessWidget { ), ), const SizedBox(height: 12), - // CheckboxListTile( - // title: Text( - // L10n.of(context)! - // .conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel, - // ), - // value: initialBotOptions.discussionTriggerScheduleEnabled ?? false, - // onChanged: (value) { - // initialBotOptions.discussionTriggerScheduleEnabled = value ?? false; - // onChanged?.call(initialBotOptions); - // }, - // ), - // if (initialBotOptions.discussionTriggerScheduleEnabled == true) - // Padding( - // padding: const EdgeInsets.all(8), - // child: TextField( - // keyboardType: TextInputType.number, - // controller: TextEditingController( - // text: discussionTriggerScheduleHourInterval.toString(), - // ), - // onChanged: (value) { - // discussionTriggerScheduleHourInterval = - // int.tryParse(value) ?? 0; - // }, - // decoration: InputDecoration( - // labelText: L10n.of(context)! - // .conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel, - // floatingLabelBehavior: FloatingLabelBehavior.auto, - // suffixIcon: IconButton( - // icon: const Icon(Icons.check), - // onPressed: () { - // if (discussionTriggerScheduleHourInterval != - // initialBotOptions - // .discussionTriggerScheduleHourInterval) { - // initialBotOptions.discussionTriggerScheduleHourInterval = - // discussionTriggerScheduleHourInterval; - // onChanged?.call( - // initialBotOptions, - // ); - // } - // }, - // ), - // ), - // ), - // ), - // const SizedBox(height: 12), CheckboxListTile( title: Text( L10n.of(context)! .conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel, ), + enabled: false, value: initialBotOptions.discussionTriggerReactionEnabled ?? false, onChanged: (value) { initialBotOptions.discussionTriggerReactionEnabled = value ?? false; @@ -141,83 +89,8 @@ class ConversationBotDiscussionZone extends StatelessWidget { "⏩"; // hard code this for now onChanged.call(initialBotOptions); }, + // make this input disabled always ), - // if (initialBotOptions.discussionTriggerReactionEnabled == true) - // Padding( - // padding: const EdgeInsets.all(8), - // child: Column( - // children: [ - // Text( - // L10n.of(context)! - // .conversationBotDiscussionZone_discussionTriggerReactionKeyLabel, - // style: TextStyle( - // color: Theme.of(context).colorScheme.secondary, - // fontWeight: FontWeight.bold, - // ), - // textAlign: TextAlign.left, - // ), - // Container( - // decoration: BoxDecoration( - // border: Border.all( - // color: Theme.of(context).colorScheme.secondary, - // width: 0.5, - // ), - // borderRadius: const BorderRadius.all(Radius.circular(10)), - // ), - // child: DropdownButton( - // // Initial Value - // hint: Padding( - // padding: const EdgeInsets.only(left: 15), - // child: Text( - // reactionKeyOptions[0], - // style: const TextStyle().copyWith( - // color: Theme.of(context).textTheme.bodyLarge!.color, - // fontSize: 14, - // ), - // overflow: TextOverflow.clip, - // textAlign: TextAlign.center, - // ), - // ), - // isExpanded: true, - // underline: Container(), - // // Down Arrow Icon - // icon: const Icon(Icons.keyboard_arrow_down), - // // Array list of items - // items: [ - // for (final entry in reactionKeyOptions) - // DropdownMenuItem( - // value: entry, - // child: Padding( - // padding: const EdgeInsets.only(left: 15), - // child: Text( - // entry, - // style: const TextStyle().copyWith( - // color: Theme.of(context) - // .textTheme - // .bodyLarge! - // .color, - // fontSize: 14, - // ), - // overflow: TextOverflow.clip, - // textAlign: TextAlign.center, - // ), - // ), - // ), - // ], - // onChanged: (String? value) { - // if (value != - // initialBotOptions.discussionTriggerReactionKey) { - // initialBotOptions.discussionTriggerReactionKey = value; - // onChanged?.call( - // initialBotOptions, - // ); - // } - // }, - // ), - // ), - // ], - // ), - // ), const SizedBox(height: 12), ], ); diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_settings.dart b/lib/pangea/widgets/conversation_bot/conversation_bot_settings.dart index 1ed7b549d..4f2bfbe4b 100644 --- a/lib/pangea/widgets/conversation_bot/conversation_bot_settings.dart +++ b/lib/pangea/widgets/conversation_bot/conversation_bot_settings.dart @@ -156,74 +156,6 @@ class ConversationBotSettingsState extends State { ), ), if (addBot) ...[ - // Padding( - // padding: const EdgeInsets.only(left: 16), - // child: ListTile( - // onTap: () async { - // final topic = await showTextInputDialog( - // context: context, - // textFields: [ - // DialogTextField( - // initialText: botOptions.topic.isEmpty - // ? "" - // : botOptions.topic, - // hintText: - // L10n.of(context)!.enterAConversationTopic, - // ), - // ], - // title: L10n.of(context)!.conversationTopic, - // ); - // if (topic == null) return; - // updateBotOption(() { - // botOptions.topic = topic.single; - // }); - // }, - // leading: CircleAvatar( - // backgroundColor: - // Theme.of(context).scaffoldBackgroundColor, - // foregroundColor: - // Theme.of(context).textTheme.bodyLarge!.color, - // child: const Icon(Icons.topic_outlined), - // ), - // subtitle: Text( - // botOptions.topic.isEmpty - // ? L10n.of(context)!.enterAConversationTopic - // : botOptions.topic, - // ), - // title: Text( - // L10n.of(context)!.conversationTopic, - // style: TextStyle( - // color: Theme.of(context).colorScheme.secondary, - // fontWeight: FontWeight.bold, - // ), - // ), - // ), - // ), - // Padding( - // padding: const EdgeInsets.only(left: 16), - // child: SwitchListTile.adaptive( - // title: Text( - // L10n.of(context)!.enableModeration, - // style: TextStyle( - // color: Theme.of(context).colorScheme.secondary, - // fontWeight: FontWeight.bold, - // ), - // ), - // subtitle: Text(L10n.of(context)!.enableModerationDesc), - // secondary: CircleAvatar( - // backgroundColor: - // Theme.of(context).scaffoldBackgroundColor, - // foregroundColor: - // Theme.of(context).textTheme.bodyLarge!.color, - // child: const Icon(Icons.shield_outlined), - // ), - // activeColor: AppConfig.activeToggleColor, - // value: botOptions.safetyModeration, - // onChanged: (bool newValue) => updateBotOption(() { - // botOptions.safetyModeration = newValue; - // }), - // ), - // ), Padding( padding: const EdgeInsets.fromLTRB(32, 16, 0, 0), child: Text( From 2ed11d6d7483694c09386abd5d51a92e5f2cffba Mon Sep 17 00:00:00 2001 From: Kelrap Date: Fri, 21 Jun 2024 14:14:17 -0400 Subject: [PATCH 09/11] Doesn't treat subspaces like subchats --- .../events_extension.dart | 60 ++++++++++++++++--- .../pangea_room_extension.dart | 4 ++ 2 files changed, 57 insertions(+), 7 deletions(-) diff --git a/lib/pangea/extensions/pangea_room_extension/events_extension.dart b/lib/pangea/extensions/pangea_room_extension/events_extension.dart index f878bc3cb..2d67db5b2 100644 --- a/lib/pangea/extensions/pangea_room_extension/events_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension/events_extension.dart @@ -60,11 +60,15 @@ extension EventsRoomExtension on Room { future: () async { final List children = await getChildRooms(); for (final Room child in children) { - if (!child.isAnalyticsRoom) { + if (!child.isAnalyticsRoom && !child.isArchived) { if (child.membership != Membership.join) { child.join; } - await child.archive(); + if (child.isSpace) { + await child.archiveSubspace(); + } else { + await child.archive(); + } } } await _archive(); @@ -77,6 +81,23 @@ extension EventsRoomExtension on Room { return success.error == null; } + Future _archiveSubspace() async { + final List children = await getChildRooms(); + for (final Room child in children) { + if (!child.isAnalyticsRoom && !child.isArchived) { + if (child.membership != Membership.join) { + child.join; + } + if (child.isSpace) { + await child.archiveSubspace(); + } else { + await child.archive(); + } + } + } + await _archive(); + } + Future _leaveSpace(BuildContext context, Client client) async { final confirmed = await showOkCancelAlertDialog( useRootNavigator: false, @@ -94,12 +115,18 @@ extension EventsRoomExtension on Room { try { final List children = await getChildRooms(); for (final Room child in children) { - if (!child.isSpace && - child.membership == Membership.join && - child.isUnread) { - await child.markUnread(false); + if (!child.isAnalyticsRoom && !child.isArchived) { + if (!child.isSpace && + child.membership == Membership.join && + child.isUnread) { + await child.markUnread(false); + } + if (child.isSpace) { + await child.leaveSubspace(); + } else { + await child.leave(); + } } - await child.leave(); } await leave(); } catch (err, stack) { @@ -116,6 +143,25 @@ extension EventsRoomExtension on Room { return success.error == null; } + Future _leaveSubspace() async { + final List children = await getChildRooms(); + for (final Room child in children) { + if (!child.isAnalyticsRoom && !child.isArchived) { + if (!child.isSpace && + child.membership == Membership.join && + child.isUnread) { + await child.markUnread(false); + } + if (child.isSpace) { + await child.leaveSubspace(); + } else { + await child.leave(); + } + } + } + await leave(); + } + Future _sendPangeaEvent({ required Map content, required String parentEventId, diff --git a/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart b/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart index 25694901c..570cbebba 100644 --- a/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart @@ -152,9 +152,13 @@ extension PangeaRoom on Room { }) async => await _archiveSpace(context, client, onlyAdmin: onlyAdmin); + Future archiveSubspace() async => await _archiveSubspace(); + Future leaveSpace(BuildContext context, Client client) async => await _leaveSpace(context, client); + Future leaveSubspace() async => await _leaveSubspace(); + Future sendPangeaEvent({ required Map content, required String parentEventId, From e5ac6516da5ad4d5e2bc2386266808a014fb3294 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Fri, 21 Jun 2024 14:37:39 -0400 Subject: [PATCH 10/11] show the user the click instruction card when they first see a message --- lib/pages/chat/chat_event_list.dart | 14 ++++++++++++++ lib/pangea/widgets/igc/pangea_rich_text.dart | 7 ------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/pages/chat/chat_event_list.dart b/lib/pages/chat/chat_event_list.dart index 3fc1aac9c..fed94554a 100644 --- a/lib/pages/chat/chat_event_list.dart +++ b/lib/pages/chat/chat_event_list.dart @@ -5,6 +5,7 @@ import 'package:fluffychat/pages/chat/seen_by_row.dart'; import 'package:fluffychat/pages/chat/typing_indicators.dart'; import 'package:fluffychat/pages/user_bottom_sheet/user_bottom_sheet.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/utils/instructions.dart'; import 'package:fluffychat/pangea/widgets/chat/locked_chat_message.dart'; import 'package:fluffychat/utils/account_config.dart'; import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; @@ -40,6 +41,19 @@ class ChatEventList extends StatelessWidget { final hasWallpaper = controller.room.client.applicationAccountConfig.wallpaperUrl != null; + // #Pangea + // after the chat event list mounts, if the user hasn't yet seen this instruction + // card, attach it on top of the first shown message + WidgetsBinding.instance.addPostFrameCallback((_) { + controller.pangeaController.instructions.show( + context, + InstructionsEnum.clickMessage, + events[0].eventId, + true, + ); + }); + // Pangea# + return SelectionArea( child: ListView.custom( padding: EdgeInsets.only( diff --git a/lib/pangea/widgets/igc/pangea_rich_text.dart b/lib/pangea/widgets/igc/pangea_rich_text.dart index 5f8dc615e..cee67cafd 100644 --- a/lib/pangea/widgets/igc/pangea_rich_text.dart +++ b/lib/pangea/widgets/igc/pangea_rich_text.dart @@ -121,13 +121,6 @@ class PangeaRichTextState extends State { InstructionsEnum.blurMeansTranslate, widget.pangeaMessageEvent.eventId, ); - } else { - pangeaController.instructions.show( - context, - InstructionsEnum.clickMessage, - widget.pangeaMessageEvent.eventId, - true, - ); } //TODO - take out of build function of every message From 506a23368ab4c09f611652c5567f9283a03bb8b8 Mon Sep 17 00:00:00 2001 From: WilsonLe Date: Fri, 21 Jun 2024 15:05:55 -0400 Subject: [PATCH 11/11] reimplement invite bot ui from toggle to invite button with confirm dialog --- assets/l10n/intl_en.arb | 6 + lib/pangea/models/bot_options_model.dart | 2 +- .../conversation_bot_settings.dart | 72 ++++- needed-translations.txt | 300 ++++++++++++++++++ 4 files changed, 368 insertions(+), 12 deletions(-) diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index 92f1b2b4a..c66ef7ac6 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -4022,6 +4022,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Hours between discussion prompts", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Responds on ⏩ reaction", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reaction to send discussion prompt", + "addConversationBotDialogTitleInvite": "Confirm inviting conversation bot", + "addConversationBotButtonInvite": "Invite", + "addConversationBotDialogInviteConfirmation": "Invite", + "addConversationBotButtonTitleRemove": "Confirm removing conversation bot", + "addConversationBotButtonRemove": "Remove", + "addConversationBotDialogRemoveConfirmation": "Remove", "studentAnalyticsNotAvailable": "Student data not currently available", "roomDataMissing": "Some data may be missing from rooms in which you are not a member.", "updatePhoneOS": "You may need to update your device's OS version.", diff --git a/lib/pangea/models/bot_options_model.dart b/lib/pangea/models/bot_options_model.dart index 0b437159e..00eaddc1b 100644 --- a/lib/pangea/models/bot_options_model.dart +++ b/lib/pangea/models/bot_options_model.dart @@ -32,7 +32,7 @@ class BotOptionsModel { this.discussionKeywords, this.discussionTriggerScheduleEnabled, this.discussionTriggerScheduleHourInterval, - this.discussionTriggerReactionEnabled, + this.discussionTriggerReactionEnabled = true, this.discussionTriggerReactionKey, }); diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_settings.dart b/lib/pangea/widgets/conversation_bot/conversation_bot_settings.dart index 4f2bfbe4b..6684dcca7 100644 --- a/lib/pangea/widgets/conversation_bot/conversation_bot_settings.dart +++ b/lib/pangea/widgets/conversation_bot/conversation_bot_settings.dart @@ -1,6 +1,5 @@ import 'dart:developer'; -import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/models/bot_options_model.dart'; import 'package:fluffychat/pangea/utils/bot_name.dart'; import 'package:fluffychat/pangea/widgets/common/bot_face_svg.dart'; @@ -126,7 +125,7 @@ class ConversationBotSettingsState extends State { children: [ Padding( padding: const EdgeInsets.only(left: 16), - child: SwitchListTile.adaptive( + child: ListTile( title: Text( L10n.of(context)!.addConversationBot, style: TextStyle( @@ -135,7 +134,7 @@ class ConversationBotSettingsState extends State { ), ), subtitle: Text(L10n.of(context)!.addConversationBotDesc), - secondary: CircleAvatar( + leading: CircleAvatar( backgroundColor: Theme.of(context).scaffoldBackgroundColor, foregroundColor: @@ -145,14 +144,65 @@ class ConversationBotSettingsState extends State { expression: BotExpression.right, ), ), - activeColor: AppConfig.activeToggleColor, - value: addBot, - onChanged: (bool add) { - setState(() => addBot = add); - add - ? widget.room?.invite(BotName.byEnvironment) - : widget.room?.kick(BotName.byEnvironment); - }, + trailing: ElevatedButton( + onPressed: () async { + final bool? confirm = await showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: addBot + ? Text( + L10n.of(context)! + .addConversationBotButtonTitleRemove, + ) + : Text( + L10n.of(context)! + .addConversationBotDialogTitleInvite, + ), + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(false); + }, + child: Text(L10n.of(context)!.cancel), + ), + TextButton( + onPressed: () { + Navigator.of(context).pop(!addBot); + }, + child: addBot + ? Text( + L10n.of(context)! + .addConversationBotDialogRemoveConfirmation, + ) + : Text( + L10n.of(context)! + .addConversationBotDialogInviteConfirmation, + ), + ), + ], + ); + }, + ); + + if (confirm == true) { + setState(() => addBot = true); + widget.room?.invite(BotName.byEnvironment); + } else { + setState(() => addBot = false); + widget.room?.kick(BotName.byEnvironment); + } + }, + child: addBot + ? Text( + L10n.of(context)! + .addConversationBotButtonRemove, + ) + : Text( + L10n.of(context)! + .addConversationBotButtonInvite, + ), + ), ), ), if (addBot) ...[ diff --git a/needed-translations.txt b/needed-translations.txt index 8a6cceee4..293985cfc 100644 --- a/needed-translations.txt +++ b/needed-translations.txt @@ -831,6 +831,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -2324,6 +2330,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -3817,6 +3829,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -5314,6 +5332,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -6213,6 +6237,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -7194,6 +7224,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -8062,6 +8098,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -9506,6 +9548,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -10652,6 +10700,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -10719,6 +10773,12 @@ "searchMore", "gallery", "files", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "addSpaceToSpaceDescription", "noDatabaseEncryption", "thereAreCountUsersBlocked", @@ -11561,6 +11621,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -12425,6 +12491,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -13426,6 +13498,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -14393,6 +14471,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -15716,6 +15800,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -16718,6 +16808,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -17849,6 +17945,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -18717,6 +18819,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -19963,6 +20071,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -21453,6 +21567,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -22396,6 +22516,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -23278,6 +23404,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -24759,6 +24891,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -25631,6 +25769,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -26883,6 +27027,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -27804,6 +27954,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -28836,6 +28992,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -30187,6 +30349,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -31055,6 +31223,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -32085,6 +32259,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -32959,6 +33139,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -34153,6 +34339,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -35113,6 +35305,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -36082,6 +36280,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -37557,6 +37761,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -38429,6 +38639,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -39624,6 +39840,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -40628,6 +40850,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -41500,6 +41728,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -42761,6 +42995,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -44154,6 +44394,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -45321,6 +45567,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -46222,6 +46474,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -47716,6 +47974,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -49164,6 +49428,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -50032,6 +50302,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -50929,6 +51205,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -52279,6 +52561,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -53146,6 +53434,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS", @@ -54287,6 +54581,12 @@ "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel", "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel", "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel", + "addConversationBotDialogTitleInvite", + "addConversationBotButtonInvite", + "addConversationBotDialogInviteConfirmation", + "addConversationBotButtonTitleRemove", + "addConversationBotButtonRemove", + "addConversationBotDialogRemoveConfirmation", "studentAnalyticsNotAvailable", "roomDataMissing", "updatePhoneOS",