fix: android 15 warnings

This commit is contained in:
cogwheel0
2025-08-28 20:18:24 +05:30
parent e2887067f5
commit 3d8948c84a
5 changed files with 25 additions and 39 deletions

View File

@@ -28,12 +28,14 @@ android {
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
// Align with modern Android Gradle Plugin requirements
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
// Generate JVM bytecode targeting Java 17
jvmTarget = JavaVersion.VERSION_17.toString()
}
signingConfigs {

View File

@@ -10,23 +10,8 @@ class MainActivity : FlutterActivity() {
private lateinit var backgroundStreamingHandler: BackgroundStreamingHandler
override fun onCreate(savedInstanceState: Bundle?) {
// Enable edge-to-edge display for Android 15+ compatibility
// This ensures proper handling of system bars and insets
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
// For Android 15+ (API 35), try to use enableEdgeToEdge if available
try {
// Use reflection to call EdgeToEdge.enable() for forward compatibility
val edgeToEdgeClass = Class.forName("androidx.activity.EdgeToEdge")
val enableMethod = edgeToEdgeClass.getMethod("enable", android.app.Activity::class.java)
enableMethod.invoke(null, this)
} catch (e: Exception) {
// Fallback to WindowCompat if EdgeToEdge is not available
WindowCompat.setDecorFitsSystemWindows(window, false)
}
} else {
// For older versions, use WindowCompat for backward compatibility
WindowCompat.setDecorFitsSystemWindows(window, false)
}
// Ensure content draws behind system bars (backwards compatible helper)
WindowCompat.setDecorFitsSystemWindows(window, false)
super.onCreate(savedInstanceState)
}
@@ -45,4 +30,4 @@ class MainActivity : FlutterActivity() {
backgroundStreamingHandler.cleanup()
}
}
}
}

View File

@@ -10,8 +10,7 @@
<!-- Android 15+ edge-to-edge configuration -->
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowLayoutInDisplayCutoutMode">always</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<!-- Do not set status/navigation bar colors on API 35+ -->
<item name="android:enforceNavigationBarContrast">false</item>
<item name="android:enforceStatusBarContrast">false</item>
</style>
@@ -25,9 +24,8 @@
<item name="android:windowBackground">?android:colorBackground</item>
<!-- Android 15+ edge-to-edge configuration -->
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<!-- Do not set status/navigation bar colors on API 35+ -->
<item name="android:enforceNavigationBarContrast">false</item>
<item name="android:enforceStatusBarContrast">false</item>
</style>
</resources>
</resources>

View File

@@ -326,25 +326,21 @@ class PlatformService {
statusBarIconBrightness: isDarkContent
? Brightness.dark
: Brightness.light,
// iOS: it's safe to pass a color; leave behavior unchanged
statusBarColor: backgroundColor,
),
);
} else {
// For Android 15+, use edge-to-edge approach
// Avoid deprecated setStatusBarColor, setNavigationBarColor, setNavigationBarDividerColor
// Android: Avoid passing any bar colors to prevent invoking
// deprecated Window.setStatusBarColor / setNavigationBarColor / setNavigationBarDividerColor
// on Android 15+. Only control icon brightness; colors come from theme + EdgeToEdge.
SystemChrome.setSystemUIOverlayStyle(
SystemUiOverlayStyle(
// Only set icon brightness for edge-to-edge compatibility
statusBarIconBrightness: isDarkContent
? Brightness.dark
: Brightness.light,
systemNavigationBarIconBrightness: isDarkContent
? Brightness.dark
: Brightness.light,
// Use transparent colors for proper edge-to-edge display
statusBarColor: Colors.transparent,
systemNavigationBarColor: Colors.transparent,
systemNavigationBarDividerColor: Colors.transparent,
statusBarIconBrightness:
isDarkContent ? Brightness.dark : Brightness.light,
systemNavigationBarIconBrightness:
isDarkContent ? Brightness.dark : Brightness.light,
// Do NOT set status/navigation bar colors on Android.
),
);
}

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'core/services/navigation_service.dart';
import 'core/widgets/error_boundary.dart';
@@ -23,6 +24,10 @@ import 'core/services/share_receiver_service.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// Enable edge-to-edge globally (back-compat on pre-Android 15)
// Pairs with Activity's EdgeToEdge.enable and our SafeArea usage.
await SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
final sharedPrefs = await SharedPreferences.getInstance();
const secureStorage = FlutterSecureStorage();