diff --git a/lib/app.dart b/lib/app.dart index d62b45da..217de80a 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/foundation.dart' as foundation; import 'package:gitjournal/analytics.dart'; +import 'package:gitjournal/iap.dart'; import 'package:gitjournal/screens/filesystem_screen.dart'; import 'package:gitjournal/screens/folder_listing.dart'; import 'package:gitjournal/screens/tag_listing.dart'; @@ -96,6 +97,8 @@ class JournalApp extends StatefulWidget { ), ); + InAppPurchases.confirmProPurchase(); + runApp(EasyLocalization( child: app, supportedLocales: [ diff --git a/lib/iap.dart b/lib/iap.dart index 3ee5e328..cbd642a6 100644 --- a/lib/iap.dart +++ b/lib/iap.dart @@ -7,17 +7,15 @@ import 'package:in_app_purchase/in_app_purchase.dart'; import 'package:gitjournal/settings.dart'; class InAppPurchases { - static void confirmProPurchase() async { + static Future confirmProPurchase() async { + Log.i("Checking if ProMode should be enabled"); + var currentDt = DateTime.now().toUtc().toIso8601String(); var exp = Settings.instance.proExpirationDate; if (exp != null && exp.isNotEmpty && exp.compareTo(currentDt) > 0) { Log.i("Not checking PurchaseInfo as exp = $exp and cur = $currentDt"); return; } - if (exp == "-") { - Log.d("Ignoring IAP pro check - already checked"); - return; - } if (JournalApp.isInDebugMode) { Log.d("Ignoring IAP pro check - debug mode"); @@ -26,15 +24,16 @@ class InAppPurchases { var sub = await _subscriptionStatus(); var isPro = sub == null ? false : sub.isPro; - Log.i("IsPro $isPro"); + var expiryDate = sub == null ? "" : sub.expiryDate.toIso8601String(); + Log.i(sub.toString()); if (Settings.instance.proMode != isPro) { Log.i("Pro mode changed to $isPro"); Settings.instance.proMode = isPro; + Settings.instance.proExpirationDate = expiryDate; Settings.instance.save(); } else { - Settings.instance.proExpirationDate = - sub != null ? sub.expiryDate.toIso8601String() : "-"; + Settings.instance.proExpirationDate = expiryDate; Settings.instance.save(); } } @@ -48,6 +47,7 @@ class InAppPurchases { } else if (Platform.isAndroid) { var response = await iapConn.queryPastPurchases(); if (response.pastPurchases.isEmpty) { + Log.i("No Past Purchases Found"); return null; } @@ -83,4 +83,8 @@ class SubscriptionStatus { final DateTime expiryDate; SubscriptionStatus(this.isPro, this.expiryDate); + + @override + String toString() => + "SubscriptionStatus{isPro: $isPro, expiryDate: $expiryDate}"; } diff --git a/lib/screens/home_screen.dart b/lib/screens/home_screen.dart index f52eda14..c70078f3 100644 --- a/lib/screens/home_screen.dart +++ b/lib/screens/home_screen.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:gitjournal/core/flattened_notes_folder.dart'; import 'package:gitjournal/core/notes_folder.dart'; -import 'package:gitjournal/iap.dart'; import 'package:provider/provider.dart'; import 'package:intl/date_symbol_data_local.dart'; @@ -22,8 +21,6 @@ class _HomeScreenState extends State { super.initState(); initializeDateFormatting(); - - InAppPurchases.confirmProPurchase(); Future.delayed(Duration.zero, _initFolder); } diff --git a/lib/screens/purchase_screen.dart b/lib/screens/purchase_screen.dart index 3fe6b0ef..d776bba2 100644 --- a/lib/screens/purchase_screen.dart +++ b/lib/screens/purchase_screen.dart @@ -7,6 +7,7 @@ import 'package:flutter/services.dart'; import 'package:gitjournal/analytics.dart'; import 'package:gitjournal/.env.dart'; +import 'package:gitjournal/iap.dart'; import 'package:gitjournal/settings.dart'; import 'package:purchases_flutter/purchases_flutter.dart'; @@ -28,6 +29,11 @@ class _PurchaseScreenState extends State { } Future initPlatformState() async { + await InAppPurchases.confirmProPurchase(); + if (Settings.instance.proMode) { + Navigator.of(context).pop(); + } + await Purchases.setup( environment['revenueCat'], appUserId: Settings.instance.pseudoId, diff --git a/lib/settings.dart b/lib/settings.dart index b9536459..32a47af6 100644 --- a/lib/settings.dart +++ b/lib/settings.dart @@ -220,6 +220,7 @@ class Settings { "folderViewHeaderType": folderViewHeaderType, "version": version.toString(), "proMode": proMode.toString(), + 'proExpirationDate': proExpirationDate, 'pseudoId': pseudoId, 'markdownDefaultView': markdownDefaultView.toInternalString(), 'homeScreen': homeScreen.toInternalString(),