diff --git a/README.md b/README.md index a5005f7e0..36f671091 100644 --- a/README.md +++ b/README.md @@ -128,10 +128,5 @@ To run the app: # flutter run -t lib/main_play.dart --flavor play ``` -To run the app on API 19 emulators: -``` -# flutter run -t lib/main_play.dart --flavor play --enable-software-rendering -``` - [Version badge]: https://img.shields.io/github/v/release/deckerst/aves?include_prereleases&sort=semver [Build badge]: https://img.shields.io/github/workflow/status/deckerst/aves/Quality%20check diff --git a/android/app/build.gradle b/android/app/build.gradle index 003f3608d..f85826a85 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -190,8 +190,8 @@ dependencies { // - https://jitpack.io/p/deckerst/mp4parser // - https://jitpack.io/p/deckerst/pixymeta-android implementation 'com.github.deckerst:Android-TiffBitmapFactory:876e53870a' - implementation 'com.github.deckerst.mp4parser:isoparser:6bfa6c23f7' - implementation 'com.github.deckerst.mp4parser:muxer:6bfa6c23f7' + implementation 'com.github.deckerst.mp4parser:isoparser:7b698ab674' + implementation 'com.github.deckerst.mp4parser:muxer:7b698ab674' implementation 'com.github.deckerst:pixymeta-android:706bd73d6e' // huawei flavor only diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index a17675bce..619937df6 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -172,9 +172,10 @@ This change eventually prevents building the app with Flutter v3.3.3. + diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/HomeWidgetConfigureActivity.kt b/android/app/src/main/kotlin/deckers/thibault/aves/HomeWidgetConfigureActivity.kt index a7026b9e1..050749186 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/HomeWidgetConfigureActivity.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/HomeWidgetConfigureActivity.kt @@ -3,12 +3,17 @@ package deckers.thibault.aves import android.appwidget.AppWidgetManager import android.content.Intent import android.os.Bundle +import deckers.thibault.aves.utils.FlutterUtils +import deckers.thibault.aves.utils.FlutterUtils.enableSoftwareRendering import io.flutter.plugin.common.MethodChannel class HomeWidgetSettingsActivity : MainActivity() { private var appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID public override fun onCreate(savedInstanceState: Bundle?) { + if (FlutterUtils.isSoftwareRenderingRequired()) { + intent.enableSoftwareRendering() + } super.onCreate(savedInstanceState) // cancel if user does not complete widget setup diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/MainActivity.kt b/android/app/src/main/kotlin/deckers/thibault/aves/MainActivity.kt index d2cade1c9..fc198f5ca 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/MainActivity.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/MainActivity.kt @@ -21,6 +21,8 @@ import deckers.thibault.aves.channel.calls.* import deckers.thibault.aves.channel.calls.window.ActivityWindowHandler import deckers.thibault.aves.channel.calls.window.WindowHandler import deckers.thibault.aves.channel.streams.* +import deckers.thibault.aves.utils.FlutterUtils.enableSoftwareRendering +import deckers.thibault.aves.utils.FlutterUtils.isSoftwareRenderingRequired import deckers.thibault.aves.utils.LogUtils import deckers.thibault.aves.utils.getParcelableExtraCompat import io.flutter.embedding.android.FlutterActivity @@ -40,6 +42,14 @@ open class MainActivity : FlutterActivity() { override fun onCreate(savedInstanceState: Bundle?) { Log.i(LOG_TAG, "onCreate intent=$intent") + + if (isSoftwareRenderingRequired()) { + intent.enableSoftwareRendering() + // running the app from Android Studio automatically adds to the intent the `start-paused` flag + // so the IDE can connect to the app, but launching on KitKat emulators fails because of a timeout + intent.removeExtra("start-paused") + } + intent.extras?.takeUnless { it.isEmpty }?.let { Log.i(LOG_TAG, "onCreate intent extras=$it") } diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/WallpaperActivity.kt b/android/app/src/main/kotlin/deckers/thibault/aves/WallpaperActivity.kt index 8192d1ce6..a4285c3cf 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/WallpaperActivity.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/WallpaperActivity.kt @@ -14,6 +14,8 @@ import deckers.thibault.aves.channel.calls.* import deckers.thibault.aves.channel.calls.window.ActivityWindowHandler import deckers.thibault.aves.channel.calls.window.WindowHandler import deckers.thibault.aves.channel.streams.ImageByteStreamHandler +import deckers.thibault.aves.utils.FlutterUtils +import deckers.thibault.aves.utils.FlutterUtils.enableSoftwareRendering import deckers.thibault.aves.utils.LogUtils import deckers.thibault.aves.utils.getParcelableExtraCompat import io.flutter.embedding.android.FlutterActivity @@ -24,6 +26,9 @@ class WallpaperActivity : FlutterActivity() { private lateinit var intentDataMap: MutableMap override fun onCreate(savedInstanceState: Bundle?) { + if (FlutterUtils.isSoftwareRenderingRequired()) { + intent.enableSoftwareRendering() + } super.onCreate(savedInstanceState) Log.i(LOG_TAG, "onCreate intent=$intent") diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/utils/FlutterUtils.kt b/android/app/src/main/kotlin/deckers/thibault/aves/utils/FlutterUtils.kt index afcf70c6e..dc1377cf0 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/utils/FlutterUtils.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/utils/FlutterUtils.kt @@ -1,6 +1,8 @@ package deckers.thibault.aves.utils import android.content.Context +import android.content.Intent +import android.os.Build import android.os.Handler import android.os.Looper import android.util.Log @@ -63,4 +65,29 @@ object FlutterUtils { r.run() } } + + fun Intent.enableSoftwareRendering() { + putExtra("enable-software-rendering", true) + Log.i(LOG_TAG, "Enable software rendering") + } + + fun isSoftwareRenderingRequired() = Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT && isEmulator + + private val isEmulator: Boolean + get() = (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic") + || Build.FINGERPRINT.startsWith("generic") + || Build.FINGERPRINT.startsWith("unknown") + || Build.HARDWARE.contains("goldfish") + || Build.HARDWARE.contains("ranchu") + || Build.MODEL.contains("google_sdk") + || Build.MODEL.contains("Emulator") + || Build.MODEL.contains("Android SDK built for x86") + || Build.MANUFACTURER.contains("Genymotion") + || Build.PRODUCT.contains("sdk_google") + || Build.PRODUCT.contains("google_sdk") + || Build.PRODUCT.contains("sdk") + || Build.PRODUCT.contains("sdk_x86") + || Build.PRODUCT.contains("vbox86p") + || Build.PRODUCT.contains("emulator") + || Build.PRODUCT.contains("simulator")) } \ No newline at end of file