TF-3977 Add disable spam banner in preferences setting

This commit is contained in:
dab246
2025-08-29 18:21:10 +07:00
committed by Dat H. Pham
parent 7f4dcf8b38
commit 612fc75f02
41 changed files with 534 additions and 404 deletions
@@ -69,7 +69,6 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/lo
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/search_datasource_impl.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/local_sort_order_manager.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/local_spam_report_manager.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/network/linagora_ecosystem_api.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/app_grid_repository_impl.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart';
@@ -100,6 +99,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/preferences_setting_manager.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/identity_repository.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/identities/identity_interactors_bindings.dart';
@@ -278,7 +278,7 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<HtmlTransform>(),
Get.find<CacheExceptionThrower>()));
Get.lazyPut(() => LocalSpamReportDataSourceImpl(
Get.find<LocalSpamReportManager>(),
Get.find<PreferencesSettingManager>(),
Get.find<CacheExceptionThrower>(),
));
Get.lazyPut(() => HiveSpamReportDataSourceImpl(
@@ -2004,6 +2004,7 @@ class MailboxDashBoardController extends ReloadableController
_getAllIdentities();
notifyThreadDetailSettingUpdated();
getServerSetting();
spamReportController.getSpamReportStateAction();
}
Future<List<PresentationEmail>> quickSearchEmails(String query) async {
@@ -2074,6 +2075,7 @@ class MailboxDashBoardController extends ReloadableController
_getAllIdentities();
notifyThreadDetailSettingUpdated();
getServerSetting();
spamReportController.getSpamReportStateAction();
}
void _handleUpdateVacationSuccess(UpdateVacationSuccess success) {
@@ -19,6 +19,8 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spa
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_last_time_dismissed_spam_reported_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_spam_report_state_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/spam_report_loader_status.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class SpamReportController extends BaseController {
final StoreSpamReportInteractor _storeSpamReportInteractor;
@@ -29,6 +31,9 @@ class SpamReportController extends BaseController {
final presentationSpamMailbox = Rxn<PresentationMailbox>();
final spamReportState = Rx<SpamReportState>(SpamReportState.enabled);
AppLifecycleListener? _appLifecycleListener;
SpamReportLoaderStatus _spamReportLoaderStatus = SpamReportLoaderStatus.idle;
SpamReportController(
this._storeSpamReportInteractor,
this._storeSpamReportStateInteractor,
@@ -36,28 +41,60 @@ class SpamReportController extends BaseController {
this._getSpamMailboxCachedInteractor
);
@override
void onInit() {
super.onInit();
_appLifecycleListener ??= AppLifecycleListener(
onResume: () {
if (_spamReportLoaderStatus == SpamReportLoaderStatus.loading) {
return;
}
getSpamReportStateAction();
},
);
}
@override
void handleSuccessViewState(Success success) {
super.handleSuccessViewState(success);
if (success is StoreLastTimeDismissedSpamReportSuccess) {
presentationSpamMailbox.value = null;
} else if (success is GetSpamReportStateLoading) {
_spamReportLoaderStatus = SpamReportLoaderStatus.loading;
} else if (success is GetSpamReportStateSuccess) {
spamReportState.value = success.spamReportState;
_loadSpamReportConfigSuccess(success.spamReportState);
} else if (success is StoreSpamReportStateSuccess) {
spamReportState.value = success.spamReportState;
getBinding<MailboxDashBoardController>()?.refreshSpamReportBanner();
} else if (success is GetSpamMailboxCachedSuccess) {
presentationSpamMailbox.value = success.spamMailbox.toPresentationMailbox();
} else {
super.handleSuccessViewState(success);
}
}
@override
void handleFailureViewState(Failure failure) {
super.handleFailureViewState(failure);
if (failure is GetSpamMailboxCachedFailure) {
presentationSpamMailbox.value = null;
} else if (failure is GetSpamReportStateFailure) {
_spamReportLoaderStatus = SpamReportLoaderStatus.completed;
} else {
super.handleFailureViewState(failure);
}
}
@override
void handleErrorViewState(Object error, StackTrace stackTrace) {
super.handleErrorViewState(error, stackTrace);
_spamReportLoaderStatus = SpamReportLoaderStatus.completed;
}
void _loadSpamReportConfigSuccess(SpamReportState newState) {
spamReportState.value = newState;
_spamReportLoaderStatus = SpamReportLoaderStatus.completed;
getBinding<MailboxDashBoardController>()?.refreshSpamReportBanner();
}
void dismissSpamReportAction(BuildContext context) {
if (Get.isRegistered<MailboxDashBoardController>()) {
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
@@ -109,4 +146,10 @@ class SpamReportController extends BaseController {
void setSpamPresentationMailbox(PresentationMailbox? spamMailbox) {
presentationSpamMailbox.value = spamMailbox;
}
@override
void onClose() {
_appLifecycleListener?.dispose();
super.onClose();
}
}
@@ -0,0 +1 @@
enum SpamReportLoaderStatus { idle, loading, completed }