main.dart 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import 'package:adaptive_theme/adaptive_theme.dart';
  2. import 'package:computer/computer.dart';
  3. import "package:ente_auth/app/view/app.dart";
  4. import 'package:ente_auth/core/configuration.dart';
  5. import 'package:ente_auth/core/constants.dart';
  6. import 'package:ente_auth/core/logging/super_logging.dart';
  7. import 'package:ente_auth/core/network.dart';
  8. import 'package:ente_auth/ente_theme_data.dart';
  9. import 'package:ente_auth/locale.dart';
  10. import 'package:ente_auth/services/authenticator_service.dart';
  11. import 'package:ente_auth/services/billing_service.dart';
  12. import 'package:ente_auth/services/notification_service.dart';
  13. import 'package:ente_auth/services/preference_service.dart';
  14. import 'package:ente_auth/services/update_service.dart';
  15. import 'package:ente_auth/services/user_remote_flag_service.dart';
  16. import 'package:ente_auth/services/user_service.dart';
  17. import 'package:ente_auth/store/code_store.dart';
  18. import 'package:ente_auth/ui/tools/app_lock.dart';
  19. import 'package:ente_auth/ui/tools/lock_screen.dart';
  20. import 'package:ente_auth/ui/utils/icon_utils.dart';
  21. import 'package:ente_auth/utils/crypto_util.dart';
  22. import 'package:flutter/foundation.dart';
  23. import "package:flutter/material.dart";
  24. import 'package:flutter_displaymode/flutter_displaymode.dart';
  25. import 'package:logging/logging.dart';
  26. import 'package:path_provider/path_provider.dart';
  27. import 'package:privacy_screen/privacy_screen.dart';
  28. final _logger = Logger("main");
  29. void main() async {
  30. WidgetsFlutterBinding.ensureInitialized();
  31. final savedThemeMode = await AdaptiveTheme.getThemeMode();
  32. await _runInForeground(savedThemeMode);
  33. await PrivacyScreen.instance.enable(
  34. iosOptions: const PrivacyIosOptions(
  35. enablePrivacy: true,
  36. privacyImageName: "LaunchImage",
  37. lockTrigger: IosLockTrigger.didEnterBackground,
  38. ),
  39. androidOptions: const PrivacyAndroidOptions(
  40. enableSecure: true,
  41. ),
  42. backgroundColor: savedThemeMode == AdaptiveThemeMode.dark
  43. ? Colors.black
  44. : Colors.white,
  45. blurEffect: savedThemeMode == AdaptiveThemeMode.dark
  46. ? PrivacyBlurEffect.dark
  47. : PrivacyBlurEffect.extraLight,
  48. );
  49. FlutterDisplayMode.setHighRefreshRate();
  50. }
  51. Future<void> _runInForeground(AdaptiveThemeMode? savedThemeMode) async {
  52. return await _runWithLogs(() async {
  53. _logger.info("Starting app in foreground");
  54. await _init(false, via: 'mainMethod');
  55. final Locale locale = await getLocale();
  56. UpdateService.instance.showUpdateNotification();
  57. runApp(
  58. AppLock(
  59. builder: (args) => App(locale: locale),
  60. lockScreen: const LockScreen(),
  61. enabled: Configuration.instance.shouldShowLockScreen(),
  62. locale: locale,
  63. lightTheme: lightThemeData,
  64. darkTheme: darkThemeData,
  65. savedThemeMode: _themeMode(savedThemeMode),
  66. ),
  67. );
  68. });
  69. }
  70. ThemeMode _themeMode(AdaptiveThemeMode? savedThemeMode) {
  71. if (savedThemeMode == null) return ThemeMode.system;
  72. if (savedThemeMode.isLight) return ThemeMode.light;
  73. if (savedThemeMode.isDark) return ThemeMode.dark;
  74. return ThemeMode.system;
  75. }
  76. Future _runWithLogs(Function() function, {String prefix = ""}) async {
  77. await SuperLogging.main(
  78. LogConfig(
  79. body: function,
  80. logDirPath: (await getApplicationSupportDirectory()).path + "/logs",
  81. maxLogFiles: 5,
  82. sentryDsn: sentryDSN,
  83. enableInDebugMode: true,
  84. prefix: prefix,
  85. ),
  86. );
  87. }
  88. Future<void> _init(bool bool, {String? via}) async {
  89. // Start workers asynchronously. No need to wait for them to start
  90. Computer.shared().turnOn(workersCount: 4, verbose: kDebugMode);
  91. CryptoUtil.init();
  92. await PreferenceService.instance.init();
  93. await CodeStore.instance.init();
  94. await Configuration.instance.init();
  95. await Network.instance.init();
  96. await UserService.instance.init();
  97. await UserRemoteFlagService.instance.init();
  98. await AuthenticatorService.instance.init();
  99. await BillingService.instance.init();
  100. await NotificationService.instance.init();
  101. await UpdateService.instance.init();
  102. await IconUtils.instance.init();
  103. }