52 lines
1.4 KiB
Kotlin
52 lines
1.4 KiB
Kotlin
package de.cfp.duck
|
|
|
|
import android.app.Activity
|
|
import app.tauri.annotation.Command
|
|
import app.tauri.annotation.InvokeArg
|
|
import app.tauri.annotation.TauriPlugin
|
|
import app.tauri.plugin.JSObject
|
|
import app.tauri.plugin.Plugin
|
|
import app.tauri.plugin.Invoke
|
|
|
|
import android.media.AudioFocusRequest
|
|
import android.media.AudioManager
|
|
import android.context.Context
|
|
import android.webkit.WebView
|
|
|
|
@TauriPlugin
|
|
class DuckPlugin(private val activity: Activity): Plugin(activity) {
|
|
private val implementation = Duck()
|
|
private lateinit var audioManager: AudioManager
|
|
private lateinit var focusRequest: AudioFocusRequest
|
|
|
|
override fun load(webView: WebView) {
|
|
audioManager = (AudioManager) getBridge().getActivity().getSystemService(Context.AUDIO_SERVICE)
|
|
}
|
|
|
|
@Command
|
|
fun duck(invoke: Invoke) {
|
|
focusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)
|
|
.setAcceptsDelayedFocusGain(false)
|
|
.setWillPauseWhenDucked(false)
|
|
.setForceDucking(true)
|
|
.build()
|
|
|
|
audioManager.requestAudioFocus(focusRequest)
|
|
|
|
val ret = JSObject()
|
|
ret.put("success", true)
|
|
invoke.resolve(ret)
|
|
}
|
|
|
|
@Command
|
|
fun unduck(invoke: Invoke) {
|
|
if (focusRequest != null) {
|
|
audioManager.abandonAudioFocusRequest(focusRequest)
|
|
}
|
|
|
|
val ret = JSObject()
|
|
ret.put("success", true)
|
|
invoke.resolve(ret)
|
|
}
|
|
}
|