Merge "Introduce media and accessibility vibration usages."

This commit is contained in:
Lais Andrade
2021-11-29 18:10:48 +00:00
committed by Android (Google) Code Review
4 changed files with 43 additions and 6 deletions

View File

@@ -32427,13 +32427,16 @@ package android.os {
method public void writeToParcel(@NonNull android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.os.VibrationAttributes> CREATOR;
field public static final int FLAG_BYPASS_INTERRUPTION_POLICY = 1; // 0x1
field public static final int USAGE_ACCESSIBILITY = 66; // 0x42
field public static final int USAGE_ALARM = 17; // 0x11
field public static final int USAGE_CLASS_ALARM = 1; // 0x1
field public static final int USAGE_CLASS_FEEDBACK = 2; // 0x2
field public static final int USAGE_CLASS_MASK = 15; // 0xf
field public static final int USAGE_CLASS_MEDIA = 3; // 0x3
field public static final int USAGE_CLASS_UNKNOWN = 0; // 0x0
field public static final int USAGE_COMMUNICATION_REQUEST = 65; // 0x41
field public static final int USAGE_HARDWARE_FEEDBACK = 50; // 0x32
field public static final int USAGE_MEDIA = 19; // 0x13
field public static final int USAGE_NOTIFICATION = 49; // 0x31
field public static final int USAGE_PHYSICAL_EMULATION = 34; // 0x22
field public static final int USAGE_RINGTONE = 33; // 0x21

View File

@@ -81,6 +81,11 @@ public final class VibrationAttributes implements Parcelable {
* actions, such as emulation of physical effects, and texting feedback vibration.
*/
public static final int USAGE_CLASS_FEEDBACK = 0x2;
/**
* Vibration usage class value to use when the vibration is part of media, such as music, movie,
* soundtrack, game or animations.
*/
public static final int USAGE_CLASS_MEDIA = 0x3;
/**
* Mask for vibration usage class value.
@@ -121,6 +126,15 @@ public final class VibrationAttributes implements Parcelable {
* such as a fingerprint sensor.
*/
public static final int USAGE_HARDWARE_FEEDBACK = 0x30 | USAGE_CLASS_FEEDBACK;
/**
* Usage value to use for accessibility vibrations, such as with a screen reader.
*/
public static final int USAGE_ACCESSIBILITY = 0x40 | USAGE_CLASS_FEEDBACK;
/**
* Usage value to use for media vibrations, such as music, movie, soundtrack, animations, games,
* or any interactive media that isn't for touch feedback specifically.
*/
public static final int USAGE_MEDIA = 0x10 | USAGE_CLASS_MEDIA;
/**
* @hide
@@ -208,13 +222,17 @@ public final class VibrationAttributes implements Parcelable {
case USAGE_NOTIFICATION:
return AudioAttributes.USAGE_NOTIFICATION;
case USAGE_COMMUNICATION_REQUEST:
return AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST;
return AudioAttributes.USAGE_VOICE_COMMUNICATION;
case USAGE_RINGTONE:
return AudioAttributes.USAGE_NOTIFICATION_RINGTONE;
case USAGE_TOUCH:
return AudioAttributes.USAGE_ASSISTANCE_SONIFICATION;
case USAGE_ALARM:
return AudioAttributes.USAGE_ALARM;
case USAGE_ACCESSIBILITY:
return AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY;
case USAGE_MEDIA:
return AudioAttributes.USAGE_MEDIA;
default:
return AudioAttributes.USAGE_UNKNOWN;
}
@@ -286,12 +304,16 @@ public final class VibrationAttributes implements Parcelable {
return "UNKNOWN";
case USAGE_ALARM:
return "ALARM";
case USAGE_ACCESSIBILITY:
return "ACCESSIBILITY";
case USAGE_RINGTONE:
return "RINGTONE";
case USAGE_NOTIFICATION:
return "NOTIFICATION";
case USAGE_COMMUNICATION_REQUEST:
return "COMMUNICATION_REQUEST";
case USAGE_MEDIA:
return "MEDIA";
case USAGE_TOUCH:
return "TOUCH";
case USAGE_PHYSICAL_EMULATION:
@@ -405,21 +427,31 @@ public final class VibrationAttributes implements Parcelable {
case AudioAttributes.USAGE_NOTIFICATION_EVENT:
case AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_DELAYED:
case AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT:
case AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST:
mUsage = USAGE_NOTIFICATION;
break;
case AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST:
case AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY:
case AudioAttributes.USAGE_VOICE_COMMUNICATION:
case AudioAttributes.USAGE_VOICE_COMMUNICATION_SIGNALLING:
case AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE:
case AudioAttributes.USAGE_ASSISTANT:
mUsage = USAGE_COMMUNICATION_REQUEST;
break;
case AudioAttributes.USAGE_NOTIFICATION_RINGTONE:
mUsage = USAGE_RINGTONE;
break;
case AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY:
mUsage = USAGE_ACCESSIBILITY;
break;
case AudioAttributes.USAGE_ASSISTANCE_SONIFICATION:
mUsage = USAGE_TOUCH;
break;
case AudioAttributes.USAGE_ALARM:
mUsage = USAGE_ALARM;
break;
case AudioAttributes.USAGE_MEDIA:
case AudioAttributes.USAGE_GAME:
mUsage = USAGE_MEDIA;
break;
default:
mUsage = USAGE_UNKNOWN;
}
@@ -450,6 +482,8 @@ public final class VibrationAttributes implements Parcelable {
* {@link VibrationAttributes#USAGE_TOUCH},
* {@link VibrationAttributes#USAGE_PHYSICAL_EMULATION},
* {@link VibrationAttributes#USAGE_HARDWARE_FEEDBACK}.
* {@link VibrationAttributes#USAGE_ACCESSIBILITY}.
* {@link VibrationAttributes#USAGE_MEDIA}.
* @return the same Builder instance.
*/
public @NonNull Builder setUsage(int usage) {

View File

@@ -223,7 +223,7 @@ public class VibratorTest {
public void vibrate_withAudioAttributes_createsVibrationAttributesWithSameUsage() {
VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
AudioAttributes audioAttributes = new AudioAttributes.Builder().setUsage(
AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY).build();
AudioAttributes.USAGE_VOICE_COMMUNICATION).build();
mVibratorSpy.vibrate(effect, audioAttributes);
@@ -235,7 +235,7 @@ public class VibratorTest {
assertEquals(VibrationAttributes.USAGE_COMMUNICATION_REQUEST,
vibrationAttributes.getUsage());
// Keeps original AudioAttributes usage to be used by the VibratorService.
assertEquals(AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY,
assertEquals(AudioAttributes.USAGE_VOICE_COMMUNICATION,
vibrationAttributes.getAudioUsage());
}

View File

@@ -635,7 +635,7 @@ public class VibratorManagerServiceTest {
inOrderVerifier.verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
eq(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION), anyInt(), anyString());
inOrderVerifier.verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
eq(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST),
eq(AudioAttributes.USAGE_VOICE_COMMUNICATION),
anyInt(), anyString());
inOrderVerifier.verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
eq(AudioAttributes.USAGE_UNKNOWN), anyInt(), anyString());