diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-04-23 16:34:38 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-04-23 16:34:38 +0000 |
commit | 987c781da19629890876f0d9e7086592d66b4184 (patch) | |
tree | 72b3727601d9cd7d6f12ddf68e887e1805f7e3f8 | |
parent | dd3ca07974c7308692442f5324aa7327787a6af0 (diff) | |
parent | 7e4fafa7827a320b7d0d8d6274a7eb18bf8bde5f (diff) | |
download | support-androidx-wear-platform-release.tar.gz |
Merge "Merge cherrypicks of ['android-review.googlesource.com/2763072', 'android-review.googlesource.com/3055643'] into androidx-wear-platform-release." into androidx-wear-platform-releaseandroidx-wear-platform-release
3 files changed, 38 insertions, 1 deletions
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/BoundDynamicTypeImpl.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/BoundDynamicTypeImpl.java index bbae3dce988..4481752f703 100644 --- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/BoundDynamicTypeImpl.java +++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/BoundDynamicTypeImpl.java @@ -18,6 +18,7 @@ package androidx.wear.protolayout.expression.pipeline; import android.os.Handler; import android.os.Looper; +import android.util.Log; import androidx.annotation.UiThread; @@ -28,8 +29,11 @@ import java.util.List; * evaluation. */ class BoundDynamicTypeImpl implements BoundDynamicType { + private static final String TAG = "BoundDynamicTypeImpl"; + private final List<DynamicDataNode<?>> mNodes; private final QuotaManager mDynamicDataNodesQuotaManager; + private boolean mIsClosed = false; BoundDynamicTypeImpl( List<DynamicDataNode<?>> nodes, QuotaManager dynamicDataNodesQuotaManager) { @@ -88,8 +92,17 @@ class BoundDynamicTypeImpl implements BoundDynamicType { } } + /** + * Closes this {@link BoundDynamicTypeImpl} instance and releases any allocated quota. This + * method must be called only once on each {@link BoundDynamicTypeImpl} instance. + */ @UiThread private void closeInternal() { + if (mIsClosed) { + Log.w(TAG, "close() method was called more than once."); + return; + } + mIsClosed = true; mNodes.stream() .filter(n -> n instanceof DynamicDataSourceNode) .forEach(n -> ((DynamicDataSourceNode<?>) n).destroy()); diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluator.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluator.java index 41ae6e5ba5e..a73452faf58 100644 --- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluator.java +++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluator.java @@ -108,7 +108,15 @@ import java.util.function.Supplier; public class DynamicTypeEvaluator { private static final String TAG = "DynamicTypeEvaluator"; private static final QuotaManager NO_OP_QUOTA_MANAGER = - new FixedQuotaManagerImpl(Integer.MAX_VALUE); + new QuotaManager() { + @Override + public boolean tryAcquireQuota(int quota) { + return true; + } + @Override + public void releaseQuota(int quota) { + } + }; @NonNull private static final QuotaManager DISABLED_ANIMATIONS_QUOTA_MANAGER = diff --git a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluatorTest.java b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluatorTest.java index d1fcf4cc91b..ae0ab5a896e 100644 --- a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluatorTest.java +++ b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluatorTest.java @@ -132,6 +132,22 @@ public class DynamicTypeEvaluatorTest { verify(provider).clearReceiver(); } + @Test + public void closeCalledMultipleTimesOnBoundDynamicType_doesNotThrow() + throws EvaluationException { + DynamicTypeEvaluator evaluator = + createEvaluatorWithQuota( + /* animationQuota= */ unlimitedQuota(), + /* dynamicTypesQuota= */ new FixedQuotaManagerImpl(1)); + ArrayList<Boolean> results = new ArrayList<>(); + BoundDynamicType boundDynamicType = evaluator.bind( + createSingleNodeDynamicBoolRequest(results)); + + for (int i = 0; i < 10; i++) { + boundDynamicType.close(); + } + } + @NonNull private static DynamicTypeBindingRequest createSingleNodeDynamicBoolRequest( ArrayList<Boolean> results) { |