AIConfig model

This commit is contained in:
Dat H. Pham
2025-12-19 10:17:49 +07:00
committed by Dat H. Pham
parent 68e55a0e22
commit a915ec9881
3 changed files with 76 additions and 0 deletions
@@ -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<AIScribeConfig> getAIScribeConfig() async {
await _sharedPreferences.reload();
final jsonString = _sharedPreferences.getString(
_preferencesSettingAIScribeKey,
);
return jsonString == null
? AIScribeConfig.initial()
: AIScribeConfig.fromJson(jsonDecode(jsonString));
}
Future<void> updateAIScribe(bool isEnabled) async {
final currentConfig = await getAIScribeConfig();
final updatedConfig = currentConfig.copyWith(isEnabled: isEnabled);
await savePreferences(updatedConfig);
}
}
@@ -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<String, dynamic> json) =>
_$AIScribeConfigFromJson(json);
@override
Map<String, dynamic> toJson() => _$AIScribeConfigToJson(this);
@override
List<Object> get props => [isEnabled];
}
extension AIScribeConfigExtension on AIScribeConfig {
AIScribeConfig copyWith({
bool? isEnabled,
}) {
return AIScribeConfig(
isEnabled: isEnabled ?? this.isEnabled,
);
}
}
@@ -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<Object?> get props => [configs];
}