TF-4082 Setup text formatting menu state from user's preferences in composer

This commit is contained in:
dab246
2025-10-02 15:44:22 +07:00
committed by Dat H. Pham
parent 620d155dc3
commit 2e54493a69
17 changed files with 220 additions and 56 deletions
@@ -6,6 +6,7 @@ import 'package:tmail_ui_user/features/manage_account/data/local/preferences_set
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';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/text_formatting_menu_config.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/thread_detail_config.dart';
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
@@ -39,6 +40,10 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource {
await _preferencesSettingManager.updateSpamReport(
isEnabled: preferencesConfig.isEnabled,
);
} else if (preferencesConfig is TextFormattingMenuConfig) {
await _preferencesSettingManager.updateTextFormattingMenu(
isDisplayed: preferencesConfig.isDisplayed,
);
} else {
await _preferencesSettingManager.savePreferences(
preferencesConfig,
@@ -6,6 +6,7 @@ import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/e
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';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/text_formatting_menu_config.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/thread_detail_config.dart';
class PreferencesSettingManager {
@@ -14,6 +15,8 @@ class PreferencesSettingManager {
'${_preferencesSettingKey}_THREAD';
static const String _preferencesSettingSpamReportKey =
'${_preferencesSettingKey}_SPAM_REPORT';
static const String _preferencesSettingTextFormattingMenuKey =
'${_preferencesSettingKey}_TEXT_FORMATTING_MENU';
const PreferencesSettingManager(this._sharedPreferences);
@@ -36,6 +39,8 @@ class PreferencesSettingManager {
return ThreadDetailConfig.fromJson(jsonDecoded);
case _preferencesSettingSpamReportKey:
return SpamReportConfig.fromJson(jsonDecoded);
case _preferencesSettingTextFormattingMenuKey:
return TextFormattingMenuConfig.fromJson(jsonDecoded);
default:
return DefaultPreferencesConfig.fromJson(jsonDecoded);
}
@@ -61,6 +66,11 @@ class PreferencesSettingManager {
_preferencesSettingSpamReportKey,
jsonEncode(config.toJson()),
);
} else if (config is TextFormattingMenuConfig) {
await _sharedPreferences.setString(
_preferencesSettingTextFormattingMenuKey,
jsonEncode(config.toJson()),
);
} else {
await _sharedPreferences.setString(
_preferencesSettingKey,
@@ -110,4 +120,22 @@ class PreferencesSettingManager {
? ThreadDetailConfig.initial()
: ThreadDetailConfig.fromJson(jsonDecode(jsonString));
}
Future<TextFormattingMenuConfig> getTextFormattingMenuConfig() async {
await _sharedPreferences.reload();
final jsonString = _sharedPreferences.getString(
_preferencesSettingTextFormattingMenuKey,
);
return jsonString == null
? TextFormattingMenuConfig.initial()
: TextFormattingMenuConfig.fromJson(jsonDecode(jsonString));
}
Future<void> updateTextFormattingMenu({required bool isDisplayed}) async {
final currentConfig = await getTextFormattingMenuConfig();
final updatedConfig = currentConfig.copyWith(isDisplayed: isDisplayed);
await savePreferences(updatedConfig);
}
}