merge conflicts

pull/795/head
ggurdin 2 years ago
commit 3f44ced2c6

@ -3951,5 +3951,7 @@
},
"freeTrialDesc": "New users recieve a one week free trial of Pangea Chat",
"activateTrial": "Activate Trial",
"inNoSpaces": "You are not a member of any classes or exchanges"
"inNoSpaces": "You are not a member of any classes or exchanges",
"successfullySubscribed": "You have successfully subscribed!",
"clickToManageSubscription": "Click here to manage your subscription."
}

@ -1,19 +1,9 @@
import 'dart:async';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
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';
import 'package:fluffychat/pages/chat_list/chat_list_view.dart';
@ -24,10 +14,23 @@ 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';
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';
@ -35,9 +38,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,
@ -445,6 +445,7 @@ class ChatListController extends State<ChatList>
//#Pangea
StreamSubscription? classStream;
StreamSubscription? _invitedSpaceSubscription;
StreamSubscription? _subscriptionStatusStream;
//Pangea#
@override
@ -502,6 +503,14 @@ class ChatListController extends State<ChatList>
}
}
});
_subscriptionStatusStream = pangeaController
.subscriptionController.subscriptionStream.stream
.listen((event) {
if (mounted) {
showSubscribedSnackbar(context);
}
});
//Pangea#
super.initState();
@ -515,6 +524,7 @@ class ChatListController extends State<ChatList>
//#Pangea
classStream?.cancel();
_invitedSpaceSubscription?.cancel();
_subscriptionStatusStream?.cancel();
//Pangea#
scrollController.removeListener(_onScroll);
super.dispose();

@ -1,7 +1,6 @@
import 'dart:async';
import 'dart:convert';
// Package imports:
import 'package:adaptive_dialog/adaptive_dialog.dart';
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pangea/controllers/base_controller.dart';
@ -15,7 +14,6 @@ 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';
// Project imports:
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
@ -29,6 +27,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;
@ -67,7 +66,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();

@ -1,14 +1,18 @@
import 'dart:async';
// Project imports:
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pangea/config/environment.dart';
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';
// Project 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 {
@ -23,6 +27,7 @@ class SubscriptionManagementController extends State<SubscriptionManagement> {
final PangeaController pangeaController = MatrixState.pangeaController;
SubscriptionDetails? selectedSubscription;
late StreamSubscription _settingsSubscription;
StreamSubscription? _subscriptionStatusStream;
@override
void initState() {
@ -39,6 +44,7 @@ class SubscriptionManagementController extends State<SubscriptionManagement> {
void dispose() {
super.dispose();
_settingsSubscription.cancel();
_subscriptionStatusStream?.cancel();
}
bool get currentSubscriptionAvailable =>
@ -119,6 +125,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);
}
}

@ -4,6 +4,7 @@ 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 {
@ -75,7 +76,11 @@ class SubscriptionCard extends StatelessWidget {
OutlinedButton(
onPressed: () {
pangeaController.subscriptionController
.submitSubscriptionChange(subscription, context);
.submitSubscriptionChange(
subscription,
context,
);
Navigator.of(context).pop();
},
child: Text(L10n.of(context)!.subscribe),
),

@ -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,
),
);
}

@ -759,7 +759,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"bn": [
@ -1527,7 +1529,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"bo": [
@ -2295,7 +2299,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"ca": [
@ -3058,7 +3064,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"cs": [
@ -3821,7 +3829,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"de": [
@ -4584,7 +4594,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"el": [
@ -5352,7 +5364,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"eo": [
@ -6115,7 +6129,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"es": [
@ -6142,7 +6158,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"et": [
@ -6905,7 +6923,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"eu": [
@ -7668,7 +7688,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"fa": [
@ -8431,7 +8453,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"fi": [
@ -9194,7 +9218,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"fr": [
@ -9957,7 +9983,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"ga": [
@ -10720,7 +10748,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"gl": [
@ -11483,7 +11513,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"he": [
@ -12246,7 +12278,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"hi": [
@ -13014,7 +13048,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"hr": [
@ -13777,7 +13813,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"hu": [
@ -14540,7 +14578,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"id": [
@ -15303,7 +15343,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"ie": [
@ -16068,7 +16110,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"it": [
@ -16831,7 +16875,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"ja": [
@ -17594,7 +17640,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"ko": [
@ -18357,7 +18405,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"lt": [
@ -19120,7 +19170,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"lv": [
@ -19888,7 +19940,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"nb": [
@ -20651,7 +20705,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"nl": [
@ -21414,7 +21470,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"pl": [
@ -22177,7 +22235,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"pt": [
@ -22945,7 +23005,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"pt_BR": [
@ -23708,7 +23770,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"pt_PT": [
@ -24471,7 +24535,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"ro": [
@ -25234,7 +25300,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"ru": [
@ -25997,7 +26065,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"sk": [
@ -26761,7 +26831,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"sl": [
@ -27527,7 +27599,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"sr": [
@ -28290,7 +28364,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"sv": [
@ -29053,7 +29129,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"ta": [
@ -29821,7 +29899,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"th": [
@ -30589,7 +30669,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"tr": [
@ -31352,7 +31434,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"uk": [
@ -32115,7 +32199,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"vi": [
@ -32881,7 +32967,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"zh": [
@ -33644,7 +33732,9 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
],
"zh_Hant": [
@ -34407,6 +34497,8 @@
"trialExpiration",
"freeTrialDesc",
"activateTrial",
"inNoSpaces"
"inNoSpaces",
"successfullySubscribed",
"clickToManageSubscription"
]
}

Loading…
Cancel
Save