From b36245aafca1d363578d6b34b339f6dbaef451de Mon Sep 17 00:00:00 2001 From: garyqian Date: Thu, 19 Nov 2020 20:49:28 -0800 Subject: [PATCH 1/4] Fix java warnings for unchecked conversions --- .../PlayStoreDynamicFeatureManager.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/shell/platform/android/io/flutter/embedding/engine/dynamicfeatures/PlayStoreDynamicFeatureManager.java b/shell/platform/android/io/flutter/embedding/engine/dynamicfeatures/PlayStoreDynamicFeatureManager.java index de613cacbcf2f..159709c90d7cc 100644 --- a/shell/platform/android/io/flutter/embedding/engine/dynamicfeatures/PlayStoreDynamicFeatureManager.java +++ b/shell/platform/android/io/flutter/embedding/engine/dynamicfeatures/PlayStoreDynamicFeatureManager.java @@ -164,8 +164,8 @@ public PlayStoreDynamicFeatureManager(@NonNull Context context, @Nullable Flutte splitInstallManager = SplitInstallManagerFactory.create(context); listener = new FeatureInstallStateUpdatedListener(); splitInstallManager.registerListener(listener); - sessionIdToName = new HashMap(); - sessionIdToLoadingUnitId = new HashMap(); + sessionIdToName = new HashMap(); + sessionIdToLoadingUnitId = new HashMap(); } public void setJNI(@NonNull FlutterJNI flutterJNI) { @@ -293,10 +293,10 @@ public void loadDartLibrary(int loadingUnitId, String moduleName) { // performant and robust. // Search directly in APKs first - List apkPaths = new ArrayList(); + List apkPaths = new ArrayList(); // If not found in APKs, we check in extracted native libs for the lib directly. - List soPaths = new ArrayList(); - Queue searchFiles = new LinkedList(); + List soPaths = new ArrayList(); + Queue searchFiles = new LinkedList(); searchFiles.add(context.getFilesDir()); while (!searchFiles.isEmpty()) { File file = searchFiles.remove(); From ea66cce7e75286eecc730d2e6afa051e78c36596 Mon Sep 17 00:00:00 2001 From: garyqian Date: Thu, 19 Nov 2020 22:41:03 -0800 Subject: [PATCH 2/4] Use SparseArray --- .../dynamicfeatures/PlayStoreDynamicFeatureManager.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/shell/platform/android/io/flutter/embedding/engine/dynamicfeatures/PlayStoreDynamicFeatureManager.java b/shell/platform/android/io/flutter/embedding/engine/dynamicfeatures/PlayStoreDynamicFeatureManager.java index 159709c90d7cc..98ba9dafbbd35 100644 --- a/shell/platform/android/io/flutter/embedding/engine/dynamicfeatures/PlayStoreDynamicFeatureManager.java +++ b/shell/platform/android/io/flutter/embedding/engine/dynamicfeatures/PlayStoreDynamicFeatureManager.java @@ -8,6 +8,8 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.AssetManager; import android.os.Build; +import android.util.SparseArray; +import android.util.SparseIntArray; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.google.android.play.core.splitinstall.SplitInstallException; @@ -22,7 +24,6 @@ import io.flutter.embedding.engine.FlutterJNI; import java.io.File; import java.util.ArrayList; -import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -164,8 +165,8 @@ public PlayStoreDynamicFeatureManager(@NonNull Context context, @Nullable Flutte splitInstallManager = SplitInstallManagerFactory.create(context); listener = new FeatureInstallStateUpdatedListener(); splitInstallManager.registerListener(listener); - sessionIdToName = new HashMap(); - sessionIdToLoadingUnitId = new HashMap(); + sessionIdToName = new SparseArray(); + sessionIdToLoadingUnitId = new SparseIntArray(); } public void setJNI(@NonNull FlutterJNI flutterJNI) { From c5163d76bfc5c142fda03444bac7d262334a7f3b Mon Sep 17 00:00:00 2001 From: garyqian Date: Thu, 19 Nov 2020 22:51:55 -0800 Subject: [PATCH 3/4] Implement SparseArrays properly --- .../dynamicfeatures/PlayStoreDynamicFeatureManager.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/shell/platform/android/io/flutter/embedding/engine/dynamicfeatures/PlayStoreDynamicFeatureManager.java b/shell/platform/android/io/flutter/embedding/engine/dynamicfeatures/PlayStoreDynamicFeatureManager.java index 98ba9dafbbd35..4a323538a5feb 100644 --- a/shell/platform/android/io/flutter/embedding/engine/dynamicfeatures/PlayStoreDynamicFeatureManager.java +++ b/shell/platform/android/io/flutter/embedding/engine/dynamicfeatures/PlayStoreDynamicFeatureManager.java @@ -26,7 +26,6 @@ import java.util.ArrayList; import java.util.LinkedList; import java.util.List; -import java.util.Map; import java.util.Queue; /** @@ -41,8 +40,8 @@ public class PlayStoreDynamicFeatureManager implements DynamicFeatureManager { private @NonNull Context context; // Each request to install a feature module gets a session ID. These maps associate // the session ID with the loading unit and module name that was requested. - private @NonNull Map sessionIdToName; - private @NonNull Map sessionIdToLoadingUnitId; + private @NonNull SparseArray sessionIdToName; + private @NonNull SparseIntArray sessionIdToLoadingUnitId; private FeatureInstallStateUpdatedListener listener; From 027e8af405d1d5b25af2adc2ae03e0db2eeb327a Mon Sep 17 00:00:00 2001 From: garyqian Date: Thu, 19 Nov 2020 22:52:48 -0800 Subject: [PATCH 4/4] Impl --- .../PlayStoreDynamicFeatureManager.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/shell/platform/android/io/flutter/embedding/engine/dynamicfeatures/PlayStoreDynamicFeatureManager.java b/shell/platform/android/io/flutter/embedding/engine/dynamicfeatures/PlayStoreDynamicFeatureManager.java index 4a323538a5feb..ced44101f5332 100644 --- a/shell/platform/android/io/flutter/embedding/engine/dynamicfeatures/PlayStoreDynamicFeatureManager.java +++ b/shell/platform/android/io/flutter/embedding/engine/dynamicfeatures/PlayStoreDynamicFeatureManager.java @@ -47,7 +47,7 @@ public class PlayStoreDynamicFeatureManager implements DynamicFeatureManager { private class FeatureInstallStateUpdatedListener implements SplitInstallStateUpdatedListener { public void onStateUpdate(SplitInstallSessionState state) { - if (sessionIdToName.containsKey(state.sessionId())) { + if (sessionIdToName.get(state.sessionId()) != null) { // TODO(garyq): Add system channel for split aot messages. switch (state.status()) { case SplitInstallSessionStatus.FAILED: @@ -63,8 +63,8 @@ public void onStateUpdate(SplitInstallSessionState state) { sessionIdToLoadingUnitId.get(state.sessionId()), "Module install failed with " + state.errorCode(), true); - sessionIdToName.remove(state.sessionId()); - sessionIdToLoadingUnitId.remove(state.sessionId()); + sessionIdToName.delete(state.sessionId()); + sessionIdToLoadingUnitId.delete(state.sessionId()); break; } case SplitInstallSessionStatus.INSTALLED: @@ -83,8 +83,8 @@ public void onStateUpdate(SplitInstallSessionState state) { loadDartLibrary( sessionIdToLoadingUnitId.get(state.sessionId()), sessionIdToName.get(state.sessionId())); - sessionIdToName.remove(state.sessionId()); - sessionIdToLoadingUnitId.remove(state.sessionId()); + sessionIdToName.delete(state.sessionId()); + sessionIdToLoadingUnitId.delete(state.sessionId()); break; } case SplitInstallSessionStatus.CANCELED: @@ -94,7 +94,8 @@ public void onStateUpdate(SplitInstallSessionState state) { String.format( "Module \"%s\" (sessionId %d) install canceled.", sessionIdToName.get(state.sessionId()), state.sessionId())); - sessionIdToName.remove(state.sessionId()); + sessionIdToName.delete(state.sessionId()); + sessionIdToLoadingUnitId.delete(state.sessionId()); break; } case SplitInstallSessionStatus.CANCELING: