TF-4193 Handle multi click to enable Label visibility feature
This commit is contained in:
@@ -12,4 +12,8 @@ abstract class ManageAccountDataSource {
|
||||
Future<PreferencesSetting> getLocalSettings();
|
||||
|
||||
Future<AIScribeConfig> getAiScribeConfigLocalSettings();
|
||||
|
||||
Future<bool> getLabelVisibility();
|
||||
|
||||
Future<void> saveLabelVisibility(bool visible);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_acc
|
||||
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/domain/model/preferences/ai_scribe_config.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/data/local/setting_cache_manager.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/preferences_setting.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/spam_report_config.dart';
|
||||
@@ -15,11 +16,13 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource {
|
||||
|
||||
final LanguageCacheManager _languageCacheManager;
|
||||
final PreferencesSettingManager _preferencesSettingManager;
|
||||
final SettingCacheManager _settingCacheManager;
|
||||
final ExceptionThrower _exceptionThrower;
|
||||
|
||||
ManageAccountDataSourceImpl(
|
||||
this._languageCacheManager,
|
||||
this._preferencesSettingManager,
|
||||
this._settingCacheManager,
|
||||
this._exceptionThrower
|
||||
);
|
||||
|
||||
@@ -71,4 +74,24 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource {
|
||||
return await _preferencesSettingManager.getAIScribeConfig();
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> getLabelVisibility() {
|
||||
return Future.sync(() async {
|
||||
return await _settingCacheManager.getLabelVisibility();
|
||||
}).catchError((error, stackTrace) async {
|
||||
await _exceptionThrower.throwException(error, stackTrace);
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> saveLabelVisibility(bool visible) {
|
||||
return Future.sync(() async {
|
||||
return await _settingCacheManager.saveLabelVisibility(visible);
|
||||
}).catchError((error, stackTrace) async {
|
||||
await _exceptionThrower.throwException(error, stackTrace);
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
class SettingCacheManager {
|
||||
static const String _labelVisibilitySettingKey = 'LABEL_VISIBILITY';
|
||||
|
||||
const SettingCacheManager(this._sharedPreferences);
|
||||
|
||||
final SharedPreferences _sharedPreferences;
|
||||
|
||||
Future<bool> getLabelVisibility() async {
|
||||
await _sharedPreferences.reload();
|
||||
return _sharedPreferences.getBool(_labelVisibilitySettingKey) ?? false;
|
||||
}
|
||||
|
||||
Future<void> saveLabelVisibility(bool visible) async {
|
||||
await _sharedPreferences.setBool(_labelVisibilitySettingKey, visible);
|
||||
}
|
||||
}
|
||||
@@ -31,4 +31,14 @@ class ManageAccountRepositoryImpl extends ManageAccountRepository {
|
||||
Future<AIScribeConfig> getAiScribeConfigLocalSettings() {
|
||||
return dataSource.getAiScribeConfigLocalSettings();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> getLabelVisibility() {
|
||||
return dataSource.getLabelVisibility();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> saveLabelVisibility(bool visible) {
|
||||
return dataSource.saveLabelVisibility(visible);
|
||||
}
|
||||
}
|
||||
@@ -12,4 +12,8 @@ abstract class ManageAccountRepository {
|
||||
Future<PreferencesSetting> getLocalSettings();
|
||||
|
||||
Future<AIScribeConfig> getAiScribeConfigLocalSettings();
|
||||
|
||||
Future<bool> getLabelVisibility();
|
||||
|
||||
Future<void> saveLabelVisibility(bool visible);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
|
||||
class GettingLabelVisibility extends LoadingState {}
|
||||
|
||||
class GetLabelVisibilitySuccess extends UIState {
|
||||
final bool visible;
|
||||
|
||||
GetLabelVisibilitySuccess(this.visible);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [...super.props, visible];
|
||||
}
|
||||
|
||||
class GetLabelVisibilityFailure extends FeatureFailure {
|
||||
GetLabelVisibilityFailure(dynamic exception) : super(exception: exception);
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
|
||||
class SavingLabelVisibility extends LoadingState {}
|
||||
|
||||
class SaveLabelVisibilitySuccess extends UIState {}
|
||||
|
||||
class SaveLabelVisibilityFailure extends FeatureFailure {
|
||||
SaveLabelVisibilityFailure(dynamic exception) : super(exception: exception);
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
import 'dart:core';
|
||||
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/get_label_visibility_state.dart';
|
||||
|
||||
class GetLabelVisibilityInteractor {
|
||||
final ManageAccountRepository _manageAccountRepository;
|
||||
|
||||
GetLabelVisibilityInteractor(this._manageAccountRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute() async* {
|
||||
try {
|
||||
yield Right(GettingLabelVisibility());
|
||||
final visible = await _manageAccountRepository.getLabelVisibility();
|
||||
yield Right(GetLabelVisibilitySuccess(visible));
|
||||
} catch (exception) {
|
||||
yield Left(GetLabelVisibilityFailure(exception));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
import 'dart:core';
|
||||
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/save_label_visibility_state.dart';
|
||||
|
||||
class SaveLabelVisibilityInteractor {
|
||||
final ManageAccountRepository _manageAccountRepository;
|
||||
|
||||
SaveLabelVisibilityInteractor(this._manageAccountRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute({bool visible = true}) async* {
|
||||
try {
|
||||
yield Right(SavingLabelVisibility());
|
||||
await _manageAccountRepository.saveLabelVisibility(visible);
|
||||
yield Right(SaveLabelVisibilitySuccess());
|
||||
} catch (exception) {
|
||||
yield Left(SaveLabelVisibilityFailure(exception));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,8 +4,11 @@ import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_acc
|
||||
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/local/setting_cache_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/domain/usecases/get_label_visibility_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/save_label_visibility_interactor.dart';
|
||||
import 'package:tmail_ui_user/main/exceptions/cache_exception_thrower.dart';
|
||||
|
||||
class SettingInteractorBindings extends InteractorsBindings {
|
||||
@@ -22,13 +25,21 @@ class SettingInteractorBindings extends InteractorsBindings {
|
||||
() => ManageAccountDataSourceImpl(
|
||||
Get.find<LanguageCacheManager>(),
|
||||
Get.find<PreferencesSettingManager>(),
|
||||
Get.find<SettingCacheManager>(),
|
||||
Get.find<CacheExceptionThrower>(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void bindingsInteractor() {}
|
||||
void bindingsInteractor() {
|
||||
Get.lazyPut(
|
||||
() => SaveLabelVisibilityInteractor(Get.find<ManageAccountRepository>()),
|
||||
);
|
||||
Get.lazyPut(
|
||||
() => GetLabelVisibilityInteractor(Get.find<ManageAccountRepository>()),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void bindingsRepository() {
|
||||
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
import 'package:labels/utils/labels_constants.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_label_visibility_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/save_label_visibility_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
|
||||
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
|
||||
extension HandleSetupLabelVisibilityInSettingExtension
|
||||
on ManageAccountDashBoardController {
|
||||
bool get isLabelCapabilitySupported {
|
||||
if (accountId.value == null || sessionCurrent == null) return false;
|
||||
|
||||
return LabelsConstants.labelsCapability.isSupported(
|
||||
sessionCurrent!,
|
||||
accountId.value!,
|
||||
);
|
||||
}
|
||||
|
||||
void enableLabelVisibility() {
|
||||
isLabelVisibility.value = true;
|
||||
|
||||
saveLabelVisibilityInteractor = getBinding<SaveLabelVisibilityInteractor>();
|
||||
if (saveLabelVisibilityInteractor != null) {
|
||||
consumeState(saveLabelVisibilityInteractor!.execute());
|
||||
}
|
||||
|
||||
if (currentOverlayContext != null && currentContext != null) {
|
||||
appToast.showToastSuccessMessage(
|
||||
currentOverlayContext!,
|
||||
AppLocalizations.of(currentContext!).theLabelFeatureIsNowAvailable,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void setUpLabelVisibility() {
|
||||
getLabelVisibilityInteractor = getBinding<GetLabelVisibilityInteractor>();
|
||||
if (getLabelVisibilityInteractor != null) {
|
||||
consumeState(getLabelVisibilityInteractor!.execute());
|
||||
}
|
||||
}
|
||||
|
||||
void handleGetLabelVisibilitySuccess(bool visible) {
|
||||
isLabelVisibility.value = visible;
|
||||
}
|
||||
}
|
||||
@@ -25,12 +25,16 @@ import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.d
|
||||
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/export_trace_log_state.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_vacation_state.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/get_label_visibility_state.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/update_vacation_state.dart';
|
||||
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/get_label_visibility_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/save_label_visibility_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/email_rules/bindings/email_rules_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/export_trace_log_extension.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/handle_setup_label_visibility_in_setting_extension.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/handle_vacation_response_extension.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/validate_setting_capability_supported_extension.dart';
|
||||
@@ -64,6 +68,8 @@ class ManageAccountDashBoardController extends ReloadableController
|
||||
UpdateVacationInteractor? _updateVacationInteractor;
|
||||
PaywallController? paywallController;
|
||||
GetQuotasInteractor? getQuotasInteractor;
|
||||
SaveLabelVisibilityInteractor? saveLabelVisibilityInteractor;
|
||||
GetLabelVisibilityInteractor? getLabelVisibilityInteractor;
|
||||
|
||||
final accountId = Rxn<AccountId>();
|
||||
final accountMenuItemSelected = AccountMenuItem.profiles.obs;
|
||||
@@ -71,6 +77,7 @@ class ManageAccountDashBoardController extends ReloadableController
|
||||
final vacationResponse = Rxn<VacationResponse>();
|
||||
final dashboardSettingAction = Rxn<UIAction>();
|
||||
final octetsQuota = Rxn<Quota>();
|
||||
final isLabelVisibility = RxBool(false);
|
||||
|
||||
Uri? previousUri;
|
||||
AccountMenuItem? selectedMenu;
|
||||
@@ -102,6 +109,8 @@ class ManageAccountDashBoardController extends ReloadableController
|
||||
handleExportTraceLogSuccess(success);
|
||||
} else if (success is GetQuotasSuccess) {
|
||||
handleGetQuotasSuccess(success);
|
||||
} else if (success is GetLabelVisibilitySuccess) {
|
||||
handleGetLabelVisibilitySuccess(success.visible);
|
||||
} else {
|
||||
super.handleSuccessViewState(success);
|
||||
}
|
||||
@@ -177,6 +186,10 @@ class ManageAccountDashBoardController extends ReloadableController
|
||||
} else if (isStorageCapabilitySupported) {
|
||||
getQuotas(accountId.value);
|
||||
}
|
||||
|
||||
if (isLabelCapabilitySupported) {
|
||||
setUpLabelVisibility();
|
||||
}
|
||||
}
|
||||
|
||||
void _getParametersRouter() {
|
||||
|
||||
@@ -13,6 +13,7 @@ class SettingAppBar extends StatelessWidget {
|
||||
final ResponsiveUtils responsiveUtils;
|
||||
final VoidCallback onBackAction;
|
||||
final VoidCallback? onExportTraceLogAction;
|
||||
final VoidCallback? onMultiClickAction;
|
||||
|
||||
const SettingAppBar({
|
||||
super.key,
|
||||
@@ -22,6 +23,7 @@ class SettingAppBar extends StatelessWidget {
|
||||
required this.responsiveUtils,
|
||||
required this.onBackAction,
|
||||
this.onExportTraceLogAction,
|
||||
this.onMultiClickAction,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -39,6 +41,7 @@ class SettingAppBar extends StatelessWidget {
|
||||
imagePaths: imagePaths,
|
||||
responsiveUtils: responsiveUtils,
|
||||
onBackAction: onBackAction,
|
||||
onMultiClickAction: onMultiClickAction,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
+18
-6
@@ -1,6 +1,7 @@
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:core/presentation/utils/theme_utils.dart';
|
||||
import 'package:core/presentation/views/button/multi_click_widget.dart';
|
||||
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
|
||||
@@ -11,6 +12,7 @@ class SettingFirstLevelAppBar extends StatelessWidget {
|
||||
final ImagePaths imagePaths;
|
||||
final ResponsiveUtils responsiveUtils;
|
||||
final VoidCallback onBackAction;
|
||||
final VoidCallback? onMultiClickAction;
|
||||
|
||||
const SettingFirstLevelAppBar({
|
||||
super.key,
|
||||
@@ -18,12 +20,27 @@ class SettingFirstLevelAppBar extends StatelessWidget {
|
||||
required this.imagePaths,
|
||||
required this.responsiveUtils,
|
||||
required this.onBackAction,
|
||||
this.onMultiClickAction,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final appLocalizations = AppLocalizations.of(context);
|
||||
|
||||
Widget titleWidget = Text(
|
||||
accountMenuItem.getName(appLocalizations),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: ThemeUtils.textStyleM3BodyLarge,
|
||||
);
|
||||
|
||||
if (onMultiClickAction != null) {
|
||||
titleWidget = MultiClickWidget(
|
||||
onMultiTap: onMultiClickAction!,
|
||||
child: titleWidget,
|
||||
);
|
||||
}
|
||||
|
||||
return Container(
|
||||
height: 64,
|
||||
padding: _getPadding(context),
|
||||
@@ -43,12 +60,7 @@ class SettingFirstLevelAppBar extends StatelessWidget {
|
||||
Center(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 50),
|
||||
child: Text(
|
||||
accountMenuItem.getName(appLocalizations),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: ThemeUtils.textStyleM3BodyLarge,
|
||||
),
|
||||
child: titleWidget,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.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/handle_setup_label_visibility_in_setting_extension.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/validate_setting_capability_supported_extension.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_view.dart';
|
||||
@@ -28,21 +29,37 @@ class SettingsView extends GetWidget<SettingsController> {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Obx(() => SettingAppBar(
|
||||
pageLevel: controller
|
||||
Obx(() {
|
||||
final labelVisibility = controller
|
||||
.manageAccountDashboardController
|
||||
.settingsPageLevel
|
||||
.value,
|
||||
accountMenuItem: controller
|
||||
.isLabelVisibility
|
||||
.value;
|
||||
final isLabelCapabilitySupported = controller
|
||||
.manageAccountDashboardController
|
||||
.accountMenuItemSelected
|
||||
.value,
|
||||
imagePaths: controller.imagePaths,
|
||||
responsiveUtils: controller.responsiveUtils,
|
||||
onBackAction: () => controller.onBackSettingAction(context),
|
||||
onExportTraceLogAction: () =>
|
||||
controller.showExportTraceLogConfirmDialog(context),
|
||||
)),
|
||||
.isLabelCapabilitySupported;
|
||||
|
||||
final disableMultiClick =
|
||||
labelVisibility || !isLabelCapabilitySupported;
|
||||
|
||||
return SettingAppBar(
|
||||
pageLevel: controller
|
||||
.manageAccountDashboardController
|
||||
.settingsPageLevel
|
||||
.value,
|
||||
accountMenuItem: controller
|
||||
.manageAccountDashboardController
|
||||
.accountMenuItemSelected
|
||||
.value,
|
||||
imagePaths: controller.imagePaths,
|
||||
responsiveUtils: controller.responsiveUtils,
|
||||
onBackAction: () => controller.onBackSettingAction(context),
|
||||
onExportTraceLogAction: () =>
|
||||
controller.showExportTraceLogConfirmDialog(context),
|
||||
onMultiClickAction: disableMultiClick
|
||||
? null
|
||||
: controller.manageAccountDashboardController.enableLabelVisibility,
|
||||
);
|
||||
}),
|
||||
Obx(() {
|
||||
final dashboard = controller.manageAccountDashboardController;
|
||||
final vacation = dashboard.vacationResponse.value;
|
||||
|
||||
+7
-7
@@ -13,18 +13,18 @@ class PreferencesBindings extends Bindings {
|
||||
void dependencies() {
|
||||
PreferencesInteractorsBindings().dependencies();
|
||||
|
||||
Get.lazyPut(() => PreferencesController(
|
||||
Get.find<GetServerSettingInteractor>(),
|
||||
Get.find<UpdateServerSettingInteractor>(),
|
||||
Get.find<GetLocalSettingsInteractor>(),
|
||||
Get.find<UpdateLocalSettingsInteractor>(),
|
||||
));
|
||||
|
||||
Get.lazyPut(() => GetLocalSettingsInteractor(
|
||||
Get.find<ManageAccountRepository>(),
|
||||
));
|
||||
Get.lazyPut(() => UpdateLocalSettingsInteractor(
|
||||
Get.find<ManageAccountRepository>(),
|
||||
));
|
||||
|
||||
Get.lazyPut(() => PreferencesController(
|
||||
Get.find<GetServerSettingInteractor>(),
|
||||
Get.find<UpdateServerSettingInteractor>(),
|
||||
Get.find<GetLocalSettingsInteractor>(),
|
||||
Get.find<UpdateLocalSettingsInteractor>(),
|
||||
));
|
||||
}
|
||||
}
|
||||
+2
@@ -4,6 +4,7 @@ import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_acc
|
||||
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/local/setting_cache_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/domain/usecases/save_language_interactor.dart';
|
||||
@@ -44,6 +45,7 @@ class PreferencesInteractorsBindings extends InteractorsBindings {
|
||||
Get.lazyPut(() => ManageAccountDataSourceImpl(
|
||||
Get.find<LanguageCacheManager>(),
|
||||
Get.find<PreferencesSettingManager>(),
|
||||
Get.find<SettingCacheManager>(),
|
||||
Get.find<CacheExceptionThrower>(),
|
||||
), tag: composerId);
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ class PreferencesController extends BaseController {
|
||||
(failure) => false,
|
||||
(success) => success is GettingServerSetting || success is UpdatingServerSetting);
|
||||
|
||||
final _manageAccountDashBoardController = Get.find<ManageAccountDashBoardController>();
|
||||
final accountDashboardController = Get.find<ManageAccountDashBoardController>();
|
||||
|
||||
bool get isAICapabilitySupported {
|
||||
return _manageAccountDashBoardController.isAICapabilitySupported;
|
||||
@@ -128,7 +128,7 @@ class PreferencesController extends BaseController {
|
||||
|
||||
void _getSettingOption() {
|
||||
consumeState(_getLocalSettingInteractor.execute());
|
||||
final accountId = _manageAccountDashBoardController.accountId.value;
|
||||
final accountId = accountDashboardController.accountId.value;
|
||||
if (accountId != null) {
|
||||
consumeState(_getServerSettingInteractor.execute(accountId));
|
||||
} else {
|
||||
@@ -196,8 +196,8 @@ class PreferencesController extends BaseController {
|
||||
break;
|
||||
}
|
||||
|
||||
final session = _manageAccountDashBoardController.sessionCurrent;
|
||||
final accountId = _manageAccountDashBoardController.accountId.value;
|
||||
final session = accountDashboardController.sessionCurrent;
|
||||
final accountId = accountDashboardController.accountId.value;
|
||||
if (session != null && accountId != null && newSettingOption != null) {
|
||||
consumeState(
|
||||
_updateServerSettingInteractor.execute(
|
||||
@@ -215,7 +215,6 @@ class PreferencesController extends BaseController {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
_appLifecycleListener?.dispose();
|
||||
|
||||
@@ -2,6 +2,7 @@ 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/base/setting_detail_view_builder.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/handle_setup_label_visibility_in_setting_extension.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/preferences_option_type.dart';
|
||||
@@ -51,13 +52,34 @@ class PreferencesView extends GetWidget<PreferencesController> with AppLoaderMix
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
if (controller.responsiveUtils.isWebDesktop(context))
|
||||
const SettingHeaderWidget(
|
||||
menuItem: AccountMenuItem.preferences,
|
||||
padding: EdgeInsets.only(bottom: 21),
|
||||
Obx(
|
||||
() {
|
||||
final labelVisibility = controller
|
||||
.accountDashboardController.isLabelVisibility.value;
|
||||
|
||||
final isLabelCapabilitySupported = controller
|
||||
.accountDashboardController
|
||||
.isLabelCapabilitySupported;
|
||||
|
||||
final disableMultiClick =
|
||||
labelVisibility || !isLabelCapabilitySupported;
|
||||
|
||||
return SettingHeaderWidget(
|
||||
menuItem: AccountMenuItem.preferences,
|
||||
padding: const EdgeInsets.only(bottom: 21),
|
||||
onMultiClickAction: disableMultiClick
|
||||
? null
|
||||
: controller.accountDashboardController
|
||||
.enableLabelVisibility,
|
||||
);
|
||||
},
|
||||
),
|
||||
Obx(() {
|
||||
final settingOption = controller.settingOption.value;
|
||||
final localSettingOption = controller.localSettings.value;
|
||||
final isLabelVisibility = controller
|
||||
.accountDashboardController
|
||||
.isLabelVisibility;
|
||||
|
||||
if (settingOption == null &&
|
||||
localSettingOption.configs.isEmpty) {
|
||||
@@ -75,12 +97,15 @@ class PreferencesView extends GetWidget<PreferencesController> with AppLoaderMix
|
||||
...PreferencesOptionType.values.where(
|
||||
(type) =>
|
||||
type.isLocal &&
|
||||
type != PreferencesOptionType.label &&
|
||||
(type != PreferencesOptionType.aiScribe ||
|
||||
controller.isAIScribeCapabilityAvailable),
|
||||
),
|
||||
if (settingOption != null &&
|
||||
controller.isAICapabilitySupported)
|
||||
PreferencesOptionType.aiNeedsAction,
|
||||
if (isLabelVisibility.isTrue)
|
||||
PreferencesOptionType.label,
|
||||
];
|
||||
|
||||
return Expanded(
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/utils/theme_utils.dart';
|
||||
import 'package:core/presentation/views/button/multi_click_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
@@ -8,27 +9,38 @@ class SettingHeaderWidget extends StatelessWidget {
|
||||
final AccountMenuItem menuItem;
|
||||
final EdgeInsetsGeometry? padding;
|
||||
final TextStyle? textStyle;
|
||||
final VoidCallback? onMultiClickAction;
|
||||
|
||||
const SettingHeaderWidget({
|
||||
Key? key,
|
||||
required this.menuItem,
|
||||
this.padding,
|
||||
this.textStyle,
|
||||
this.onMultiClickAction,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final appLocalizations = AppLocalizations.of(context);
|
||||
|
||||
final children = [
|
||||
Text(
|
||||
menuItem.getName(appLocalizations),
|
||||
style: textStyle ?? ThemeUtils.textStyleInter600().copyWith(
|
||||
color: Colors.black,
|
||||
),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
Widget titleWidget = Text(
|
||||
menuItem.getName(appLocalizations),
|
||||
style: textStyle ?? ThemeUtils.textStyleInter600().copyWith(
|
||||
color: Colors.black,
|
||||
),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
);
|
||||
|
||||
if (onMultiClickAction != null) {
|
||||
titleWidget = MultiClickWidget(
|
||||
onMultiTap: onMultiClickAction!,
|
||||
child: titleWidget,
|
||||
);
|
||||
}
|
||||
|
||||
final children = [
|
||||
titleWidget,
|
||||
if (menuItem.getExplanation(appLocalizations).isNotEmpty)
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 13),
|
||||
|
||||
@@ -5283,5 +5283,11 @@
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"theLabelFeatureIsNowAvailable": "The label feature is now available.",
|
||||
"@theLabelFeatureIsNowAvailable": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
}
|
||||
}
|
||||
@@ -36,6 +36,7 @@ import 'package:tmail_ui_user/features/mailbox/data/local/state_cache_manager.da
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/local_sort_order_manager.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/local/setting_cache_manager.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_worker_queue.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart';
|
||||
@@ -94,6 +95,7 @@ class LocalBindings extends Bindings {
|
||||
Get.put(SessionHiveCacheClient());
|
||||
Get.put(SessionCacheManager(Get.find<SessionHiveCacheClient>()));
|
||||
Get.put(LocalSortOrderManager(Get.find<SharedPreferences>()));
|
||||
Get.put(SettingCacheManager(Get.find<SharedPreferences>()));
|
||||
Get.put(CachingManager(
|
||||
Get.find<MailboxCacheManager>(),
|
||||
Get.find<StateCacheManager>(),
|
||||
|
||||
@@ -5612,4 +5612,11 @@ class AppLocalizations {
|
||||
name: 'labelVisibilityToggleDescription',
|
||||
);
|
||||
}
|
||||
|
||||
String get theLabelFeatureIsNowAvailable {
|
||||
return Intl.message(
|
||||
'The label feature is now available.',
|
||||
name: 'theLabelFeatureIsNowAvailable',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user