Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02d3e651 authored by Lais Andrade's avatar Lais Andrade
Browse files

Introduce vibration XML serialization

The parser and serializer classes are available internally from
android.os.vibrator.persistence and they only support
VibrationEffect instances that can be created via public APIs.

Bug: 245129509
Test: android.os.cts.VibrationEffectXmlSerializationTest
Change-Id: Ie6da2b17e04e89505dab9496f027958710d2473f
parent 29c4e7a4
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -2629,6 +2629,21 @@ package android.os.vibrator {

}

package android.os.vibrator.persistence {

  public final class VibrationXmlParser {
    method @Nullable public static android.os.VibrationEffect parse(@NonNull java.io.Reader) throws java.io.IOException;
  }

  public final class VibrationXmlSerializer {
    method public static void serialize(@NonNull android.os.VibrationEffect, @NonNull java.io.Writer) throws java.io.IOException, android.os.vibrator.persistence.VibrationXmlSerializer.SerializationFailedException;
  }

  public static final class VibrationXmlSerializer.SerializationFailedException extends java.lang.IllegalStateException {
  }

}

package android.permission {

  public final class PermissionControllerManager {
+5 −7
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ import android.content.Context;
import android.hardware.vibrator.V1_0.EffectStrength;
import android.hardware.vibrator.V1_3.Effect;
import android.net.Uri;
import android.os.Vibrator;
import android.os.vibrator.PrebakedSegment;
import android.os.vibrator.PrimitiveSegment;
import android.os.vibrator.RampSegment;
@@ -336,7 +335,7 @@ public abstract class VibrationEffect implements Parcelable {
     */
    @TestApi
    public static VibrationEffect get(int effectId) {
        return get(effectId, true);
        return get(effectId, PrebakedSegment.DEFAULT_SHOULD_FALLBACK);
    }

    /**
@@ -364,7 +363,7 @@ public abstract class VibrationEffect implements Parcelable {
    @TestApi
    public static VibrationEffect get(int effectId, boolean fallback) {
        VibrationEffect effect = new Composed(
                new PrebakedSegment(effectId, fallback, EffectStrength.MEDIUM));
                new PrebakedSegment(effectId, fallback, PrebakedSegment.DEFAULT_STRENGTH));
        effect.validate();
        return effect;
    }
@@ -1176,7 +1175,7 @@ public abstract class VibrationEffect implements Parcelable {
         */
        @NonNull
        public Composition addPrimitive(@PrimitiveType int primitiveId) {
            return addPrimitive(primitiveId, /*scale*/ 1.0f, /*delay*/ 0);
            return addPrimitive(primitiveId, PrimitiveSegment.DEFAULT_SCALE);
        }

        /**
@@ -1191,7 +1190,7 @@ public abstract class VibrationEffect implements Parcelable {
        @NonNull
        public Composition addPrimitive(@PrimitiveType int primitiveId,
                @FloatRange(from = 0f, to = 1f) float scale) {
            return addPrimitive(primitiveId, scale, /*delay*/ 0);
            return addPrimitive(primitiveId, scale, PrimitiveSegment.DEFAULT_DELAY_MILLIS);
        }

        /**
@@ -1206,8 +1205,7 @@ public abstract class VibrationEffect implements Parcelable {
        @NonNull
        public Composition addPrimitive(@PrimitiveType int primitiveId,
                @FloatRange(from = 0f, to = 1f) float scale, @IntRange(from = 0) int delay) {
            PrimitiveSegment primitive = new PrimitiveSegment(primitiveId, scale,
                    delay);
            PrimitiveSegment primitive = new PrimitiveSegment(primitiveId, scale, delay);
            primitive.validate();
            return addSegment(primitive);
        }
+7 −0
Original line number Diff line number Diff line
@@ -33,6 +33,13 @@ import java.util.Objects;
 */
@TestApi
public final class PrebakedSegment extends VibrationEffectSegment {

    /** @hide */
    public static final int DEFAULT_STRENGTH = VibrationEffect.EFFECT_STRENGTH_MEDIUM;

    /** @hide */
    public static final boolean DEFAULT_SHOULD_FALLBACK = true;

    private final int mEffectId;
    private final boolean mFallback;
    private final int mEffectStrength;
+7 −0
Original line number Diff line number Diff line
@@ -36,6 +36,13 @@ import java.util.Objects;
 */
@TestApi
public final class PrimitiveSegment extends VibrationEffectSegment {

    /** @hide */
    public static final float DEFAULT_SCALE = 1f;

    /** @hide */
    public static final int DEFAULT_DELAY_MILLIS = 0;

    private final int mPrimitiveId;
    private final float mScale;
    private final int mDelay;
+4 −0
Original line number Diff line number Diff line
@@ -113,6 +113,10 @@ public final class StepSegment extends VibrationEffectSegment {
        VibrationEffectSegment.checkDurationArgument(mDuration, "duration");
        if (Float.compare(mAmplitude, VibrationEffect.DEFAULT_AMPLITUDE) != 0) {
            Preconditions.checkArgumentInRange(mAmplitude, 0f, 1f, "amplitude");
            VibrationEffectSegment.checkFrequencyArgument(mFrequencyHz, "frequencyHz");
        } else if (Float.compare(mFrequencyHz, 0) != 0) {
            throw new IllegalArgumentException(
                    "frequency must be default when amplitude is set to default");
        }
    }

Loading