1
0
forked from firka/firka

firka(android): fix splash screen

This commit is contained in:
2026-02-27 23:15:13 +01:00
committed by 4831c0
parent 28fb054571
commit 0c4bc4cd40
16 changed files with 112 additions and 47 deletions

View File

@@ -35,7 +35,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_ace"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_ace_round" >
<intent-filter>
@@ -49,7 +49,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_ace_f"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_ace_f_round" >
<intent-filter>
@@ -63,7 +63,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_bi"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_bi_round" >
<intent-filter>
@@ -77,7 +77,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_bi_f"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_bi_f_round" >
<intent-filter>
@@ -91,7 +91,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_cactus"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_cactus_round" >
<intent-filter>
@@ -105,7 +105,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_cc"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_cc_round" >
<intent-filter>
@@ -119,7 +119,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_enby"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_enby_round" >
<intent-filter>
@@ -133,7 +133,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_enby_f"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_enby_f_round" >
<intent-filter>
@@ -147,7 +147,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_fidesz"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_fidesz_round" >
<intent-filter>
@@ -161,7 +161,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_filc"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_filc_round" >
<intent-filter>
@@ -175,7 +175,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_filco"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_filco_round" >
<intent-filter>
@@ -189,7 +189,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_galaxy"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_galaxy_round" >
<intent-filter>
@@ -203,7 +203,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_gay"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_gay_round" >
<intent-filter>
@@ -217,7 +217,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_gay_f"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_gay_f_round" >
<intent-filter>
@@ -231,7 +231,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_half_firka_2"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_half_firka_2_round" >
<intent-filter>
@@ -245,7 +245,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_kreta"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_kreta_round" >
<intent-filter>
@@ -259,7 +259,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_lesb"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_lesb_round" >
<intent-filter>
@@ -273,7 +273,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_lesb_f"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_lesb_f_round" >
<intent-filter>
@@ -287,7 +287,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_lgbtq"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_lgbtq_round" >
<intent-filter>
@@ -301,7 +301,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_lgbtq_f"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_lgbtq_f_round" >
<intent-filter>
@@ -315,7 +315,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_lgbtqp"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_lgbtqp_round" >
<intent-filter>
@@ -329,7 +329,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_lgbtqp_f"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_lgbtqp_f_round" >
<intent-filter>
@@ -343,7 +343,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_lidl"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_lidl_round" >
<intent-filter>
@@ -357,7 +357,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_mkkp"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_mkkp_round" >
<intent-filter>
@@ -371,7 +371,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_nuke"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_nuke_round" >
<intent-filter>
@@ -385,7 +385,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_modern"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_modern_round" >
<intent-filter>
@@ -399,7 +399,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_o1g"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_o1g_round" >
<intent-filter>
@@ -413,7 +413,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_old"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_old_round" >
<intent-filter>
@@ -427,7 +427,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_paper"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_paper_round" >
<intent-filter>
@@ -441,7 +441,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_pear"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_pear_round" >
<intent-filter>
@@ -455,7 +455,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_pixel"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_pixel_round" >
<intent-filter>
@@ -469,7 +469,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_pixelized"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_pixelized_round" >
<intent-filter>
@@ -483,7 +483,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_pride"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_pride_round" >
<intent-filter>
@@ -497,7 +497,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_proto"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_proto_round" >
<intent-filter>
@@ -511,7 +511,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_refilc"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_refilc_round" >
<intent-filter>
@@ -525,7 +525,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_refulc"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_refulc_round" >
<intent-filter>
@@ -539,7 +539,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_repont"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_repont_round" >
<intent-filter>
@@ -553,7 +553,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_szivacs"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_szivacs_round" >
<intent-filter>
@@ -567,7 +567,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_tisza"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_tisza_round" >
<intent-filter>
@@ -581,7 +581,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_trans"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_trans_round" >
<intent-filter>
@@ -595,7 +595,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_trans_f"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_trans_f_round" >
<intent-filter>
@@ -609,7 +609,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_void_icon"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_void_icon_round" >
<intent-filter>
@@ -623,7 +623,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_xmas1"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_xmas1_round" >
<intent-filter>
@@ -637,7 +637,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_xmas2"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_xmas2_round" >
<intent-filter>
@@ -651,7 +651,7 @@
android:targetActivity=".MainActivity"
android:exported="true"
android:enabled="false"
android:icon="@mipmap/ic_xmas3"
android:icon="@mipmap/launcher_icon"
android:roundIcon="@mipmap/ic_xmas3_round" >
<intent-filter>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -8,6 +8,7 @@
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:windowSplashScreenBackground">#7ca120</item>
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
<item name="android:windowSplashScreenIconBackgroundColor">#7ca120</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your

View File

@@ -8,6 +8,7 @@
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:windowSplashScreenBackground">#7ca120</item>
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
<item name="android:windowSplashScreenIconBackgroundColor">#7ca120</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -1,16 +1,21 @@
flutter_native_splash:
color: "#7ca120"
image: assets/images/logos/splash.png
# Keep image centered instead of fill-scaled (stops icon looking zoomed/cropped)
android_gravity: center
# Dark mode - same color as light mode for consistency
color_dark: "#7ca120"
image_dark: assets/images/logos/splash.png
# Android 12+ uses 960×960 image with logo in 640px circle (generated by codegen) to avoid cropping
android_12:
image: assets/images/logos/splash.png
image: assets/images/logos/splash_android12.png
color: "#7ca120"
color_dark: "#7ca120"
image_dark: assets/images/logos/splash.png
image_dark: assets/images/logos/splash_android12.png
icon_background_color: "#7ca120"
icon_background_color_dark: "#7ca120"
ios: true
web: false

View File

@@ -1,5 +1,6 @@
import 'dart:io';
import 'package:image/image.dart' as img;
import 'package:path/path.dart' as p;
void main() async {
@@ -30,6 +31,15 @@ void main() async {
ran = true;
}
if (_splashOutOfDate(root)) {
await _generateAndroid12SplashImage(root);
stdout.writeln(
'Splash out of date, running flutter_native_splash:create...',
);
await _run('dart', ['run', 'flutter_native_splash:create'], root);
ran = true;
}
if (!ran) {
stdout.writeln('All generated files are up to date.');
}
@@ -118,6 +128,54 @@ bool _isarOutOfDate(String root) {
return false;
}
bool _splashOutOfDate(String root) {
final config = File(p.join(root, 'flutter_native_splash.yaml'));
final splashImage = File(p.join(root, 'assets/images/logos/splash.png'));
final inputs = [config, splashImage]
.where((f) => f.existsSync())
.map((f) => File(p.canonicalize(f.path)))
.toList();
if (inputs.isEmpty) return false;
final output = File(
p.join(root, 'android/app/src/main/res/drawable/launch_background.xml'),
);
return _anyNewerThan(inputs, output);
}
Future<void> _generateAndroid12SplashImage(String root) async {
const size = 960;
const circleDiameter = 640.0;
final splashPath = p.join(root, 'assets/images/logos/splash.png');
final outPath = p.join(root, 'assets/images/logos/splash_android12.png');
final splashFile = File(splashPath);
if (!splashFile.existsSync()) return;
final bytes = await splashFile.readAsBytes();
final logo = img.decodeImage(bytes);
if (logo == null) return;
final scale = (circleDiameter / logo.width).clamp(0.0, 1.0);
final scaleH = (circleDiameter / logo.height).clamp(0.0, 1.0);
final s = scale < scaleH ? scale : scaleH;
final w = (logo.width * s).round();
final h = (logo.height * s).round();
final resized = img.copyResize(logo, width: w, height: h);
final canvas = img.Image(width: size, height: size, numChannels: 4);
img.compositeImage(
canvas,
resized,
dstX: (size - w) ~/ 2,
dstY: (size - h) ~/ 2,
);
await File(outPath).writeAsBytes(img.encodePng(canvas));
stdout.writeln(
'Generated $outPath (960x960, logo fits in ${circleDiameter.toInt()}px circle).',
);
}
Future<bool> _run(
String executable,
List<String> args,