TF-3712 Add SettingsCapability to hide language setting
This commit is contained in:
@@ -15,6 +15,7 @@ import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
|||||||
import 'package:model/download_all/download_all_capability.dart';
|
import 'package:model/download_all/download_all_capability.dart';
|
||||||
import 'package:model/mailbox/mailbox_constants.dart';
|
import 'package:model/mailbox/mailbox_constants.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
|
import 'package:server_settings/server_settings/capability_server_settings.dart';
|
||||||
import 'package:tmail_ui_user/features/home/data/model/session_hive_obj.dart';
|
import 'package:tmail_ui_user/features/home/data/model/session_hive_obj.dart';
|
||||||
import 'package:tmail_ui_user/features/home/domain/converter/session_account_converter.dart';
|
import 'package:tmail_ui_user/features/home/domain/converter/session_account_converter.dart';
|
||||||
import 'package:tmail_ui_user/features/home/domain/converter/session_capabilities_converter.dart';
|
import 'package:tmail_ui_user/features/home/domain/converter/session_capabilities_converter.dart';
|
||||||
@@ -29,6 +30,7 @@ extension SessionExtensions on Session {
|
|||||||
linagoraContactSupportCapability: ContactSupportCapability.deserialize,
|
linagoraContactSupportCapability: ContactSupportCapability.deserialize,
|
||||||
tmailContactCapabilityIdentifier: AutocompleteCapability.deserialize,
|
tmailContactCapabilityIdentifier: AutocompleteCapability.deserialize,
|
||||||
linagoraDownloadAllCapability: DownloadAllCapability.deserialize,
|
linagoraDownloadAllCapability: DownloadAllCapability.deserialize,
|
||||||
|
capabilityServerSettings: SettingsCapability.deserialize,
|
||||||
};
|
};
|
||||||
|
|
||||||
Map<String, dynamic> toJson() {
|
Map<String, dynamic> toJson() {
|
||||||
@@ -139,4 +141,12 @@ extension SessionExtensions on Session {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isLanguageReadOnly(AccountId accountId) {
|
||||||
|
final settingsCapability = getCapabilityProperties<SettingsCapability>(
|
||||||
|
accountId,
|
||||||
|
capabilityServerSettings,
|
||||||
|
);
|
||||||
|
return settingsCapability?.readOnlyProperties?.contains('language') == true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -15,6 +15,7 @@ import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
|
|||||||
import 'package:server_settings/server_settings/capability_server_settings.dart';
|
import 'package:server_settings/server_settings/capability_server_settings.dart';
|
||||||
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
||||||
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
|
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
|
||||||
|
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/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_all_vacation_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/state/update_vacation_state.dart';
|
||||||
@@ -235,6 +236,16 @@ class ManageAccountDashBoardController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool get isLanguageSettingDisplayed {
|
||||||
|
if (!isServerSettingsCapabilitySupported) return true;
|
||||||
|
|
||||||
|
if (accountId.value == null || sessionCurrent == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return !sessionCurrent!.isLanguageReadOnly(accountId.value!);
|
||||||
|
}
|
||||||
|
|
||||||
bool get isVacationCapabilitySupported {
|
bool get isVacationCapabilitySupported {
|
||||||
if (accountId.value != null && sessionCurrent != null) {
|
if (accountId.value != null && sessionCurrent != null) {
|
||||||
return CapabilityIdentifier.jmapVacationResponse.isSupported(sessionCurrent!, accountId.value!);
|
return CapabilityIdentifier.jmapVacationResponse.isSupported(sessionCurrent!, accountId.value!);
|
||||||
|
|||||||
@@ -119,7 +119,11 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
|
|||||||
case AccountMenuItem.profiles:
|
case AccountMenuItem.profiles:
|
||||||
return ProfilesView(responsiveUtils: controller.responsiveUtils);
|
return ProfilesView(responsiveUtils: controller.responsiveUtils);
|
||||||
case AccountMenuItem.languageAndRegion:
|
case AccountMenuItem.languageAndRegion:
|
||||||
return const LanguageAndRegionView();
|
if (controller.isLanguageSettingDisplayed) {
|
||||||
|
return const LanguageAndRegionView();
|
||||||
|
} else {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
case AccountMenuItem.emailRules:
|
case AccountMenuItem.emailRules:
|
||||||
if (controller.isRuleFilterCapabilitySupported){
|
if (controller.isRuleFilterCapabilitySupported){
|
||||||
return EmailRulesView();
|
return EmailRulesView();
|
||||||
|
|||||||
@@ -46,7 +46,8 @@ class ManageAccountMenuController extends GetxController with ContactSupportMixi
|
|||||||
if (dashBoardController.isVacationCapabilitySupported)
|
if (dashBoardController.isVacationCapabilitySupported)
|
||||||
AccountMenuItem.vacation,
|
AccountMenuItem.vacation,
|
||||||
AccountMenuItem.mailboxVisibility,
|
AccountMenuItem.mailboxVisibility,
|
||||||
AccountMenuItem.languageAndRegion
|
if (dashBoardController.isLanguageSettingDisplayed)
|
||||||
|
AccountMenuItem.languageAndRegion,
|
||||||
];
|
];
|
||||||
listAccountMenuItem.value = newListMenuSetting;
|
listAccountMenuItem.value = newListMenuSetting;
|
||||||
|
|
||||||
|
|||||||
+19
-11
@@ -128,17 +128,25 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
|
|||||||
subtitle: AppLocalizations.of(context).folderVisibilitySubtitle,
|
subtitle: AppLocalizations.of(context).folderVisibilitySubtitle,
|
||||||
() => controller.selectSettings(AccountMenuItem.mailboxVisibility)
|
() => controller.selectSettings(AccountMenuItem.mailboxVisibility)
|
||||||
),
|
),
|
||||||
Divider(
|
Obx(() {
|
||||||
color: AppColor.colorDividerHorizontal,
|
if (!controller.manageAccountDashboardController.isLanguageSettingDisplayed) {
|
||||||
height: 1,
|
return const SizedBox.shrink();
|
||||||
indent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils),
|
}
|
||||||
endIndent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils)
|
|
||||||
),
|
return Column(children: [
|
||||||
SettingFirstLevelTileBuilder(
|
Divider(
|
||||||
AccountMenuItem.languageAndRegion.getName(AppLocalizations.of(context)),
|
color: AppColor.colorDividerHorizontal,
|
||||||
AccountMenuItem.languageAndRegion.getIcon(controller.imagePaths),
|
height: 1,
|
||||||
() => controller.selectSettings(AccountMenuItem.languageAndRegion)
|
indent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils),
|
||||||
),
|
endIndent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils)
|
||||||
|
),
|
||||||
|
SettingFirstLevelTileBuilder(
|
||||||
|
AccountMenuItem.languageAndRegion.getName(AppLocalizations.of(context)),
|
||||||
|
AccountMenuItem.languageAndRegion.getIcon(controller.imagePaths),
|
||||||
|
() => controller.selectSettings(AccountMenuItem.languageAndRegion)
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
}),
|
||||||
Obx(() {
|
Obx(() {
|
||||||
if (controller.manageAccountDashboardController.isFcmCapabilitySupported && PlatformInfo.isMobile) {
|
if (controller.manageAccountDashboardController.isFcmCapabilitySupported && PlatformInfo.isMobile) {
|
||||||
return Column(children: [
|
return Column(children: [
|
||||||
|
|||||||
@@ -197,7 +197,11 @@ class SettingsView extends GetWidget<SettingsController> {
|
|||||||
case AccountMenuItem.profiles:
|
case AccountMenuItem.profiles:
|
||||||
return ProfilesView(responsiveUtils: controller.responsiveUtils);
|
return ProfilesView(responsiveUtils: controller.responsiveUtils);
|
||||||
case AccountMenuItem.languageAndRegion:
|
case AccountMenuItem.languageAndRegion:
|
||||||
return const LanguageAndRegionView();
|
if (controller.manageAccountDashboardController.isLanguageSettingDisplayed) {
|
||||||
|
return const LanguageAndRegionView();
|
||||||
|
} else {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
case AccountMenuItem.emailRules:
|
case AccountMenuItem.emailRules:
|
||||||
if (controller.manageAccountDashboardController.isRuleFilterCapabilitySupported) {
|
if (controller.manageAccountDashboardController.isRuleFilterCapabilitySupported) {
|
||||||
return EmailRulesView();
|
return EmailRulesView();
|
||||||
|
|||||||
@@ -1,3 +1,26 @@
|
|||||||
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/capability/capability_properties.dart';
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
final capabilityServerSettings = CapabilityIdentifier(Uri.parse('com:linagora:params:jmap:settings'));
|
part 'capability_server_settings.g.dart';
|
||||||
|
|
||||||
|
final capabilityServerSettings = CapabilityIdentifier(Uri.parse('com:linagora:params:jmap:settings'));
|
||||||
|
|
||||||
|
@JsonSerializable()
|
||||||
|
class SettingsCapability extends CapabilityProperties {
|
||||||
|
SettingsCapability({this.readOnlyProperties});
|
||||||
|
|
||||||
|
final List<String>? readOnlyProperties;
|
||||||
|
|
||||||
|
factory SettingsCapability.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$SettingsCapabilityFromJson(json);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$SettingsCapabilityToJson(this);
|
||||||
|
|
||||||
|
factory SettingsCapability.deserialize(Map<String, dynamic> json) {
|
||||||
|
return SettingsCapability.fromJson(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [readOnlyProperties];
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user