summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/current.txt34
-rw-r--r--core/api/test-current.txt33
-rw-r--r--core/java/android/os/VibrationEffect.java68
-rw-r--r--core/java/android/os/Vibrator.java4
-rw-r--r--core/java/android/os/vibrator/VibratorFrequencyProfile.java11
5 files changed, 82 insertions, 68 deletions
diff --git a/core/api/current.txt b/core/api/current.txt
index 3ca7dadfcddc..8f71a2f15713 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -32774,9 +32774,6 @@ package android.os {
method public static android.os.VibrationEffect createWaveform(long[], int[], int);
method public int describeContents();
method @NonNull public static android.os.VibrationEffect.Composition startComposition();
- method @NonNull public static android.os.VibrationEffect.WaveformBuilder startWaveform();
- method @NonNull public static android.os.VibrationEffect.WaveformBuilder startWaveform(@NonNull android.os.VibrationEffect.VibrationParameter);
- method @NonNull public static android.os.VibrationEffect.WaveformBuilder startWaveform(@NonNull android.os.VibrationEffect.VibrationParameter, @NonNull android.os.VibrationEffect.VibrationParameter);
field @NonNull public static final android.os.Parcelable.Creator<android.os.VibrationEffect> CREATOR;
field public static final int DEFAULT_AMPLITUDE = -1; // 0xffffffff
field public static final int EFFECT_CLICK = 0; // 0x0
@@ -32786,13 +32783,10 @@ package android.os {
}
public static final class VibrationEffect.Composition {
- method @NonNull public android.os.VibrationEffect.Composition addEffect(@NonNull android.os.VibrationEffect);
- method @NonNull public android.os.VibrationEffect.Composition addOffDuration(@NonNull java.time.Duration);
method @NonNull public android.os.VibrationEffect.Composition addPrimitive(int);
method @NonNull public android.os.VibrationEffect.Composition addPrimitive(int, @FloatRange(from=0.0f, to=1.0f) float);
method @NonNull public android.os.VibrationEffect.Composition addPrimitive(int, @FloatRange(from=0.0f, to=1.0f) float, @IntRange(from=0) int);
method @NonNull public android.os.VibrationEffect compose();
- method @NonNull public android.os.VibrationEffect.Composition repeatEffectIndefinitely(@NonNull android.os.VibrationEffect);
field public static final int PRIMITIVE_CLICK = 1; // 0x1
field public static final int PRIMITIVE_LOW_TICK = 8; // 0x8
field public static final int PRIMITIVE_QUICK_FALL = 6; // 0x6
@@ -32803,34 +32797,17 @@ package android.os {
field public static final int PRIMITIVE_TICK = 7; // 0x7
}
- public static final class VibrationEffect.Composition.UnreachableAfterRepeatingIndefinitelyException extends java.lang.IllegalStateException {
- }
-
- public static class VibrationEffect.VibrationParameter {
- method @NonNull public static android.os.VibrationEffect.VibrationParameter targetAmplitude(@FloatRange(from=0, to=1) float);
- method @NonNull public static android.os.VibrationEffect.VibrationParameter targetFrequency(@FloatRange(from=1) float);
- }
-
- public static final class VibrationEffect.WaveformBuilder {
- method @NonNull public android.os.VibrationEffect.WaveformBuilder addSustain(@NonNull java.time.Duration);
- method @NonNull public android.os.VibrationEffect.WaveformBuilder addTransition(@NonNull java.time.Duration, @NonNull android.os.VibrationEffect.VibrationParameter);
- method @NonNull public android.os.VibrationEffect.WaveformBuilder addTransition(@NonNull java.time.Duration, @NonNull android.os.VibrationEffect.VibrationParameter, @NonNull android.os.VibrationEffect.VibrationParameter);
- method @NonNull public android.os.VibrationEffect build();
- }
-
public abstract class Vibrator {
method public final int areAllEffectsSupported(@NonNull int...);
method public final boolean areAllPrimitivesSupported(@NonNull int...);
method @NonNull public int[] areEffectsSupported(@NonNull int...);
method @NonNull public boolean[] arePrimitivesSupported(@NonNull int...);
method @RequiresPermission(android.Manifest.permission.VIBRATE) public abstract void cancel();
- method @Nullable public android.os.vibrator.VibratorFrequencyProfile getFrequencyProfile();
method public int getId();
method @NonNull public int[] getPrimitiveDurations(@NonNull int...);
method public float getQFactor();
method public float getResonantFrequency();
method public abstract boolean hasAmplitudeControl();
- method public boolean hasFrequencyControl();
method public abstract boolean hasVibrator();
method @Deprecated @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(long);
method @Deprecated @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(long, android.media.AudioAttributes);
@@ -33161,17 +33138,6 @@ package android.os.strictmode {
}
-package android.os.vibrator {
-
- public final class VibratorFrequencyProfile {
- method public float getMaxAmplitudeMeasurementInterval();
- method @FloatRange(from=0, to=1) @NonNull public float[] getMaxAmplitudeMeasurements();
- method public float getMaxFrequency();
- method public float getMinFrequency();
- }
-
-}
-
package android.preference {
@Deprecated public class CheckBoxPreference extends android.preference.TwoStatePreference {
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 85d73ec7d65a..8efdf82b225d 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -1909,6 +1909,9 @@ package android.os {
method public static android.os.VibrationEffect get(int, boolean);
method @Nullable public static android.os.VibrationEffect get(android.net.Uri, android.content.Context);
method public abstract long getDuration();
+ method @NonNull public static android.os.VibrationEffect.WaveformBuilder startWaveform();
+ method @NonNull public static android.os.VibrationEffect.WaveformBuilder startWaveform(@NonNull android.os.VibrationEffect.VibrationParameter);
+ method @NonNull public static android.os.VibrationEffect.WaveformBuilder startWaveform(@NonNull android.os.VibrationEffect.VibrationParameter, @NonNull android.os.VibrationEffect.VibrationParameter);
field public static final int EFFECT_POP = 4; // 0x4
field public static final int EFFECT_STRENGTH_LIGHT = 0; // 0x0
field public static final int EFFECT_STRENGTH_MEDIUM = 1; // 0x1
@@ -1926,8 +1929,31 @@ package android.os {
field @NonNull public static final android.os.Parcelable.Creator<android.os.VibrationEffect.Composed> CREATOR;
}
+ public static final class VibrationEffect.Composition {
+ method @NonNull public android.os.VibrationEffect.Composition addEffect(@NonNull android.os.VibrationEffect);
+ method @NonNull public android.os.VibrationEffect.Composition addOffDuration(@NonNull java.time.Duration);
+ method @NonNull public android.os.VibrationEffect.Composition repeatEffectIndefinitely(@NonNull android.os.VibrationEffect);
+ }
+
+ public static final class VibrationEffect.Composition.UnreachableAfterRepeatingIndefinitelyException extends java.lang.IllegalStateException {
+ }
+
+ public static class VibrationEffect.VibrationParameter {
+ method @NonNull public static android.os.VibrationEffect.VibrationParameter targetAmplitude(@FloatRange(from=0, to=1) float);
+ method @NonNull public static android.os.VibrationEffect.VibrationParameter targetFrequency(@FloatRange(from=1) float);
+ }
+
+ public static final class VibrationEffect.WaveformBuilder {
+ method @NonNull public android.os.VibrationEffect.WaveformBuilder addSustain(@NonNull java.time.Duration);
+ method @NonNull public android.os.VibrationEffect.WaveformBuilder addTransition(@NonNull java.time.Duration, @NonNull android.os.VibrationEffect.VibrationParameter);
+ method @NonNull public android.os.VibrationEffect.WaveformBuilder addTransition(@NonNull java.time.Duration, @NonNull android.os.VibrationEffect.VibrationParameter, @NonNull android.os.VibrationEffect.VibrationParameter);
+ method @NonNull public android.os.VibrationEffect build();
+ }
+
public abstract class Vibrator {
method public int getDefaultVibrationIntensity(int);
+ method @Nullable public android.os.vibrator.VibratorFrequencyProfile getFrequencyProfile();
+ method public boolean hasFrequencyControl();
field public static final int VIBRATION_INTENSITY_HIGH = 3; // 0x3
field public static final int VIBRATION_INTENSITY_LOW = 1; // 0x1
field public static final int VIBRATION_INTENSITY_MEDIUM = 2; // 0x2
@@ -2105,6 +2131,13 @@ package android.os.vibrator {
field @NonNull public static final android.os.Parcelable.Creator<android.os.vibrator.VibrationEffectSegment> CREATOR;
}
+ public final class VibratorFrequencyProfile {
+ method public float getMaxAmplitudeMeasurementInterval();
+ method @FloatRange(from=0, to=1) @NonNull public float[] getMaxAmplitudeMeasurements();
+ method public float getMaxFrequency();
+ method public float getMinFrequency();
+ }
+
}
package android.permission {
diff --git a/core/java/android/os/VibrationEffect.java b/core/java/android/os/VibrationEffect.java
index 71bc4b36f4e0..0723a628c03d 100644
--- a/core/java/android/os/VibrationEffect.java
+++ b/core/java/android/os/VibrationEffect.java
@@ -413,7 +413,9 @@ public abstract class VibrationEffect implements Parcelable {
* {@link #startWaveform(VibrationEffect.VibrationParameter)}.
*
* @see VibrationEffect.WaveformBuilder
+ * @hide
*/
+ @TestApi
@NonNull
public static WaveformBuilder startWaveform() {
return new WaveformBuilder();
@@ -431,7 +433,9 @@ public abstract class VibrationEffect implements Parcelable {
* @return The {@link VibrationEffect.WaveformBuilder} started with the initial parameters.
*
* @see VibrationEffect.WaveformBuilder
+ * @hide
*/
+ @TestApi
@NonNull
public static WaveformBuilder startWaveform(@NonNull VibrationParameter initialParameter) {
WaveformBuilder builder = startWaveform();
@@ -454,7 +458,9 @@ public abstract class VibrationEffect implements Parcelable {
* @return The {@link VibrationEffect.WaveformBuilder} started with the initial parameters.
*
* @see VibrationEffect.WaveformBuilder
+ * @hide
*/
+ @TestApi
@NonNull
public static WaveformBuilder startWaveform(@NonNull VibrationParameter initialParameter1,
@NonNull VibrationParameter initialParameter2) {
@@ -824,29 +830,8 @@ public abstract class VibrationEffect implements Parcelable {
* .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 1.0f, 100)
* .compose();}</pre>
*
- * <p>Composition elements can also be {@link VibrationEffect} instances, including other
- * compositions, and off durations, which are periods of time when the vibrator will be
- * turned off. Here is an example of a composition that "warms up" with a light tap,
- * a stronger double tap, then repeats a vibration pattern indefinitely:
- *
- * <pre>
- * {@code VibrationEffect repeatingEffect = VibrationEffect.startComposition()
- * .addPrimitive(VibrationEffect.Composition.PRIMITIVE_LOW_TICK)
- * .addOffDuration(Duration.ofMillis(10))
- * .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_DOUBLE_CLICK))
- * .addOffDuration(Duration.ofMillis(50))
- * .addEffect(VibrationEffect.createWaveform(pattern, repeatIndex))
- * .compose();}</pre>
- *
* <p>When choosing to play a composed effect, you should check that individual components are
- * supported by the device by using the appropriate vibrator method:
- *
- * <ul>
- * <li>Primitive support can be checked using {@link Vibrator#arePrimitivesSupported}.
- * <li>Effect support can be checked using {@link Vibrator#areEffectsSupported}.
- * <li>Amplitude control for one-shot and waveforms with amplitude values can be checked
- * using {@link Vibrator#hasAmplitudeControl}.
- * </ul>
+ * supported by the device by using {@link Vibrator#arePrimitivesSupported}.
*
* @see VibrationEffect#startComposition()
*/
@@ -869,7 +854,9 @@ public abstract class VibrationEffect implements Parcelable {
/**
* Exception thrown when adding an element to a {@link Composition} that already ends in an
* indefinitely repeating effect.
+ * @hide
*/
+ @TestApi
public static final class UnreachableAfterRepeatingIndefinitelyException
extends IllegalStateException {
UnreachableAfterRepeatingIndefinitelyException() {
@@ -938,7 +925,9 @@ public abstract class VibrationEffect implements Parcelable {
*
* @throws UnreachableAfterRepeatingIndefinitelyException if the composition is currently
* ending with a repeating effect.
+ * @hide
*/
+ @TestApi
@NonNull
public Composition addOffDuration(@NonNull Duration duration) {
int durationMs = (int) duration.toMillis();
@@ -965,7 +954,9 @@ public abstract class VibrationEffect implements Parcelable {
*
* @throws UnreachableAfterRepeatingIndefinitelyException if the composition is currently
* ending with a repeating effect.
+ * @hide
*/
+ @TestApi
@NonNull
public Composition addEffect(@NonNull VibrationEffect effect) {
return addSegments(effect);
@@ -987,7 +978,9 @@ public abstract class VibrationEffect implements Parcelable {
* @throws IllegalArgumentException if the given effect is already repeating indefinitely.
* @throws UnreachableAfterRepeatingIndefinitelyException if the composition is currently
* ending with a repeating effect.
+ * @hide
*/
+ @TestApi
@NonNull
public Composition repeatEffectIndefinitely(@NonNull VibrationEffect effect) {
Preconditions.checkArgument(effect.getDuration() < Long.MAX_VALUE,
@@ -1007,9 +1000,6 @@ public abstract class VibrationEffect implements Parcelable {
*
* @param primitiveId The primitive to add
* @return This {@link Composition} object to enable adding multiple elements in one chain.
- *
- * @throws UnreachableAfterRepeatingIndefinitelyException if the composition is currently
- * ending with a repeating effect.
*/
@NonNull
public Composition addPrimitive(@PrimitiveType int primitiveId) {
@@ -1024,9 +1014,6 @@ public abstract class VibrationEffect implements Parcelable {
* @param primitiveId The primitive to add
* @param scale The scale to apply to the intensity of the primitive.
* @return This {@link Composition} object to enable adding multiple elements in one chain.
- *
- * @throws UnreachableAfterRepeatingIndefinitelyException if the composition is currently
- * ending with a repeating effect.
*/
@NonNull
public Composition addPrimitive(@PrimitiveType int primitiveId,
@@ -1042,9 +1029,6 @@ public abstract class VibrationEffect implements Parcelable {
* @param delay The amount of time in milliseconds to wait before playing this primitive,
* starting at the time the previous element in this composition is finished.
* @return This {@link Composition} object to enable adding multiple elements in one chain.
- *
- * @throws UnreachableAfterRepeatingIndefinitelyException if the composition is currently
- * ending with a repeating effect.
*/
@NonNull
public Composition addPrimitive(@PrimitiveType int primitiveId,
@@ -1077,13 +1061,13 @@ public abstract class VibrationEffect implements Parcelable {
}
/**
- * Compose all of the added elements together into a single {@link VibrationEffect}.
+ * Compose all of the added primitives together into a single {@link VibrationEffect}.
*
* <p>The {@link Composition} object is still valid after this call, so you can continue
- * adding more elements to it and generating more {@link VibrationEffect}s by calling this
+ * adding more primitives to it and generating more {@link VibrationEffect}s by calling this
* method again.
*
- * @return The {@link VibrationEffect} resulting from the composition of the elements.
+ * @return The {@link VibrationEffect} resulting from the composition of the primitives.
*/
@NonNull
public VibrationEffect compose() {
@@ -1202,7 +1186,9 @@ public abstract class VibrationEffect implements Parcelable {
* .build();}</pre>
*
* @see VibrationEffect#startWaveform
+ * @hide
*/
+ @TestApi
public static final class WaveformBuilder {
// Epsilon used for float comparison of amplitude and frequency values on transitions.
private static final float EPSILON = 1e-5f;
@@ -1229,7 +1215,9 @@ public abstract class VibrationEffect implements Parcelable {
* after the given duration.
* @return This {@link WaveformBuilder} object to enable adding multiple transitions in
* chain.
+ * @hide
*/
+ @TestApi
@SuppressWarnings("MissingGetterMatchingBuilder") // No getters to segments once created.
@NonNull
public WaveformBuilder addTransition(@NonNull Duration duration,
@@ -1261,7 +1249,9 @@ public abstract class VibrationEffect implements Parcelable {
* than the one specified by the first argument.
* @return This {@link WaveformBuilder} object to enable adding multiple transitions in
* chain.
+ * @hide
*/
+ @TestApi
@SuppressWarnings("MissingGetterMatchingBuilder") // No getters to segments once created.
@NonNull
public WaveformBuilder addTransition(@NonNull Duration duration,
@@ -1289,7 +1279,9 @@ public abstract class VibrationEffect implements Parcelable {
* Value must be >= 1ms.
* @return This {@link WaveformBuilder} object to enable adding multiple transitions in
* chain.
+ * @hide
*/
+ @TestApi
@SuppressWarnings("MissingGetterMatchingBuilder") // No getters to segments once created.
@NonNull
public WaveformBuilder addSustain(@NonNull Duration duration) {
@@ -1307,7 +1299,9 @@ public abstract class VibrationEffect implements Parcelable {
* calling this method again.
*
* @return The {@link VibrationEffect} resulting from the list of transitions.
+ * @hide
*/
+ @TestApi
@NonNull
public VibrationEffect build() {
if (mSegments.isEmpty()) {
@@ -1383,7 +1377,9 @@ public abstract class VibrationEffect implements Parcelable {
* <p>Examples of concrete parameters are the vibration amplitude or frequency.
*
* @see VibrationEffect.WaveformBuilder
+ * @hide
*/
+ @TestApi
@SuppressWarnings("UserHandleName") // This is not a regular set of parameters, no *Params.
public static class VibrationParameter {
VibrationParameter() {
@@ -1396,7 +1392,9 @@ public abstract class VibrationEffect implements Parcelable {
* vibrator turned off and 1 represents the maximum amplitude the vibrator
* can reach across all supported frequencies.
* @return The {@link VibrationParameter} instance that represents given amplitude.
+ * @hide
*/
+ @TestApi
@NonNull
public static VibrationParameter targetAmplitude(
@FloatRange(from = 0, to = 1) float amplitude) {
@@ -1408,7 +1406,9 @@ public abstract class VibrationEffect implements Parcelable {
*
* @param frequencyHz The frequency value, in hertz.
* @return The {@link VibrationParameter} instance that represents given frequency.
+ * @hide
*/
+ @TestApi
@NonNull
public static VibrationParameter targetFrequency(@FloatRange(from = 1) float frequencyHz) {
return new FrequencyVibrationParameter(frequencyHz);
diff --git a/core/java/android/os/Vibrator.java b/core/java/android/os/Vibrator.java
index fb3230093f24..7edcdd754f06 100644
--- a/core/java/android/os/Vibrator.java
+++ b/core/java/android/os/Vibrator.java
@@ -212,7 +212,9 @@ public abstract class Vibrator {
*
* @return True if the hardware can control the frequency of the vibrations independently of
* the vibration amplitude, false otherwise.
+ * @hide
*/
+ @TestApi
public boolean hasFrequencyControl() {
// We currently can only control frequency of the vibration using the compose PWLE method.
return getInfo().hasCapability(
@@ -262,7 +264,9 @@ public abstract class Vibrator {
* frequency control. If this vibrator is a composite of multiple physical devices then this
* will return a profile supported in all devices, or null if the intersection is empty or not
* available.
+ * @hide
*/
+ @TestApi
@Nullable
public VibratorFrequencyProfile getFrequencyProfile() {
VibratorInfo.FrequencyProfile frequencyProfile = getInfo().getFrequencyProfile();
diff --git a/core/java/android/os/vibrator/VibratorFrequencyProfile.java b/core/java/android/os/vibrator/VibratorFrequencyProfile.java
index 0f2aa157d94c..8392940010e3 100644
--- a/core/java/android/os/vibrator/VibratorFrequencyProfile.java
+++ b/core/java/android/os/vibrator/VibratorFrequencyProfile.java
@@ -18,6 +18,7 @@ package android.os.vibrator;
import android.annotation.FloatRange;
import android.annotation.NonNull;
+import android.annotation.TestApi;
import android.os.VibratorInfo;
import com.android.internal.util.Preconditions;
@@ -38,7 +39,9 @@ import com.android.internal.util.Preconditions;
* frequency increment between each pair of amplitude values.
*
* <p>Vibrators without independent frequency control do not have a frequency profile.
+ * @hide
*/
+@TestApi
public final class VibratorFrequencyProfile {
private final VibratorInfo.FrequencyProfile mFrequencyProfile;
@@ -62,7 +65,9 @@ public final class VibratorFrequencyProfile {
* {@link #getMinFrequency()} to {@link #getMaxFrequency()}, inclusive.
*
* @return Array of maximum relative amplitude measurements.
+ * @hide
*/
+ @TestApi
@NonNull
@FloatRange(from = 0, to = 1)
public float[] getMaxAmplitudeMeasurements() {
@@ -74,7 +79,9 @@ public final class VibratorFrequencyProfile {
* Gets the frequency interval used to measure the maximum relative amplitudes.
*
* @return the frequency interval used for the measurement, in hertz.
+ * @hide
*/
+ @TestApi
public float getMaxAmplitudeMeasurementInterval() {
return mFrequencyProfile.getFrequencyResolutionHz();
}
@@ -83,7 +90,9 @@ public final class VibratorFrequencyProfile {
* Gets the minimum frequency supported by the vibrator.
*
* @return the minimum frequency supported by the vibrator, in hertz.
+ * @hide
*/
+ @TestApi
public float getMinFrequency() {
return mFrequencyProfile.getFrequencyRangeHz().getLower();
}
@@ -92,7 +101,9 @@ public final class VibratorFrequencyProfile {
* Gets the maximum frequency supported by the vibrator.
*
* @return the maximum frequency supported by the vibrator, in hertz.
+ * @hide
*/
+ @TestApi
public float getMaxFrequency() {
return mFrequencyProfile.getFrequencyRangeHz().getUpper();
}