diff --git a/lib/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart b/lib/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart index 27151f7c9..45db1a916 100644 --- a/lib/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart +++ b/lib/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart @@ -3,6 +3,7 @@ import 'dart:ui'; import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_account_datasource.dart'; import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart'; import 'package:tmail_ui_user/features/manage_account/data/local/preferences_setting_manager.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/ai_scribe_config.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_setting.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/spam_report_config.dart'; @@ -44,6 +45,10 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource { await _preferencesSettingManager.updateTextFormattingMenu( isDisplayed: preferencesConfig.isDisplayed, ); + } else if (preferencesConfig is AIScribeConfig) { + await _preferencesSettingManager.updateAIScribe( + preferencesConfig.isEnabled, + ); } else { await _preferencesSettingManager.savePreferences( preferencesConfig, diff --git a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart index d74c43917..11b879184 100644 --- a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart +++ b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart @@ -12,6 +12,7 @@ import 'package:jmap_dart_client/jmap/mail/vacation/vacation_response.dart'; import 'package:jmap_dart_client/jmap/quotas/quota.dart'; import 'package:model/model.dart'; import 'package:rule_filter/rule_filter/capability_rule_filter.dart'; +import 'package:scribe/scribe/ai/presentation/utils/ai_scribe_constants.dart'; import 'package:server_settings/server_settings/capability_server_settings.dart'; import 'package:tmail_ui_user/features/base/action/ui_action.dart'; import 'package:tmail_ui_user/features/base/mixin/ai_scribe_mixin.dart'; @@ -332,6 +333,14 @@ class ManageAccountDashBoardController extends ReloadableController } } + bool get isAICapabilitySupported { + if (accountId.value != null && sessionCurrent != null) { + return AiScribeConstants.aiCapability.isSupported(sessionCurrent!, accountId.value!); + } else { + return false; + } + } + void disableVacationResponder( VacationResponse vacation, { bool isAuto = false, diff --git a/lib/features/manage_account/presentation/model/preferences_option_type.dart b/lib/features/manage_account/presentation/model/preferences_option_type.dart index 836952fff..adb29ff12 100644 --- a/lib/features/manage_account/presentation/model/preferences_option_type.dart +++ b/lib/features/manage_account/presentation/model/preferences_option_type.dart @@ -8,7 +8,8 @@ enum PreferencesOptionType { readReceipt(isLocal: false), senderPriority(isLocal: false), thread(isLocal: true), - spamReport(isLocal: true); + spamReport(isLocal: true), + aiScribe(isLocal: true); final bool isLocal; @@ -24,6 +25,8 @@ enum PreferencesOptionType { return appLocalizations.thread; case PreferencesOptionType.spamReport: return appLocalizations.spamReports; + case PreferencesOptionType.aiScribe: + return appLocalizations.aiScribe; } } @@ -37,6 +40,8 @@ enum PreferencesOptionType { return appLocalizations.threadSettingExplanation; case PreferencesOptionType.spamReport: return appLocalizations.spamReportsSettingExplanation; + case PreferencesOptionType.aiScribe: + return appLocalizations.aiScribeSettingExplanation; } } @@ -50,6 +55,8 @@ enum PreferencesOptionType { return appLocalizations.threadToggleDescription; case PreferencesOptionType.spamReport: return appLocalizations.spamReportToggleDescription; + case PreferencesOptionType.aiScribe: + return appLocalizations.aiScribeToggleDescription; } } @@ -66,6 +73,8 @@ enum PreferencesOptionType { return preferencesSetting.threadConfig.isEnabled; case PreferencesOptionType.spamReport: return preferencesSetting.spamReportConfig.isEnabled; + case PreferencesOptionType.aiScribe: + return preferencesSetting.aiScribeConfig.isEnabled; } } } \ No newline at end of file diff --git a/lib/features/manage_account/presentation/preferences/bindings/preferences_interactors_bindings.dart b/lib/features/manage_account/presentation/preferences/bindings/preferences_interactors_bindings.dart index 09dd63546..bd6c5ff94 100644 --- a/lib/features/manage_account/presentation/preferences/bindings/preferences_interactors_bindings.dart +++ b/lib/features/manage_account/presentation/preferences/bindings/preferences_interactors_bindings.dart @@ -6,6 +6,7 @@ import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_ import 'package:tmail_ui_user/features/manage_account/data/local/preferences_setting_manager.dart'; import 'package:tmail_ui_user/features/manage_account/data/repository/manage_account_repository_impl.dart'; import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_ai_scribe_config_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/save_language_interactor.dart'; import 'package:tmail_ui_user/features/server_settings/data/datasource/server_settings_data_source.dart'; import 'package:tmail_ui_user/features/server_settings/data/datasource_impl/remote_server_settings_data_source_impl.dart'; @@ -62,6 +63,10 @@ class PreferencesInteractorsBindings extends InteractorsBindings { () => SaveLanguageInteractor(Get.find(tag: composerId)), tag: composerId, ); + Get.lazyPut( + () => GetAIScribeConfigInteractor(Get.find(tag: composerId)), + tag: composerId, + ); } @override @@ -101,5 +106,6 @@ class PreferencesInteractorsBindings extends InteractorsBindings { Get.delete(tag: composerId); Get.delete(tag: composerId); Get.delete(tag: composerId); + Get.delete(tag: composerId); } } \ No newline at end of file diff --git a/lib/features/manage_account/presentation/preferences/preferences_controller.dart b/lib/features/manage_account/presentation/preferences/preferences_controller.dart index 1be4acd08..c12cb03ae 100644 --- a/lib/features/manage_account/presentation/preferences/preferences_controller.dart +++ b/lib/features/manage_account/presentation/preferences/preferences_controller.dart @@ -7,6 +7,7 @@ import 'package:server_settings/server_settings/tmail_server_settings.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/loader_status.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/ai_scribe_config.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_setting.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/spam_report_config.dart'; @@ -49,6 +50,10 @@ class PreferencesController extends BaseController { final _manageAccountDashBoardController = Get.find(); + bool get isAIScribeAvailable { + return _manageAccountDashBoardController.isAICapabilitySupported; + } + @override void onInit() { super.onInit(); @@ -150,6 +155,9 @@ class PreferencesController extends BaseController { case PreferencesOptionType.spamReport: config = SpamReportConfig(isEnabled: !isEnabled); break; + case PreferencesOptionType.aiScribe: + config = AIScribeConfig(isEnabled: !isEnabled); + break; default: break; } diff --git a/lib/features/manage_account/presentation/preferences/preferences_view.dart b/lib/features/manage_account/presentation/preferences/preferences_view.dart index dc51ab5b5..3266e2570 100644 --- a/lib/features/manage_account/presentation/preferences/preferences_view.dart +++ b/lib/features/manage_account/presentation/preferences/preferences_view.dart @@ -72,7 +72,12 @@ class PreferencesView extends GetWidget with AppLoaderMix if (localSettingOption.configs.isNotEmpty) ...PreferencesOptionType.values.where( (optionType) => optionType.isLocal, - ), + ).where((optionType) { + if (optionType == PreferencesOptionType.aiScribe) { + return controller.isAIScribeAvailable; + } + return true; + }), ]; return Expanded(