mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 04:53:36 +00:00
[android] Simplify TTS code using AudioManagerCompat
Signed-off-by: Isira Seneviratne <31027858+Isira-Seneviratne@users.noreply.github.com>
This commit is contained in:
@@ -20,6 +20,7 @@ androidx-preference = { module = "androidx.preference:preference", version = "1.
|
||||
androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version = "1.4.0" }
|
||||
androidx-work-runtime = { module = "androidx.work:work-runtime", version = "2.10.5" }
|
||||
androidx-lifecycle-process = { module = "androidx.lifecycle:lifecycle-process", version = "2.9.4" }
|
||||
androidx-media = { module = "androidx.media:media", version = "1.7.1" }
|
||||
android-material = { module = "com.google.android.material:material", version = "1.12.0" }
|
||||
google-guava = { module = "com.google.guava:guava", version = "33.4.8-android" }
|
||||
appdevnext-androidchart = { module = "com.github.AppDevNext:AndroidChart", version = "3.1.0.31" }
|
||||
|
||||
@@ -122,6 +122,7 @@ dependencies {
|
||||
implementation libs.androidx.annotation
|
||||
implementation libs.androidx.fragment
|
||||
implementation libs.androidx.lifecycle.process
|
||||
implementation libs.androidx.media
|
||||
implementation libs.androidx.recyclerview
|
||||
implementation libs.android.material
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package app.organicmaps.sdk.sound;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.ContentObserver;
|
||||
import android.media.AudioManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
@@ -12,6 +13,10 @@ import android.text.TextUtils;
|
||||
import android.util.Pair;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.media.AudioAttributesCompat;
|
||||
import androidx.media.AudioFocusRequestCompat;
|
||||
import androidx.media.AudioManagerCompat;
|
||||
import app.organicmaps.sdk.util.Config;
|
||||
import app.organicmaps.sdk.util.concurrency.UiThread;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
@@ -51,7 +56,16 @@ public enum TtsPlayer
|
||||
private TextToSpeech mTts;
|
||||
private boolean mInitializing;
|
||||
private boolean mReloadTriggered = false;
|
||||
private AudioFocusManager mAudioFocusManager;
|
||||
|
||||
private final AudioFocusRequestCompat mAudioFocusRequest =
|
||||
new AudioFocusRequestCompat.Builder(AudioManagerCompat.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)
|
||||
.setAudioAttributes(new AudioAttributesCompat.Builder()
|
||||
.setUsage(AudioAttributesCompat.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE)
|
||||
.setContentType(AudioAttributesCompat.CONTENT_TYPE_SPEECH)
|
||||
.build())
|
||||
.setOnAudioFocusChangeListener(focusChange -> {})
|
||||
.build();
|
||||
private AudioManager mAudioManager;
|
||||
|
||||
private final Bundle mParams = new Bundle();
|
||||
|
||||
@@ -167,29 +181,29 @@ public enum TtsPlayer
|
||||
@Override
|
||||
public void onStart(String utteranceId)
|
||||
{
|
||||
mAudioFocusManager.requestAudioFocus();
|
||||
AudioManagerCompat.requestAudioFocus(mAudioManager, mAudioFocusRequest);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDone(String utteranceId)
|
||||
{
|
||||
mAudioFocusManager.releaseAudioFocus();
|
||||
AudioManagerCompat.abandonAudioFocusRequest(mAudioManager, mAudioFocusRequest);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecated") // abstract method must be implemented
|
||||
public void onError(String utteranceId)
|
||||
{
|
||||
mAudioFocusManager.releaseAudioFocus();
|
||||
AudioManagerCompat.abandonAudioFocusRequest(mAudioManager, mAudioFocusRequest);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String utteranceId, int errorCode)
|
||||
{
|
||||
mAudioFocusManager.releaseAudioFocus();
|
||||
AudioManagerCompat.abandonAudioFocusRequest(mAudioManager, mAudioFocusRequest);
|
||||
}
|
||||
});
|
||||
mAudioFocusManager = new AudioFocusManager(context);
|
||||
mAudioManager = ContextCompat.getSystemService(context, AudioManager.class);
|
||||
mParams.putFloat(TextToSpeech.Engine.KEY_PARAM_VOLUME, Config.TTS.getVolume());
|
||||
mInitializing = false;
|
||||
if (mReloadTriggered && sOnReloadCallback != null)
|
||||
@@ -230,12 +244,10 @@ public enum TtsPlayer
|
||||
if (Config.TTS.isEnabled())
|
||||
try
|
||||
{
|
||||
boolean isMusicActive = mAudioFocusManager.requestAudioFocus();
|
||||
if (isMusicActive)
|
||||
delayHandler.postDelayed(
|
||||
() -> mTts.speak(textToSpeak, TextToSpeech.QUEUE_ADD, mParams, textToSpeak), TTS_SPEAK_DELAY_MILLIS);
|
||||
else
|
||||
mTts.speak(textToSpeak, TextToSpeech.QUEUE_ADD, mParams, textToSpeak);
|
||||
final boolean isMusicActive = mAudioManager.isMusicActive();
|
||||
AudioManagerCompat.requestAudioFocus(mAudioManager, mAudioFocusRequest);
|
||||
final long delay = isMusicActive ? TTS_SPEAK_DELAY_MILLIS : 0;
|
||||
delayHandler.postDelayed(() -> mTts.speak(textToSpeak, TextToSpeech.QUEUE_ADD, mParams, textToSpeak), delay);
|
||||
}
|
||||
catch (IllegalArgumentException e)
|
||||
{
|
||||
@@ -255,7 +267,7 @@ public enum TtsPlayer
|
||||
if (isReady())
|
||||
try
|
||||
{
|
||||
mAudioFocusManager.releaseAudioFocus();
|
||||
AudioManagerCompat.abandonAudioFocusRequest(mAudioManager, mAudioFocusRequest);
|
||||
mTts.stop();
|
||||
}
|
||||
catch (IllegalArgumentException e)
|
||||
|
||||
Reference in New Issue
Block a user