aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-04-23 16:34:38 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-04-23 16:34:38 +0000
commit987c781da19629890876f0d9e7086592d66b4184 (patch)
tree72b3727601d9cd7d6f12ddf68e887e1805f7e3f8
parentdd3ca07974c7308692442f5324aa7327787a6af0 (diff)
parent7e4fafa7827a320b7d0d8d6274a7eb18bf8bde5f (diff)
downloadsupport-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
-rw-r--r--wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/BoundDynamicTypeImpl.java13
-rw-r--r--wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluator.java10
-rw-r--r--wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluatorTest.java16
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) {