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

Commit 4e9af660 authored by Lais Andrade's avatar Lais Andrade
Browse files

Add public vibrate method with VibrationAttributes

Deprecate Vibrator.vibrate method that takes AudioAttributes and
introduce a new one that takes VibrationAttributes instead.

Update setAlwaysOnEffect to also take VibrationAttributes.

Introduce new public constructor for VibrationAttributes.Builder that
takes AudioAttributes, to be used in scenarios where the vibration
is meant to accompany an audio, and have similar attributes.

Bug: 163119475
Test: VibratorTest
Change-Id: I2721e3638aeb1aa4df3d515c3c0465923457dcc0
parent 827a16ba
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -32341,6 +32341,7 @@ package android.os {
  }
  public final class VibrationAttributes implements android.os.Parcelable {
    method @NonNull public static android.os.VibrationAttributes createForUsage(int);
    method public int describeContents();
    method public int getFlags();
    method public int getUsage();
@@ -32366,6 +32367,7 @@ package android.os {
  public static final class VibrationAttributes.Builder {
    ctor public VibrationAttributes.Builder();
    ctor public VibrationAttributes.Builder(@Nullable android.os.VibrationAttributes);
    ctor public VibrationAttributes.Builder(@NonNull android.media.AudioAttributes);
    method @NonNull public android.os.VibrationAttributes build();
    method @NonNull public android.os.VibrationAttributes.Builder setFlags(int, int);
    method @NonNull public android.os.VibrationAttributes.Builder setUsage(int);
@@ -32416,7 +32418,8 @@ package android.os {
    method @Deprecated @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(long[], int);
    method @Deprecated @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(long[], int, android.media.AudioAttributes);
    method @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(android.os.VibrationEffect);
    method @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(android.os.VibrationEffect, android.media.AudioAttributes);
    method @Deprecated @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(android.os.VibrationEffect, android.media.AudioAttributes);
    method @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(@NonNull android.os.VibrationEffect, @NonNull android.os.VibrationAttributes);
    field public static final int VIBRATION_EFFECT_SUPPORT_NO = 2; // 0x2
    field public static final int VIBRATION_EFFECT_SUPPORT_UNKNOWN = 0; // 0x0
    field public static final int VIBRATION_EFFECT_SUPPORT_YES = 1; // 0x1
+2 −1
Original line number Diff line number Diff line
@@ -1835,7 +1835,8 @@ package android.os {
  }

  public static final class VibrationAttributes.Builder {
    ctor public VibrationAttributes.Builder(@NonNull android.media.AudioAttributes, @Nullable android.os.VibrationEffect);
    ctor public VibrationAttributes.Builder(@NonNull android.media.AudioAttributes, @NonNull android.os.VibrationEffect);
    ctor public VibrationAttributes.Builder(@NonNull android.os.VibrationAttributes, @NonNull android.os.VibrationEffect);
  }

  public abstract class VibrationEffect implements android.os.Parcelable {
+2 −2
Original line number Diff line number Diff line
@@ -174,8 +174,8 @@ final class InputDeviceVibrator extends Vibrator {
     * @hide
     */
    @Override
    public void vibrate(int uid, String opPkg, @NonNull VibrationEffect effect,
            String reason, @NonNull VibrationAttributes attributes) {
    public void vibrate(int uid, String opPkg, @NonNull VibrationEffect effect, String reason,
            @NonNull VibrationAttributes attributes) {
        mInputManager.vibrate(mDeviceId, effect, mToken);
    }

+1 −1
Original line number Diff line number Diff line
@@ -99,7 +99,7 @@ public class ExternalVibration implements Parcelable {
    }

    public VibrationAttributes getVibrationAttributes() {
        return new VibrationAttributes.Builder(mAttrs, null).build();
        return new VibrationAttributes.Builder(mAttrs).build();
    }

    /**
+5 −4
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.media.AudioAttributes;
import android.util.ArrayMap;
import android.util.Log;
import android.util.SparseArray;
@@ -180,14 +179,13 @@ public class SystemVibrator extends Vibrator {

    @Override
    public boolean setAlwaysOnEffect(int uid, String opPkg, int alwaysOnId, VibrationEffect effect,
            AudioAttributes attributes) {
            VibrationAttributes attrs) {
        if (mVibratorManager == null) {
            Log.w(TAG, "Failed to set always-on effect; no vibrator manager.");
            return false;
        }
        VibrationAttributes attr = new VibrationAttributes.Builder(attributes, effect).build();
        CombinedVibration combinedEffect = CombinedVibration.createParallel(effect);
        return mVibratorManager.setAlwaysOnEffect(uid, opPkg, alwaysOnId, combinedEffect, attr);
        return mVibratorManager.setAlwaysOnEffect(uid, opPkg, alwaysOnId, combinedEffect, attrs);
    }

    @Override
@@ -198,6 +196,9 @@ public class SystemVibrator extends Vibrator {
            return;
        }
        CombinedVibration combinedEffect = CombinedVibration.createParallel(effect);
        // TODO(b/185351540): move this into VibratorManagerService once the touch vibration
        // heuristics is fixed and works for CombinedVibration. Make sure it's always applied.
        attributes = new VibrationAttributes.Builder(attributes, effect).build();
        mVibratorManager.vibrate(uid, opPkg, combinedEffect, reason, attributes);
    }

Loading