diff --git a/audio_service/CHANGELOG.md b/audio_service/CHANGELOG.md index 008665f0..eb0ae747 100644 --- a/audio_service/CHANGELOG.md +++ b/audio_service/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.18.6 + +* Add SkParagraph enable flag to the created engine + by (AudioServicePlugin) on Android (@limitless-brain). + ## 0.18.5 * Add AudioServiceFragmentActivity. diff --git a/audio_service/android/src/main/java/com/ryanheise/audioservice/AudioServicePlugin.java b/audio_service/android/src/main/java/com/ryanheise/audioservice/AudioServicePlugin.java index b4143bc7..55aaff83 100644 --- a/audio_service/android/src/main/java/com/ryanheise/audioservice/AudioServicePlugin.java +++ b/audio_service/android/src/main/java/com/ryanheise/audioservice/AudioServicePlugin.java @@ -4,6 +4,8 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioTrack; @@ -36,6 +38,7 @@ import java.util.concurrent.Executors; import io.flutter.embedding.android.FlutterActivity; +import io.flutter.embedding.engine.loader.FlutterLoader; import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; import io.flutter.embedding.engine.plugins.activity.ActivityAware; @@ -67,10 +70,35 @@ public static String getFlutterEngineId() { } public static synchronized FlutterEngine getFlutterEngine(Context context) { FlutterEngine flutterEngine = FlutterEngineCache.getInstance().get(flutterEngineId); + + // Since flutter 3 offer disabling SKParagraph + // And it has a bug that effected most of android flutter apps + // Check for the flag if it's available in manifest file + + ApplicationInfo applicationInfo = + null; + String[] args = new String[1]; + try { + applicationInfo = context + .getPackageManager() + .getApplicationInfo( + context.getPackageName(), PackageManager.GET_META_DATA); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + + if (applicationInfo != null) { + Bundle metaData = applicationInfo.metaData; + if (metaData != null) { + final String skEnabled = metaData.getBoolean("io.flutter.embedding.android.EnableSkParagraph", true) ? "true" : "false"; + args[0] = ("--enable-skparagraph=".concat(skEnabled)); + } + } + if (flutterEngine == null) { // XXX: The constructor triggers onAttachedToEngine so this variable doesn't help us. // Maybe need a boolean flag to tell us we're currently loading the main flutter engine. - flutterEngine = new FlutterEngine(context.getApplicationContext()); + flutterEngine = new FlutterEngine(context.getApplicationContext(), args); String initialRoute = null; if (context instanceof FlutterActivity) { final FlutterActivity activity = (FlutterActivity)context; diff --git a/audio_service/pubspec.yaml b/audio_service/pubspec.yaml index d155b7d2..9d7ef6b7 100644 --- a/audio_service/pubspec.yaml +++ b/audio_service/pubspec.yaml @@ -1,6 +1,6 @@ name: audio_service description: Flutter plugin to play audio in the background while the screen is off. -version: 0.18.5 +version: 0.18.6 homepage: https://github.com/ryanheise/audio_service/tree/master/audio_service environment: