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

Commit 5a4a8e0e authored by Lais Andrade's avatar Lais Andrade
Browse files

Add xml serialization of vendor vibration effects

Introduce new tag <vendor-effect> to the vibration.xsd scheme.

This tag supports serialization of vendor effects by using the
PersistableBundle support to read/write to input/output streams.

Fix: 345411316
Flag: android.os.vibrator.vendor_vibration_effects
Test: atest android.os.vibrator.persistence
Change-Id: I6498aca127995d22bf29800437f4e20ede03642f
parent 9ac72828
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -104,7 +104,7 @@ public final class VibrationXmlSerializer {
    public static void serialize(@NonNull VibrationEffect effect, @NonNull Writer writer,
            @Flags int flags) throws IOException {
        // Serialize effect first to fail early.
        XmlSerializedVibration<VibrationEffect> serializedVibration =
        XmlSerializedVibration<? extends VibrationEffect> serializedVibration =
                toSerializedVibration(effect, flags);
        TypedXmlSerializer xmlSerializer = Xml.newFastSerializer();
        xmlSerializer.setFeature(XML_FEATURE_INDENT_OUTPUT, (flags & FLAG_PRETTY_PRINT) != 0);
@@ -114,9 +114,9 @@ public final class VibrationXmlSerializer {
        xmlSerializer.endDocument();
    }

    private static XmlSerializedVibration<VibrationEffect> toSerializedVibration(
    private static XmlSerializedVibration<? extends VibrationEffect> toSerializedVibration(
            VibrationEffect effect, @Flags int flags) throws SerializationFailedException {
        XmlSerializedVibration<VibrationEffect> serializedVibration;
        XmlSerializedVibration<? extends VibrationEffect> serializedVibration;
        int serializerFlags = 0;
        if ((flags & FLAG_ALLOW_HIDDEN_APIS) != 0) {
            serializerFlags |= XmlConstants.FLAG_ALLOW_HIDDEN_APIS;
+1 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ import android.os.VibrationEffect;
import android.util.IntArray;
import android.util.LongArray;

import com.android.internal.vibrator.persistence.SerializedVibrationEffect.SerializedSegment;
import com.android.internal.vibrator.persistence.SerializedComposedEffect.SerializedSegment;
import com.android.modules.utils.TypedXmlPullParser;
import com.android.modules.utils.TypedXmlSerializer;

+7 −7
Original line number Diff line number Diff line
@@ -29,24 +29,24 @@ import java.io.IOException;
import java.util.Arrays;

/**
 * Serialized representation of a {@link VibrationEffect}.
 * Serialized representation of a {@link VibrationEffect.Composed}.
 *
 * <p>The vibration is represented by a list of serialized segments that can be added to a
 * {@link VibrationEffect.Composition} during the {@link #deserialize()} procedure.
 *
 * @hide
 */
final class SerializedVibrationEffect implements XmlSerializedVibration<VibrationEffect> {
final class SerializedComposedEffect implements XmlSerializedVibration<VibrationEffect.Composed> {

    @NonNull
    private final SerializedSegment[] mSegments;

    SerializedVibrationEffect(@NonNull SerializedSegment segment) {
    SerializedComposedEffect(@NonNull SerializedSegment segment) {
        requireNonNull(segment);
        mSegments = new SerializedSegment[]{ segment };
    }

    SerializedVibrationEffect(@NonNull SerializedSegment[] segments) {
    SerializedComposedEffect(@NonNull SerializedSegment[] segments) {
        requireNonNull(segments);
        checkArgument(segments.length > 0, "Unsupported empty vibration");
        mSegments = segments;
@@ -54,12 +54,12 @@ final class SerializedVibrationEffect implements XmlSerializedVibration<Vibratio

    @NonNull
    @Override
    public VibrationEffect deserialize() {
    public VibrationEffect.Composed deserialize() {
        VibrationEffect.Composition composition = VibrationEffect.startComposition();
        for (SerializedSegment segment : mSegments) {
            segment.deserializeIntoComposition(composition);
        }
        return composition.compose();
        return (VibrationEffect.Composed) composition.compose();
    }

    @Override
@@ -79,7 +79,7 @@ final class SerializedVibrationEffect implements XmlSerializedVibration<Vibratio

    @Override
    public String toString() {
        return "SerializedVibrationEffect{"
        return "SerializedComposedEffect{"
                + "segments=" + Arrays.toString(mSegments)
                + '}';
    }
+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ import android.annotation.Nullable;
import android.os.VibrationEffect;
import android.os.vibrator.PrimitiveSegment;

import com.android.internal.vibrator.persistence.SerializedVibrationEffect.SerializedSegment;
import com.android.internal.vibrator.persistence.SerializedComposedEffect.SerializedSegment;
import com.android.internal.vibrator.persistence.XmlConstants.PrimitiveEffectName;
import com.android.modules.utils.TypedXmlPullParser;
import com.android.modules.utils.TypedXmlSerializer;
+1 −1
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ import android.annotation.NonNull;
import android.os.VibrationEffect;
import android.os.vibrator.PrebakedSegment;

import com.android.internal.vibrator.persistence.SerializedVibrationEffect.SerializedSegment;
import com.android.internal.vibrator.persistence.SerializedComposedEffect.SerializedSegment;
import com.android.internal.vibrator.persistence.XmlConstants.PredefinedEffectName;
import com.android.modules.utils.TypedXmlPullParser;
import com.android.modules.utils.TypedXmlSerializer;
Loading