From 9b966f70e4a551f516687d1d7fd86189c0a347f7 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 18 May 2020 10:23:16 +0200 Subject: [PATCH] Fixed vibration issue on Android 10 when app in background --- .../main/java/org/linphone/LinphoneManager.java | 12 +++++------- .../org/linphone/call/AndroidAudioManager.java | 3 +-- .../linphone/compatibility/ApiTwentyOnePlus.java | 6 ++++++ .../linphone/compatibility/ApiTwentySixPlus.java | 14 ++++++++++++++ .../org/linphone/compatibility/Compatibility.java | 9 +++++++++ 5 files changed, 35 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/linphone/LinphoneManager.java b/app/src/main/java/org/linphone/LinphoneManager.java index 2ba4f338d..26b2ae6c8 100644 --- a/app/src/main/java/org/linphone/LinphoneManager.java +++ b/app/src/main/java/org/linphone/LinphoneManager.java @@ -39,7 +39,11 @@ import android.telephony.TelephonyManager; import android.view.View; import android.widget.Button; import android.widget.CheckBox; - +import java.io.File; +import java.sql.Timestamp; +import java.util.Date; +import java.util.Timer; +import java.util.TimerTask; import org.linphone.assistant.PhoneAccountLinkingAssistantActivity; import org.linphone.call.AndroidAudioManager; import org.linphone.call.CallManager; @@ -67,12 +71,6 @@ import org.linphone.utils.LinphoneUtils; import org.linphone.utils.MediaScanner; import org.linphone.utils.PushNotificationUtils; -import java.io.File; -import java.sql.Timestamp; -import java.util.Date; -import java.util.Timer; -import java.util.TimerTask; - /** Handles Linphone's Core lifecycle */ public class LinphoneManager implements SensorEventListener { private final String mBasePath; diff --git a/app/src/main/java/org/linphone/call/AndroidAudioManager.java b/app/src/main/java/org/linphone/call/AndroidAudioManager.java index 2e5ec00cb..fd98f91ea 100644 --- a/app/src/main/java/org/linphone/call/AndroidAudioManager.java +++ b/app/src/main/java/org/linphone/call/AndroidAudioManager.java @@ -355,8 +355,7 @@ public class AndroidAudioManager { || mAudioManager.getRingerMode() == AudioManager.RINGER_MODE_NORMAL) && mVibrator != null && LinphonePreferences.instance().isIncomingCallVibrationEnabled()) { - long[] patern = {0, 1000, 1000}; - mVibrator.vibrate(patern, 1); + Compatibility.vibrate(mVibrator); } if (mRingerPlayer == null) { requestAudioFocus(STREAM_RING); diff --git a/app/src/main/java/org/linphone/compatibility/ApiTwentyOnePlus.java b/app/src/main/java/org/linphone/compatibility/ApiTwentyOnePlus.java index 761830adb..f72a344dd 100644 --- a/app/src/main/java/org/linphone/compatibility/ApiTwentyOnePlus.java +++ b/app/src/main/java/org/linphone/compatibility/ApiTwentyOnePlus.java @@ -26,6 +26,7 @@ import android.app.PendingIntent; import android.content.ContentProviderClient; import android.content.Context; import android.graphics.Bitmap; +import android.os.Vibrator; import android.view.WindowManager; import androidx.core.content.ContextCompat; import org.linphone.R; @@ -242,4 +243,9 @@ class ApiTwentyOnePlus { activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); } } + + public static void vibrate(Vibrator vibrator) { + long[] pattern = {0, 1000, 1000}; + vibrator.vibrate(pattern, 1); + } } diff --git a/app/src/main/java/org/linphone/compatibility/ApiTwentySixPlus.java b/app/src/main/java/org/linphone/compatibility/ApiTwentySixPlus.java index 7abf51488..91b6598a9 100644 --- a/app/src/main/java/org/linphone/compatibility/ApiTwentySixPlus.java +++ b/app/src/main/java/org/linphone/compatibility/ApiTwentySixPlus.java @@ -33,7 +33,10 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; +import android.media.AudioAttributes; import android.os.Build; +import android.os.VibrationEffect; +import android.os.Vibrator; import android.provider.Settings; import android.widget.RemoteViews; import org.linphone.R; @@ -314,4 +317,15 @@ class ApiTwentySixPlus { activity.enterPictureInPictureMode(); } } + + public static void vibrate(Vibrator vibrator) { + long[] timings = {0, 1000, 1000}; + int[] amplitudes = {0, VibrationEffect.DEFAULT_AMPLITUDE, 0}; + VibrationEffect effect = VibrationEffect.createWaveform(timings, amplitudes, 1); + AudioAttributes audioAttrs = + new AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE) + .build(); + vibrator.vibrate(effect, audioAttrs); + } } diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.java b/app/src/main/java/org/linphone/compatibility/Compatibility.java index 23268222d..587eb8dc8 100644 --- a/app/src/main/java/org/linphone/compatibility/Compatibility.java +++ b/app/src/main/java/org/linphone/compatibility/Compatibility.java @@ -30,6 +30,7 @@ import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.os.Build; +import android.os.Vibrator; import android.provider.Settings; import android.service.notification.StatusBarNotification; import org.linphone.core.Address; @@ -324,4 +325,12 @@ public class Compatibility { return new StatusBarNotification[0]; } + + public static void vibrate(Vibrator vibrator) { + if (Version.sdkAboveOrEqual(Version.API26_O_80)) { + ApiTwentySixPlus.vibrate(vibrator); + } else { + ApiTwentyOnePlus.vibrate(vibrator); + } + } }