TF-3769 Enable toggle thread detail feature in setting
TF-3769 Thread Detail fallback to single email when get thread fails TF-3769 Thread Detail fix font height thread TF-3769 Thread Detail init with get status TF-3769 Thread Detail fix font height email receiver and sender TF-3769 Thread Detail refactor reset thread detail ui action UpdatedThreadDetailSettingAction TF-3769 Thread Detail refresh settings on app lifecycle changed TF-3769 Thread Detail fix font height email receiver and sender TF-3769 Thread Detail fix scroll view exception of single email TF-3769 Thread Detail refactor local setting TF-3769 Thread Detail optimize get cache setting TF-3769 Thread Detail fix font height email receiver TF-3769 Thread Detail refactor local setting cache TF-3769 Thread Detail fix font height email receiver and sender TF-3769 Thread Detail use CacheExceptionThrower for ManageAccountDataSourceImpl TF-3769 Thread Detail fix changing email in tablet view TF-3769 Thread Detail refresh on setting changed TF-3769 Thread Detail fix receiver alignments TF-3769 Thread Detail fix receiver alignments TF-3769 Thread Detail default setting enabled TF-3769 Thread Detail fix font style email receiver and sender TF-3769 Thread Detail fix toggle setting when responsive TF-3769 Thread Detail adjust receive time position when single email TF-3769 Thread Detail revert initializeThreadDetailEmails to void TF-3769 Thread Detail fix CI on initializeThreadDetailEmails test TF-3769 Thread Detail fix spacing email sender TF-3769 Thread Detail update receiver color mobile TF-3769 Thread Detail update collapsed preview letter spacing TF-3769 Thread Detail update receiver color mobile TF-3769 Thread Detail fix receive time position TF-3769 Thread Detail add mark read button mobile collapsed email TF-3769 Thread Detail fix font style email receiver and sender TF-3769 Thread Detail update collapsed preview font weight TF-3769 Thread Detail fix position email receiver and sender
This commit is contained in:
+32
@@ -0,0 +1,32 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/local_setting_detail/thread_detail_local_setting_detail.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/local_setting_options.dart';
|
||||
|
||||
abstract class LocalSettingDetail<T> extends Equatable {
|
||||
const LocalSettingDetail(this.value);
|
||||
|
||||
final T value;
|
||||
|
||||
Map<String, dynamic> toJson();
|
||||
}
|
||||
|
||||
class LocalSettingDetailConverter extends JsonConverter<LocalSettingDetail, Map<String, dynamic>> {
|
||||
const LocalSettingDetailConverter();
|
||||
|
||||
@override
|
||||
LocalSettingDetail fromJson(Map<String, dynamic> json) {
|
||||
final type = json['type'] as String?;
|
||||
|
||||
if (type == SupportedLocalSetting.threadDetail.name) {
|
||||
return ThreadDetailLocalSettingDetail.fromJson(json);
|
||||
}
|
||||
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson(LocalSettingDetail object) {
|
||||
return object.toJson();
|
||||
}
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/local_setting_detail/local_setting_detail.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/local_setting_options.dart';
|
||||
|
||||
part 'thread_detail_local_setting_detail.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class ThreadDetailLocalSettingDetail extends LocalSettingDetail<bool> {
|
||||
const ThreadDetailLocalSettingDetail(
|
||||
super.value, [
|
||||
this.type = SupportedLocalSetting.threadDetail,
|
||||
]);
|
||||
|
||||
@JsonKey(defaultValue: SupportedLocalSetting.threadDetail)
|
||||
final SupportedLocalSetting type;
|
||||
|
||||
factory ThreadDetailLocalSettingDetail.fromJson(Map<String, dynamic> json) =>
|
||||
_$ThreadDetailLocalSettingDetailFromJson(json);
|
||||
@override
|
||||
Map<String, dynamic> toJson() => _$ThreadDetailLocalSettingDetailToJson(this);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [value, type];
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/local_setting_detail/local_setting_detail.dart';
|
||||
|
||||
part 'local_setting_options.g.dart';
|
||||
|
||||
enum SupportedLocalSetting {
|
||||
threadDetail,
|
||||
}
|
||||
|
||||
@JsonSerializable(converters: [LocalSettingDetailConverter()])
|
||||
class LocalSettingOptions with EquatableMixin {
|
||||
const LocalSettingOptions({
|
||||
required this.setting,
|
||||
});
|
||||
|
||||
final LocalSettingDetail? setting;
|
||||
|
||||
factory LocalSettingOptions.fromJson(Map<String, dynamic> json) =>
|
||||
_$LocalSettingOptionsFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$LocalSettingOptionsToJson(this);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [setting];
|
||||
}
|
||||
@@ -1,11 +1,14 @@
|
||||
|
||||
import 'package:server_settings/server_settings/tmail_server_settings.dart';
|
||||
import 'package:server_settings/server_settings/tmail_server_settings_extension.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/local_settings_map_extension.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/local_setting_options.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
enum SettingOptionType {
|
||||
readReceipt,
|
||||
senderPriority;
|
||||
senderPriority,
|
||||
thread;
|
||||
|
||||
String getTitle(AppLocalizations appLocalizations) {
|
||||
switch(this) {
|
||||
@@ -13,6 +16,8 @@ enum SettingOptionType {
|
||||
return appLocalizations.emailReadReceipts;
|
||||
case SettingOptionType.senderPriority:
|
||||
return appLocalizations.senderSetImportantFlag;
|
||||
case SettingOptionType.thread:
|
||||
return appLocalizations.thread;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +27,8 @@ enum SettingOptionType {
|
||||
return appLocalizations.emailReadReceiptsSettingExplanation;
|
||||
case SettingOptionType.senderPriority:
|
||||
return appLocalizations.senderImportantSettingExplanation;
|
||||
case SettingOptionType.thread:
|
||||
return appLocalizations.threadSettingExplanation;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,15 +38,29 @@ enum SettingOptionType {
|
||||
return appLocalizations.emailReadReceiptsToggleDescription;
|
||||
case SettingOptionType.senderPriority:
|
||||
return appLocalizations.senderImportantSettingToggleDescription;
|
||||
case SettingOptionType.thread:
|
||||
return appLocalizations.threadToggleDescription;
|
||||
}
|
||||
}
|
||||
|
||||
bool isEnabled(TMailServerSettingOptions settingOption) {
|
||||
bool isEnabled(
|
||||
TMailServerSettingOptions? settingOption,
|
||||
Map<SupportedLocalSetting, LocalSettingOptions?> localSettings,
|
||||
) {
|
||||
switch(this) {
|
||||
case SettingOptionType.readReceipt:
|
||||
return settingOption.isAlwaysReadReceipts;
|
||||
return settingOption?.isAlwaysReadReceipts ?? false;
|
||||
case SettingOptionType.senderPriority:
|
||||
return settingOption.isDisplaySenderPriority;
|
||||
return settingOption?.isDisplaySenderPriority ?? false;
|
||||
case SettingOptionType.thread:
|
||||
return localSettings.threadDetailEnabled ?? true;
|
||||
}
|
||||
}
|
||||
|
||||
bool get isLocal {
|
||||
return switch (this) {
|
||||
thread => true,
|
||||
_ => false,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user