<!-- Thanks for contributing! Provide a description of your changes below and a general summary in the title Please look at the following checklist to ensure that your PR can be accepted quickly: --> ## Description Added: Hide the contents of the app, when is it in the background - Both android and ios In android, it shows a blank white/black background, when in background In iOS, it shows the launch icon, when in background  Android Physical Device  Android stimulator Also, compared the bitwarden apps in android, the flow is same iOS Device: Need to verify @ua741 @vishnukvmd Could you run on iOS devices and verify it? Closes #47 ## Type of Change <!--- Put an `x` in all the boxes that apply: --> - [ ] 🖼️ New icon - [x] ✨ New feature (non-breaking change which adds functionality) - [ ] 🛠️ Bug fix (non-breaking change which fixes an issue) - [ ] ❌ Breaking change (fix or feature that would cause existing functionality to change) - [ ] 🧹 Code refactor - [ ] ✅ Build configuration change - [ ] 📝 Documentation - [ ] 🗑️ Chore
110 lines
4.0 KiB
Dart
110 lines
4.0 KiB
Dart
import 'package:adaptive_theme/adaptive_theme.dart';
|
|
import 'package:computer/computer.dart';
|
|
import "package:ente_auth/app/view/app.dart";
|
|
import 'package:ente_auth/core/configuration.dart';
|
|
import 'package:ente_auth/core/constants.dart';
|
|
import 'package:ente_auth/core/logging/super_logging.dart';
|
|
import 'package:ente_auth/core/network.dart';
|
|
import 'package:ente_auth/ente_theme_data.dart';
|
|
import 'package:ente_auth/locale.dart';
|
|
import 'package:ente_auth/services/authenticator_service.dart';
|
|
import 'package:ente_auth/services/billing_service.dart';
|
|
import 'package:ente_auth/services/notification_service.dart';
|
|
import 'package:ente_auth/services/preference_service.dart';
|
|
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';
|
|
import 'package:ente_auth/ui/utils/icon_utils.dart';
|
|
import 'package:ente_auth/utils/crypto_util.dart';
|
|
import 'package:flutter/foundation.dart';
|
|
import "package:flutter/material.dart";
|
|
import 'package:flutter_displaymode/flutter_displaymode.dart';
|
|
import 'package:logging/logging.dart';
|
|
import 'package:path_provider/path_provider.dart';
|
|
import 'package:privacy_screen/privacy_screen.dart';
|
|
|
|
final _logger = Logger("main");
|
|
|
|
void main() async {
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
final savedThemeMode = await AdaptiveTheme.getThemeMode();
|
|
await _runInForeground(savedThemeMode);
|
|
await PrivacyScreen.instance.enable(
|
|
iosOptions: const PrivacyIosOptions(
|
|
enablePrivacy: true,
|
|
privacyImageName: "LaunchImage",
|
|
lockTrigger: IosLockTrigger.didEnterBackground,
|
|
),
|
|
androidOptions: const PrivacyAndroidOptions(
|
|
enableSecure: true,
|
|
),
|
|
backgroundColor: savedThemeMode == AdaptiveThemeMode.dark
|
|
? Colors.black
|
|
: Colors.white,
|
|
blurEffect: savedThemeMode == AdaptiveThemeMode.dark
|
|
? PrivacyBlurEffect.dark
|
|
: PrivacyBlurEffect.extraLight,
|
|
);
|
|
FlutterDisplayMode.setHighRefreshRate();
|
|
}
|
|
|
|
Future<void> _runInForeground(AdaptiveThemeMode? savedThemeMode) async {
|
|
return await _runWithLogs(() async {
|
|
_logger.info("Starting app in foreground");
|
|
await _init(false, via: 'mainMethod');
|
|
final Locale locale = await getLocale();
|
|
UpdateService.instance.showUpdateNotification();
|
|
runApp(
|
|
AppLock(
|
|
builder: (args) => App(locale: locale),
|
|
lockScreen: const LockScreen(),
|
|
enabled: Configuration.instance.shouldShowLockScreen(),
|
|
locale: locale,
|
|
lightTheme: lightThemeData,
|
|
darkTheme: darkThemeData,
|
|
savedThemeMode: _themeMode(savedThemeMode),
|
|
),
|
|
);
|
|
});
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
Future _runWithLogs(Function() function, {String prefix = ""}) async {
|
|
await SuperLogging.main(
|
|
LogConfig(
|
|
body: function,
|
|
logDirPath: (await getApplicationSupportDirectory()).path + "/logs",
|
|
maxLogFiles: 5,
|
|
sentryDsn: sentryDSN,
|
|
enableInDebugMode: true,
|
|
prefix: prefix,
|
|
),
|
|
);
|
|
}
|
|
|
|
Future<void> _init(bool bool, {String? via}) async {
|
|
// Start workers asynchronously. No need to wait for them to start
|
|
Computer.shared().turnOn(workersCount: 4, verbose: kDebugMode);
|
|
CryptoUtil.init();
|
|
await PreferenceService.instance.init();
|
|
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();
|
|
await NotificationService.instance.init();
|
|
await UpdateService.instance.init();
|
|
await IconUtils.instance.init();
|
|
}
|