Fixed vibration issue on Android 10 when app in background

This commit is contained in:
Sylvain Berfini 2020-05-18 10:23:16 +02:00
parent e476b18d21
commit 9b966f70e4
5 changed files with 35 additions and 9 deletions

View file

@ -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;

View file

@ -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);

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}
}