Merge "DO NOT MERGE Remove PWLE APIs from T" into tm-dev

This commit is contained in:
Michael Wright
2022-04-08 10:57:11 +00:00
committed by Android (Google) Code Review
5 changed files with 64 additions and 36 deletions

View File

@@ -32341,9 +32341,6 @@ package android.os {
method public static android.os.VibrationEffect createWaveform(long[], int[], int); method public static android.os.VibrationEffect createWaveform(long[], int[], int);
method public int describeContents(); method public int describeContents();
method @NonNull public static android.os.VibrationEffect.Composition startComposition(); 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 @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 DEFAULT_AMPLITUDE = -1; // 0xffffffff
field public static final int EFFECT_CLICK = 0; // 0x0 field public static final int EFFECT_CLICK = 0; // 0x0
@@ -32353,13 +32350,10 @@ package android.os {
} }
public static final class VibrationEffect.Composition { 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);
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);
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.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 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_CLICK = 1; // 0x1
field public static final int PRIMITIVE_LOW_TICK = 8; // 0x8 field public static final int PRIMITIVE_LOW_TICK = 8; // 0x8
field public static final int PRIMITIVE_QUICK_FALL = 6; // 0x6 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 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 { public abstract class Vibrator {
method public final int areAllEffectsSupported(@NonNull int...); method public final int areAllEffectsSupported(@NonNull int...);
method public final boolean areAllPrimitivesSupported(@NonNull int...); method public final boolean areAllPrimitivesSupported(@NonNull int...);
method @NonNull public int[] areEffectsSupported(@NonNull int...); method @NonNull public int[] areEffectsSupported(@NonNull int...);
method @NonNull public boolean[] arePrimitivesSupported(@NonNull int...); method @NonNull public boolean[] arePrimitivesSupported(@NonNull int...);
method @RequiresPermission(android.Manifest.permission.VIBRATE) public abstract void cancel(); method @RequiresPermission(android.Manifest.permission.VIBRATE) public abstract void cancel();
method @Nullable public android.os.vibrator.VibratorFrequencyProfile getFrequencyProfile();
method public int getId(); method public int getId();
method @NonNull public int[] getPrimitiveDurations(@NonNull int...); method @NonNull public int[] getPrimitiveDurations(@NonNull int...);
method public float getQFactor();
method public float getResonantFrequency();
method public abstract boolean hasAmplitudeControl(); method public abstract boolean hasAmplitudeControl();
method public boolean hasFrequencyControl();
method public abstract boolean hasVibrator(); 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);
method @Deprecated @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(long, android.media.AudioAttributes); 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 { package android.preference {
@Deprecated public class CheckBoxPreference extends android.preference.TwoStatePreference { @Deprecated public class CheckBoxPreference extends android.preference.TwoStatePreference {

View File

@@ -1871,6 +1871,9 @@ package android.os {
method public static android.os.VibrationEffect get(int, boolean); method public static android.os.VibrationEffect get(int, boolean);
method @Nullable public static android.os.VibrationEffect get(android.net.Uri, android.content.Context); method @Nullable public static android.os.VibrationEffect get(android.net.Uri, android.content.Context);
method public abstract long getDuration(); 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_POP = 4; // 0x4
field public static final int EFFECT_STRENGTH_LIGHT = 0; // 0x0 field public static final int EFFECT_STRENGTH_LIGHT = 0; // 0x0
field public static final int EFFECT_STRENGTH_MEDIUM = 1; // 0x1 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<android.os.VibrationEffect.Composed> CREATOR; 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 { public abstract class Vibrator {
method public int getDefaultVibrationIntensity(int); 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_HIGH = 3; // 0x3
field public static final int VIBRATION_INTENSITY_LOW = 1; // 0x1 field public static final int VIBRATION_INTENSITY_LOW = 1; // 0x1
field public static final int VIBRATION_INTENSITY_MEDIUM = 2; // 0x2 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<android.os.vibrator.VibrationEffectSegment> CREATOR; 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 { package android.permission {

View File

@@ -413,8 +413,10 @@ public abstract class VibrationEffect implements Parcelable {
* {@link #startWaveform(VibrationEffect.VibrationParameter)}. * {@link #startWaveform(VibrationEffect.VibrationParameter)}.
* *
* @see VibrationEffect.WaveformBuilder * @see VibrationEffect.WaveformBuilder
* @hide
*/ */
@NonNull @NonNull
@TestApi
public static WaveformBuilder startWaveform() { public static WaveformBuilder startWaveform() {
return new WaveformBuilder(); return new WaveformBuilder();
} }
@@ -431,8 +433,10 @@ public abstract class VibrationEffect implements Parcelable {
* @return The {@link VibrationEffect.WaveformBuilder} started with the initial parameters. * @return The {@link VibrationEffect.WaveformBuilder} started with the initial parameters.
* *
* @see VibrationEffect.WaveformBuilder * @see VibrationEffect.WaveformBuilder
* @hide
*/ */
@NonNull @NonNull
@TestApi
public static WaveformBuilder startWaveform(@NonNull VibrationParameter initialParameter) { public static WaveformBuilder startWaveform(@NonNull VibrationParameter initialParameter) {
WaveformBuilder builder = startWaveform(); WaveformBuilder builder = startWaveform();
builder.addTransition(Duration.ZERO, initialParameter); 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. * @return The {@link VibrationEffect.WaveformBuilder} started with the initial parameters.
* *
* @see VibrationEffect.WaveformBuilder * @see VibrationEffect.WaveformBuilder
* @hide
*/ */
@NonNull @NonNull
@TestApi
public static WaveformBuilder startWaveform(@NonNull VibrationParameter initialParameter1, public static WaveformBuilder startWaveform(@NonNull VibrationParameter initialParameter1,
@NonNull VibrationParameter initialParameter2) { @NonNull VibrationParameter initialParameter2) {
WaveformBuilder builder = startWaveform(); 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 * Exception thrown when adding an element to a {@link Composition} that already ends in an
* indefinitely repeating effect. * indefinitely repeating effect.
* @hide
*/ */
@TestApi
public static final class UnreachableAfterRepeatingIndefinitelyException public static final class UnreachableAfterRepeatingIndefinitelyException
extends IllegalStateException { extends IllegalStateException {
UnreachableAfterRepeatingIndefinitelyException() { UnreachableAfterRepeatingIndefinitelyException() {
@@ -938,8 +946,10 @@ public abstract class VibrationEffect implements Parcelable {
* *
* @throws UnreachableAfterRepeatingIndefinitelyException if the composition is currently * @throws UnreachableAfterRepeatingIndefinitelyException if the composition is currently
* ending with a repeating effect. * ending with a repeating effect.
* @hide
*/ */
@NonNull @NonNull
@TestApi
public Composition addOffDuration(@NonNull Duration duration) { public Composition addOffDuration(@NonNull Duration duration) {
int durationMs = (int) duration.toMillis(); int durationMs = (int) duration.toMillis();
Preconditions.checkArgumentNonnegative(durationMs, "Off period must be non-negative"); 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 * @throws UnreachableAfterRepeatingIndefinitelyException if the composition is currently
* ending with a repeating effect. * ending with a repeating effect.
* @hide
*/ */
@NonNull @NonNull
@TestApi
public Composition addEffect(@NonNull VibrationEffect effect) { public Composition addEffect(@NonNull VibrationEffect effect) {
return addSegments(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 IllegalArgumentException if the given effect is already repeating indefinitely.
* @throws UnreachableAfterRepeatingIndefinitelyException if the composition is currently * @throws UnreachableAfterRepeatingIndefinitelyException if the composition is currently
* ending with a repeating effect. * ending with a repeating effect.
* @hide
*/ */
@NonNull @NonNull
@TestApi
public Composition repeatEffectIndefinitely(@NonNull VibrationEffect effect) { public Composition repeatEffectIndefinitely(@NonNull VibrationEffect effect) {
Preconditions.checkArgument(effect.getDuration() < Long.MAX_VALUE, Preconditions.checkArgument(effect.getDuration() < Long.MAX_VALUE,
"Can't repeat an indefinitely repeating effect. Consider addEffect instead."); "Can't repeat an indefinitely repeating effect. Consider addEffect instead.");
@@ -1202,7 +1216,9 @@ public abstract class VibrationEffect implements Parcelable {
* .build();}</pre> * .build();}</pre>
* *
* @see VibrationEffect#startWaveform * @see VibrationEffect#startWaveform
* @hide
*/ */
@TestApi
public static final class WaveformBuilder { public static final class WaveformBuilder {
// Epsilon used for float comparison of amplitude and frequency values on transitions. // Epsilon used for float comparison of amplitude and frequency values on transitions.
private static final float EPSILON = 1e-5f; private static final float EPSILON = 1e-5f;
@@ -1383,8 +1399,10 @@ public abstract class VibrationEffect implements Parcelable {
* <p>Examples of concrete parameters are the vibration amplitude or frequency. * <p>Examples of concrete parameters are the vibration amplitude or frequency.
* *
* @see VibrationEffect.WaveformBuilder * @see VibrationEffect.WaveformBuilder
* @hide
*/ */
@SuppressWarnings("UserHandleName") // This is not a regular set of parameters, no *Params. @SuppressWarnings("UserHandleName") // This is not a regular set of parameters, no *Params.
@TestApi
public static class VibrationParameter { public static class VibrationParameter {
VibrationParameter() { VibrationParameter() {
} }

View File

@@ -212,7 +212,9 @@ public abstract class Vibrator {
* *
* @return True if the hardware can control the frequency of the vibrations independently of * @return True if the hardware can control the frequency of the vibrations independently of
* the vibration amplitude, false otherwise. * the vibration amplitude, false otherwise.
* @hide
*/ */
@TestApi
public boolean hasFrequencyControl() { public boolean hasFrequencyControl() {
// We currently can only control frequency of the vibration using the compose PWLE method. // We currently can only control frequency of the vibration using the compose PWLE method.
return getInfo().hasCapability( 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 * @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 * applicable, or if this vibrator is a composite of multiple physical devices with different
* frequencies. * frequencies.
* @hide
*/ */
@TestApi
public float getResonantFrequency() { public float getResonantFrequency() {
return getInfo().getResonantFrequencyHz(); 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 * @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 * applicable, or if this vibrator is a composite of multiple physical devices with different
* Q factors. * Q factors.
* @hide
*/ */
@TestApi
public float getQFactor() { public float getQFactor() {
return getInfo().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 * 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 * will return a profile supported in all devices, or null if the intersection is empty or not
* available. * available.
* @hide
*/ */
@TestApi
@Nullable @Nullable
public VibratorFrequencyProfile getFrequencyProfile() { public VibratorFrequencyProfile getFrequencyProfile() {
VibratorInfo.FrequencyProfile frequencyProfile = getInfo().getFrequencyProfile(); VibratorInfo.FrequencyProfile frequencyProfile = getInfo().getFrequencyProfile();

View File

@@ -18,6 +18,7 @@ package android.os.vibrator;
import android.annotation.FloatRange; import android.annotation.FloatRange;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.TestApi;
import android.os.VibratorInfo; import android.os.VibratorInfo;
import com.android.internal.util.Preconditions; import com.android.internal.util.Preconditions;
@@ -38,7 +39,9 @@ import com.android.internal.util.Preconditions;
* frequency increment between each pair of amplitude values. * frequency increment between each pair of amplitude values.
* *
* <p>Vibrators without independent frequency control do not have a frequency profile. * <p>Vibrators without independent frequency control do not have a frequency profile.
* @hide
*/ */
@TestApi
public final class VibratorFrequencyProfile { public final class VibratorFrequencyProfile {
private final VibratorInfo.FrequencyProfile mFrequencyProfile; private final VibratorInfo.FrequencyProfile mFrequencyProfile;