Split Settings into AppSettings and Settings

This way I can eventually change Settings into RepoSettings without
breaking anything.
This commit is contained in:
Vishesh Handa
2020-09-25 00:33:28 +02:00
parent f30c52f595
commit fe08834259
18 changed files with 263 additions and 165 deletions

View File

@ -17,6 +17,7 @@ import 'package:quick_actions/quick_actions.dart';
import 'package:receive_sharing_intent/receive_sharing_intent.dart'; import 'package:receive_sharing_intent/receive_sharing_intent.dart';
import 'package:gitjournal/analytics.dart'; import 'package:gitjournal/analytics.dart';
import 'package:gitjournal/app_settings.dart';
import 'package:gitjournal/appstate.dart'; import 'package:gitjournal/appstate.dart';
import 'package:gitjournal/core/md_yaml_doc_codec.dart'; import 'package:gitjournal/core/md_yaml_doc_codec.dart';
import 'package:gitjournal/iap.dart'; import 'package:gitjournal/iap.dart';
@ -45,23 +46,25 @@ class JournalApp extends StatefulWidget {
var appState = AppState(); var appState = AppState();
var settings = Settings.instance; var settings = Settings.instance;
var appSettings = AppSettings.instance;
Log.i("AppSetting ${appSettings.toMap()}");
Log.i("Setting ${settings.toLoggableMap()}"); Log.i("Setting ${settings.toLoggableMap()}");
if (settings.collectUsageStatistics) { if (appSettings.collectUsageStatistics) {
_enableAnalyticsIfPossible(settings); _enableAnalyticsIfPossible(settings);
} }
if (settings.gitBaseDirectory.isEmpty) { if (appSettings.gitBaseDirectory.isEmpty) {
var dir = await getApplicationDocumentsDirectory(); var dir = await getApplicationDocumentsDirectory();
settings.gitBaseDirectory = dir.path; appSettings.gitBaseDirectory = dir.path;
settings.save(); appSettings.save();
} }
if (!Directory(settings.gitBaseDirectory).existsSync()) { if (!Directory(appSettings.gitBaseDirectory).existsSync()) {
Log.w("Applications Documents Directory no longer exists"); Log.w("Applications Documents Directory no longer exists");
var dir = await getApplicationDocumentsDirectory(); var dir = await getApplicationDocumentsDirectory();
settings.gitBaseDirectory = dir.path; appSettings.gitBaseDirectory = dir.path;
settings.save(); appSettings.save();
Log.i("New Documents Directory Path ${dir.path}"); Log.i("New Documents Directory Path ${dir.path}");
} }
@ -69,7 +72,7 @@ class JournalApp extends StatefulWidget {
// FIXME: What about exceptions! // FIXME: What about exceptions!
settings.localGitRepoFolderName = "journal_local"; settings.localGitRepoFolderName = "journal_local";
var repoPath = p.join( var repoPath = p.join(
settings.gitBaseDirectory, appSettings.gitBaseDirectory,
settings.localGitRepoFolderName, settings.localGitRepoFolderName,
); );
await GitRepository.init(repoPath); await GitRepository.init(repoPath);
@ -78,11 +81,15 @@ class JournalApp extends StatefulWidget {
settings.save(); settings.save();
} }
var app = ChangeNotifierProvider.value( Widget app = ChangeNotifierProvider.value(
value: settings, value: settings,
child: ChangeNotifierProvider( child: ChangeNotifierProvider(
create: (_) { create: (_) {
return StateContainer(appState, settings); return StateContainer(
appState: appState,
settings: settings,
gitBaseDirectory: appSettings.gitBaseDirectory,
);
}, },
child: ChangeNotifierProvider( child: ChangeNotifierProvider(
child: JournalApp(appState), child: JournalApp(appState),
@ -94,6 +101,11 @@ class JournalApp extends StatefulWidget {
), ),
); );
app = ChangeNotifierProvider.value(
value: appSettings,
child: app,
);
InAppPurchases.confirmProPurchaseBoot(); InAppPurchases.confirmProPurchaseBoot();
runApp(EasyLocalization( runApp(EasyLocalization(
@ -279,9 +291,10 @@ class _JournalAppState extends State<JournalApp> {
MaterialApp buildApp(BuildContext context, ThemeData themeData) { MaterialApp buildApp(BuildContext context, ThemeData themeData) {
var stateContainer = Provider.of<StateContainer>(context); var stateContainer = Provider.of<StateContainer>(context);
var settings = Provider.of<Settings>(context); var settings = Provider.of<Settings>(context);
var appSettings = Provider.of<AppSettings>(context);
var initialRoute = '/'; var initialRoute = '/';
if (!settings.onBoardingCompleted) { if (!appSettings.onBoardingCompleted) {
initialRoute = '/onBoarding'; initialRoute = '/onBoarding';
} }
if (settings.homeScreen == SettingsHomeScreen.AllFolders) { if (settings.homeScreen == SettingsHomeScreen.AllFolders) {

142
lib/app_settings.dart Normal file
View File

@ -0,0 +1,142 @@
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:uuid/uuid.dart';
import 'package:gitjournal/features.dart';
class AppSettings extends ChangeNotifier {
// singleton
static final AppSettings _singleton = AppSettings._internal();
factory AppSettings() => _singleton;
AppSettings._internal();
static AppSettings get instance => _singleton;
//
// Properties
//
var onBoardingCompleted = false;
var collectUsageStatistics = true;
var collectCrashReports = true;
int version = 0;
var proMode = Features.alwaysPro;
var proExpirationDate = "";
String _pseudoId;
String get pseudoId => _pseudoId;
var debugLogLevel = 'v';
var experimentalBacklinks = true;
var experimentalFs = false;
var experimentalMarkdownToolbar = false;
var experimentalGraphView = false;
var gitBaseDirectory = "";
void load(SharedPreferences pref) {
onBoardingCompleted = pref.getBool("onBoardingCompleted") ?? false;
collectUsageStatistics =
pref.getBool("collectUsageStatistics") ?? collectUsageStatistics;
collectCrashReports =
pref.getBool("collectCrashReports") ?? collectCrashReports;
version = pref.getInt("appSettingsVersion") ?? version;
proMode = pref.getBool("proMode") ?? proMode;
proExpirationDate =
pref.getString("proExpirationDate") ?? proExpirationDate;
_pseudoId = pref.getString("pseudoId");
if (_pseudoId == null) {
_pseudoId = Uuid().v4();
pref.setString("pseudoId", _pseudoId);
}
debugLogLevel = pref.getString("debugLogLevel") ?? debugLogLevel;
experimentalBacklinks =
pref.getBool("experimentalBacklinks") ?? experimentalBacklinks;
experimentalFs = pref.getBool("experimentalFs") ?? experimentalFs;
experimentalMarkdownToolbar = pref.getBool("experimentalMarkdownToolbar") ??
experimentalMarkdownToolbar;
experimentalGraphView =
pref.getBool("experimentalGraphView") ?? experimentalGraphView;
gitBaseDirectory = pref.getString("gitBaseDirectory") ?? "";
}
Future<void> save() async {
var pref = await SharedPreferences.getInstance();
var defaultSet = AppSettings._internal();
pref.setBool("onBoardingCompleted", onBoardingCompleted);
_setBool(pref, "collectUsageStatistics", collectUsageStatistics,
defaultSet.collectUsageStatistics);
_setBool(pref, "collectCrashReports", collectCrashReports,
defaultSet.collectCrashReports);
_setString(pref, "proExpirationDate", proExpirationDate,
defaultSet.proExpirationDate);
_setBool(pref, "proMode", proMode, defaultSet.proMode);
_setString(pref, "debugLogLevel", debugLogLevel, defaultSet.debugLogLevel);
_setBool(pref, "experimentalBacklinks", experimentalBacklinks,
defaultSet.experimentalBacklinks);
_setBool(pref, "experimentalFs", experimentalFs, defaultSet.experimentalFs);
_setBool(pref, "experimentalMarkdownToolbar", experimentalMarkdownToolbar,
defaultSet.experimentalMarkdownToolbar);
_setBool(pref, "experimentalGraphView", experimentalGraphView,
defaultSet.experimentalGraphView);
pref.setInt("appSettingsVersion", version);
pref.setString("gitBaseDirectory", gitBaseDirectory);
notifyListeners();
}
Map<String, String> toMap() {
return {
"onBoardingCompleted": onBoardingCompleted.toString(),
"collectUsageStatistics": collectUsageStatistics.toString(),
"collectCrashReports": collectCrashReports.toString(),
"version": version.toString(),
"proMode": proMode.toString(),
'proExpirationDate': proExpirationDate,
'pseudoId': pseudoId,
'debugLogLevel': debugLogLevel,
'experimentalBacklinks': experimentalBacklinks.toString(),
'experimentalFs': experimentalFs.toString(),
'experimentalMarkdownToolbar': experimentalMarkdownToolbar.toString(),
'experimentalGraphView': experimentalGraphView.toString(),
'gitBaseDirectory': gitBaseDirectory.toString(),
};
}
Future<void> _setString(
SharedPreferences pref,
String key,
String value,
String defaultValue,
) async {
if (value == defaultValue) {
await pref.remove(key);
} else {
await pref.setString(key, value);
}
}
Future<void> _setBool(
SharedPreferences pref,
String key,
bool value,
bool defaultValue,
) async {
if (value == defaultValue) {
await pref.remove(key);
} else {
await pref.setBool(key, value);
}
}
}

View File

@ -9,7 +9,7 @@ import 'package:sentry/sentry.dart';
import 'package:gitjournal/.env.dart'; import 'package:gitjournal/.env.dart';
import 'package:gitjournal/app.dart'; import 'package:gitjournal/app.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/app_settings.dart';
import 'package:gitjournal/utils/logger.dart'; import 'package:gitjournal/utils/logger.dart';
SentryClient _sentryClient; SentryClient _sentryClient;
@ -64,7 +64,7 @@ Future<Event> get _environmentEvent async {
), ),
), ),
userContext: User( userContext: User(
id: Settings.instance.pseudoId, id: AppSettings.instance.pseudoId,
), ),
); );
return environment; return environment;
@ -83,7 +83,7 @@ void flutterOnErrorHandler(FlutterErrorDetails details) {
bool get reportCrashes => _reportCrashes ??= _initReportCrashes(); bool get reportCrashes => _reportCrashes ??= _initReportCrashes();
bool _reportCrashes; bool _reportCrashes;
bool _initReportCrashes() { bool _initReportCrashes() {
return !JournalApp.isInDebugMode && Settings.instance.collectCrashReports; return !JournalApp.isInDebugMode && AppSettings.instance.collectCrashReports;
} }
Future<void> reportError(Object error, StackTrace stackTrace) async { Future<void> reportError(Object error, StackTrace stackTrace) async {

View File

@ -7,9 +7,9 @@ import 'package:in_app_purchase/store_kit_wrappers.dart';
import 'package:meta/meta.dart'; import 'package:meta/meta.dart';
import 'package:gitjournal/app.dart'; import 'package:gitjournal/app.dart';
import 'package:gitjournal/app_settings.dart';
import 'package:gitjournal/error_reporting.dart'; import 'package:gitjournal/error_reporting.dart';
import 'package:gitjournal/features.dart'; import 'package:gitjournal/features.dart';
import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils/logger.dart'; import 'package:gitjournal/utils/logger.dart';
class InAppPurchases { class InAppPurchases {
@ -20,13 +20,13 @@ class InAppPurchases {
return; return;
} }
if (Settings.instance.proMode == false) { if (AppSettings.instance.proMode == false) {
Log.i("confirmProPurchaseBoot: Pro Mode is false"); Log.i("confirmProPurchaseBoot: Pro Mode is false");
return; return;
} }
var currentDt = DateTime.now().toUtc().toIso8601String(); var currentDt = DateTime.now().toUtc().toIso8601String();
var exp = Settings.instance.proExpirationDate; var exp = AppSettings.instance.proExpirationDate;
Log.i("Checking if ProMode should be enabled. Exp: $exp"); Log.i("Checking if ProMode should be enabled. Exp: $exp");
if (exp != null && exp.isNotEmpty && exp.compareTo(currentDt) > 0) { if (exp != null && exp.isNotEmpty && exp.compareTo(currentDt) > 0) {
@ -55,9 +55,9 @@ class InAppPurchases {
Log.e("Failed to get subscription status", ex: e, stacktrace: stackTrace); Log.e("Failed to get subscription status", ex: e, stacktrace: stackTrace);
Log.i("Disabling Pro mode as it has probably expired"); Log.i("Disabling Pro mode as it has probably expired");
Settings.instance.proMode = false; AppSettings.instance.proMode = false;
Settings.instance.proExpirationDate = ""; AppSettings.instance.proExpirationDate = "";
Settings.instance.save(); AppSettings.instance.save();
return; return;
} }
@ -66,14 +66,14 @@ class InAppPurchases {
var expiryDate = sub.expiryDate.toIso8601String(); var expiryDate = sub.expiryDate.toIso8601String();
Log.i(sub.toString()); Log.i(sub.toString());
if (Settings.instance.proMode != isPro) { if (AppSettings.instance.proMode != isPro) {
Log.i("Pro mode changed to $isPro"); Log.i("Pro mode changed to $isPro");
Settings.instance.proMode = isPro; AppSettings.instance.proMode = isPro;
Settings.instance.proExpirationDate = expiryDate; AppSettings.instance.proExpirationDate = expiryDate;
Settings.instance.save(); AppSettings.instance.save();
} else { } else {
Settings.instance.proExpirationDate = expiryDate; AppSettings.instance.proExpirationDate = expiryDate;
Settings.instance.save(); AppSettings.instance.save();
} }
} }
@ -139,7 +139,7 @@ Future<DateTime> getExpiryDate(
var body = { var body = {
'receipt': receipt, 'receipt': receipt,
"sku": sku, "sku": sku,
'pseudoId': Settings.instance.pseudoId, 'pseudoId': AppSettings.instance.pseudoId,
'is_purchase': isPurchase, 'is_purchase': isPurchase,
}; };
Log.i("getExpiryDate ${json.encode(body)}"); Log.i("getExpiryDate ${json.encode(body)}");

View File

@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:gitjournal/app.dart'; import 'package:gitjournal/app.dart';
import 'package:gitjournal/app_settings.dart';
import 'package:gitjournal/error_reporting.dart'; import 'package:gitjournal/error_reporting.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/settings.dart';
@ -14,6 +15,7 @@ void main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
var pref = await SharedPreferences.getInstance(); var pref = await SharedPreferences.getInstance();
AppSettings.instance.load(pref);
Settings.instance.load(pref); Settings.instance.load(pref);
JournalApp.isInDebugMode = foundation.kDebugMode; JournalApp.isInDebugMode = foundation.kDebugMode;

View File

@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/app_settings.dart';
import 'package:gitjournal/utils/logger.dart'; import 'package:gitjournal/utils/logger.dart';
class DebugScreen extends StatefulWidget { class DebugScreen extends StatefulWidget {
@ -79,8 +79,8 @@ class _DebugScreenState extends State<DebugScreen> {
} }
bool _shouldDisplay(LogMessage msg) { bool _shouldDisplay(LogMessage msg) {
var settings = Provider.of<Settings>(context); var appSettings = Provider.of<AppSettings>(context);
var filterLevel = settings.debugLogLevel; var filterLevel = appSettings.debugLogLevel;
if (filterLevel == null || filterLevel.isEmpty) { if (filterLevel == null || filterLevel.isEmpty) {
return true; return true;
@ -199,8 +199,8 @@ class _DebugScreenState extends State<DebugScreen> {
} }
void _showFilterSelection() async { void _showFilterSelection() async {
var settings = Provider.of<Settings>(context); var appSettings = Provider.of<AppSettings>(context);
var filterLevel = settings.debugLogLevel; var filterLevel = appSettings.debugLogLevel;
var dialog = AlertDialog( var dialog = AlertDialog(
title: Text(tr('settings.debug.levels.title')), title: Text(tr('settings.debug.levels.title')),
@ -217,8 +217,8 @@ class _DebugScreenState extends State<DebugScreen> {
); );
var l = await showDialog(context: context, builder: (context) => dialog); var l = await showDialog(context: context, builder: (context) => dialog);
if (l != null) { if (l != null) {
settings.debugLogLevel = l; appSettings.debugLogLevel = l;
settings.save(); appSettings.save();
} }
} }
} }

View File

@ -6,7 +6,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:function_types/function_types.dart'; import 'package:function_types/function_types.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/app_settings.dart';
class OnBoardingScreen extends StatefulWidget { class OnBoardingScreen extends StatefulWidget {
OnBoardingScreen(); OnBoardingScreen();
@ -111,9 +111,9 @@ class OnBoardingScreenState extends State<OnBoardingScreen> {
} }
void _finish() { void _finish() {
var settings = Provider.of<Settings>(context); var appSettings = Provider.of<AppSettings>(context);
settings.onBoardingCompleted = true; appSettings.onBoardingCompleted = true;
settings.save(); appSettings.save();
Navigator.pop(context); Navigator.pop(context);
Navigator.pushNamed(context, "/"); Navigator.pushNamed(context, "/");

View File

@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/app_settings.dart';
class ExperimentalSettingsScreen extends StatefulWidget { class ExperimentalSettingsScreen extends StatefulWidget {
@override @override
@ -15,7 +15,7 @@ class _ExperimentalSettingsScreenState
extends State<ExperimentalSettingsScreen> { extends State<ExperimentalSettingsScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var settings = Provider.of<Settings>(context); var appSettings = Provider.of<AppSettings>(context);
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
@ -32,37 +32,37 @@ class _ExperimentalSettingsScreenState
children: <Widget>[ children: <Widget>[
SwitchListTile( SwitchListTile(
title: Text(tr('settings.experimental.backlinks')), title: Text(tr('settings.experimental.backlinks')),
value: settings.experimentalBacklinks, value: appSettings.experimentalBacklinks,
onChanged: (bool newVal) { onChanged: (bool newVal) {
settings.experimentalBacklinks = newVal; appSettings.experimentalBacklinks = newVal;
settings.save(); appSettings.save();
setState(() {}); setState(() {});
}, },
), ),
SwitchListTile( SwitchListTile(
title: Text(tr('settings.experimental.fs')), title: Text(tr('settings.experimental.fs')),
value: settings.experimentalFs, value: appSettings.experimentalFs,
onChanged: (bool newVal) { onChanged: (bool newVal) {
settings.experimentalFs = newVal; appSettings.experimentalFs = newVal;
settings.save(); appSettings.save();
setState(() {}); setState(() {});
}, },
), ),
SwitchListTile( SwitchListTile(
title: Text(tr('settings.experimental.graphView')), title: Text(tr('settings.experimental.graphView')),
value: settings.experimentalGraphView, value: appSettings.experimentalGraphView,
onChanged: (bool newVal) { onChanged: (bool newVal) {
settings.experimentalGraphView = newVal; appSettings.experimentalGraphView = newVal;
settings.save(); appSettings.save();
setState(() {}); setState(() {});
}, },
), ),
SwitchListTile( SwitchListTile(
title: Text(tr('settings.experimental.markdownToolbar')), title: Text(tr('settings.experimental.markdownToolbar')),
value: settings.experimentalFs, value: appSettings.experimentalFs,
onChanged: (bool newVal) { onChanged: (bool newVal) {
settings.experimentalFs = newVal; appSettings.experimentalFs = newVal;
settings.save(); appSettings.save();
setState(() {}); setState(() {});
}, },
), ),

View File

@ -8,6 +8,7 @@ import 'package:git_bindings/git_bindings.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:gitjournal/app_settings.dart';
import 'package:gitjournal/screens/settings_widgets.dart'; import 'package:gitjournal/screens/settings_widgets.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/settings.dart';
import 'package:gitjournal/setup/screens.dart'; import 'package:gitjournal/setup/screens.dart';
@ -132,8 +133,8 @@ class _GitRemoteSettingsScreenState extends State<GitRemoteSettingsScreen> {
} }
var stateContainer = Provider.of<StateContainer>(context); var stateContainer = Provider.of<StateContainer>(context);
final settings = Provider.of<Settings>(context); var appSettings = Provider.of<AppSettings>(context);
var gitDir = settings.gitBaseDirectory; var gitDir = appSettings.gitBaseDirectory;
// Figure out the next available folder // Figure out the next available folder
String repoFolderName = "journal_"; String repoFolderName = "journal_";

View File

@ -5,6 +5,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import 'package:gitjournal/app_settings.dart';
import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/core/notes_folder_fs.dart';
import 'package:gitjournal/features.dart'; import 'package:gitjournal/features.dart';
import 'package:gitjournal/screens/debug_screen.dart'; import 'package:gitjournal/screens/debug_screen.dart';
@ -55,6 +56,7 @@ class SettingsListState extends State<SettingsList> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var settings = Provider.of<Settings>(context); var settings = Provider.of<Settings>(context);
var appSettings = Provider.of<AppSettings>(context);
var remoteGitConfigured = settings.remoteGitRepoConfigured; var remoteGitConfigured = settings.remoteGitRepoConfigured;
var saveGitAuthor = (String gitAuthor) { var saveGitAuthor = (String gitAuthor) {
@ -289,19 +291,19 @@ class SettingsListState extends State<SettingsList> {
const SizedBox(height: 16.0), const SizedBox(height: 16.0),
SwitchListTile( SwitchListTile(
title: Text(tr('settings.usageStats')), title: Text(tr('settings.usageStats')),
value: settings.collectUsageStatistics, value: appSettings.collectUsageStatistics,
onChanged: (bool val) { onChanged: (bool val) {
settings.collectUsageStatistics = val; appSettings.collectUsageStatistics = val;
settings.save(); appSettings.save();
setState(() {}); setState(() {});
}, },
), ),
SwitchListTile( SwitchListTile(
title: Text(tr('settings.crashReports')), title: Text(tr('settings.crashReports')),
value: settings.collectCrashReports, value: appSettings.collectCrashReports,
onChanged: (bool val) { onChanged: (bool val) {
settings.collectCrashReports = val; appSettings.collectCrashReports = val;
settings.save(); appSettings.save();
setState(() {}); setState(() {});
}, },
), ),

View File

@ -3,10 +3,8 @@ import 'package:flutter/material.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:uuid/uuid.dart';
import 'package:gitjournal/core/sorting_mode.dart'; import 'package:gitjournal/core/sorting_mode.dart';
import 'package:gitjournal/features.dart';
import 'package:gitjournal/folder_views/common.dart'; import 'package:gitjournal/folder_views/common.dart';
import 'package:gitjournal/screens/note_editor.dart'; import 'package:gitjournal/screens/note_editor.dart';
@ -18,15 +16,10 @@ class Settings extends ChangeNotifier {
static Settings get instance => _singleton; static Settings get instance => _singleton;
// Properties // Properties
bool onBoardingCompleted = false;
String gitAuthor = "GitJournal"; String gitAuthor = "GitJournal";
String gitAuthorEmail = "app@gitjournal.io"; String gitAuthorEmail = "app@gitjournal.io";
NoteFileNameFormat noteFileNameFormat = NoteFileNameFormat.Default; NoteFileNameFormat noteFileNameFormat = NoteFileNameFormat.Default;
bool collectUsageStatistics = true;
bool collectCrashReports = true;
String yamlModifiedKey = "modified"; String yamlModifiedKey = "modified";
String yamlCreatedKey = "created"; String yamlCreatedKey = "created";
String yamlTagsKey = "tags"; String yamlTagsKey = "tags";
@ -46,12 +39,6 @@ class Settings extends ChangeNotifier {
String folderViewHeaderType = "TitleGenerated"; String folderViewHeaderType = "TitleGenerated";
int version = 0; int version = 0;
bool proMode = Features.alwaysPro;
String proExpirationDate = "";
String _pseudoId;
String get pseudoId => _pseudoId;
SettingsHomeScreen homeScreen = SettingsHomeScreen.Default; SettingsHomeScreen homeScreen = SettingsHomeScreen.Default;
SettingsMarkdownDefaultView markdownDefaultView = SettingsMarkdownDefaultView markdownDefaultView =
@ -60,12 +47,6 @@ class Settings extends ChangeNotifier {
SettingsMarkdownDefaultView.Edit; SettingsMarkdownDefaultView.Edit;
String imageLocationSpec = "."; // . means the same folder String imageLocationSpec = "."; // . means the same folder
String debugLogLevel = 'v';
bool experimentalBacklinks = true;
bool experimentalFs = false;
bool experimentalMarkdownToolbar = false;
bool experimentalGraphView = false;
bool zenMode = false; bool zenMode = false;
bool saveTitleInH1 = true; bool saveTitleInH1 = true;
@ -82,22 +63,13 @@ class Settings extends ChangeNotifier {
String remoteGitRepoFolderName = ""; String remoteGitRepoFolderName = "";
bool remoteGitRepoConfigured = false; bool remoteGitRepoConfigured = false;
String gitBaseDirectory = "";
void load(SharedPreferences pref) { void load(SharedPreferences pref) {
onBoardingCompleted = pref.getBool("onBoardingCompleted") ?? false;
gitAuthor = pref.getString("gitAuthor") ?? gitAuthor; gitAuthor = pref.getString("gitAuthor") ?? gitAuthor;
gitAuthorEmail = pref.getString("gitAuthorEmail") ?? gitAuthorEmail; gitAuthorEmail = pref.getString("gitAuthorEmail") ?? gitAuthorEmail;
noteFileNameFormat = NoteFileNameFormat.fromInternalString( noteFileNameFormat = NoteFileNameFormat.fromInternalString(
pref.getString("noteFileNameFormat")); pref.getString("noteFileNameFormat"));
collectUsageStatistics =
pref.getBool("collectUsageStatistics") ?? collectUsageStatistics;
collectCrashReports =
pref.getBool("collectCrashReports") ?? collectCrashReports;
yamlModifiedKey = pref.getString("yamlModifiedKey") ?? yamlModifiedKey; yamlModifiedKey = pref.getString("yamlModifiedKey") ?? yamlModifiedKey;
yamlCreatedKey = pref.getString("yamlCreatedKey") ?? yamlCreatedKey; yamlCreatedKey = pref.getString("yamlCreatedKey") ?? yamlCreatedKey;
yamlTagsKey = pref.getString("yamlTagsKey") ?? yamlTagsKey; yamlTagsKey = pref.getString("yamlTagsKey") ?? yamlTagsKey;
@ -137,16 +109,7 @@ class Settings extends ChangeNotifier {
pref.getString("folderViewHeaderType") ?? folderViewHeaderType; pref.getString("folderViewHeaderType") ?? folderViewHeaderType;
version = pref.getInt("settingsVersion") ?? version; version = pref.getInt("settingsVersion") ?? version;
proMode = pref.getBool("proMode") ?? proMode;
emojiParser = pref.getBool("emojiParser") ?? emojiParser; emojiParser = pref.getBool("emojiParser") ?? emojiParser;
proExpirationDate =
pref.getString("proExpirationDate") ?? proExpirationDate;
_pseudoId = pref.getString("pseudoId");
if (_pseudoId == null) {
_pseudoId = Uuid().v4();
pref.setString("pseudoId", _pseudoId);
}
homeScreen = homeScreen =
SettingsHomeScreen.fromInternalString(pref.getString("homeScreen")); SettingsHomeScreen.fromInternalString(pref.getString("homeScreen"));
@ -154,13 +117,6 @@ class Settings extends ChangeNotifier {
imageLocationSpec = imageLocationSpec =
pref.getString("imageLocationSpec") ?? imageLocationSpec; pref.getString("imageLocationSpec") ?? imageLocationSpec;
debugLogLevel = pref.getString("debugLogLevel") ?? debugLogLevel;
experimentalBacklinks =
pref.getBool("experimentalBacklinks") ?? experimentalBacklinks;
experimentalFs = pref.getBool("experimentalFs") ?? experimentalFs;
experimentalMarkdownToolbar = pref.getBool("experimentalMarkdownToolbar") ??
experimentalMarkdownToolbar;
zenMode = pref.getBool("zenMode") ?? zenMode; zenMode = pref.getBool("zenMode") ?? zenMode;
saveTitleInH1 = pref.getBool("saveTitleInH1") ?? saveTitleInH1; saveTitleInH1 = pref.getBool("saveTitleInH1") ?? saveTitleInH1;
swipeToDelete = pref.getBool("swipeToDelete") ?? swipeToDelete; swipeToDelete = pref.getBool("swipeToDelete") ?? swipeToDelete;
@ -173,15 +129,12 @@ class Settings extends ChangeNotifier {
remoteGitRepoConfigured = pref.getBool("remoteGitRepoConfigured") ?? false; remoteGitRepoConfigured = pref.getBool("remoteGitRepoConfigured") ?? false;
localGitRepoFolderName = pref.getString("localGitRepoPath") ?? ""; localGitRepoFolderName = pref.getString("localGitRepoPath") ?? "";
remoteGitRepoFolderName = pref.getString("remoteGitRepoPath") ?? ""; remoteGitRepoFolderName = pref.getString("remoteGitRepoPath") ?? "";
gitBaseDirectory = pref.getString("gitBaseDirectory") ?? "";
} }
Future save() async { Future<void> save() async {
var pref = await SharedPreferences.getInstance(); var pref = await SharedPreferences.getInstance();
var defaultSet = Settings._internal(); var defaultSet = Settings._internal();
await pref.setBool("onBoardingCompleted", onBoardingCompleted);
_setString(pref, "gitAuthor", gitAuthor, defaultSet.gitAuthor); _setString(pref, "gitAuthor", gitAuthor, defaultSet.gitAuthor);
_setString( _setString(
pref, "gitAuthorEmail", gitAuthorEmail, defaultSet.gitAuthorEmail); pref, "gitAuthorEmail", gitAuthorEmail, defaultSet.gitAuthorEmail);
@ -190,10 +143,6 @@ class Settings extends ChangeNotifier {
"noteFileNameFormat", "noteFileNameFormat",
noteFileNameFormat.toInternalString(), noteFileNameFormat.toInternalString(),
defaultSet.noteFileNameFormat.toInternalString()); defaultSet.noteFileNameFormat.toInternalString());
_setBool(pref, "collectUsageStatistics", collectUsageStatistics,
defaultSet.collectUsageStatistics);
_setBool(pref, "collectCrashReports", collectCrashReports,
defaultSet.collectCrashReports);
_setString( _setString(
pref, "yamlModifiedKey", yamlModifiedKey, defaultSet.yamlModifiedKey); pref, "yamlModifiedKey", yamlModifiedKey, defaultSet.yamlModifiedKey);
_setString( _setString(
@ -239,20 +188,11 @@ class Settings extends ChangeNotifier {
pref, "showNoteSummary", showNoteSummary, defaultSet.showNoteSummary); pref, "showNoteSummary", showNoteSummary, defaultSet.showNoteSummary);
_setString(pref, "folderViewHeaderType", folderViewHeaderType, _setString(pref, "folderViewHeaderType", folderViewHeaderType,
defaultSet.folderViewHeaderType); defaultSet.folderViewHeaderType);
_setString(pref, "proExpirationDate", proExpirationDate,
defaultSet.proExpirationDate);
_setBool(pref, "proMode", proMode, defaultSet.proMode);
_setBool(pref, "emojiParser", emojiParser, defaultSet.emojiParser); _setBool(pref, "emojiParser", emojiParser, defaultSet.emojiParser);
_setString(pref, "homeScreen", homeScreen.toInternalString(), _setString(pref, "homeScreen", homeScreen.toInternalString(),
defaultSet.homeScreen.toInternalString()); defaultSet.homeScreen.toInternalString());
_setString(pref, "imageLocationSpec", imageLocationSpec, _setString(pref, "imageLocationSpec", imageLocationSpec,
defaultSet.imageLocationSpec); defaultSet.imageLocationSpec);
_setString(pref, "debugLogLevel", debugLogLevel, defaultSet.debugLogLevel);
_setBool(pref, "experimentalBacklinks", experimentalBacklinks,
defaultSet.experimentalBacklinks);
_setBool(pref, "experimentalFs", experimentalFs, defaultSet.experimentalFs);
_setBool(pref, "experimentalMarkdownToolbar", experimentalMarkdownToolbar,
defaultSet.experimentalMarkdownToolbar);
_setBool(pref, "zenMode", zenMode, defaultSet.zenMode); _setBool(pref, "zenMode", zenMode, defaultSet.zenMode);
_setBool(pref, "saveTitleInH1", saveTitleInH1, defaultSet.saveTitleInH1); _setBool(pref, "saveTitleInH1", saveTitleInH1, defaultSet.saveTitleInH1);
_setBool(pref, "swipeToDelete", swipeToDelete, defaultSet.swipeToDelete); _setBool(pref, "swipeToDelete", swipeToDelete, defaultSet.swipeToDelete);
@ -265,7 +205,6 @@ class Settings extends ChangeNotifier {
pref.setBool("remoteGitRepoConfigured", remoteGitRepoConfigured); pref.setBool("remoteGitRepoConfigured", remoteGitRepoConfigured);
pref.setString("localGitRepoPath", localGitRepoFolderName); pref.setString("localGitRepoPath", localGitRepoFolderName);
pref.setString("remoteGitRepoPath", remoteGitRepoFolderName); pref.setString("remoteGitRepoPath", remoteGitRepoFolderName);
pref.setString("gitBaseDirectory", gitBaseDirectory);
notifyListeners(); notifyListeners();
} }
@ -313,12 +252,9 @@ class Settings extends ChangeNotifier {
Map<String, String> toMap() { Map<String, String> toMap() {
return <String, String>{ return <String, String>{
"onBoardingCompleted": onBoardingCompleted.toString(),
"gitAuthor": gitAuthor, "gitAuthor": gitAuthor,
"gitAuthorEmail": gitAuthorEmail, "gitAuthorEmail": gitAuthorEmail,
"noteFileNameFormat": noteFileNameFormat.toInternalString(), "noteFileNameFormat": noteFileNameFormat.toInternalString(),
"collectUsageStatistics": collectUsageStatistics.toString(),
"collectCrashReports": collectCrashReports.toString(),
"yamlModifiedKey": yamlModifiedKey, "yamlModifiedKey": yamlModifiedKey,
"yamlCreatedKey": yamlCreatedKey, "yamlCreatedKey": yamlCreatedKey,
"yamlTagsKey": yamlTagsKey, "yamlTagsKey": yamlTagsKey,
@ -336,17 +272,10 @@ class Settings extends ChangeNotifier {
"showNoteSummary": showNoteSummary.toString(), "showNoteSummary": showNoteSummary.toString(),
"folderViewHeaderType": folderViewHeaderType, "folderViewHeaderType": folderViewHeaderType,
"version": version.toString(), "version": version.toString(),
"proMode": proMode.toString(),
'proExpirationDate': proExpirationDate,
'pseudoId': pseudoId,
'markdownDefaultView': markdownDefaultView.toInternalString(), 'markdownDefaultView': markdownDefaultView.toInternalString(),
'markdownLastUsedView': markdownLastUsedView.toInternalString(), 'markdownLastUsedView': markdownLastUsedView.toInternalString(),
'homeScreen': homeScreen.toInternalString(), 'homeScreen': homeScreen.toInternalString(),
'imageLocationSpec': imageLocationSpec, 'imageLocationSpec': imageLocationSpec,
'debugLogLevel': debugLogLevel,
'experimentalBacklinks': experimentalBacklinks.toString(),
'experimentalFs': experimentalFs.toString(),
'experimentalMarkdownToolbar': experimentalMarkdownToolbar.toString(),
'zenMode': zenMode.toString(), 'zenMode': zenMode.toString(),
'saveTitleInH1': saveTitleInH1.toString(), 'saveTitleInH1': saveTitleInH1.toString(),
'swipeToDelete': swipeToDelete.toString(), 'swipeToDelete': swipeToDelete.toString(),
@ -356,7 +285,6 @@ class Settings extends ChangeNotifier {
'remoteGitRepoConfigured': remoteGitRepoConfigured.toString(), 'remoteGitRepoConfigured': remoteGitRepoConfigured.toString(),
'localGitRepoFolderName': localGitRepoFolderName.toString(), 'localGitRepoFolderName': localGitRepoFolderName.toString(),
'remoteGitRepoFolderName': remoteGitRepoFolderName.toString(), 'remoteGitRepoFolderName': remoteGitRepoFolderName.toString(),
'gitBaseDirectory': gitBaseDirectory.toString(),
}; };
} }

View File

@ -13,6 +13,7 @@ import 'package:url_launcher/url_launcher.dart';
import 'package:gitjournal/analytics.dart'; import 'package:gitjournal/analytics.dart';
import 'package:gitjournal/apis/githost_factory.dart'; import 'package:gitjournal/apis/githost_factory.dart';
import 'package:gitjournal/app_settings.dart';
import 'package:gitjournal/error_reporting.dart'; import 'package:gitjournal/error_reporting.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/settings.dart';
import 'package:gitjournal/setup/autoconfigure.dart'; import 'package:gitjournal/setup/autoconfigure.dart';
@ -467,8 +468,8 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
gitCloneErrorMessage = ""; gitCloneErrorMessage = "";
}); });
final settings = Provider.of<Settings>(context); final appSettings = Provider.of<AppSettings>(context);
var basePath = settings.gitBaseDirectory; var basePath = appSettings.gitBaseDirectory;
// Just in case it was half cloned because of an error // Just in case it was half cloned because of an error
String repoPath = p.join(basePath, widget.repoFolderName); String repoPath = p.join(basePath, widget.repoFolderName);

View File

@ -23,6 +23,7 @@ import 'package:gitjournal/utils/logger.dart';
class StateContainer with ChangeNotifier { class StateContainer with ChangeNotifier {
final AppState appState; final AppState appState;
final Settings settings; final Settings settings;
final String gitBaseDirectory;
final _opLock = Lock(); final _opLock = Lock();
final _loadLock = Lock(); final _loadLock = Lock();
@ -33,16 +34,18 @@ class StateContainer with ChangeNotifier {
GitNoteRepository _gitRepo; GitNoteRepository _gitRepo;
NotesCache _notesCache; NotesCache _notesCache;
StateContainer(this.appState, this.settings) { StateContainer({
@required this.appState,
@required this.settings,
@required this.gitBaseDirectory,
}) {
assert(settings.localGitRepoConfigured); assert(settings.localGitRepoConfigured);
String repoPath; String repoPath;
if (settings.remoteGitRepoConfigured) { if (settings.remoteGitRepoConfigured) {
repoPath = repoPath = p.join(gitBaseDirectory, settings.remoteGitRepoFolderName);
p.join(settings.gitBaseDirectory, settings.remoteGitRepoFolderName);
} else if (settings.localGitRepoConfigured) { } else if (settings.localGitRepoConfigured) {
repoPath = repoPath = p.join(gitBaseDirectory, settings.localGitRepoFolderName);
p.join(settings.gitBaseDirectory, settings.localGitRepoFolderName);
} }
_gitRepo = GitNoteRepository(gitDirPath: repoPath); _gitRepo = GitNoteRepository(gitDirPath: repoPath);
@ -59,7 +62,7 @@ class StateContainer with ChangeNotifier {
value: settings.remoteGitRepoConfigured.toString(), value: settings.remoteGitRepoConfigured.toString(),
); );
var cachePath = p.join(settings.gitBaseDirectory, "cache.json"); var cachePath = p.join(gitBaseDirectory, "cache.json");
_notesCache = NotesCache( _notesCache = NotesCache(
filePath: cachePath, filePath: cachePath,
notesBasePath: _gitRepo.gitDirPath, notesBasePath: _gitRepo.gitDirPath,
@ -78,8 +81,8 @@ class StateContainer with ChangeNotifier {
} }
void removeExistingRemoteClone() async { void removeExistingRemoteClone() async {
var remoteGitDir = Directory( var remoteGitDir =
p.join(settings.gitBaseDirectory, settings.remoteGitRepoFolderName)); Directory(p.join(gitBaseDirectory, settings.remoteGitRepoFolderName));
var dotGitDir = Directory(p.join(remoteGitDir.path, ".git")); var dotGitDir = Directory(p.join(remoteGitDir.path, ".git"));
bool exists = dotGitDir.existsSync(); bool exists = dotGitDir.existsSync();
@ -357,12 +360,11 @@ class StateContainer with ChangeNotifier {
await migrateGitRepo( await migrateGitRepo(
fromGitBasePath: settings.localGitRepoFolderName, fromGitBasePath: settings.localGitRepoFolderName,
toGitBaseFolder: settings.remoteGitRepoFolderName, toGitBaseFolder: settings.remoteGitRepoFolderName,
gitBasePath: settings.gitBaseDirectory, gitBasePath: gitBaseDirectory,
); );
} }
var repoPath = var repoPath = p.join(gitBaseDirectory, settings.remoteGitRepoFolderName);
p.join(settings.gitBaseDirectory, settings.remoteGitRepoFolderName);
_gitRepo = GitNoteRepository(gitDirPath: repoPath); _gitRepo = GitNoteRepository(gitDirPath: repoPath);
appState.notesFolder.reset(_gitRepo.gitDirPath); appState.notesFolder.reset(_gitRepo.gitDirPath);

View File

@ -12,6 +12,7 @@ import 'package:share/share.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import 'package:gitjournal/analytics.dart'; import 'package:gitjournal/analytics.dart';
import 'package:gitjournal/app_settings.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils.dart'; import 'package:gitjournal/utils.dart';
import 'package:gitjournal/utils/logger.dart'; import 'package:gitjournal/utils/logger.dart';
@ -21,6 +22,7 @@ class AppDrawer extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
Widget setupGitButton; Widget setupGitButton;
var settings = Provider.of<Settings>(context); var settings = Provider.of<Settings>(context);
var appSettings = Provider.of<AppSettings>(context);
var textStyle = Theme.of(context).textTheme.bodyText1; var textStyle = Theme.of(context).textTheme.bodyText1;
var currentRoute = ModalRoute.of(context).settings.name; var currentRoute = ModalRoute.of(context).settings.name;
@ -50,7 +52,7 @@ class AppDrawer extends StatelessWidget {
children: <Widget>[ children: <Widget>[
_AppDrawerHeader(), _AppDrawerHeader(),
if (setupGitButton != null) ...[setupGitButton, divider], if (setupGitButton != null) ...[setupGitButton, divider],
if (!settings.proMode) if (!appSettings.proMode)
_buildDrawerTile( _buildDrawerTile(
context, context,
icon: Icons.power, icon: Icons.power,
@ -65,7 +67,7 @@ class AppDrawer extends StatelessWidget {
); );
}, },
), ),
if (!settings.proMode) divider, if (!appSettings.proMode) divider,
_buildDrawerTile( _buildDrawerTile(
context, context,
icon: Icons.note, icon: Icons.note,
@ -80,7 +82,7 @@ class AppDrawer extends StatelessWidget {
onTap: () => _navTopLevel(context, '/folders'), onTap: () => _navTopLevel(context, '/folders'),
selected: currentRoute == "/folders", selected: currentRoute == "/folders",
), ),
if (settings.experimentalFs) if (appSettings.experimentalFs)
_buildDrawerTile( _buildDrawerTile(
context, context,
icon: FontAwesomeIcons.solidFolderOpen, icon: FontAwesomeIcons.solidFolderOpen,
@ -89,7 +91,7 @@ class AppDrawer extends StatelessWidget {
onTap: () => _navTopLevel(context, '/filesystem'), onTap: () => _navTopLevel(context, '/filesystem'),
selected: currentRoute == "/filesystem", selected: currentRoute == "/filesystem",
), ),
if (settings.experimentalGraphView) if (appSettings.experimentalGraphView)
_buildDrawerTile( _buildDrawerTile(
context, context,
icon: FontAwesomeIcons.projectDiagram, icon: FontAwesomeIcons.projectDiagram,
@ -258,7 +260,7 @@ void _navTopLevel(BuildContext context, String toRoute) {
class _AppDrawerHeader extends StatelessWidget { class _AppDrawerHeader extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var settings = Provider.of<Settings>(context); var appSettings = Provider.of<AppSettings>(context);
return Stack( return Stack(
children: <Widget>[ children: <Widget>[
@ -300,7 +302,7 @@ class _AppDrawerHeader extends StatelessWidget {
), ),
), ),
*/ */
if (settings.proMode) if (appSettings.proMode)
Positioned.fill( Positioned.fill(
child: Align( child: Align(
alignment: Alignment.bottomRight, alignment: Alignment.bottomRight,

View File

@ -11,12 +11,12 @@ import 'package:path/path.dart' as p;
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import 'package:gitjournal/app_settings.dart';
import 'package:gitjournal/core/link.dart'; import 'package:gitjournal/core/link.dart';
import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/core/notes_folder.dart'; import 'package:gitjournal/core/notes_folder.dart';
import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/core/notes_folder_fs.dart';
import 'package:gitjournal/folder_views/common.dart'; import 'package:gitjournal/folder_views/common.dart';
import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils.dart'; import 'package:gitjournal/utils.dart';
import 'package:gitjournal/utils/link_resolver.dart'; import 'package:gitjournal/utils/link_resolver.dart';
import 'package:gitjournal/utils/logger.dart'; import 'package:gitjournal/utils/logger.dart';
@ -41,7 +41,7 @@ class NoteViewer extends StatelessWidget {
), ),
); );
var settings = Provider.of<Settings>(context); var appSettings = Provider.of<AppSettings>(context);
var isDark = theme.brightness == Brightness.dark; var isDark = theme.brightness == Brightness.dark;
// Copied from MarkdownStyleSheet except Grey is replaced with Highlight color // Copied from MarkdownStyleSheet except Grey is replaced with Highlight color
@ -108,7 +108,7 @@ class NoteViewer extends StatelessWidget {
), ),
), ),
const SizedBox(height: 16.0), const SizedBox(height: 16.0),
if (settings.experimentalBacklinks) if (appSettings.experimentalBacklinks)
NoteBacklinkRenderer( NoteBacklinkRenderer(
note: note, note: note,
rootFolder: rootFolder, rootFolder: rootFolder,

View File

@ -4,8 +4,8 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:gitjournal/analytics.dart'; import 'package:gitjournal/analytics.dart';
import 'package:gitjournal/app_settings.dart';
import 'package:gitjournal/features.dart'; import 'package:gitjournal/features.dart';
import 'package:gitjournal/settings.dart';
class ProOverlay extends StatelessWidget { class ProOverlay extends StatelessWidget {
final Widget child; final Widget child;
@ -17,8 +17,9 @@ class ProOverlay extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var settings = Provider.of<Settings>(context); var appSettings = Provider.of<AppSettings>(context);
if (settings.proMode) {
if (appSettings.proMode) {
return child; return child;
} }

View File

@ -8,9 +8,9 @@ import 'package:in_app_purchase/in_app_purchase.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:gitjournal/analytics.dart'; import 'package:gitjournal/analytics.dart';
import 'package:gitjournal/app_settings.dart';
import 'package:gitjournal/error_reporting.dart'; import 'package:gitjournal/error_reporting.dart';
import 'package:gitjournal/iap.dart'; import 'package:gitjournal/iap.dart';
import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils/logger.dart'; import 'package:gitjournal/utils/logger.dart';
import 'package:gitjournal/widgets/purchase_slider.dart'; import 'package:gitjournal/widgets/purchase_slider.dart';
@ -223,10 +223,10 @@ class _PurchaseWidgetState extends State<PurchaseWidget> {
} }
void _deliverProduct(SubscriptionStatus status) { void _deliverProduct(SubscriptionStatus status) {
var settings = Provider.of<Settings>(context); var appSettings = Provider.of<AppSettings>(context);
settings.proMode = status.isPro; appSettings.proMode = status.isPro;
settings.proExpirationDate = status.expiryDate.toIso8601String(); appSettings.proExpirationDate = status.expiryDate.toIso8601String();
settings.save(); appSettings.save();
logEvent(Event.PurchaseScreenThankYou); logEvent(Event.PurchaseScreenThankYou);
Navigator.of(context).popAndPushNamed('/purchase_thank_you'); Navigator.of(context).popAndPushNamed('/purchase_thank_you');
@ -401,7 +401,7 @@ class _RestorePurchaseButtonState extends State<RestorePurchaseButton> {
computing = true; computing = true;
}); });
await InAppPurchases.confirmProPurchase(); await InAppPurchases.confirmProPurchase();
if (Settings.instance.proMode) { if (AppSettings.instance.proMode) {
Navigator.of(context).pop(); Navigator.of(context).pop();
} }
}, },

View File

@ -1,6 +1,7 @@
import 'dart:io'; import 'dart:io';
import 'package:flutter_driver/driver_extension.dart'; import 'package:flutter_driver/driver_extension.dart';
import 'package:gitjournal/app_settings.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:gitjournal/app.dart'; import 'package:gitjournal/app.dart';
@ -15,6 +16,7 @@ void main() async {
enableFlutterDriverExtension(); enableFlutterDriverExtension();
var pref = await SharedPreferences.getInstance(); var pref = await SharedPreferences.getInstance();
AppSettings.instance.load(pref);
Settings.instance.load(pref); Settings.instance.load(pref);
await populateWithData(pref); await populateWithData(pref);
@ -25,8 +27,10 @@ void main() async {
Future<void> populateWithData(SharedPreferences pref) async { Future<void> populateWithData(SharedPreferences pref) async {
var dir = await getApplicationDocumentsDirectory(); var dir = await getApplicationDocumentsDirectory();
var appSettings = AppSettings.instance;
appSettings.gitBaseDirectory = dir.path;
var settings = Settings.instance; var settings = Settings.instance;
settings.gitBaseDirectory = dir.path;
settings.localGitRepoConfigured = true; settings.localGitRepoConfigured = true;
settings.localGitRepoFolderName = "journal_local"; settings.localGitRepoFolderName = "journal_local";
settings.save(); settings.save();