inital work for redirect and snackbar on mobile

This commit is contained in:
ggurdin 2023-11-30 14:59:16 -05:00
parent 19ef30fa1e
commit 710ed42b62
7 changed files with 251 additions and 93 deletions

View file

@ -3937,5 +3937,7 @@
"searchChatsRooms": "Search for #chats, @users...",
"groupName": "Group name",
"createGroupAndInviteUsers": "Create a group and invite users",
"groupCanBeFoundViaSearch": "Group can be found via search"
"groupCanBeFoundViaSearch": "Group can be found via search",
"successfullySubscribed": "You have successfully subscribed!",
"clickToManageSubscription": "Click here to manage your subscription."
}

View file

@ -2,21 +2,9 @@
import 'dart:async';
import 'dart:io';
// Flutter imports:
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
// Package imports:
import 'package:adaptive_dialog/adaptive_dialog.dart';
import 'package:collection/collection.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:future_loading_dialog/future_loading_dialog.dart';
import 'package:go_router/go_router.dart';
import 'package:matrix/matrix.dart';
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
import 'package:uni_links/uni_links.dart';
// Project imports:
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/themes.dart';
@ -28,10 +16,24 @@ import 'package:fluffychat/pangea/utils/add_to_space.dart';
import 'package:fluffychat/pangea/utils/chat_list_handle_space_tap.dart';
import 'package:fluffychat/pangea/utils/error_handler.dart';
import 'package:fluffychat/pangea/utils/firebase_analytics.dart';
import 'package:fluffychat/pangea/widgets/subscription/subscription_snackbar.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/client_stories_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/utils/tor_stub.dart'
if (dart.library.html) 'package:tor_detector_web/tor_detector_web.dart';
// Flutter imports:
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:future_loading_dialog/future_loading_dialog.dart';
import 'package:go_router/go_router.dart';
import 'package:matrix/matrix.dart';
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
import 'package:uni_links/uni_links.dart';
import '../../../utils/account_bundles.dart';
import '../../utils/matrix_sdk_extensions/matrix_file_extension.dart';
import '../../utils/url_launcher.dart';
@ -39,9 +41,6 @@ import '../../utils/voip/callkeep_manager.dart';
import '../../widgets/fluffy_chat_app.dart';
import '../../widgets/matrix.dart';
import 'package:fluffychat/utils/tor_stub.dart'
if (dart.library.html) 'package:tor_detector_web/tor_detector_web.dart';
enum SelectMode {
normal,
share,
@ -449,6 +448,7 @@ class ChatListController extends State<ChatList>
//#Pangea
StreamSubscription? classStream;
StreamSubscription? _invitedSpaceSubscription;
StreamSubscription? _subscriptionStatusStream;
//Pangea#
@override
@ -506,6 +506,14 @@ class ChatListController extends State<ChatList>
}
}
});
_subscriptionStatusStream = pangeaController
.subscriptionController.subscriptionStream.stream
.listen((event) {
if (mounted) {
showSubscribedSnackbar(context);
}
});
//Pangea#
super.initState();
@ -519,6 +527,7 @@ class ChatListController extends State<ChatList>
//#Pangea
classStream?.cancel();
_invitedSpaceSubscription?.cancel();
_subscriptionStatusStream?.cancel();
//Pangea#
scrollController.removeListener(_onScroll);
super.dispose();

View file

@ -2,17 +2,8 @@
import 'dart:async';
import 'dart:convert';
// Flutter imports:
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
// Package imports:
import 'package:adaptive_dialog/adaptive_dialog.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:http/http.dart';
import 'package:purchases_flutter/purchases_flutter.dart';
import 'package:url_launcher/url_launcher_string.dart';
// Project imports:
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pangea/controllers/base_controller.dart';
@ -26,6 +17,13 @@ import 'package:fluffychat/pangea/utils/error_handler.dart';
import 'package:fluffychat/pangea/utils/firebase_analytics.dart';
import 'package:fluffychat/pangea/widgets/subscription/subscription_paywall.dart';
import 'package:fluffychat/utils/platform_infos.dart';
// Flutter imports:
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:http/http.dart';
import 'package:purchases_flutter/purchases_flutter.dart';
import 'package:url_launcher/url_launcher_string.dart';
class SubscriptionController extends BaseController {
late PangeaController _pangeaController;
@ -33,6 +31,7 @@ class SubscriptionController extends BaseController {
//convert this logic to use completer
bool initialized = false;
final StreamController subscriptionStream = StreamController.broadcast();
SubscriptionController(PangeaController pangeaController) : super() {
_pangeaController = pangeaController;
@ -68,7 +67,13 @@ class SubscriptionController extends BaseController {
if (!kIsWeb) {
Purchases.addCustomerInfoUpdateListener(
(CustomerInfo info) => updateCustomerInfo(),
(CustomerInfo info) async {
final bool wasSubscribed = isSubscribed;
await updateCustomerInfo();
if (!wasSubscribed && isSubscribed) {
subscriptionStream.add(true);
}
},
);
}
setState();
@ -91,8 +96,10 @@ class SubscriptionController extends BaseController {
setState();
}
Future<void> showPaywall(BuildContext context,
[bool forceShow = false]) async {
Future<void> showPaywall(
BuildContext context, [
bool forceShow = false,
]) async {
try {
if (!initialized) {
await initialize();
@ -160,8 +167,10 @@ class SubscriptionController extends BaseController {
}
void submitSubscriptionChange(
SubscriptionDetails? selectedSubscription, BuildContext context,
{bool isPromo = false}) async {
SubscriptionDetails? selectedSubscription,
BuildContext context, {
bool isPromo = false,
}) async {
if (selectedSubscription != null) {
if (kIsWeb) {
if (selectedSubscription.duration == null) {
@ -191,7 +200,9 @@ class SubscriptionController extends BaseController {
}
try {
GoogleAnalytics.beginPurchaseSubscription(
selectedSubscription, context);
selectedSubscription,
context,
);
await Purchases.purchasePackage(selectedSubscription.package!);
GoogleAnalytics.updateUserSubscriptionStatus(true);
} catch (err) {

View file

@ -1,12 +1,6 @@
// Dart imports:
import 'dart:async';
// Flutter imports:
import 'package:flutter/material.dart';
// Package imports:
import 'package:url_launcher/url_launcher_string.dart';
// Project imports:
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pangea/config/environment.dart';
@ -14,10 +8,16 @@ import 'package:fluffychat/pangea/controllers/pangea_controller.dart';
import 'package:fluffychat/pangea/controllers/subscription_controller.dart';
import 'package:fluffychat/pangea/pages/settings_subscription/settings_subscription_view.dart';
import 'package:fluffychat/pangea/utils/subscription_app_id.dart';
import 'package:fluffychat/pangea/widgets/subscription/subscription_snackbar.dart';
import 'package:fluffychat/widgets/matrix.dart';
// Flutter imports:
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
// Package imports:
import 'package:url_launcher/url_launcher_string.dart';
class SubscriptionManagement extends StatefulWidget {
const SubscriptionManagement({Key? key}) : super(key: key);
const SubscriptionManagement({super.key});
@override
SubscriptionManagementController createState() =>
@ -28,6 +28,7 @@ class SubscriptionManagementController extends State<SubscriptionManagement> {
final PangeaController pangeaController = MatrixState.pangeaController;
SubscriptionDetails? selectedSubscription;
late StreamSubscription _settingsSubscription;
StreamSubscription? _subscriptionStatusStream;
@override
void initState() {
@ -44,6 +45,7 @@ class SubscriptionManagementController extends State<SubscriptionManagement> {
void dispose() {
super.dispose();
_settingsSubscription.cancel();
_subscriptionStatusStream?.cancel();
}
bool get currentSubscriptionAvailable =>
@ -120,6 +122,12 @@ class SubscriptionManagementController extends State<SubscriptionManagement> {
@override
Widget build(BuildContext context) {
_subscriptionStatusStream ??= pangeaController
.subscriptionController.subscriptionStream.stream
.listen((_) {
showSubscribedSnackbar(context);
context.go('/rooms');
});
return SettingsSubscriptionView(this);
}
}

View file

@ -1,13 +1,11 @@
// Flutter imports:
import 'package:flutter/material.dart';
// Package imports:
import 'package:flutter_gen/gen_l10n/l10n.dart';
// Project imports:
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pangea/controllers/pangea_controller.dart';
import 'package:fluffychat/pangea/controllers/subscription_controller.dart';
import 'package:flutter/material.dart';
// Package imports:
import 'package:flutter_gen/gen_l10n/l10n.dart';
class SubscriptionOptions extends StatelessWidget {
final PangeaController pangeaController;
@ -46,10 +44,10 @@ class SubscriptionCard extends StatelessWidget {
final PangeaController pangeaController;
const SubscriptionCard({
Key? key,
super.key,
required this.subscription,
required this.pangeaController,
}) : super(key: key);
});
@override
Widget build(BuildContext context) {
@ -83,10 +81,14 @@ class SubscriptionCard extends StatelessWidget {
OutlinedButton(
onPressed: () {
pangeaController.subscriptionController
.submitSubscriptionChange(subscription, context);
.submitSubscriptionChange(
subscription,
context,
);
Navigator.of(context).pop();
},
child: Text(L10n.of(context)!.subscribe),
)
),
],
),
),

View file

@ -0,0 +1,34 @@
import 'package:fluffychat/config/app_config.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:go_router/go_router.dart';
void showSubscribedSnackbar(BuildContext context) {
final Widget text = RichText(
text: TextSpan(
children: [
TextSpan(
text: L10n.of(context)!.successfullySubscribed,
style: TextStyle(
color: Theme.of(context).brightness == Brightness.light
? Colors.white
: Colors.black,
),
),
const TextSpan(text: " "),
TextSpan(
text: L10n.of(context)!.clickToManageSubscription,
style: const TextStyle(color: AppConfig.primaryColor),
recognizer: TapGestureRecognizer()
..onTap = () => context.go('/rooms/settings/subscription'),
),
],
),
);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: text,
),
);
}

View file

@ -755,7 +755,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"bn": [
@ -1519,7 +1521,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"bo": [
@ -2283,7 +2287,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"ca": [
@ -3042,7 +3048,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"cs": [
@ -3801,7 +3809,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"de": [
@ -4560,7 +4570,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"el": [
@ -5324,7 +5336,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"eo": [
@ -6083,7 +6097,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"es": [
@ -6106,7 +6122,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"et": [
@ -6865,7 +6883,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"eu": [
@ -7624,7 +7644,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"fa": [
@ -8383,7 +8405,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"fi": [
@ -9142,7 +9166,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"fr": [
@ -9901,7 +9927,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"ga": [
@ -10660,7 +10688,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"gl": [
@ -11419,7 +11449,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"he": [
@ -12178,7 +12210,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"hi": [
@ -12942,7 +12976,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"hr": [
@ -13701,7 +13737,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"hu": [
@ -14460,7 +14498,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"id": [
@ -15219,7 +15259,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"ie": [
@ -15980,7 +16022,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"it": [
@ -16739,7 +16783,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"ja": [
@ -17498,7 +17544,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"ko": [
@ -18257,7 +18305,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"lt": [
@ -19016,7 +19066,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"lv": [
@ -19780,7 +19832,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"nb": [
@ -20539,7 +20593,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"nl": [
@ -21298,7 +21354,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"pl": [
@ -22057,7 +22115,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"pt": [
@ -22821,7 +22881,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"pt_BR": [
@ -23580,7 +23642,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"pt_PT": [
@ -24339,7 +24403,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"ro": [
@ -25098,7 +25164,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"ru": [
@ -25857,7 +25925,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"sk": [
@ -26617,7 +26687,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"sl": [
@ -27379,7 +27451,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"sr": [
@ -28138,7 +28212,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"sv": [
@ -28897,7 +28973,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"ta": [
@ -29661,7 +29739,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"th": [
@ -30425,7 +30505,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"tr": [
@ -31184,7 +31266,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"uk": [
@ -31943,7 +32027,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"vi": [
@ -32705,7 +32791,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"zh": [
@ -33464,7 +33552,9 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
],
"zh_Hant": [
@ -34223,6 +34313,8 @@
"searchChatsRooms",
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch"
"groupCanBeFoundViaSearch",
"successfullySubscribed",
"clickToManageSubscription"
]
}