TF-1289: [Presentation] Implement DestroySubscription when logout
This commit is contained in:
@@ -3,6 +3,7 @@ import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:fcm/model/firebase_capability.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
||||
@@ -24,7 +25,9 @@ import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/log_out_oidc_state.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_interactors_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/push_notification/domain/state/destroy_subscription_state.dart';
|
||||
import 'package:tmail_ui_user/features/push_notification/domain/state/get_fcm_subscription_local.dart';
|
||||
import 'package:tmail_ui_user/features/push_notification/domain/usecases/destroy_subscription_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_fcm_subscription_local_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/push_notification/presentation/services/fcm_receiver.dart';
|
||||
import 'package:tmail_ui_user/features/session/domain/state/get_session_state.dart';
|
||||
@@ -33,6 +36,7 @@ import 'package:tmail_ui_user/main/bindings/network/binding_tag.dart';
|
||||
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
||||
|
||||
abstract class ReloadableController extends BaseController {
|
||||
final DynamicUrlInterceptors _dynamicUrlInterceptors = Get.find<DynamicUrlInterceptors>();
|
||||
@@ -49,6 +53,7 @@ abstract class ReloadableController extends BaseController {
|
||||
final _fcmReceiver = FcmReceiver.instance;
|
||||
|
||||
GetFCMSubscriptionLocalInteractor? _getSubscriptionLocalInteractor;
|
||||
DestroySubscriptionInteractor? _destroySubscriptionInteractor;
|
||||
|
||||
ReloadableController(
|
||||
this._logoutOidcInteractor,
|
||||
@@ -71,9 +76,11 @@ abstract class ReloadableController extends BaseController {
|
||||
_goToLogin(arguments: LoginArguments(LoginFormType.ssoForm));
|
||||
} else if (failure is GetAuthenticatedAccountFailure || failure is NoAuthenticatedAccountFailure) {
|
||||
_goToLogin(arguments: LoginArguments(LoginFormType.credentialForm));
|
||||
} else if (failure is GetFCMSubscriptionLocalFailure){
|
||||
} else if (failure is GetFCMSubscriptionLocalFailure) {
|
||||
logoutAction();
|
||||
}
|
||||
} else if (failure is DestroySubscriptionFailure) {
|
||||
logoutAction();
|
||||
}
|
||||
},
|
||||
(success) {
|
||||
if (success is GetCredentialViewState) {
|
||||
@@ -84,6 +91,11 @@ abstract class ReloadableController extends BaseController {
|
||||
handleLogoutOidcSuccess(success);
|
||||
} else if (success is GetStoredTokenOidcSuccess) {
|
||||
_handleGetStoredTokenOIDCSuccess(success);
|
||||
} else if (success is GetFCMSubscriptionLocalSuccess) {
|
||||
final _subscriptionId = success.fcmSubscription.subscriptionId;
|
||||
_destroySubscriptionAction(_subscriptionId);
|
||||
} else if (success is DestroySubscriptionSuccess) {
|
||||
logoutAction();
|
||||
}
|
||||
}
|
||||
);
|
||||
@@ -219,4 +231,38 @@ abstract class ReloadableController extends BaseController {
|
||||
}
|
||||
return Future.value();
|
||||
}
|
||||
|
||||
void _destroySubscriptionAction(String subscriptionId) {
|
||||
try {
|
||||
_destroySubscriptionInteractor = Get.find<DestroySubscriptionInteractor>();
|
||||
consumeState(_destroySubscriptionInteractor!.execute(subscriptionId));
|
||||
} catch(e) {
|
||||
logError('ReloadableController::destroySubscriptionAction(): exception: $e');
|
||||
logoutAction();
|
||||
}
|
||||
}
|
||||
|
||||
bool fcmEnabled(Session? session, AccountId? accountId) {
|
||||
bool _fcmEnabled = false;
|
||||
try {
|
||||
requireCapability(session!, accountId!, [FirebaseCapability.fcmIdentifier]);
|
||||
if (AppConfig.fcmAvailable) {
|
||||
_fcmEnabled = true;
|
||||
} else {
|
||||
_fcmEnabled = false;
|
||||
}
|
||||
} catch (e) {
|
||||
logError('BaseController::fcmEnabled(): exception: $e');
|
||||
}
|
||||
return _fcmEnabled;
|
||||
}
|
||||
|
||||
void logout(Session? session, AccountId? accountId) {
|
||||
final _fcmEnabled = fcmEnabled(session, accountId);
|
||||
if (_fcmEnabled) {
|
||||
getSubscriptionLocalAction();
|
||||
} else {
|
||||
logoutAction();
|
||||
}
|
||||
}
|
||||
}
|
||||
+6
@@ -1401,6 +1401,12 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
Get.until((route) => Get.currentRoute == AppRoutes.dashboard);
|
||||
}
|
||||
|
||||
@override
|
||||
void logoutAction() {
|
||||
popBack();
|
||||
super.logoutAction();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
_emailReceiveManager.closeEmailReceiveManagerStream();
|
||||
|
||||
@@ -319,8 +319,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
controller.openPopupMenuAction(context, position, popupMenuUserSettingActionTile(context,
|
||||
controller.userProfile.value,
|
||||
onLogoutAction: () {
|
||||
popBack();
|
||||
controller.logoutAction();
|
||||
controller.logout(controller.sessionCurrent, controller.accountId.value);
|
||||
},
|
||||
onSettingAction: () {
|
||||
popBack();
|
||||
|
||||
@@ -59,8 +59,9 @@ class ManageAccountDashBoardController extends ReloadableController {
|
||||
ManageAccountDashBoardController(
|
||||
LogoutOidcInteractor logoutOidcInteractor,
|
||||
DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor,
|
||||
GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor
|
||||
) : super(logoutOidcInteractor,
|
||||
GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor,
|
||||
) : super(
|
||||
logoutOidcInteractor,
|
||||
deleteAuthorityOidcInteractor,
|
||||
getAuthenticatedAccountInteractor);
|
||||
|
||||
@@ -298,4 +299,10 @@ class ManageAccountDashBoardController extends ReloadableController {
|
||||
dashboardSettingAction.value = newAction;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void logoutAction() {
|
||||
popBack();
|
||||
super.logoutAction();
|
||||
}
|
||||
}
|
||||
@@ -141,10 +141,9 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
|
||||
..addOnTapAvatarActionWithPositionClick((position) =>
|
||||
controller.openPopupMenuAction(context, position, popupMenuUserSettingActionTile(context,
|
||||
controller.userProfile.value,
|
||||
onLogoutAction: () {
|
||||
popBack();
|
||||
controller.logoutAction();
|
||||
},
|
||||
onLogoutAction: () {
|
||||
controller.logout(controller.sessionCurrent.value, controller.accountId.value);
|
||||
},
|
||||
onSettingAction: () {
|
||||
popBack();
|
||||
controller.goToSettings();
|
||||
|
||||
@@ -65,4 +65,8 @@ class ManageAccountMenuController extends BaseController {
|
||||
void backToMailboxDashBoard(BuildContext context) {
|
||||
dashBoardController.backToMailboxDashBoard(context);
|
||||
}
|
||||
|
||||
void logout(){
|
||||
dashBoardController.logout(dashBoardController.sessionCurrent.value, dashBoardController.accountId.value);
|
||||
}
|
||||
}
|
||||
@@ -97,7 +97,9 @@ class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
|
||||
child: Divider(color: AppColor.lineItemListColor, height: 0.5, thickness: 0.2)),
|
||||
Padding(padding: const EdgeInsets.only(left: 32),
|
||||
child: InkWell(
|
||||
onTap: () => controller.dashBoardController.logoutAction(),
|
||||
onTap: () {
|
||||
controller.logout();
|
||||
},
|
||||
child: Row(children: [
|
||||
SvgPicture.asset(_imagePaths.icSignOut, fit: BoxFit.fill),
|
||||
const SizedBox(width: 12),
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/manage_account_menu_controller.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/settings_page_level.dart';
|
||||
|
||||
class SettingsController extends GetxController {
|
||||
final manageAccountDashboardController = Get.find<ManageAccountDashBoardController>();
|
||||
final manageAccountMenuController = Get.find<ManageAccountMenuController>();
|
||||
|
||||
|
||||
void selectSettings(AccountMenuItem accountMenuItem) {
|
||||
log('SettingsController::selectSettings(): $accountMenuItem');
|
||||
|
||||
+1
-1
@@ -119,7 +119,7 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
|
||||
SettingFirstLevelTileBuilder(
|
||||
AppLocalizations.of(context).sign_out,
|
||||
_imagePaths.icSignOut,
|
||||
controller.manageAccountDashboardController.logoutAction
|
||||
controller.manageAccountMenuController.logout,
|
||||
),
|
||||
]),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user