Skip to content

Commit

Permalink
feat: notification initialisation #2813
Browse files Browse the repository at this point in the history
  • Loading branch information
bibash28 committed Aug 28, 2024
1 parent ce9967f commit 33a00d8
Show file tree
Hide file tree
Showing 20 changed files with 106 additions and 18 deletions.
4 changes: 3 additions & 1 deletion lib/app/shared/constants/altme_strings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ class AltMeStrings {
static const String time = 'time';

//page
static const String matrixSupportId = '@support:matrix.talao.co';
static const String matrixChatSupportId = '@support:matrix.talao.co';
static const String matrixNotificationSupportId =
'#notification:matrix.talao.co';

//Chat
static const String dashBoardPage = '/dashboardPage';
Expand Down
4 changes: 3 additions & 1 deletion lib/app/shared/constants/secure_storage_keys.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
class SecureStorageKeys {
static const String isUserRegisteredMatrix = 'isUserRegisteredMatrix';
static const String supportRoomId = 'MatrixSupportRoomId';
static const String chatSupportRoomId = 'MatrixSupportRoomId';
static const String notificationSupportRoomId =
'MatrixNotificationSupportRoomId';
static const String isFirstSelectedTokenContracts =
'isFirstSelectedTokenContracts';
static const String selectedContracts = 'selectedContracts';
Expand Down
14 changes: 13 additions & 1 deletion lib/app/view/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import 'package:altme/kyc_verification/cubit/kyc_verification_cubit.dart';
import 'package:altme/l10n/l10n.dart';
import 'package:altme/lang/cubit/lang_cubit.dart';
import 'package:altme/lang/cubit/lang_state.dart';
import 'package:altme/matrix_notification/cubit/matrix_notification_cubit.dart';
import 'package:altme/onboarding/cubit/onboarding_cubit.dart';
import 'package:altme/polygon_id/cubit/polygon_id_cubit.dart';
import 'package:altme/query_by_example/query_by_example.dart';
Expand Down Expand Up @@ -266,9 +267,19 @@ class App extends StatelessWidget {
BlocProvider<AltmeChatSupportCubit>(
lazy: false,
create: (context) => AltmeChatSupportCubit(
secureStorageProvider: getSecureStorage,
secureStorageProvider: secureStorageProvider,
matrixChat: MatrixChatImpl(),
profileCubit: context.read<ProfileCubit>(),
roomIdStoredKey: SecureStorageKeys.chatSupportRoomId,
),
),
BlocProvider<MatrixNotificationCubit>(
lazy: false,
create: (context) => MatrixNotificationCubit(
secureStorageProvider: secureStorageProvider,
matrixChat: MatrixChatImpl(),
profileCubit: context.read<ProfileCubit>(),
roomIdStoredKey: SecureStorageKeys.notificationSupportRoomId,
),
),
BlocProvider(
Expand All @@ -283,6 +294,7 @@ class App extends StatelessWidget {
dio: Dio(),
),
altmeChatSupportCubit: context.read<AltmeChatSupportCubit>(),
matrixNotificationCubit: context.read<MatrixNotificationCubit>(),
profileCubit: context.read<ProfileCubit>(),
),
),
Expand Down
22 changes: 15 additions & 7 deletions lib/chat_room/cubit/chat_room_cubit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ abstract class ChatRoomCubit extends Cubit<ChatRoomState> {
required this.secureStorageProvider,
required this.matrixChat,
required this.profileCubit,
required this.roomIdStoredKey,
}) : super(const ChatRoomState());

final SecureStorageProvider secureStorageProvider;
Expand All @@ -36,6 +37,7 @@ abstract class ChatRoomCubit extends Cubit<ChatRoomState> {
//
final MatrixChatImpl matrixChat;
final ProfileCubit profileCubit;
final String roomIdStoredKey;

Stream<int> get unreadMessageCountStream {
_notificationStreamController ??= StreamController<int>.broadcast();
Expand Down Expand Up @@ -140,7 +142,8 @@ abstract class ChatRoomCubit extends Cubit<ChatRoomState> {

List<Message> retrivedMessageFromDB = [];
await _checkIfRoomNotExistThenCreateIt();
final savedRoomId = await matrixChat.getRoomIdFromStorage();
final savedRoomId =
await matrixChat.getRoomIdFromStorage(roomIdStoredKey);
if (savedRoomId != null) {
_roomId = savedRoomId;
await matrixChat.enableRoomEncyption(savedRoomId);
Expand Down Expand Up @@ -285,20 +288,25 @@ abstract class ChatRoomCubit extends Cubit<ChatRoomState> {

final List<String> invites = [];

if (profileCubit.state.model.walletType == WalletType.enterprise &&
helpCenterOptions.customChatSupport &&
helpCenterOptions.customChatSupportName != null) {
invites.add(helpCenterOptions.customChatSupportName!);
if (roomIdStoredKey == SecureStorageKeys.notificationSupportRoomId) {
invites.add(AltMeStrings.matrixNotificationSupportId);
} else {
invites.add(AltMeStrings.matrixSupportId);
//roomIdStoredKey == SecureStorageKeys.chatSupportRoomId
if (profileCubit.state.model.walletType == WalletType.enterprise &&
helpCenterOptions.customChatSupport &&
helpCenterOptions.customChatSupportName != null) {
invites.add(helpCenterOptions.customChatSupportName!);
} else {
invites.add(AltMeStrings.matrixChatSupportId);
}
}

_roomId = await matrixChat.createRoomAndInviteSupport(
tokenParameters.thumbprint,
invites,
);

await matrixChat.setRoomIdInStorage(_roomId!);
await matrixChat.setRoomIdInStorage(roomIdStoredKey, _roomId!);
_getUnreadMessageCount();
await _subscribeToEventsOfRoom();
}
Expand Down
8 changes: 4 additions & 4 deletions lib/chat_room/matrix_chat/matrix_chat_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -128,13 +128,13 @@ class MatrixChatImpl extends MatrixChatInterface {
}

@override
Future<String?> getRoomIdFromStorage() async {
return secureStorageProvider.get(SecureStorageKeys.supportRoomId);
Future<String?> getRoomIdFromStorage(String roomIdStoredKey) async {
return secureStorageProvider.get(roomIdStoredKey);
}

@override
Future<void> setRoomIdInStorage(String roomId) async {
await secureStorageProvider.set(SecureStorageKeys.supportRoomId, roomId);
Future<void> setRoomIdInStorage(String roomIdStoredKey, String roomId) async {
await secureStorageProvider.set(roomIdStoredKey, roomId);
}

@override
Expand Down
4 changes: 2 additions & 2 deletions lib/chat_room/matrix_chat/matrix_chat_interface.dart
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ abstract class MatrixChatInterface {
});
Future<void> dispose();
Future<void> init(ProfileCubit profileCubit);
Future<String?> getRoomIdFromStorage();
Future<void> setRoomIdInStorage(String roomId);
Future<String?> getRoomIdFromStorage(String roomIdStoredKey);
Future<void> setRoomIdInStorage(String roomIdStoredKey, String roomId);
int getUnreadMessageCount(String? roomId);
Future<List<Message>> retriveMessagesFromDB(String roomId);
Future<void> markMessageAsRead(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ class AltmeChatSupportCubit extends ChatRoomCubit {
required super.secureStorageProvider,
required super.matrixChat,
required super.profileCubit,
required super.roomIdStoredKey,
});
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:altme/credentials/cubit/credentials_cubit.dart';
import 'package:altme/dashboard/drawer/help_center/altme_support_chat/cubit/altme_support_chat_cubit.dart';
import 'package:altme/dashboard/profile/cubit/profile_cubit.dart';
import 'package:altme/matrix_notification/cubit/matrix_notification_cubit.dart';
import 'package:altme/wallet/cubit/wallet_cubit.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
Expand All @@ -11,4 +12,5 @@ Future<void> resetWallet(BuildContext context) async {
.read<WalletCubit>()
.resetWallet(context.read<CredentialsCubit>());
await context.read<AltmeChatSupportCubit>().dispose();
await context.read<MatrixNotificationCubit>().dispose();
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ class CardChatSupportCubit extends ChatRoomCubit {
required super.secureStorageProvider,
required super.matrixChat,
required super.profileCubit,
required super.roomIdStoredKey,
});
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class HomeCredentialItem extends StatelessWidget {
secureStorageProvider: getSecureStorage,
matrixChat: MatrixChatImpl(),
profileCubit: context.read<ProfileCubit>(),
roomIdStoredKey: 'putIdHereIfNeededInFuture',
);

return BlocProvider(
Expand Down
14 changes: 12 additions & 2 deletions lib/dashboard/profile/models/profile_setting.dart
Original file line number Diff line number Diff line change
Expand Up @@ -446,11 +446,13 @@ class GeneralOptions extends Equatable {
class HelpCenterOptions extends Equatable {
const HelpCenterOptions({
required this.customChatSupport,
this.customChatSupportName,
this.customEmail,
required this.customEmailSupport,
required this.displayChatSupport,
required this.displayEmailSupport,
this.customChatSupportName,
this.customEmail,
this.displayNotification,
this.customNotification,
});

factory HelpCenterOptions.fromJson(Map<String, dynamic> json) =>
Expand All @@ -469,6 +471,8 @@ class HelpCenterOptions extends Equatable {
final bool customEmailSupport;
final bool displayChatSupport;
final bool displayEmailSupport;
final bool? displayNotification;
final bool? customNotification;

Map<String, dynamic> toJson() => _$HelpCenterOptionsToJson(this);

Expand All @@ -479,6 +483,8 @@ class HelpCenterOptions extends Equatable {
bool? customEmailSupport,
bool? displayChatSupport,
bool? displayEmailSupport,
bool? displayNotification,
bool? customNotification,
}) =>
HelpCenterOptions(
customChatSupport: customChatSupport ?? this.customChatSupport,
Expand All @@ -488,6 +494,8 @@ class HelpCenterOptions extends Equatable {
customChatSupportName:
customChatSupportName ?? this.customChatSupportName,
customEmail: customEmail ?? this.customEmail,
displayNotification: displayNotification ?? this.displayNotification,
customNotification: customNotification ?? this.customNotification,
);

@override
Expand All @@ -498,6 +506,8 @@ class HelpCenterOptions extends Equatable {
customEmailSupport,
displayChatSupport,
displayEmailSupport,
displayNotification,
customNotification,
];
}

Expand Down
10 changes: 10 additions & 0 deletions lib/matrix_notification/cubit/matrix_notification_cubit.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import 'package:altme/chat_room/chat_room.dart';

class MatrixNotificationCubit extends ChatRoomCubit {
MatrixNotificationCubit({
required super.secureStorageProvider,
required super.matrixChat,
required super.profileCubit,
required super.roomIdStoredKey,
});
}
1 change: 1 addition & 0 deletions lib/matrix_notification/matrix_notification.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export 'cubit/matrix_notification_cubit.dart';
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:altme/app/app.dart';
import 'package:altme/dashboard/dashboard.dart';
import 'package:altme/matrix_notification/matrix_notification.dart';
import 'package:altme/onboarding/onboarding.dart';
import 'package:altme/splash/splash.dart';
import 'package:altme/wallet/wallet.dart';
Expand All @@ -21,6 +22,7 @@ class OnBoardingGenPhraseCubit extends Cubit<OnBoardingGenPhraseState> {
required this.walletCubit,
required this.splashCubit,
required this.altmeChatSupportCubit,
required this.matrixNotificationCubit,
required this.profileCubit,
}) : super(const OnBoardingGenPhraseState());

Expand All @@ -31,6 +33,7 @@ class OnBoardingGenPhraseCubit extends Cubit<OnBoardingGenPhraseState> {
final WalletCubit walletCubit;
final SplashCubit splashCubit;
final AltmeChatSupportCubit altmeChatSupportCubit;
final MatrixNotificationCubit matrixNotificationCubit;
final ProfileCubit profileCubit;

final log = getLogger('OnBoardingGenPhraseCubit');
Expand All @@ -46,6 +49,7 @@ class OnBoardingGenPhraseCubit extends Cubit<OnBoardingGenPhraseState> {
walletCubit: walletCubit,
splashCubit: splashCubit,
altmeChatSupportCubit: altmeChatSupportCubit,
matrixNotificationCubit: matrixNotificationCubit,
profileCubit: profileCubit,
);

Expand Down
2 changes: 2 additions & 0 deletions lib/onboarding/gen_phrase/view/onboarding_gen_phrase.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:altme/app/app.dart';
import 'package:altme/dashboard/dashboard.dart';
import 'package:altme/l10n/l10n.dart';
import 'package:altme/matrix_notification/matrix_notification.dart';
import 'package:altme/onboarding/cubit/onboarding_cubit.dart';
import 'package:altme/onboarding/onboarding.dart';
import 'package:altme/splash/cubit/splash_cubit.dart';
Expand Down Expand Up @@ -30,6 +31,7 @@ class OnBoardingGenPhrasePage extends StatelessWidget {
walletCubit: context.read<WalletCubit>(),
splashCubit: context.read<SplashCubit>(),
altmeChatSupportCubit: context.read<AltmeChatSupportCubit>(),
matrixNotificationCubit: context.read<MatrixNotificationCubit>(),
profileCubit: context.read<ProfileCubit>(),
),
child: const OnBoardingGenPhraseView(),
Expand Down
11 changes: 11 additions & 0 deletions lib/onboarding/helper_function/helper_function.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:altme/app/app.dart';
import 'package:altme/dashboard/dashboard.dart';
import 'package:altme/matrix_notification/matrix_notification.dart';
import 'package:altme/splash/splash.dart';
import 'package:altme/wallet/wallet.dart';
import 'package:did_kit/did_kit.dart';
Expand All @@ -13,6 +14,7 @@ Future<void> generateAccount({
required WalletCubit walletCubit,
required SplashCubit splashCubit,
required AltmeChatSupportCubit altmeChatSupportCubit,
required MatrixNotificationCubit matrixNotificationCubit,
required ProfileCubit profileCubit,
}) async {
final mnemonicFormatted = mnemonic.join(' ');
Expand Down Expand Up @@ -45,6 +47,15 @@ Future<void> generateAccount({
if (profileCubit.state.model.walletType == WalletType.enterprise) {
/// initiate chat if it is enterprise
await altmeChatSupportCubit.init();
final helpCenterOptions =
profileCubit.state.model.profileSetting.helpCenterOptions;

if (helpCenterOptions.displayNotification != null &&
helpCenterOptions.displayNotification! &&
helpCenterOptions.customNotification != null &&
!helpCenterOptions.customNotification!) {
await matrixNotificationCubit.init();
}
}

await homeCubit.emitHasWallet();
Expand Down
2 changes: 2 additions & 0 deletions lib/onboarding/protect_wallet/view/protect_wallet_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'package:altme/app/app.dart';
import 'package:altme/dashboard/dashboard.dart';
import 'package:altme/import_wallet/import_wallet.dart';
import 'package:altme/l10n/l10n.dart';
import 'package:altme/matrix_notification/matrix_notification.dart';
import 'package:altme/onboarding/cubit/onboarding_cubit.dart';
import 'package:altme/onboarding/onboarding.dart';
import 'package:altme/pin_code/pin_code.dart';
Expand Down Expand Up @@ -43,6 +44,7 @@ class ProtectWalletPage extends StatelessWidget {
walletCubit: context.read<WalletCubit>(),
splashCubit: context.read<SplashCubit>(),
altmeChatSupportCubit: context.read<AltmeChatSupportCubit>(),
matrixNotificationCubit: context.read<MatrixNotificationCubit>(),
profileCubit: context.read<ProfileCubit>(),
),
child: Builder(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:altme/app/app.dart';
import 'package:altme/dashboard/dashboard.dart';
import 'package:altme/flavor/flavor.dart';
import 'package:altme/matrix_notification/matrix_notification.dart';
import 'package:altme/onboarding/helper_function/helper_function.dart';
import 'package:altme/splash/splash.dart';
import 'package:altme/wallet/wallet.dart';
Expand All @@ -23,6 +24,7 @@ class OnBoardingVerifyPhraseCubit extends Cubit<OnBoardingVerifyPhraseState> {
required this.splashCubit,
required this.flavorCubit,
required this.altmeChatSupportCubit,
required this.matrixNotificationCubit,
required this.profileCubit,
}) : super(OnBoardingVerifyPhraseState());

Expand All @@ -34,6 +36,7 @@ class OnBoardingVerifyPhraseCubit extends Cubit<OnBoardingVerifyPhraseState> {
final FlavorCubit flavorCubit;
final SplashCubit splashCubit;
final AltmeChatSupportCubit altmeChatSupportCubit;
final MatrixNotificationCubit matrixNotificationCubit;
final ProfileCubit profileCubit;

final log = getLogger('OnBoardingVerifyPhraseCubit');
Expand Down Expand Up @@ -118,6 +121,7 @@ class OnBoardingVerifyPhraseCubit extends Cubit<OnBoardingVerifyPhraseState> {
walletCubit: walletCubit,
splashCubit: splashCubit,
altmeChatSupportCubit: altmeChatSupportCubit,
matrixNotificationCubit: matrixNotificationCubit,
profileCubit: profileCubit,
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'package:altme/app/app.dart';
import 'package:altme/dashboard/dashboard.dart';
import 'package:altme/flavor/flavor.dart';
import 'package:altme/l10n/l10n.dart';
import 'package:altme/matrix_notification/matrix_notification.dart';
import 'package:altme/onboarding/cubit/onboarding_cubit.dart';
import 'package:altme/onboarding/onboarding.dart';
import 'package:altme/splash/splash.dart';
Expand Down Expand Up @@ -45,6 +46,7 @@ class OnBoardingVerifyPhrasePage extends StatelessWidget {
splashCubit: context.read<SplashCubit>(),
flavorCubit: context.read<FlavorCubit>(),
altmeChatSupportCubit: context.read<AltmeChatSupportCubit>(),
matrixNotificationCubit: context.read<MatrixNotificationCubit>(),
profileCubit: context.read<ProfileCubit>(),
),
child: Builder(
Expand Down
Loading

0 comments on commit 33a00d8

Please sign in to comment.