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

Commit bd757bfc authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Add vibrator capabilities to service dumpsys" into sc-dev am: 2aebc3e7

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13669307

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I99c6094685dcf1f1138251186f7c5a6b0031a9bf
parents 081b7805 2aebc3e7
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -581,6 +581,7 @@ java_library {
        "android.hardware.vibrator-V1.1-java",
        "android.hardware.vibrator-V1.2-java",
        "android.hardware.vibrator-V1.3-java",
        "android.hardware.vibrator-V2-java",
        "android.security.apc-java",
        "android.security.authorization-java",
        "android.security.usermanager-java",
+16 −2
Original line number Diff line number Diff line
@@ -502,6 +502,20 @@ public abstract class VibrationEffect implements Parcelable {
        }
    }

    /** @hide */
    public static String effectStrengthToString(int effectStrength) {
        switch (effectStrength) {
            case EFFECT_STRENGTH_LIGHT:
                return "LIGHT";
            case EFFECT_STRENGTH_MEDIUM:
                return "MEDIUM";
            case EFFECT_STRENGTH_STRONG:
                return "STRONG";
            default:
                return Integer.toString(effectStrength);
        }
    }

    /** @hide */
    @TestApi
    public static class OneShot extends VibrationEffect implements Parcelable {
@@ -936,8 +950,8 @@ public abstract class VibrationEffect implements Parcelable {

        @Override
        public String toString() {
            return "Prebaked{mEffectId=" + mEffectId
                + ", mEffectStrength=" + mEffectStrength
            return "Prebaked{mEffectId=" + effectIdToString(mEffectId)
                + ", mEffectStrength=" + effectStrengthToString(mEffectStrength)
                + ", mFallback=" + mFallback
                + ", mFallbackEffect=" + mFallbackEffect
                + "}";
+23 −20
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.os;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.hardware.vibrator.IVibrator;
import android.util.SparseBooleanArray;

import java.util.ArrayList;
@@ -33,20 +34,7 @@ import java.util.Objects;
 * @hide
 */
public final class VibratorInfo implements Parcelable {

    /**
     * Capability to set amplitude values to vibrations.
     * @hide
     */
    // Internally this maps to the HAL constant IVibrator::CAP_AMPLITUDE_CONTROL
    public static final int CAPABILITY_AMPLITUDE_CONTROL = 4;

    /**
     * Capability to compose primitives into a single effect.
     * @hide
     */
    // Internally this maps to the HAL constant IVibrator::CAP_COMPOSE_EFFECTS
    public static final int CAPABILITY_COMPOSE_EFFECTS = 32;
    private static final String TAG = "VibratorInfo";

    private final int mId;
    private final long mCapabilities;
@@ -108,7 +96,7 @@ public final class VibratorInfo implements Parcelable {
        return "VibratorInfo{"
                + "mId=" + mId
                + ", mCapabilities=" + Arrays.toString(getCapabilitiesNames())
                + ", mCapabilities flags=" + mCapabilities
                + ", mCapabilities flags=" + Long.toBinaryString(mCapabilities)
                + ", mSupportedEffects=" + Arrays.toString(getSupportedEffectsNames())
                + ", mSupportedPrimitives=" + Arrays.toString(getSupportedPrimitivesNames())
                + '}';
@@ -125,7 +113,7 @@ public final class VibratorInfo implements Parcelable {
     * @return True if the hardware can control the amplitude of the vibrations, otherwise false.
     */
    public boolean hasAmplitudeControl() {
        return hasCapability(CAPABILITY_AMPLITUDE_CONTROL);
        return hasCapability(IVibrator.CAP_AMPLITUDE_CONTROL);
    }

    /**
@@ -153,7 +141,7 @@ public final class VibratorInfo implements Parcelable {
     * @return Whether the primitive is supported.
     */
    public boolean isPrimitiveSupported(@VibrationEffect.Composition.Primitive int primitiveId) {
        return hasCapability(CAPABILITY_COMPOSE_EFFECTS) && mSupportedPrimitives != null
        return hasCapability(IVibrator.CAP_COMPOSE_EFFECTS) && mSupportedPrimitives != null
                && mSupportedPrimitives.get(primitiveId, false);
    }

@@ -170,12 +158,27 @@ public final class VibratorInfo implements Parcelable {

    private String[] getCapabilitiesNames() {
        List<String> names = new ArrayList<>();
        if (hasCapability(CAPABILITY_AMPLITUDE_CONTROL)) {
            names.add("AMPLITUDE_CONTROL");
        if (hasCapability(IVibrator.CAP_ON_CALLBACK)) {
            names.add("ON_CALLBACK");
        }
        if (hasCapability(IVibrator.CAP_PERFORM_CALLBACK)) {
            names.add("PERFORM_CALLBACK");
        }
        if (hasCapability(CAPABILITY_COMPOSE_EFFECTS)) {
        if (hasCapability(IVibrator.CAP_COMPOSE_EFFECTS)) {
            names.add("COMPOSE_EFFECTS");
        }
        if (hasCapability(IVibrator.CAP_ALWAYS_ON_CONTROL)) {
            names.add("ALWAYS_ON_CONTROL");
        }
        if (hasCapability(IVibrator.CAP_AMPLITUDE_CONTROL)) {
            names.add("AMPLITUDE_CONTROL");
        }
        if (hasCapability(IVibrator.CAP_EXTERNAL_CONTROL)) {
            names.add("EXTERNAL_CONTROL");
        }
        if (hasCapability(IVibrator.CAP_EXTERNAL_AMPLITUDE_CONTROL)) {
            names.add("EXTERNAL_AMPLITUDE_CONTROL");
        }
        return names.toArray(new String[names.size()]);
    }

+15 −14
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;

import android.hardware.vibrator.IVibrator;
import android.platform.test.annotations.Presubmit;

import org.junit.Test;
@@ -33,16 +34,16 @@ public class VibratorInfoTest {
    @Test
    public void testHasAmplitudeControl() {
        assertFalse(createInfo(/* capabilities= */ 0).hasAmplitudeControl());
        assertTrue(createInfo(VibratorInfo.CAPABILITY_COMPOSE_EFFECTS
                | VibratorInfo.CAPABILITY_AMPLITUDE_CONTROL).hasAmplitudeControl());
        assertTrue(createInfo(IVibrator.CAP_COMPOSE_EFFECTS
                | IVibrator.CAP_AMPLITUDE_CONTROL).hasAmplitudeControl());
    }

    @Test
    public void testHasCapabilities() {
        assertTrue(createInfo(VibratorInfo.CAPABILITY_COMPOSE_EFFECTS)
                .hasCapability(VibratorInfo.CAPABILITY_COMPOSE_EFFECTS));
        assertFalse(createInfo(VibratorInfo.CAPABILITY_COMPOSE_EFFECTS)
                .hasCapability(VibratorInfo.CAPABILITY_AMPLITUDE_CONTROL));
        assertTrue(createInfo(IVibrator.CAP_COMPOSE_EFFECTS)
                .hasCapability(IVibrator.CAP_COMPOSE_EFFECTS));
        assertFalse(createInfo(IVibrator.CAP_COMPOSE_EFFECTS)
                .hasCapability(IVibrator.CAP_AMPLITUDE_CONTROL));
    }

    @Test
@@ -59,7 +60,7 @@ public class VibratorInfoTest {

    @Test
    public void testIsPrimitiveSupported() {
        VibratorInfo info = new VibratorInfo(/* id= */ 0, VibratorInfo.CAPABILITY_COMPOSE_EFFECTS,
        VibratorInfo info = new VibratorInfo(/* id= */ 0, IVibrator.CAP_COMPOSE_EFFECTS,
                null, new int[]{VibrationEffect.Composition.PRIMITIVE_CLICK});
        assertTrue(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_CLICK));
        assertFalse(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_TICK));
@@ -73,30 +74,30 @@ public class VibratorInfoTest {
    @Test
    public void testEquals() {
        VibratorInfo empty = new VibratorInfo(1, 0, null, null);
        VibratorInfo complete = new VibratorInfo(1, VibratorInfo.CAPABILITY_AMPLITUDE_CONTROL,
        VibratorInfo complete = new VibratorInfo(1, IVibrator.CAP_AMPLITUDE_CONTROL,
                new int[]{VibrationEffect.EFFECT_CLICK},
                new int[]{VibrationEffect.Composition.PRIMITIVE_CLICK});

        assertEquals(complete, complete);
        assertEquals(complete, new VibratorInfo(1, VibratorInfo.CAPABILITY_AMPLITUDE_CONTROL,
        assertEquals(complete, new VibratorInfo(1, IVibrator.CAP_AMPLITUDE_CONTROL,
                new int[]{VibrationEffect.EFFECT_CLICK},
                new int[]{VibrationEffect.Composition.PRIMITIVE_CLICK}));

        assertFalse(empty.equals(new VibratorInfo(1, 0, new int[]{}, new int[]{})));
        assertFalse(complete.equals(new VibratorInfo(1, VibratorInfo.CAPABILITY_COMPOSE_EFFECTS,
        assertFalse(complete.equals(new VibratorInfo(1, IVibrator.CAP_COMPOSE_EFFECTS,
                new int[]{VibrationEffect.EFFECT_CLICK},
                new int[]{VibrationEffect.Composition.PRIMITIVE_CLICK})));
        assertFalse(complete.equals(new VibratorInfo(1, VibratorInfo.CAPABILITY_AMPLITUDE_CONTROL,
        assertFalse(complete.equals(new VibratorInfo(1, IVibrator.CAP_AMPLITUDE_CONTROL,
                new int[]{}, new int[]{})));
        assertFalse(complete.equals(new VibratorInfo(1, VibratorInfo.CAPABILITY_AMPLITUDE_CONTROL,
        assertFalse(complete.equals(new VibratorInfo(1, IVibrator.CAP_AMPLITUDE_CONTROL,
                null, new int[]{VibrationEffect.Composition.PRIMITIVE_CLICK})));
        assertFalse(complete.equals(new VibratorInfo(1, VibratorInfo.CAPABILITY_AMPLITUDE_CONTROL,
        assertFalse(complete.equals(new VibratorInfo(1, IVibrator.CAP_AMPLITUDE_CONTROL,
                new int[]{VibrationEffect.EFFECT_CLICK}, null)));
    }

    @Test
    public void testSerialization() {
        VibratorInfo original = new VibratorInfo(1, VibratorInfo.CAPABILITY_COMPOSE_EFFECTS,
        VibratorInfo original = new VibratorInfo(1, IVibrator.CAP_COMPOSE_EFFECTS,
                new int[]{VibrationEffect.EFFECT_CLICK}, null);

        Parcel parcel = Parcel.obtain();
+3 −1
Original line number Diff line number Diff line
@@ -120,7 +120,9 @@ final class Vibration {
        if (newEffect.equals(mEffect)) {
            return;
        }
        if (mOriginalEffect == null) {
            mOriginalEffect = mEffect;
        }
        mEffect = newEffect;
    }

Loading