|
|
|
|
@ -11,7 +11,6 @@ import android.net.Uri
|
|
|
|
|
import android.os.Build |
|
|
|
|
import android.os.VibrationEffect |
|
|
|
|
import android.os.Vibrator |
|
|
|
|
import android.provider.Settings |
|
|
|
|
import com.utun.chat.ChatApplication |
|
|
|
|
import com.utun.chat.R |
|
|
|
|
|
|
|
|
|
@ -19,12 +18,13 @@ import com.utun.chat.R
|
|
|
|
|
* Мелодия входящего звонка через профиль звонка (STREAM_RING) + ручная вибрация. |
|
|
|
|
* |
|
|
|
|
* Поведение по системному режиму звонка (AudioManager.getRingerMode): |
|
|
|
|
* - NORMAL : звук + вибрация, если включена настройка «вибрировать при вызове» |
|
|
|
|
* (Settings.System.VIBRATE_WHEN_RINGING); |
|
|
|
|
* - NORMAL : звук + вибрация; |
|
|
|
|
* - VIBRATE: без звука, только вибрация; |
|
|
|
|
* - SILENT : без звука и вибрации. |
|
|
|
|
* |
|
|
|
|
* Вибрация всегда запускается вручную через Vibrator (класс Ringtone сам не вибрирует). |
|
|
|
|
* Настройка «вибрировать при вызове» (VIBRATE_WHEN_RINGING) устарела и на новых |
|
|
|
|
* Android/Samsung не отражает реальное поведение телефонии — поэтому не используется. |
|
|
|
|
* |
|
|
|
|
* API 28+ : звук через Ringtone (RingtoneManager), громкость — «громкость вызова». |
|
|
|
|
* API 26–27: звук через MediaPlayer(STREAM_RING, loop) + audio focus. |
|
|
|
|
@ -48,8 +48,7 @@ class RingtonePlayer {
|
|
|
|
|
|
|
|
|
|
val ringerMode = am.ringerMode |
|
|
|
|
val playSound = ringerMode == AudioManager.RINGER_MODE_NORMAL |
|
|
|
|
val playVibrate = ringerMode == AudioManager.RINGER_MODE_VIBRATE |
|
|
|
|
|| (playSound && systemVibrateWhenRinging()) |
|
|
|
|
val playVibrate = ringerMode != AudioManager.RINGER_MODE_SILENT |
|
|
|
|
|
|
|
|
|
LogManager.addLog("INFO", "Ringtone", |
|
|
|
|
"ringerMode=%d sound=%b vibrate=%b".format(ringerMode, playSound, playVibrate)) |
|
|
|
|
@ -120,14 +119,7 @@ class RingtonePlayer {
|
|
|
|
|
LogManager.addLog("INFO", "Ringtone", "stopped") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* ── вибрация (решение принято в play(): VIBRATE-режим или VIBRATE_WHEN_RINGING) ── */ |
|
|
|
|
|
|
|
|
|
private fun systemVibrateWhenRinging(): Boolean = try { |
|
|
|
|
Settings.System.getInt( |
|
|
|
|
ChatApplication.instance.contentResolver, Settings.System.VIBRATE_WHEN_RINGING, 0) != 0 |
|
|
|
|
} catch (e: Exception) { |
|
|
|
|
false |
|
|
|
|
} |
|
|
|
|
/* ── вибрация (решение принято в play(): вибрируем всегда, кроме SILENT) ── */ |
|
|
|
|
|
|
|
|
|
private fun startVibrate() { |
|
|
|
|
val v = try { |
|
|
|
|
|