TF-3449 Setup Sender-set important flag in Setting View
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
-99
@@ -1,99 +0,0 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/domain/state/get_always_read_receipt_setting_state.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/domain/state/update_always_read_receipt_setting_state.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/domain/usecases/get_always_read_receipt_setting_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/domain/usecases/update_always_read_receipt_setting_interactor.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
|
||||
class AlwaysReadReceiptController extends BaseController {
|
||||
AlwaysReadReceiptController(
|
||||
this._getAlwaysReadReceiptSettingInteractor,
|
||||
this._updateAlwaysReadReceiptSettingInteractor,
|
||||
);
|
||||
|
||||
final GetAlwaysReadReceiptSettingInteractor _getAlwaysReadReceiptSettingInteractor;
|
||||
final UpdateAlwaysReadReceiptSettingInteractor _updateAlwaysReadReceiptSettingInteractor;
|
||||
|
||||
final alwaysReadReceipt = Rxn<bool>();
|
||||
bool get isLoading => viewState.value.fold(
|
||||
(failure) => false,
|
||||
(success) => success is GettingAlwaysReadReceiptSetting || success is UpdatingAlwaysReadReceiptSetting);
|
||||
final _manageAccountDashBoardController = Get.find<ManageAccountDashBoardController>();
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
|
||||
_getCurrentAlwaysReadReceiptSetting();
|
||||
}
|
||||
|
||||
@override
|
||||
void handleSuccessViewState(Success success) {
|
||||
super.handleSuccessViewState(success);
|
||||
if (success is GetAlwaysReadReceiptSettingSuccess) {
|
||||
_getAlwaysReadReceiptSettingSuccess(success);
|
||||
} else if (success is UpdateAlwaysReadReceiptSettingSuccess) {
|
||||
_updateAlwaysReadReceiptSettingSuccess(success);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void handleFailureViewState(Failure failure) {
|
||||
super.handleFailureViewState(failure);
|
||||
if (failure is GetAlwaysReadReceiptSettingFailure) {
|
||||
_getAlwaysReadReceiptSettingFailure();
|
||||
} else if (failure is UpdateAlwaysReadReceiptSettingFailure) {
|
||||
_updateAlwaysReadReceiptSettingFailure();
|
||||
}
|
||||
}
|
||||
|
||||
void _updateAlwaysReadReceiptValue(bool value) {
|
||||
alwaysReadReceipt.value = value;
|
||||
}
|
||||
|
||||
void _updateAlwaysReadReceiptSettingFailure() {
|
||||
if (currentOverlayContext != null && currentContext != null) {
|
||||
appToast.showToastErrorMessage(
|
||||
currentOverlayContext!,
|
||||
AppLocalizations.of(currentContext!).an_error_occurred);
|
||||
}
|
||||
}
|
||||
|
||||
void _updateAlwaysReadReceiptSettingSuccess(
|
||||
UpdateAlwaysReadReceiptSettingSuccess success
|
||||
) {
|
||||
_updateAlwaysReadReceiptValue(success.alwaysReadReceiptIsEnabled);
|
||||
}
|
||||
|
||||
void toggleAlwaysReadReceipt() {
|
||||
if (isLoading || alwaysReadReceipt.value == null) return;
|
||||
final accountId = _manageAccountDashBoardController.accountId.value;
|
||||
if (accountId != null) {
|
||||
consumeState(_updateAlwaysReadReceiptSettingInteractor.execute(
|
||||
accountId,
|
||||
!alwaysReadReceipt.value!));
|
||||
}
|
||||
}
|
||||
|
||||
void _getAlwaysReadReceiptSettingFailure() {
|
||||
alwaysReadReceipt.value = false;
|
||||
}
|
||||
|
||||
void _getAlwaysReadReceiptSettingSuccess(
|
||||
GetAlwaysReadReceiptSettingSuccess success
|
||||
) {
|
||||
_updateAlwaysReadReceiptValue(success.alwaysReadReceiptEnabled);
|
||||
}
|
||||
|
||||
void _getCurrentAlwaysReadReceiptSetting() {
|
||||
final accountId = _manageAccountDashBoardController.accountId.value;
|
||||
if (accountId != null) {
|
||||
consumeState(_getAlwaysReadReceiptSettingInteractor.execute(accountId));
|
||||
}
|
||||
}
|
||||
}
|
||||
-95
@@ -1,95 +0,0 @@
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/always_read_receipt/always_read_receipt_controller.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
class AlwaysReadReceiptView extends GetWidget<AlwaysReadReceiptController> with AppLoaderMixin {
|
||||
const AlwaysReadReceiptView({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: SettingsUtils.getBackgroundColor(context, controller.responsiveUtils),
|
||||
body: Padding(
|
||||
padding: SettingsUtils.getMarginViewForSettingDetails(context, controller.responsiveUtils),
|
||||
child: Column(
|
||||
children: [
|
||||
Obx(() {
|
||||
if (!controller.isLoading) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(bottom: 8),
|
||||
child: horizontalLoadingWidget,
|
||||
);
|
||||
}),
|
||||
Expanded(
|
||||
child: Container(
|
||||
color: SettingsUtils.getContentBackgroundColor(context, controller.responsiveUtils),
|
||||
decoration: SettingsUtils.getBoxDecorationForContent(context, controller.responsiveUtils),
|
||||
padding: SettingsUtils.getPaddingAlwaysReadReceiptSetting(context, controller.responsiveUtils),
|
||||
child: ListView(
|
||||
physics: const ClampingScrollPhysics(),
|
||||
children: [
|
||||
Text(
|
||||
AppLocalizations.of(context).emailReadReceipts,
|
||||
style: const TextStyle(
|
||||
fontSize: 17,
|
||||
height: 24 / 17,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Colors.black)),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
AppLocalizations.of(context).emailReadReceiptsSettingExplanation,
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
height: 20 / 16,
|
||||
color: AppColor.colorTextSettingDescriptions)),
|
||||
const SizedBox(height: 24),
|
||||
Obx(() {
|
||||
if (controller.alwaysReadReceipt.value == null) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
|
||||
return Row(
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: controller.toggleAlwaysReadReceipt,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(4),
|
||||
child: SvgPicture.asset(
|
||||
controller.alwaysReadReceipt.value!
|
||||
? controller.imagePaths.icSwitchOn
|
||||
: controller.imagePaths.icSwitchOff,
|
||||
fit: BoxFit.fill,
|
||||
width: 32,
|
||||
height: 20),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
Expanded(
|
||||
child: Text(
|
||||
AppLocalizations.of(context).emailReadReceiptsToggleDescription,
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
height: 20 / 16,
|
||||
color: Colors.black),
|
||||
)),
|
||||
],
|
||||
);
|
||||
}),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -22,7 +22,6 @@ import 'package:tmail_ui_user/features/manage_account/domain/state/update_vacati
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_vacation_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/update_vacation_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/action/dashboard_setting_action.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/always_read_receipt/bindings/always_read_receipt_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/bindings/email_rules_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/bindings/forward_bindings.dart';
|
||||
@@ -32,6 +31,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/model/account
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/settings_page_level.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/notification/bindings/notification_binding.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/preferences/bindings/preferences_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/profiles_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_controller_bindings.dart';
|
||||
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
||||
@@ -184,8 +184,8 @@ class ManageAccountDashBoardController extends ReloadableController with UserSet
|
||||
case AccountMenuItem.emailRules:
|
||||
EmailRulesBindings().dependencies();
|
||||
break;
|
||||
case AccountMenuItem.alwaysReadReceipt:
|
||||
AlwaysReadReceiptBindings().dependencies();
|
||||
case AccountMenuItem.preferences:
|
||||
PreferencesBindings().dependencies();
|
||||
break;
|
||||
case AccountMenuItem.forward:
|
||||
ForwardBindings().dependencies();
|
||||
@@ -224,7 +224,7 @@ class ManageAccountDashBoardController extends ReloadableController with UserSet
|
||||
|
||||
bool get isVacationCapabilitySupported {
|
||||
if (accountId.value != null && sessionCurrent != null) {
|
||||
return [CapabilityIdentifier.jmapVacationResponse].isSupported(sessionCurrent!, accountId.value!);
|
||||
return CapabilityIdentifier.jmapVacationResponse.isSupported(sessionCurrent!, accountId.value!);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
@@ -240,7 +240,7 @@ class ManageAccountDashBoardController extends ReloadableController with UserSet
|
||||
|
||||
bool get isServerSettingsCapabilitySupported {
|
||||
if (accountId.value != null && sessionCurrent != null) {
|
||||
return [capabilityServerSettings].isSupported(sessionCurrent!, accountId.value!);
|
||||
return capabilityServerSettings.isSupported(sessionCurrent!, accountId.value!);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
@@ -248,7 +248,7 @@ class ManageAccountDashBoardController extends ReloadableController with UserSet
|
||||
|
||||
bool get isRuleFilterCapabilitySupported {
|
||||
if (accountId.value != null && sessionCurrent != null) {
|
||||
return [capabilityRuleFilter].isSupported(sessionCurrent!, accountId.value!);
|
||||
return capabilityRuleFilter.isSupported(sessionCurrent!, accountId.value!);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
@@ -256,7 +256,7 @@ class ManageAccountDashBoardController extends ReloadableController with UserSet
|
||||
|
||||
bool get isForwardCapabilitySupported {
|
||||
if (accountId.value != null && sessionCurrent != null) {
|
||||
return [capabilityForward].isSupported(sessionCurrent!, accountId.value!);
|
||||
return capabilityForward.isSupported(sessionCurrent!, accountId.value!);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import 'package:get/get.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/banner_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/navigation_bar/navigation_bar_widget.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/always_read_receipt/always_read_receipt_view.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_view.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_view.dart';
|
||||
@@ -17,6 +16,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/manage_accoun
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/manage_account_menu_view.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings/settings_view.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/preferences/preferences_view.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/profiles_view.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_view.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
|
||||
@@ -117,19 +117,19 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
|
||||
case AccountMenuItem.languageAndRegion:
|
||||
return const LanguageAndRegionView();
|
||||
case AccountMenuItem.emailRules:
|
||||
if(controller.isRuleFilterCapabilitySupported){
|
||||
if (controller.isRuleFilterCapabilitySupported){
|
||||
return EmailRulesView();
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
case AccountMenuItem.alwaysReadReceipt:
|
||||
if(controller.isServerSettingsCapabilitySupported){
|
||||
return const AlwaysReadReceiptView();
|
||||
case AccountMenuItem.preferences:
|
||||
if (controller.isServerSettingsCapabilitySupported){
|
||||
return const PreferencesView();
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
case AccountMenuItem.forward:
|
||||
if(controller.isForwardCapabilitySupported){
|
||||
if (controller.isForwardCapabilitySupported){
|
||||
return ForwardView();
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
|
||||
@@ -42,7 +42,7 @@ class ManageAccountMenuController extends GetxController with ContactSupportMixi
|
||||
if (dashBoardController.isRuleFilterCapabilitySupported)
|
||||
AccountMenuItem.emailRules,
|
||||
if (dashBoardController.isServerSettingsCapabilitySupported)
|
||||
AccountMenuItem.alwaysReadReceipt,
|
||||
AccountMenuItem.preferences,
|
||||
if (dashBoardController.isForwardCapabilitySupported)
|
||||
AccountMenuItem.forward,
|
||||
if (dashBoardController.isVacationCapabilitySupported)
|
||||
|
||||
+3
-3
@@ -68,10 +68,10 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
|
||||
if (controller.manageAccountDashboardController.isServerSettingsCapabilitySupported) {
|
||||
return Column(children: [
|
||||
SettingFirstLevelTileBuilder(
|
||||
AccountMenuItem.alwaysReadReceipt.getName(context),
|
||||
AccountMenuItem.alwaysReadReceipt.getIcon(controller.imagePaths),
|
||||
AccountMenuItem.preferences.getName(context),
|
||||
AccountMenuItem.preferences.getIcon(controller.imagePaths),
|
||||
subtitle: AppLocalizations.of(context).emailReadReceiptsSettingExplanation,
|
||||
() => controller.selectSettings(AccountMenuItem.alwaysReadReceipt)
|
||||
() => controller.selectSettings(AccountMenuItem.preferences)
|
||||
),
|
||||
Divider(
|
||||
color: AppColor.colorDividerHorizontal,
|
||||
|
||||
@@ -6,7 +6,6 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/banner_state.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/always_read_receipt/always_read_receipt_view.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_view.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_view.dart';
|
||||
@@ -19,6 +18,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/settings_page_level.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/notification/notification_view.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/preferences/preferences_view.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/profiles_view.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_view.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
|
||||
@@ -198,9 +198,9 @@ class SettingsView extends GetWidget<SettingsController> {
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
case AccountMenuItem.alwaysReadReceipt:
|
||||
case AccountMenuItem.preferences:
|
||||
if (controller.manageAccountDashboardController.isServerSettingsCapabilitySupported) {
|
||||
return const AlwaysReadReceiptView();
|
||||
return const PreferencesView();
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
enum AccountMenuItem {
|
||||
profiles,
|
||||
languageAndRegion,
|
||||
alwaysReadReceipt,
|
||||
preferences,
|
||||
emailRules,
|
||||
forward,
|
||||
vacation,
|
||||
@@ -22,8 +22,8 @@ enum AccountMenuItem {
|
||||
return imagePaths.icProfiles;
|
||||
case AccountMenuItem.languageAndRegion:
|
||||
return imagePaths.icLanguage;
|
||||
case AccountMenuItem.alwaysReadReceipt:
|
||||
return imagePaths.icAlwaysReadReceipt;
|
||||
case AccountMenuItem.preferences:
|
||||
return imagePaths.icPreferences;
|
||||
case AccountMenuItem.emailRules:
|
||||
return imagePaths.icEmailRules;
|
||||
case AccountMenuItem.forward:
|
||||
@@ -51,8 +51,8 @@ enum AccountMenuItem {
|
||||
return AppLocalizations.of(context).language;
|
||||
case AccountMenuItem.emailRules:
|
||||
return AppLocalizations.of(context).emailRules;
|
||||
case AccountMenuItem.alwaysReadReceipt:
|
||||
return AppLocalizations.of(context).emailReadReceipts;
|
||||
case AccountMenuItem.preferences:
|
||||
return AppLocalizations.of(context).preferences;
|
||||
case AccountMenuItem.forward:
|
||||
return AppLocalizations.of(context).forwarding;
|
||||
case AccountMenuItem.vacation:
|
||||
@@ -78,8 +78,8 @@ enum AccountMenuItem {
|
||||
return 'language-region';
|
||||
case AccountMenuItem.emailRules:
|
||||
return 'email-rules';
|
||||
case AccountMenuItem.alwaysReadReceipt:
|
||||
return 'email-read-receipts';
|
||||
case AccountMenuItem.preferences:
|
||||
return 'preferences';
|
||||
case AccountMenuItem.forward:
|
||||
return 'forwarding';
|
||||
case AccountMenuItem.vacation:
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
|
||||
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/main/localizations/app_localizations.dart';
|
||||
|
||||
enum SettingOptionType {
|
||||
readReceipt,
|
||||
senderPriority;
|
||||
|
||||
String getTitle(AppLocalizations appLocalizations) {
|
||||
switch(this) {
|
||||
case SettingOptionType.readReceipt:
|
||||
return appLocalizations.emailReadReceipts;
|
||||
case SettingOptionType.senderPriority:
|
||||
return appLocalizations.senderSetImportantFlag;
|
||||
}
|
||||
}
|
||||
|
||||
String getExplanation(AppLocalizations appLocalizations) {
|
||||
switch(this) {
|
||||
case SettingOptionType.readReceipt:
|
||||
return appLocalizations.emailReadReceiptsSettingExplanation;
|
||||
case SettingOptionType.senderPriority:
|
||||
return appLocalizations.senderImportantSettingExplanation;
|
||||
}
|
||||
}
|
||||
|
||||
String getToggleDescription(AppLocalizations appLocalizations) {
|
||||
switch(this) {
|
||||
case SettingOptionType.readReceipt:
|
||||
return appLocalizations.emailReadReceiptsToggleDescription;
|
||||
case SettingOptionType.senderPriority:
|
||||
return appLocalizations.senderImportantSettingToggleDescription;
|
||||
}
|
||||
}
|
||||
|
||||
bool isEnabled(TMailServerSettingOptions settingOption) {
|
||||
switch(this) {
|
||||
case SettingOptionType.readReceipt:
|
||||
return settingOption.isAlwaysReadReceipts;
|
||||
case SettingOptionType.senderPriority:
|
||||
return settingOption.isDisplaySenderPriority;
|
||||
}
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/preferences/bindings/preferences_interactors_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/preferences/preferences_controller.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/domain/usecases/get_server_setting_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/domain/usecases/update_server_setting_interactor.dart';
|
||||
|
||||
class PreferencesBindings extends Bindings {
|
||||
|
||||
@override
|
||||
void dependencies() {
|
||||
PreferencesInteractorsBindings().dependencies();
|
||||
|
||||
Get.lazyPut(() => PreferencesController(
|
||||
Get.find<GetServerSettingInteractor>(),
|
||||
Get.find<UpdateServerSettingInteractor>(),
|
||||
));
|
||||
}
|
||||
}
|
||||
+8
-14
@@ -1,22 +1,15 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/always_read_receipt/always_read_receipt_controller.dart';
|
||||
import 'package:tmail_ui_user/features/base/interactors_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/data/datasource/server_settings_data_source.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/data/datasource_impl/remote_server_settings_data_source_impl.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/data/network/server_settings_api.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/data/repository/server_settings_repository_impl.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/domain/repository/server_settings_repository.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/domain/usecases/get_always_read_receipt_setting_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/domain/usecases/update_always_read_receipt_setting_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/domain/usecases/get_server_setting_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/domain/usecases/update_server_setting_interactor.dart';
|
||||
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
|
||||
|
||||
class AlwaysReadReceiptBindings extends BaseBindings {
|
||||
@override
|
||||
void bindingsController() {
|
||||
Get.put(AlwaysReadReceiptController(
|
||||
Get.find<GetAlwaysReadReceiptSettingInteractor>(),
|
||||
Get.find<UpdateAlwaysReadReceiptSettingInteractor>()));
|
||||
}
|
||||
class PreferencesInteractorsBindings extends InteractorsBindings {
|
||||
|
||||
@override
|
||||
void bindingsDataSource() {
|
||||
@@ -27,13 +20,14 @@ class AlwaysReadReceiptBindings extends BaseBindings {
|
||||
void bindingsDataSourceImpl() {
|
||||
Get.lazyPut(() => RemoteServerSettingsDataSourceImpl(
|
||||
Get.find<ServerSettingsAPI>(),
|
||||
Get.find<RemoteExceptionThrower>()));
|
||||
Get.find<RemoteExceptionThrower>(),
|
||||
));
|
||||
}
|
||||
|
||||
@override
|
||||
void bindingsInteractor() {
|
||||
Get.lazyPut(() => GetAlwaysReadReceiptSettingInteractor(Get.find<ServerSettingsRepository>()));
|
||||
Get.lazyPut(() => UpdateAlwaysReadReceiptSettingInteractor(Get.find<ServerSettingsRepository>()));
|
||||
Get.lazyPut(() => GetServerSettingInteractor(Get.find<ServerSettingsRepository>()));
|
||||
Get.lazyPut(() => UpdateServerSettingInteractor(Get.find<ServerSettingsRepository>()));
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -0,0 +1,110 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:server_settings/server_settings/tmail_server_settings.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/setting_option_type.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/domain/state/get_server_setting_state.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/domain/state/update_server_setting_state.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/domain/usecases/get_server_setting_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/server_settings/domain/usecases/update_server_setting_interactor.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
|
||||
class PreferencesController extends BaseController {
|
||||
PreferencesController(
|
||||
this._getServerSettingInteractor,
|
||||
this._updateServerSettingInteractor,
|
||||
);
|
||||
|
||||
final GetServerSettingInteractor _getServerSettingInteractor;
|
||||
final UpdateServerSettingInteractor _updateServerSettingInteractor;
|
||||
|
||||
final settingOption = Rxn<TMailServerSettingOptions>();
|
||||
|
||||
bool get isLoading => viewState.value.fold(
|
||||
(failure) => false,
|
||||
(success) => success is GettingServerSetting || success is UpdatingServerSetting);
|
||||
|
||||
final _manageAccountDashBoardController = Get.find<ManageAccountDashBoardController>();
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
_getSettingOption();
|
||||
}
|
||||
|
||||
@override
|
||||
void handleSuccessViewState(Success success) {
|
||||
if (success is GetServerSettingSuccess) {
|
||||
_updateSettingOptionValue(newSettingOption: success.settingOption);
|
||||
} else if (success is UpdateServerSettingSuccess) {
|
||||
_updateSettingOptionValue(newSettingOption: success.settingOption);
|
||||
} else {
|
||||
super.handleSuccessViewState(success);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void handleFailureViewState(Failure failure) {
|
||||
if (failure is GetServerSettingFailure) {
|
||||
_updateSettingOptionValue(newSettingOption: null);
|
||||
} else if (failure is UpdateServerSettingFailure) {
|
||||
_handleUpdateServerSettingFailure();
|
||||
} else {
|
||||
super.handleFailureViewState(failure);
|
||||
}
|
||||
}
|
||||
|
||||
void _handleUpdateServerSettingFailure() {
|
||||
if (currentOverlayContext != null && currentContext != null) {
|
||||
appToast.showToastErrorMessage(
|
||||
currentOverlayContext!,
|
||||
AppLocalizations.of(currentContext!).an_error_occurred);
|
||||
}
|
||||
}
|
||||
|
||||
void _updateSettingOptionValue({required TMailServerSettingOptions? newSettingOption}) {
|
||||
settingOption.value = newSettingOption;
|
||||
}
|
||||
|
||||
void _getSettingOption() {
|
||||
final accountId = _manageAccountDashBoardController.accountId.value;
|
||||
if (accountId != null) {
|
||||
consumeState(_getServerSettingInteractor.execute(accountId));
|
||||
} else {
|
||||
consumeState(Stream.value(Left(GetServerSettingFailure(NotFoundAccountIdException()))));
|
||||
}
|
||||
}
|
||||
|
||||
void updateStateSettingOption(SettingOptionType optionType, bool isEnabled) {
|
||||
TMailServerSettingOptions? newSettingOption;
|
||||
switch(optionType) {
|
||||
case SettingOptionType.readReceipt:
|
||||
newSettingOption = settingOption.value?.copyWith(
|
||||
alwaysReadReceipts: !isEnabled,
|
||||
);
|
||||
break;
|
||||
case SettingOptionType.senderPriority:
|
||||
newSettingOption = settingOption.value?.copyWith(
|
||||
displaySenderPriority: !isEnabled,
|
||||
);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
final accountId = _manageAccountDashBoardController.accountId.value;
|
||||
if (accountId != null && newSettingOption != null) {
|
||||
consumeState(_updateServerSettingInteractor.execute(
|
||||
accountId,
|
||||
newSettingOption,
|
||||
));
|
||||
} else {
|
||||
consumeState(Stream.value(Left(UpdateServerSettingFailure(NotFoundAccountIdException()))));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/setting_option_type.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/preferences/preferences_controller.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/preferences/widgets/setting_option_item.dart';
|
||||
|
||||
class PreferencesView extends GetWidget<PreferencesController> with AppLoaderMixin {
|
||||
const PreferencesView({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: SettingsUtils.getBackgroundColor(context, controller.responsiveUtils),
|
||||
body: Padding(
|
||||
padding: SettingsUtils.getMarginViewForSettingDetails(context, controller.responsiveUtils),
|
||||
child: Column(
|
||||
children: [
|
||||
Obx(() {
|
||||
if (!controller.isLoading) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(bottom: 8),
|
||||
child: horizontalLoadingWidget,
|
||||
);
|
||||
}),
|
||||
Expanded(
|
||||
child: Container(
|
||||
color: SettingsUtils.getContentBackgroundColor(
|
||||
context, controller.responsiveUtils,
|
||||
),
|
||||
decoration: SettingsUtils.getBoxDecorationForContent(
|
||||
context,
|
||||
controller.responsiveUtils,
|
||||
),
|
||||
width: double.infinity,
|
||||
padding: SettingsUtils.getPaddingAlwaysReadReceiptSetting(
|
||||
context,
|
||||
controller.responsiveUtils,
|
||||
),
|
||||
child: Obx(() {
|
||||
final settingOption = controller.settingOption.value;
|
||||
|
||||
if (settingOption == null) return const SizedBox.shrink();
|
||||
|
||||
final settingOptionList = SettingOptionType.values.toList();
|
||||
|
||||
return ListView.separated(
|
||||
itemCount: settingOptionList.length,
|
||||
itemBuilder: (context, index) {
|
||||
return SettingOptionItem(
|
||||
imagePaths: controller.imagePaths,
|
||||
settingOption: settingOption,
|
||||
optionType: settingOptionList[index],
|
||||
onTapSettingOptionAction: controller.updateStateSettingOption,
|
||||
);
|
||||
},
|
||||
separatorBuilder: (_, __) => const SizedBox(height: 60),
|
||||
);
|
||||
}),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:server_settings/server_settings/tmail_server_settings.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/setting_option_type.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
typedef OnTapSettingOptionAction = Function(SettingOptionType optionType, bool isEnabled);
|
||||
|
||||
class SettingOptionItem extends StatelessWidget {
|
||||
|
||||
final ImagePaths imagePaths;
|
||||
final TMailServerSettingOptions settingOption;
|
||||
final SettingOptionType optionType;
|
||||
final OnTapSettingOptionAction onTapSettingOptionAction;
|
||||
|
||||
const SettingOptionItem({
|
||||
super.key,
|
||||
required this.imagePaths,
|
||||
required this.settingOption,
|
||||
required this.optionType,
|
||||
required this.onTapSettingOptionAction,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final appLocalizations = AppLocalizations.of(context);
|
||||
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
optionType.getTitle(appLocalizations),
|
||||
style: const TextStyle(
|
||||
fontSize: 15,
|
||||
height: 20 / 15,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: Colors.black,
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 24),
|
||||
child: Text(
|
||||
optionType.getExplanation(appLocalizations),
|
||||
style: const TextStyle(
|
||||
fontSize: 13,
|
||||
height: 16 / 13,
|
||||
color: Colors.black,
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: () => onTapSettingOptionAction(
|
||||
optionType,
|
||||
optionType.isEnabled(settingOption),
|
||||
),
|
||||
child: SvgPicture.asset(
|
||||
optionType.isEnabled(settingOption)
|
||||
? imagePaths.icSwitchOn
|
||||
: imagePaths.icSwitchOff,
|
||||
fit: BoxFit.fill,
|
||||
width: 44,
|
||||
height: 28,
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
Expanded(
|
||||
child: Text(
|
||||
optionType.getToggleDescription(appLocalizations),
|
||||
style: const TextStyle(
|
||||
fontSize: 13,
|
||||
height: 16 / 13,
|
||||
color: Colors.black,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user