TF-4082 Setup text formatting menu state from user's preferences in composer
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'package:collection/collection.dart';
|
||||
import 'package:equatable/equatable.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';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/thread_detail_config.dart';
|
||||
|
||||
class PreferencesSetting with EquatableMixin {
|
||||
@@ -13,6 +14,7 @@ class PreferencesSetting with EquatableMixin {
|
||||
return PreferencesSetting([
|
||||
ThreadDetailConfig.initial(),
|
||||
SpamReportConfig.initial(),
|
||||
TextFormattingMenuConfig.initial(),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -36,6 +38,16 @@ class PreferencesSetting with EquatableMixin {
|
||||
}
|
||||
}
|
||||
|
||||
TextFormattingMenuConfig get textFormattingMenuConfig {
|
||||
final formatConfig = configs
|
||||
.firstWhereOrNull((config) => config is TextFormattingMenuConfig);
|
||||
if (formatConfig != null) {
|
||||
return formatConfig as TextFormattingMenuConfig;
|
||||
} else {
|
||||
return TextFormattingMenuConfig.initial();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object?> get props => [configs];
|
||||
}
|
||||
|
||||
@@ -14,12 +14,7 @@ class SpamReportConfig extends PreferencesConfig {
|
||||
this.lastTimeDismissedMilliseconds = 0,
|
||||
});
|
||||
|
||||
factory SpamReportConfig.initial() {
|
||||
return SpamReportConfig(
|
||||
isEnabled: true,
|
||||
lastTimeDismissedMilliseconds: 0,
|
||||
);
|
||||
}
|
||||
factory SpamReportConfig.initial() => SpamReportConfig();
|
||||
|
||||
factory SpamReportConfig.fromJson(Map<String, dynamic> json) =>
|
||||
_$SpamReportConfigFromJson(json);
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart';
|
||||
|
||||
part 'text_formatting_menu_config.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class TextFormattingMenuConfig extends PreferencesConfig {
|
||||
final bool isDisplayed;
|
||||
|
||||
TextFormattingMenuConfig({this.isDisplayed = false});
|
||||
|
||||
factory TextFormattingMenuConfig.initial() => TextFormattingMenuConfig();
|
||||
|
||||
factory TextFormattingMenuConfig.fromJson(Map<String, dynamic> json) =>
|
||||
_$TextFormattingMenuConfigFromJson(json);
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() => _$TextFormattingMenuConfigToJson(this);
|
||||
|
||||
@override
|
||||
List<Object> get props => [isDisplayed];
|
||||
}
|
||||
|
||||
extension TextFormattingMenuConfigExtension on TextFormattingMenuConfig {
|
||||
TextFormattingMenuConfig copyWith({bool? isDisplayed}) {
|
||||
return TextFormattingMenuConfig(
|
||||
isDisplayed: isDisplayed ?? this.isDisplayed,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -9,11 +9,7 @@ class ThreadDetailConfig extends PreferencesConfig {
|
||||
|
||||
ThreadDetailConfig({this.isEnabled = false});
|
||||
|
||||
factory ThreadDetailConfig.initial() {
|
||||
return ThreadDetailConfig(
|
||||
isEnabled: false,
|
||||
);
|
||||
}
|
||||
factory ThreadDetailConfig.initial() => ThreadDetailConfig();
|
||||
|
||||
factory ThreadDetailConfig.fromJson(Map<String, dynamic> json) =>
|
||||
_$ThreadDetailConfigFromJson(json);
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/interactors_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_account_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/data/datasource_impl/manage_account_datasource_impl.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/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/main/exceptions/cache_exception_thrower.dart';
|
||||
|
||||
class SettingInteractorBindings extends InteractorsBindings {
|
||||
@override
|
||||
void bindingsDataSource() {
|
||||
Get.lazyPut<ManageAccountDataSource>(
|
||||
() => Get.find<ManageAccountDataSourceImpl>(),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void bindingsDataSourceImpl() {
|
||||
Get.lazyPut(
|
||||
() => ManageAccountDataSourceImpl(
|
||||
Get.find<LanguageCacheManager>(),
|
||||
Get.find<PreferencesSettingManager>(),
|
||||
Get.find<CacheExceptionThrower>(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void bindingsInteractor() {}
|
||||
|
||||
@override
|
||||
void bindingsRepository() {
|
||||
Get.lazyPut<ManageAccountRepository>(
|
||||
() => Get.find<ManageAccountRepositoryImpl>(),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void bindingsRepositoryImpl() {
|
||||
Get.lazyPut(
|
||||
() => ManageAccountRepositoryImpl(Get.find<ManageAccountDataSource>()),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,58 +1,20 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_account_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/data/datasource_impl/manage_account_datasource_impl.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/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/presentation/bindings/setting_interactor_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/identities/identity_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/manage_account_menu_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings/settings_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/paywall/presentation/paywall_bindings.dart';
|
||||
import 'package:tmail_ui_user/main/exceptions/cache_exception_thrower.dart';
|
||||
|
||||
class ManageAccountDashBoardBindings extends BaseBindings {
|
||||
class ManageAccountDashBoardBindings extends Bindings {
|
||||
|
||||
@override
|
||||
void dependencies() {
|
||||
super.dependencies();
|
||||
SettingInteractorBindings().dependencies();
|
||||
PaywallBindings().dependencies();
|
||||
Get.put(ManageAccountDashBoardController());
|
||||
SettingsBindings().dependencies();
|
||||
ManageAccountMenuBindings().dependencies();
|
||||
IdentityBindings().dependencies();
|
||||
}
|
||||
|
||||
@override
|
||||
void bindingsController() {
|
||||
Get.put(ManageAccountDashBoardController());
|
||||
}
|
||||
|
||||
@override
|
||||
void bindingsDataSource() {
|
||||
Get.lazyPut<ManageAccountDataSource>(() => Get.find<ManageAccountDataSourceImpl>());
|
||||
}
|
||||
|
||||
@override
|
||||
void bindingsDataSourceImpl() {
|
||||
Get.lazyPut(() => ManageAccountDataSourceImpl(
|
||||
Get.find<LanguageCacheManager>(),
|
||||
Get.find<PreferencesSettingManager>(),
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
}
|
||||
|
||||
@override
|
||||
void bindingsInteractor() {
|
||||
PaywallBindings().dependencies();
|
||||
}
|
||||
|
||||
@override
|
||||
void bindingsRepository() {
|
||||
Get.lazyPut<ManageAccountRepository>(() => Get.find<ManageAccountRepositoryImpl>());
|
||||
}
|
||||
|
||||
@override
|
||||
void bindingsRepositoryImpl() {
|
||||
Get.lazyPut(() => ManageAccountRepositoryImpl(Get.find<ManageAccountDataSource>()));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user