TF-3278 Handle open app via deep link at TwakeWelcome screen

This commit is contained in:
dab246
2024-11-19 04:17:59 +07:00
committed by Dat H. Pham
parent c6ed9f7c2b
commit 4817b31191
13 changed files with 385 additions and 189 deletions
@@ -1,3 +1,4 @@
import 'package:core/utils/platform_info.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/base_bindings.dart';
import 'package:tmail_ui_user/features/login/data/network/authentication_client/authentication_client_base.dart';
@@ -37,6 +38,9 @@ class TwakeWelcomeBindings extends BaseBindings {
Get.find<AccountRepository>(),
Get.find<CredentialRepository>(),
));
if (PlatformInfo.isMobile) {
}
}
@override
@@ -1,5 +1,9 @@
import 'dart:async';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/platform_info.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
@@ -7,6 +11,7 @@ import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:model/oidc/oidc_configuration.dart';
import 'package:model/oidc/token_oidc.dart';
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
import 'package:tmail_ui_user/features/home/domain/state/auto_sign_in_via_deep_link_state.dart';
import 'package:tmail_ui_user/features/home/domain/state/get_session_state.dart';
import 'package:tmail_ui_user/features/login/data/network/config/oidc_constant.dart';
import 'package:tmail_ui_user/features/login/domain/exceptions/authentication_exception.dart';
@@ -16,6 +21,8 @@ import 'package:tmail_ui_user/features/starting_page/domain/state/sign_in_twake_
import 'package:tmail_ui_user/features/starting_page/domain/state/sign_up_twake_workplace_state.dart';
import 'package:tmail_ui_user/features/starting_page/domain/usecase/sign_in_twake_workplace_interactor.dart';
import 'package:tmail_ui_user/features/starting_page/domain/usecase/sign_up_twake_workplace_interactor.dart';
import 'package:tmail_ui_user/main/deep_links/deep_link_data.dart';
import 'package:tmail_ui_user/main/deep_links/deep_links_manager.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
@@ -28,11 +35,53 @@ class TwakeWelcomeController extends ReloadableController {
final SignInTwakeWorkplaceInteractor _signInTwakeWorkplaceInteractor;
final SignUpTwakeWorkplaceInteractor _signUpTwakeWorkplaceInteractor;
DeepLinksManager? _deepLinksManager;
StreamSubscription<DeepLinkData?>? _deepLinkDataStreamSubscription;
TwakeWelcomeController(
this._signInTwakeWorkplaceInteractor,
this._signUpTwakeWorkplaceInteractor,
);
@override
void onInit() {
super.onInit();
if (PlatformInfo.isMobile) {
_registerDeepLinks();
}
}
void _registerDeepLinks() {
_deepLinksManager = getBinding<DeepLinksManager>();
_deepLinksManager?.clearPendingDeepLinkData();
_deepLinkDataStreamSubscription = _deepLinksManager
?.pendingDeepLinkData.stream
.listen(_handlePendingDeepLinkDataStream);
}
void _handlePendingDeepLinkDataStream(DeepLinkData? deepLinkData) {
log('TwakeWelcomeController::_handlePendingDeepLinkDataStream:DeepLinkData = $deepLinkData');
if (deepLinkData == null) return;
if (currentContext != null) {
TipDialogHelper.loading(AppLocalizations.of(currentContext!).loadingPleaseWait);
}
_deepLinksManager?.handleDeepLinksWhenAppOnForegroundNotSignedIn(
deepLinkData: deepLinkData,
onSuccessCallback: _handleAutoSignInViaDeepLinkSuccess,
onFailureCallback: TipDialogHelper.dismiss
);
}
void _handleAutoSignInViaDeepLinkSuccess(AutoSignInViaDeepLinkSuccess success) {
_synchronizeTokenAndGetSession(
baseUri: success.baseUri,
tokenOIDC: success.tokenOIDC,
oidcConfiguration: success.oidcConfiguration,
);
}
void handleUseCompanyServer() {
popAndPush(
AppRoutes.login,
@@ -134,14 +183,11 @@ class TwakeWelcomeController extends ReloadableController {
required TokenOIDC tokenOIDC,
required OIDCConfiguration oidcConfiguration,
}) {
dynamicUrlInterceptors.setJmapUrl(baseUri.toString());
dynamicUrlInterceptors.changeBaseUrl(baseUri.toString());
authorizationInterceptors.setTokenAndAuthorityOidc(
newToken: tokenOIDC,
newConfig: oidcConfiguration);
authorizationIsolateInterceptors.setTokenAndAuthorityOidc(
newToken: tokenOIDC,
newConfig: oidcConfiguration);
setDataToInterceptors(
baseUrl: baseUri.toString(),
tokenOIDC: tokenOIDC,
oidcConfiguration: oidcConfiguration,
);
getSessionAction();
}
@@ -157,4 +203,12 @@ class TwakeWelcomeController extends ReloadableController {
toastManager.showMessageFailure(failure);
}
@override
void onClose() {
if (PlatformInfo.isMobile) {
_deepLinkDataStreamSubscription?.cancel();
}
super.onClose();
}
}