diff --git a/lib/app.dart b/lib/app.dart index d585dff4..401a138d 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -1,8 +1,10 @@ import 'package:firebase_analytics/firebase_analytics.dart'; import 'package:firebase_analytics/observer.dart'; import 'package:flutter/material.dart'; +import 'package:journal/apis/git.dart'; import 'package:journal/screens/home_screen.dart'; import 'package:journal/screens/settings_screen.dart'; +import 'package:journal/settings.dart'; import 'package:journal/state_container.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -10,6 +12,53 @@ import 'screens/githostsetup_screens.dart'; import 'screens/onboarding_screens.dart'; class JournalApp extends StatelessWidget { + static Future main() async { + var pref = await SharedPreferences.getInstance(); + JournalApp.preferences = pref; + + var localGitRepoConfigured = + pref.getBool("localGitRepoConfigured") ?? false; + var remoteGitRepoConfigured = + pref.getBool("remoteGitRepoConfigured") ?? false; + var localGitRepoPath = pref.getString("localGitRepoPath") ?? ""; + var remoteGitRepoFolderName = pref.getString("remoteGitRepoPath") ?? ""; + var remoteGitRepoSubFolder = pref.getString("remoteGitRepoSubFolder") ?? ""; + var onBoardingCompleted = + true; //pref.getBool("onBoardingCompleted") ?? false; + + if (JournalApp.isInDebugMode) { + if (JournalApp.analytics.android != null) { + JournalApp.analytics.android.setAnalyticsCollectionEnabled(false); + } + } + + if (localGitRepoConfigured == false) { + // FIXME: What about exceptions! + localGitRepoPath = "journal_local"; + await gitInit(localGitRepoPath); + + localGitRepoConfigured = true; + + await pref.setBool("localGitRepoConfigured", localGitRepoConfigured); + await pref.setString("localGitRepoPath", localGitRepoPath); + } + + var dir = await getGitBaseDirectory(); + + await Settings.instance.load(); + + runApp(StateContainer( + localGitRepoConfigured: localGitRepoConfigured, + remoteGitRepoConfigured: remoteGitRepoConfigured, + localGitRepoPath: localGitRepoPath, + remoteGitRepoFolderName: remoteGitRepoFolderName, + remoteGitRepoSubFolder: remoteGitRepoSubFolder, + gitBaseDirectory: dir.path, + onBoardingCompleted: onBoardingCompleted, + child: JournalApp(), + )); + } + static FirebaseAnalytics analytics = FirebaseAnalytics(); static FirebaseAnalyticsObserver observer = FirebaseAnalyticsObserver(analytics: analytics); diff --git a/lib/main.dart b/lib/main.dart index d6d57412..3d59ba74 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,11 +2,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_crashlytics/flutter_crashlytics.dart'; -import 'package:journal/apis/git.dart'; import 'package:journal/app.dart'; -import 'package:journal/settings.dart'; -import 'package:journal/state_container.dart'; -import 'package:shared_preferences/shared_preferences.dart'; void main() async { FlutterError.onError = (FlutterErrorDetails details) { @@ -22,55 +18,9 @@ void main() async { } runZoned>(() async { - await runJournalApp(); + await JournalApp.main(); }, onError: (Object error, StackTrace stackTrace) async { await FlutterCrashlytics() .reportCrash(error, stackTrace, forceCrash: false); }); } - -Future runJournalApp() async { - var pref = await SharedPreferences.getInstance(); - JournalApp.preferences = pref; - - var localGitRepoConfigured = pref.getBool("localGitRepoConfigured") ?? false; - var remoteGitRepoConfigured = - pref.getBool("remoteGitRepoConfigured") ?? false; - var localGitRepoPath = pref.getString("localGitRepoPath") ?? ""; - var remoteGitRepoFolderName = pref.getString("remoteGitRepoPath") ?? ""; - var remoteGitRepoSubFolder = pref.getString("remoteGitRepoSubFolder") ?? ""; - var onBoardingCompleted = - true; //pref.getBool("onBoardingCompleted") ?? false; - - if (JournalApp.isInDebugMode) { - if (JournalApp.analytics.android != null) { - JournalApp.analytics.android.setAnalyticsCollectionEnabled(false); - } - } - - if (localGitRepoConfigured == false) { - // FIXME: What about exceptions! - localGitRepoPath = "journal_local"; - await gitInit(localGitRepoPath); - - localGitRepoConfigured = true; - - await pref.setBool("localGitRepoConfigured", localGitRepoConfigured); - await pref.setString("localGitRepoPath", localGitRepoPath); - } - - var dir = await getGitBaseDirectory(); - - await Settings.instance.load(); - - runApp(StateContainer( - localGitRepoConfigured: localGitRepoConfigured, - remoteGitRepoConfigured: remoteGitRepoConfigured, - localGitRepoPath: localGitRepoPath, - remoteGitRepoFolderName: remoteGitRepoFolderName, - remoteGitRepoSubFolder: remoteGitRepoSubFolder, - gitBaseDirectory: dir.path, - onBoardingCompleted: onBoardingCompleted, - child: JournalApp(), - )); -} diff --git a/test_driver/main.dart b/test_driver/main.dart new file mode 100644 index 00000000..a458ef52 --- /dev/null +++ b/test_driver/main.dart @@ -0,0 +1,7 @@ +import 'package:flutter_driver/driver_extension.dart'; +import 'package:journal/app.dart'; + +void main() async { + enableFlutterDriverExtension(); + await JournalApp.main(); +} diff --git a/test_driver/main_test.dart b/test_driver/main_test.dart new file mode 100644 index 00000000..f0b81a68 --- /dev/null +++ b/test_driver/main_test.dart @@ -0,0 +1,37 @@ +import 'dart:io'; + +import 'package:flutter_driver/flutter_driver.dart'; +import 'package:test/test.dart'; + +void main() { + group('Test', () { + final loadedFinder = find.text('Why not add your first\n Journal Entry?'); + + FlutterDriver driver; + int screenshotNum = 0; + + // Connect to the Flutter driver before running any tests + setUpAll(() async { + driver = await FlutterDriver.connect(); + }); + + // Close the connection to the driver after the tests have completed + tearDownAll(() async { + if (driver != null) { + driver.close(); + } + }); + + Future _takeScreenshot() async { + var filePath = screenshotNum.toString() + ".png"; + final file = await File(filePath).create(recursive: true); + final pixels = await driver.screenshot(); + await file.writeAsBytes(pixels); + } + + test('Anonymous GitClone works', () async { + await driver.waitFor(loadedFinder, timeout: Duration(seconds: 5)); + await _takeScreenshot(); + }); + }); +}