chore: Add sensible defaults to init lean-back mode

This commit is contained in:
PartyDonut 2025-10-18 16:37:45 +02:00
parent 9954ed7db5
commit 829bc3e34c
10 changed files with 37 additions and 25 deletions

View file

@ -62,6 +62,9 @@ void main(List<String> 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<String> 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: [

View file

@ -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<GlobalHotKeys, KeyCombination> shortcuts,
}) = _ClientSettingsModel;
static ClientSettingsModel defaultModel() {
return ClientSettingsModel(
blurPlaceHolders: leanBackMode ? false : true,
backgroundImage: leanBackMode ? BackgroundType.disabled : BackgroundType.blurred,
);
}
factory ClientSettingsModel.fromJson(Map<String, dynamic> json) => _$ClientSettingsModelFromJson(json);
Map<GlobalHotKeys, KeyCombination> get currentShortcuts =>

View file

@ -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()

View file

@ -26,7 +26,7 @@ _ClientSettingsModel _$ClientSettingsModelFromJson(Map<String, dynamic> 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<String, dynamic> 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,

View file

@ -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<LayoutMode> screenLayouts,
@Default({...ViewSize.values}) Set<ViewSize> 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<String, dynamic> json) => _$HomeSettingsModelFromJson(json);
}

View file

@ -275,15 +275,16 @@ extension HomeSettingsModelPatterns on HomeSettingsModel {
/// @nodoc
@JsonSerializable()
class _HomeSettingsModel implements HomeSettingsModel {
class _HomeSettingsModel extends HomeSettingsModel {
_HomeSettingsModel(
{final Set<LayoutMode> screenLayouts = const {...LayoutMode.values},
final Set<ViewSize> 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<String, dynamic> json) =>
_$HomeSettingsModelFromJson(json);
@ -306,7 +307,6 @@ class _HomeSettingsModel implements HomeSettingsModel {
}
@override
@JsonKey()
final HomeBanner homeBanner;
@override
@JsonKey()

View file

@ -16,9 +16,7 @@ _HomeSettingsModel _$HomeSettingsModelFromJson(Map<String, dynamic> 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,

View file

@ -13,7 +13,7 @@ final clientSettingsProvider = StateNotifierProvider<ClientSettingsNotifier, Cli
});
class ClientSettingsNotifier extends StateNotifier<ClientSettingsModel> {
ClientSettingsNotifier(this.ref) : super(ClientSettingsModel());
ClientSettingsNotifier(this.ref) : super(ClientSettingsModel.defaultModel());
final Ref ref;

View file

@ -9,7 +9,7 @@ final homeSettingsProvider = StateNotifierProvider<HomeSettingsNotifier, HomeSet
});
class HomeSettingsNotifier extends StateNotifier<HomeSettingsModel> {
HomeSettingsNotifier(this.ref) : super(HomeSettingsModel());
HomeSettingsNotifier(this.ref) : super(HomeSettingsModel.defaultModel());
final Ref ref;

View file

@ -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();
}
}