From a915ec988118ce163647e4ab21edfe380c526b34 Mon Sep 17 00:00:00 2001 From: "Dat H. Pham" Date: Fri, 19 Dec 2025 10:17:49 +0700 Subject: [PATCH] AIConfig model --- .../local/preferences_setting_manager.dart | 30 ++++++++++++++++ .../model/preferences/ai_scribe_config.dart | 34 +++++++++++++++++++ .../preferences/preferences_setting.dart | 12 +++++++ 3 files changed, 76 insertions(+) create mode 100644 lib/features/manage_account/domain/model/preferences/ai_scribe_config.dart diff --git a/lib/features/manage_account/data/local/preferences_setting_manager.dart b/lib/features/manage_account/data/local/preferences_setting_manager.dart index fb6dc1230..42024bf56 100644 --- a/lib/features/manage_account/data/local/preferences_setting_manager.dart +++ b/lib/features/manage_account/data/local/preferences_setting_manager.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:shared_preferences/shared_preferences.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/default_preferences_config.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/empty_preferences_config.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart'; @@ -17,6 +18,8 @@ class PreferencesSettingManager { '${_preferencesSettingKey}_SPAM_REPORT'; static const String _preferencesSettingTextFormattingMenuKey = '${_preferencesSettingKey}_TEXT_FORMATTING_MENU'; + static const String _preferencesSettingAIScribeKey = + '${_preferencesSettingKey}_AI_SCRIBE'; const PreferencesSettingManager(this._sharedPreferences); @@ -41,6 +44,8 @@ class PreferencesSettingManager { return SpamReportConfig.fromJson(jsonDecoded); case _preferencesSettingTextFormattingMenuKey: return TextFormattingMenuConfig.fromJson(jsonDecoded); + case _preferencesSettingAIScribeKey: + return AIScribeConfig.fromJson(jsonDecoded); default: return DefaultPreferencesConfig.fromJson(jsonDecoded); } @@ -71,6 +76,11 @@ class PreferencesSettingManager { _preferencesSettingTextFormattingMenuKey, jsonEncode(config.toJson()), ); + } else if (config is AIScribeConfig) { + await _sharedPreferences.setString( + _preferencesSettingAIScribeKey, + jsonEncode(config.toJson()), + ); } else { await _sharedPreferences.setString( _preferencesSettingKey, @@ -138,4 +148,24 @@ class PreferencesSettingManager { final updatedConfig = currentConfig.copyWith(isDisplayed: isDisplayed); await savePreferences(updatedConfig); } + + Future getAIScribeConfig() async { + await _sharedPreferences.reload(); + + final jsonString = _sharedPreferences.getString( + _preferencesSettingAIScribeKey, + ); + + return jsonString == null + ? AIScribeConfig.initial() + : AIScribeConfig.fromJson(jsonDecode(jsonString)); + } + + Future updateAIScribe(bool isEnabled) async { + final currentConfig = await getAIScribeConfig(); + final updatedConfig = currentConfig.copyWith(isEnabled: isEnabled); + await savePreferences(updatedConfig); + } + + } diff --git a/lib/features/manage_account/domain/model/preferences/ai_scribe_config.dart b/lib/features/manage_account/domain/model/preferences/ai_scribe_config.dart new file mode 100644 index 000000000..5d25c92bb --- /dev/null +++ b/lib/features/manage_account/domain/model/preferences/ai_scribe_config.dart @@ -0,0 +1,34 @@ +import 'package:json_annotation/json_annotation.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart'; + +part 'ai_scribe_config.g.dart'; + +@JsonSerializable() +class AIScribeConfig extends PreferencesConfig { + final bool isEnabled; + + AIScribeConfig({ + this.isEnabled = true, + }); + + factory AIScribeConfig.initial() => AIScribeConfig(); + + factory AIScribeConfig.fromJson(Map json) => + _$AIScribeConfigFromJson(json); + + @override + Map toJson() => _$AIScribeConfigToJson(this); + + @override + List get props => [isEnabled]; +} + +extension AIScribeConfigExtension on AIScribeConfig { + AIScribeConfig copyWith({ + bool? isEnabled, + }) { + return AIScribeConfig( + isEnabled: isEnabled ?? this.isEnabled, + ); + } +} diff --git a/lib/features/manage_account/domain/model/preferences/preferences_setting.dart b/lib/features/manage_account/domain/model/preferences/preferences_setting.dart index f80c63397..3bb44930b 100644 --- a/lib/features/manage_account/domain/model/preferences/preferences_setting.dart +++ b/lib/features/manage_account/domain/model/preferences/preferences_setting.dart @@ -1,5 +1,6 @@ import 'package:collection/collection.dart'; import 'package:equatable/equatable.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/spam_report_config.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/text_formatting_menu_config.dart'; @@ -15,6 +16,7 @@ class PreferencesSetting with EquatableMixin { ThreadDetailConfig.initial(), SpamReportConfig.initial(), TextFormattingMenuConfig.initial(), + AIScribeConfig.initial(), ]); } @@ -48,6 +50,16 @@ class PreferencesSetting with EquatableMixin { } } + AIScribeConfig get aiScribeConfig { + final aiConfig = + configs.firstWhereOrNull((config) => config is AIScribeConfig); + if (aiConfig != null) { + return aiConfig as AIScribeConfig; + } else { + return AIScribeConfig.initial(); + } + } + @override List get props => [configs]; }