diff --git a/lib/main.dart b/lib/main.dart index 35ac577..d099e71 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -62,6 +62,9 @@ void main(List args) async { await SvgUtils.preCacheSVGs(); + // Check if running on android TV + final leanBackEnabled = !kIsWeb && Platform.isAndroid ? await NativeVideoActivity().isLeanBackEnabled() : false; + if (defaultTargetPlatform == TargetPlatform.windows) { await SMTCWindows.initialize(); } @@ -93,9 +96,6 @@ void main(List args) async { os: !kIsWeb ? defaultTargetPlatform.name.capitalize() : "${defaultTargetPlatform.name.capitalize()} Web", ); - // Check if running on android TV - final leanBackEnabled = !kIsWeb && Platform.isAndroid ? await NativeVideoActivity().isLeanBackEnabled() : false; - runApp( ProviderScope( overrides: [ diff --git a/lib/models/settings/client_settings_model.dart b/lib/models/settings/client_settings_model.dart index 39f92d6..7910ff6 100644 --- a/lib/models/settings/client_settings_model.dart +++ b/lib/models/settings/client_settings_model.dart @@ -7,6 +7,7 @@ import 'package:flutter/services.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:fladder/models/settings/arguments_model.dart'; import 'package:fladder/models/settings/key_combinations.dart'; import 'package:fladder/util/custom_color_themes.dart'; import 'package:fladder/util/localization_helper.dart'; @@ -64,7 +65,7 @@ abstract class ClientSettingsModel with _$ClientSettingsModel { ColorThemes? themeColor, @Default(true) bool deriveColorsFromItem, @Default(false) bool amoledBlack, - @Default(true) bool blurPlaceHolders, + required bool blurPlaceHolders, @Default(false) bool blurUpcomingEpisodes, @LocaleConvert() Locale? selectedLocale, @Default(true) bool enableMediaKeys, @@ -75,7 +76,7 @@ abstract class ClientSettingsModel with _$ClientSettingsModel { @Default(false) bool showAllCollectionTypes, @Default(2) int maxConcurrentDownloads, @Default(DynamicSchemeVariant.rainbow) DynamicSchemeVariant schemeVariant, - @Default(BackgroundType.blurred) BackgroundType backgroundImage, + required BackgroundType backgroundImage, @Default(true) bool checkForUpdates, @Default(false) bool usePosterForLibrary, @Default(false) bool useSystemIME, @@ -84,6 +85,13 @@ abstract class ClientSettingsModel with _$ClientSettingsModel { @Default({}) Map shortcuts, }) = _ClientSettingsModel; + static ClientSettingsModel defaultModel() { + return ClientSettingsModel( + blurPlaceHolders: leanBackMode ? false : true, + backgroundImage: leanBackMode ? BackgroundType.disabled : BackgroundType.blurred, + ); + } + factory ClientSettingsModel.fromJson(Map json) => _$ClientSettingsModelFromJson(json); Map get currentShortcuts => diff --git a/lib/models/settings/client_settings_model.freezed.dart b/lib/models/settings/client_settings_model.freezed.dart index ea1425c..000460d 100644 --- a/lib/models/settings/client_settings_model.freezed.dart +++ b/lib/models/settings/client_settings_model.freezed.dart @@ -621,7 +621,7 @@ class _ClientSettingsModel extends ClientSettingsModel this.themeColor, this.deriveColorsFromItem = true, this.amoledBlack = false, - this.blurPlaceHolders = true, + required this.blurPlaceHolders, this.blurUpcomingEpisodes = false, @LocaleConvert() this.selectedLocale, this.enableMediaKeys = true, @@ -632,7 +632,7 @@ class _ClientSettingsModel extends ClientSettingsModel this.showAllCollectionTypes = false, this.maxConcurrentDownloads = 2, this.schemeVariant = DynamicSchemeVariant.rainbow, - this.backgroundImage = BackgroundType.blurred, + required this.backgroundImage, this.checkForUpdates = true, this.usePosterForLibrary = false, this.useSystemIME = false, @@ -669,7 +669,6 @@ class _ClientSettingsModel extends ClientSettingsModel @JsonKey() final bool amoledBlack; @override - @JsonKey() final bool blurPlaceHolders; @override @JsonKey() @@ -702,7 +701,6 @@ class _ClientSettingsModel extends ClientSettingsModel @JsonKey() final DynamicSchemeVariant schemeVariant; @override - @JsonKey() final BackgroundType backgroundImage; @override @JsonKey() diff --git a/lib/models/settings/client_settings_model.g.dart b/lib/models/settings/client_settings_model.g.dart index 92e2a58..5dcd973 100644 --- a/lib/models/settings/client_settings_model.g.dart +++ b/lib/models/settings/client_settings_model.g.dart @@ -26,7 +26,7 @@ _ClientSettingsModel _$ClientSettingsModelFromJson(Map json) => themeColor: $enumDecodeNullable(_$ColorThemesEnumMap, json['themeColor']), deriveColorsFromItem: json['deriveColorsFromItem'] as bool? ?? true, amoledBlack: json['amoledBlack'] as bool? ?? false, - blurPlaceHolders: json['blurPlaceHolders'] as bool? ?? true, + blurPlaceHolders: json['blurPlaceHolders'] as bool, blurUpcomingEpisodes: json['blurUpcomingEpisodes'] as bool? ?? false, selectedLocale: const LocaleConvert().fromJson(json['selectedLocale'] as String?), @@ -41,9 +41,8 @@ _ClientSettingsModel _$ClientSettingsModelFromJson(Map json) => schemeVariant: $enumDecodeNullable( _$DynamicSchemeVariantEnumMap, json['schemeVariant']) ?? DynamicSchemeVariant.rainbow, - backgroundImage: $enumDecodeNullable( - _$BackgroundTypeEnumMap, json['backgroundImage']) ?? - BackgroundType.blurred, + backgroundImage: + $enumDecode(_$BackgroundTypeEnumMap, json['backgroundImage']), checkForUpdates: json['checkForUpdates'] as bool? ?? true, usePosterForLibrary: json['usePosterForLibrary'] as bool? ?? false, useSystemIME: json['useSystemIME'] as bool? ?? false, diff --git a/lib/models/settings/home_settings_model.dart b/lib/models/settings/home_settings_model.dart index a061c5f..3af4f0d 100644 --- a/lib/models/settings/home_settings_model.dart +++ b/lib/models/settings/home_settings_model.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:fladder/models/settings/arguments_model.dart'; import 'package:fladder/util/adaptive_layout/adaptive_layout.dart'; import 'package:fladder/util/localization_helper.dart'; @@ -10,14 +11,22 @@ part 'home_settings_model.g.dart'; @Freezed(copyWith: true) abstract class HomeSettingsModel with _$HomeSettingsModel { + const HomeSettingsModel._(); + factory HomeSettingsModel({ @Default({...LayoutMode.values}) Set screenLayouts, @Default({...ViewSize.values}) Set layoutStates, - @Default(HomeBanner.carousel) HomeBanner homeBanner, + required HomeBanner homeBanner, @Default(HomeCarouselSettings.combined) HomeCarouselSettings carouselSettings, @Default(HomeNextUp.separate) HomeNextUp nextUp, }) = _HomeSettingsModel; + static HomeSettingsModel defaultModel() { + return HomeSettingsModel( + homeBanner: leanBackMode ? HomeBanner.detailedBanner : HomeBanner.carousel, + ); + } + factory HomeSettingsModel.fromJson(Map json) => _$HomeSettingsModelFromJson(json); } diff --git a/lib/models/settings/home_settings_model.freezed.dart b/lib/models/settings/home_settings_model.freezed.dart index e94b30b..e163934 100644 --- a/lib/models/settings/home_settings_model.freezed.dart +++ b/lib/models/settings/home_settings_model.freezed.dart @@ -275,15 +275,16 @@ extension HomeSettingsModelPatterns on HomeSettingsModel { /// @nodoc @JsonSerializable() -class _HomeSettingsModel implements HomeSettingsModel { +class _HomeSettingsModel extends HomeSettingsModel { _HomeSettingsModel( {final Set screenLayouts = const {...LayoutMode.values}, final Set layoutStates = const {...ViewSize.values}, - this.homeBanner = HomeBanner.carousel, + required this.homeBanner, this.carouselSettings = HomeCarouselSettings.combined, this.nextUp = HomeNextUp.separate}) : _screenLayouts = screenLayouts, - _layoutStates = layoutStates; + _layoutStates = layoutStates, + super._(); factory _HomeSettingsModel.fromJson(Map json) => _$HomeSettingsModelFromJson(json); @@ -306,7 +307,6 @@ class _HomeSettingsModel implements HomeSettingsModel { } @override - @JsonKey() final HomeBanner homeBanner; @override @JsonKey() diff --git a/lib/models/settings/home_settings_model.g.dart b/lib/models/settings/home_settings_model.g.dart index 8cb95ce..e51bf0d 100644 --- a/lib/models/settings/home_settings_model.g.dart +++ b/lib/models/settings/home_settings_model.g.dart @@ -16,9 +16,7 @@ _HomeSettingsModel _$HomeSettingsModelFromJson(Map json) => ?.map((e) => $enumDecode(_$ViewSizeEnumMap, e)) .toSet() ?? const {...ViewSize.values}, - homeBanner: - $enumDecodeNullable(_$HomeBannerEnumMap, json['homeBanner']) ?? - HomeBanner.carousel, + homeBanner: $enumDecode(_$HomeBannerEnumMap, json['homeBanner']), carouselSettings: $enumDecodeNullable( _$HomeCarouselSettingsEnumMap, json['carouselSettings']) ?? HomeCarouselSettings.combined, diff --git a/lib/providers/settings/client_settings_provider.dart b/lib/providers/settings/client_settings_provider.dart index 035d69a..d3ee4f2 100644 --- a/lib/providers/settings/client_settings_provider.dart +++ b/lib/providers/settings/client_settings_provider.dart @@ -13,7 +13,7 @@ final clientSettingsProvider = StateNotifierProvider { - ClientSettingsNotifier(this.ref) : super(ClientSettingsModel()); + ClientSettingsNotifier(this.ref) : super(ClientSettingsModel.defaultModel()); final Ref ref; diff --git a/lib/providers/settings/home_settings_provider.dart b/lib/providers/settings/home_settings_provider.dart index 335c2ce..40cb96b 100644 --- a/lib/providers/settings/home_settings_provider.dart +++ b/lib/providers/settings/home_settings_provider.dart @@ -9,7 +9,7 @@ final homeSettingsProvider = StateNotifierProvider { - HomeSettingsNotifier(this.ref) : super(HomeSettingsModel()); + HomeSettingsNotifier(this.ref) : super(HomeSettingsModel.defaultModel()); final Ref ref; diff --git a/lib/providers/shared_provider.dart b/lib/providers/shared_provider.dart index be94eac..00664ee 100644 --- a/lib/providers/shared_provider.dart +++ b/lib/providers/shared_provider.dart @@ -136,7 +136,7 @@ class SharedUtility { return ClientSettingsModel.fromJson(jsonDecode(sharedPreferences.getString(_clientSettingsKey) ?? "")); } catch (e) { log(e.toString()); - return ClientSettingsModel(); + return ClientSettingsModel.defaultModel(); } } @@ -148,7 +148,7 @@ class SharedUtility { return HomeSettingsModel.fromJson(jsonDecode(sharedPreferences.getString(_homeSettingsKey) ?? "")); } catch (e) { log(e.toString()); - return HomeSettingsModel(); + return HomeSettingsModel.defaultModel(); } }