mirror of
https://github.com/ultrasonic/ultrasonic
synced 2025-02-18 04:30:48 +01:00
Convert AudioFocusHandler to Kotlin
This commit is contained in:
parent
0550116b35
commit
37632dd031
@ -1,88 +1,64 @@
|
|||||||
package org.moire.ultrasonic.service;
|
package org.moire.ultrasonic.service
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context
|
||||||
import android.content.SharedPreferences;
|
import android.media.AudioManager
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager.OnAudioFocusChangeListener
|
||||||
import timber.log.Timber;
|
import org.koin.java.KoinJavaComponent.inject
|
||||||
|
import org.moire.ultrasonic.domain.PlayerState
|
||||||
import org.moire.ultrasonic.domain.PlayerState;
|
import org.moire.ultrasonic.util.Constants
|
||||||
import org.moire.ultrasonic.util.Constants;
|
import org.moire.ultrasonic.util.Util
|
||||||
import org.moire.ultrasonic.util.Util;
|
import timber.log.Timber
|
||||||
|
|
||||||
import kotlin.Lazy;
|
|
||||||
|
|
||||||
import static org.koin.java.KoinJavaComponent.inject;
|
|
||||||
|
|
||||||
public class AudioFocusHandler
|
|
||||||
{
|
|
||||||
private static boolean hasFocus;
|
|
||||||
private static boolean pauseFocus;
|
|
||||||
private static boolean lowerFocus;
|
|
||||||
|
|
||||||
|
class AudioFocusHandler(private val context: Context) {
|
||||||
// TODO: This is a circular reference, try to remove it
|
// TODO: This is a circular reference, try to remove it
|
||||||
private Lazy<MediaPlayerController> mediaPlayerControllerLazy = inject(MediaPlayerController.class);
|
private val mediaPlayerControllerLazy = inject(MediaPlayerController::class.java)
|
||||||
private Context context;
|
|
||||||
|
|
||||||
public AudioFocusHandler(Context context)
|
fun requestAudioFocus() {
|
||||||
{
|
if (!hasFocus) {
|
||||||
this.context = context;
|
val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
|
||||||
|
hasFocus = true
|
||||||
|
|
||||||
|
|
||||||
|
audioManager.requestAudioFocus(object : OnAudioFocusChangeListener {
|
||||||
|
override fun onAudioFocusChange(focusChange: Int) {
|
||||||
|
val mediaPlayerController = mediaPlayerControllerLazy.value
|
||||||
|
if ((focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT || focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) && !mediaPlayerController.isJukeboxEnabled) {
|
||||||
|
Timber.v("Lost Audio Focus")
|
||||||
|
if (mediaPlayerController.playerState === PlayerState.STARTED) {
|
||||||
|
val preferences = Util.getPreferences(context)
|
||||||
|
val lossPref = preferences.getString(Constants.PREFERENCES_KEY_TEMP_LOSS, "1")!!.toInt()
|
||||||
|
if (lossPref == 2 || lossPref == 1 && focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {
|
||||||
|
lowerFocus = true
|
||||||
|
mediaPlayerController.setVolume(0.1f)
|
||||||
|
} else if (lossPref == 0 || lossPref == 1) {
|
||||||
|
pauseFocus = true
|
||||||
|
mediaPlayerController.pause()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
|
||||||
|
Timber.v("Regained Audio Focus")
|
||||||
|
if (pauseFocus) {
|
||||||
|
pauseFocus = false
|
||||||
|
mediaPlayerController.start()
|
||||||
|
} else if (lowerFocus) {
|
||||||
|
lowerFocus = false
|
||||||
|
mediaPlayerController.setVolume(1.0f)
|
||||||
|
}
|
||||||
|
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS && !mediaPlayerController.isJukeboxEnabled) {
|
||||||
|
hasFocus = false
|
||||||
|
mediaPlayerController.pause()
|
||||||
|
audioManager.abandonAudioFocus(this)
|
||||||
|
Timber.v("Abandoned Audio Focus")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN)
|
||||||
|
Timber.v("Got Audio Focus")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void requestAudioFocus()
|
companion object {
|
||||||
{
|
private var hasFocus = false
|
||||||
if (!hasFocus)
|
private var pauseFocus = false
|
||||||
{
|
private var lowerFocus = false
|
||||||
final AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
|
||||||
hasFocus = true;
|
|
||||||
audioManager.requestAudioFocus(new AudioManager.OnAudioFocusChangeListener()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void onAudioFocusChange(int focusChange)
|
|
||||||
{
|
|
||||||
MediaPlayerController mediaPlayerController = mediaPlayerControllerLazy.getValue();
|
|
||||||
if ((focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT || focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) && !mediaPlayerController.isJukeboxEnabled())
|
|
||||||
{
|
|
||||||
Timber.v("Lost Audio Focus");
|
|
||||||
if (mediaPlayerController.getPlayerState() == PlayerState.STARTED)
|
|
||||||
{
|
|
||||||
SharedPreferences preferences = Util.getPreferences(context);
|
|
||||||
int lossPref = Integer.parseInt(preferences.getString(Constants.PREFERENCES_KEY_TEMP_LOSS, "1"));
|
|
||||||
if (lossPref == 2 || (lossPref == 1 && focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK))
|
|
||||||
{
|
|
||||||
lowerFocus = true;
|
|
||||||
mediaPlayerController.setVolume(0.1f);
|
|
||||||
}
|
|
||||||
else if (lossPref == 0 || (lossPref == 1))
|
|
||||||
{
|
|
||||||
pauseFocus = true;
|
|
||||||
mediaPlayerController.pause();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (focusChange == AudioManager.AUDIOFOCUS_GAIN)
|
|
||||||
{
|
|
||||||
Timber.v("Regained Audio Focus");
|
|
||||||
if (pauseFocus)
|
|
||||||
{
|
|
||||||
pauseFocus = false;
|
|
||||||
mediaPlayerController.start();
|
|
||||||
}
|
|
||||||
else if (lowerFocus)
|
|
||||||
{
|
|
||||||
lowerFocus = false;
|
|
||||||
mediaPlayerController.setVolume(1.0f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (focusChange == AudioManager.AUDIOFOCUS_LOSS && !mediaPlayerController.isJukeboxEnabled())
|
|
||||||
{
|
|
||||||
hasFocus = false;
|
|
||||||
mediaPlayerController.pause();
|
|
||||||
audioManager.abandonAudioFocus(this);
|
|
||||||
Timber.v("Abandoned Audio Focus");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
|
|
||||||
Timber.v("Got Audio Focus");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user