diff --git a/core/api/current.txt b/core/api/current.txt index 16d83a4b76fd8..b08ffc90a00d3 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -32341,9 +32341,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 CREATOR; field public static final int DEFAULT_AMPLITUDE = -1; // 0xffffffff field public static final int EFFECT_CLICK = 0; // 0x0 @@ -32353,13 +32350,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 @@ -32370,34 +32364,15 @@ 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); @@ -32725,17 +32700,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 cd5ed213e6a5b..27f5b926411c6 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -1871,6 +1871,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 @@ -1888,8 +1891,33 @@ package android.os { field @NonNull public static final android.os.Parcelable.Creator 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 float getQFactor(); + method public float getResonantFrequency(); + 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 @@ -2074,6 +2102,13 @@ package android.os.vibrator { field @NonNull public static final android.os.Parcelable.Creator 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 237f6ed819f61..ec1c57d675c19 100644 --- a/core/java/android/os/VibrationEffect.java +++ b/core/java/android/os/VibrationEffect.java @@ -413,8 +413,10 @@ public abstract class VibrationEffect implements Parcelable { * {@link #startWaveform(VibrationEffect.VibrationParameter)}. * * @see VibrationEffect.WaveformBuilder + * @hide */ @NonNull + @TestApi public static WaveformBuilder startWaveform() { return new WaveformBuilder(); } @@ -431,8 +433,10 @@ public abstract class VibrationEffect implements Parcelable { * @return The {@link VibrationEffect.WaveformBuilder} started with the initial parameters. * * @see VibrationEffect.WaveformBuilder + * @hide */ @NonNull + @TestApi public static WaveformBuilder startWaveform(@NonNull VibrationParameter initialParameter) { WaveformBuilder builder = startWaveform(); builder.addTransition(Duration.ZERO, initialParameter); @@ -454,8 +458,10 @@ public abstract class VibrationEffect implements Parcelable { * @return The {@link VibrationEffect.WaveformBuilder} started with the initial parameters. * * @see VibrationEffect.WaveformBuilder + * @hide */ @NonNull + @TestApi public static WaveformBuilder startWaveform(@NonNull VibrationParameter initialParameter1, @NonNull VibrationParameter initialParameter2) { WaveformBuilder builder = startWaveform(); @@ -869,7 +875,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,8 +946,10 @@ public abstract class VibrationEffect implements Parcelable { * * @throws UnreachableAfterRepeatingIndefinitelyException if the composition is currently * ending with a repeating effect. + * @hide */ @NonNull + @TestApi public Composition addOffDuration(@NonNull Duration duration) { int durationMs = (int) duration.toMillis(); Preconditions.checkArgumentNonnegative(durationMs, "Off period must be non-negative"); @@ -965,8 +975,10 @@ public abstract class VibrationEffect implements Parcelable { * * @throws UnreachableAfterRepeatingIndefinitelyException if the composition is currently * ending with a repeating effect. + * @hide */ @NonNull + @TestApi public Composition addEffect(@NonNull VibrationEffect effect) { return addSegments(effect); } @@ -987,8 +999,10 @@ 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 */ @NonNull + @TestApi public Composition repeatEffectIndefinitely(@NonNull VibrationEffect effect) { Preconditions.checkArgument(effect.getDuration() < Long.MAX_VALUE, "Can't repeat an indefinitely repeating effect. Consider addEffect instead."); @@ -1202,7 +1216,9 @@ public abstract class VibrationEffect implements Parcelable { * .build();} * * @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; @@ -1383,8 +1399,10 @@ public abstract class VibrationEffect implements Parcelable { *

Examples of concrete parameters are the vibration amplitude or frequency. * * @see VibrationEffect.WaveformBuilder + * @hide */ @SuppressWarnings("UserHandleName") // This is not a regular set of parameters, no *Params. + @TestApi public static class VibrationParameter { VibrationParameter() { } diff --git a/core/java/android/os/Vibrator.java b/core/java/android/os/Vibrator.java index 7f0d6349f57fd..465d90d366984 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( @@ -236,7 +238,9 @@ public abstract class Vibrator { * @return the resonant frequency of the vibrator, or {@link Float#NaN NaN} if it's unknown, not * applicable, or if this vibrator is a composite of multiple physical devices with different * frequencies. + * @hide */ + @TestApi public float getResonantFrequency() { return getInfo().getResonantFrequencyHz(); } @@ -247,7 +251,9 @@ public abstract class Vibrator { * @return the Q factor of the vibrator, or {@link Float#NaN NaN} if it's unknown, not * applicable, or if this vibrator is a composite of multiple physical devices with different * Q factors. + * @hide */ + @TestApi public float getQFactor() { return getInfo().getQFactor(); } @@ -262,7 +268,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 0f2aa157d94c1..afc0007afd423 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. * *

Vibrators without independent frequency control do not have a frequency profile. + * @hide */ +@TestApi public final class VibratorFrequencyProfile { private final VibratorInfo.FrequencyProfile mFrequencyProfile;