summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/widget/ProgressBar.java17
-rw-r--r--core/tests/coretests/src/android/widget/ProgressBarTest.java21
2 files changed, 34 insertions, 4 deletions
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index 6e43d0f1c6cd..2a8a92882310 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -16,6 +16,8 @@
package android.widget;
+import static android.view.accessibility.Flags.indeterminateRangeInfo;
+
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
@@ -2364,15 +2366,22 @@ public class ProgressBar extends View {
public void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfoInternal(info);
- if (!isIndeterminate()) {
- AccessibilityNodeInfo.RangeInfo rangeInfo = AccessibilityNodeInfo.RangeInfo.obtain(
+ AccessibilityNodeInfo.RangeInfo rangeInfo = null;
+ if (isIndeterminate()) {
+ if (indeterminateRangeInfo()) {
+ rangeInfo = AccessibilityNodeInfo.RangeInfo.INDETERMINATE;
+ }
+ } else {
+ rangeInfo = new AccessibilityNodeInfo.RangeInfo(
AccessibilityNodeInfo.RangeInfo.RANGE_TYPE_INT, getMin(), getMax(),
getProgress());
- info.setRangeInfo(rangeInfo);
}
- // Only set the default state description when custom state descripton is null.
+ info.setRangeInfo(rangeInfo);
+
+ // Only set the default state description when custom state description is null.
if (getStateDescription() == null) {
+ // TODO(b/380340432): Remove after accessibility services stop relying on this.
if (isIndeterminate()) {
info.setStateDescription(getResources().getString(R.string.in_progress));
} else {
diff --git a/core/tests/coretests/src/android/widget/ProgressBarTest.java b/core/tests/coretests/src/android/widget/ProgressBarTest.java
index fa6dd31923ac..0cbfaa97faef 100644
--- a/core/tests/coretests/src/android/widget/ProgressBarTest.java
+++ b/core/tests/coretests/src/android/widget/ProgressBarTest.java
@@ -23,8 +23,12 @@ import static org.junit.Assert.assertTrue;
import android.app.Instrumentation;
import android.platform.test.annotations.Presubmit;
+import android.platform.test.annotations.RequiresFlagsEnabled;
+import android.platform.test.flag.junit.CheckFlagsRule;
+import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.view.View;
import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.accessibility.Flags;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
@@ -32,6 +36,7 @@ import androidx.test.platform.app.InstrumentationRegistry;
import org.junit.After;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -40,6 +45,10 @@ import org.junit.runner.RunWith;
@Presubmit
public class ProgressBarTest {
private final Instrumentation mInstrumentation = InstrumentationRegistry.getInstrumentation();
+
+ @Rule
+ public final CheckFlagsRule mCheckFlagsRule =
+ DeviceFlagsValueProvider.createCheckFlagsRule();
private ProgressBar mBar;
private AccessibilityNodeInfo mInfo;
@@ -181,4 +190,16 @@ public class ProgressBarTest {
mBar.onInitializeAccessibilityNodeInfo(mInfo);
assertEquals("custom state", mInfo.getStateDescription().toString());
}
+
+ @Test
+ @RequiresFlagsEnabled(Flags.FLAG_INDETERMINATE_RANGE_INFO)
+ public void testRangeInfo_indeterminateProgressBar_usesTypeIndeterminate() {
+ mBar.setIndeterminate(true);
+ assertTrue(mBar.isIndeterminate());
+
+ mBar.onInitializeAccessibilityNodeInfo(mInfo);
+
+ assertEquals(mInfo.getRangeInfo().getType(),
+ AccessibilityNodeInfo.RangeInfo.RANGE_TYPE_INDETERMINATE);
+ }
}