ente/auth/lib/main.dart

120 lines
4.2 KiB
Dart
Raw Normal View History

2024-03-07 08:16:05 +00:00
import 'dart:async';
import 'dart:io';
2023-04-10 04:17:45 +00:00
import 'package:adaptive_theme/adaptive_theme.dart';
2023-07-20 10:29:23 +00:00
import 'package:computer/computer.dart';
2022-11-01 06:13:06 +00:00
import "package:ente_auth/app/view/app.dart";
import 'package:ente_auth/core/configuration.dart';
2022-11-14 08:28:09 +00:00
import 'package:ente_auth/core/constants.dart';
2022-11-01 06:13:06 +00:00
import 'package:ente_auth/core/logging/super_logging.dart';
import 'package:ente_auth/core/network.dart';
import 'package:ente_auth/ente_theme_data.dart';
2023-04-07 08:59:27 +00:00
import 'package:ente_auth/locale.dart';
2022-11-01 06:13:06 +00:00
import 'package:ente_auth/services/authenticator_service.dart';
import 'package:ente_auth/services/billing_service.dart';
2022-11-14 13:03:49 +00:00
import 'package:ente_auth/services/notification_service.dart';
import 'package:ente_auth/services/preference_service.dart';
2022-11-01 06:13:06 +00:00
import 'package:ente_auth/services/update_service.dart';
import 'package:ente_auth/services/user_remote_flag_service.dart';
import 'package:ente_auth/services/user_service.dart';
import 'package:ente_auth/store/code_store.dart';
import 'package:ente_auth/ui/tools/app_lock.dart';
import 'package:ente_auth/ui/tools/lock_screen.dart';
2023-08-17 17:24:53 +00:00
import 'package:ente_auth/ui/utils/icon_utils.dart';
2022-11-01 06:13:06 +00:00
import 'package:ente_auth/utils/crypto_util.dart';
2023-07-20 10:29:23 +00:00
import 'package:flutter/foundation.dart';
2022-11-01 06:13:06 +00:00
import "package:flutter/material.dart";
import 'package:flutter/scheduler.dart';
import 'package:flutter_displaymode/flutter_displaymode.dart';
2022-11-01 06:13:06 +00:00
import 'package:logging/logging.dart';
import 'package:path_provider/path_provider.dart';
import 'package:privacy_screen/privacy_screen.dart';
2022-11-01 06:13:06 +00:00
final _logger = Logger("main");
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await _runInForeground();
await _setupPrivacyScreen();
if (Platform.isAndroid) {
FlutterDisplayMode.setHighRefreshRate().ignore();
}
2022-11-01 06:13:06 +00:00
}
Future<void> _runInForeground() async {
final savedThemeMode = _themeMode(await AdaptiveTheme.getThemeMode());
2022-11-01 06:13:06 +00:00
return await _runWithLogs(() async {
_logger.info("Starting app in foreground");
await _init(false, via: 'mainMethod');
2023-04-07 08:59:27 +00:00
final Locale locale = await getLocale();
2024-03-07 08:16:05 +00:00
unawaited(UpdateService.instance.showUpdateNotification());
2022-11-01 06:13:06 +00:00
runApp(
AppLock(
2023-04-07 08:59:27 +00:00
builder: (args) => App(locale: locale),
2022-11-01 06:13:06 +00:00
lockScreen: const LockScreen(),
enabled: Configuration.instance.shouldShowLockScreen(),
2023-04-07 08:59:27 +00:00
locale: locale,
2022-11-01 06:13:06 +00:00
lightTheme: lightThemeData,
darkTheme: darkThemeData,
savedThemeMode: savedThemeMode,
2022-11-01 06:13:06 +00:00
),
);
});
}
2023-04-10 04:17:45 +00:00
ThemeMode _themeMode(AdaptiveThemeMode? savedThemeMode) {
if (savedThemeMode == null) return ThemeMode.system;
if (savedThemeMode.isLight) return ThemeMode.light;
if (savedThemeMode.isDark) return ThemeMode.dark;
return ThemeMode.system;
}
2022-11-01 06:13:06 +00:00
Future _runWithLogs(Function() function, {String prefix = ""}) async {
await SuperLogging.main(
LogConfig(
body: function,
logDirPath: (await getApplicationSupportDirectory()).path + "/logs",
maxLogFiles: 5,
2022-11-14 08:28:09 +00:00
sentryDsn: sentryDSN,
2022-11-01 06:13:06 +00:00
enableInDebugMode: true,
prefix: prefix,
),
);
}
2023-04-10 04:17:45 +00:00
Future<void> _init(bool bool, {String? via}) async {
2023-07-20 10:29:23 +00:00
// Start workers asynchronously. No need to wait for them to start
2024-03-07 08:16:05 +00:00
Computer.shared().turnOn(workersCount: 4, verbose: kDebugMode).ignore();
2022-11-01 06:13:06 +00:00
CryptoUtil.init();
await PreferenceService.instance.init();
2022-11-01 06:13:06 +00:00
await CodeStore.instance.init();
await Configuration.instance.init();
await Network.instance.init();
await UserService.instance.init();
await UserRemoteFlagService.instance.init();
await AuthenticatorService.instance.init();
await BillingService.instance.init();
2022-11-14 13:03:49 +00:00
await NotificationService.instance.init();
await UpdateService.instance.init();
2023-08-17 17:24:53 +00:00
await IconUtils.instance.init();
2022-11-01 06:13:06 +00:00
}
Future<void> _setupPrivacyScreen() async {
final brightness =
SchedulerBinding.instance.platformDispatcher.platformBrightness;
bool isInDarkMode = brightness == Brightness.dark;
await PrivacyScreen.instance.enable(
iosOptions: const PrivacyIosOptions(
enablePrivacy: true,
privacyImageName: "LaunchImage",
lockTrigger: IosLockTrigger.didEnterBackground,
),
androidOptions: const PrivacyAndroidOptions(
enableSecure: true,
),
backgroundColor: isInDarkMode ? Colors.black : Colors.white,
blurEffect:
isInDarkMode ? PrivacyBlurEffect.dark : PrivacyBlurEffect.extraLight,
);
}