mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-23 12:38:33 +00:00
Specify vibrate attributes to resolve vibrate from background.
This commit is contained in:
@@ -8,6 +8,8 @@ import android.media.AudioManager;
|
||||
import android.media.MediaPlayer;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.VibrationAttributes;
|
||||
import android.os.VibrationEffect;
|
||||
import android.os.Vibrator;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
@@ -30,6 +32,10 @@ public class IncomingRinger {
|
||||
|
||||
private MediaPlayer player;
|
||||
|
||||
private final AudioAttributes audioAttributes = new AudioAttributes.Builder()
|
||||
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
|
||||
.build();
|
||||
|
||||
IncomingRinger(Context context) {
|
||||
this.context = context.getApplicationContext();
|
||||
this.vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
|
||||
@@ -49,7 +55,7 @@ public class IncomingRinger {
|
||||
|
||||
if (shouldVibrate(context, player, ringerMode, vibrate)) {
|
||||
Log.i(TAG, "Starting vibration");
|
||||
vibrator.vibrate(VIBRATE_PATTERN, 1);
|
||||
startVibrate();
|
||||
} else {
|
||||
Log.i(TAG, "Skipping vibration");
|
||||
}
|
||||
@@ -83,6 +89,17 @@ public class IncomingRinger {
|
||||
vibrator.cancel();
|
||||
}
|
||||
|
||||
private void startVibrate() {
|
||||
if (Build.VERSION.SDK_INT >= 33) {
|
||||
vibrator.vibrate(
|
||||
VibrationEffect.createWaveform(VIBRATE_PATTERN, 1),
|
||||
VibrationAttributes.createForUsage(VibrationAttributes.USAGE_RINGTONE)
|
||||
);
|
||||
} else {
|
||||
vibrator.vibrate(VIBRATE_PATTERN, 1, audioAttributes);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides the ringer mode if we are on the right API level and have the right policy access.
|
||||
* Checks the ringer volume to make sure we're not going to blast someone with their ringtone inadvertently.
|
||||
|
||||
Reference in New Issue
Block a user