P3-Liste aus dem UX-Review: Player nimmt Cover-Farbe auf, "Teilen" aus YouTube trägt die Adresse in den Downloader ein, Android Auto blättert durch die Bibliothek, Laufweite der Typografie geschärft, Überschriften vereinheitlicht. 533 Tests grün, flutter analyze ohne Befund.
48 lines
1.5 KiB
Kotlin
48 lines
1.5 KiB
Kotlin
package de.baka.melo
|
|
|
|
import android.content.Intent
|
|
import io.flutter.plugin.common.MethodCall
|
|
import io.flutter.plugin.common.MethodChannel
|
|
|
|
/**
|
|
* Reicht Text weiter, den eine andere App ueber "Teilen" an Melo schickt —
|
|
* in der Regel eine YouTube-Adresse.
|
|
*
|
|
* Eigene Bruecke statt eines Zusatzpakets: das Projekt hat fuer MediaStore
|
|
* und Klangeffekte bereits eigene (siehe MediaStoreBridge).
|
|
*/
|
|
class GeteiltBridge {
|
|
companion object {
|
|
const val CHANNEL = "de.baka.melo/geteilt"
|
|
}
|
|
|
|
private var offen: String? = null
|
|
|
|
/**
|
|
* Merkt sich den Text eines SEND-Intents. Wird sowohl beim Start als
|
|
* auch bei onNewIntent aufgerufen: die Activity laeuft mit singleTop,
|
|
* ein zweites Teilen startet sie also nicht neu.
|
|
*/
|
|
fun nimm(intent: Intent?) {
|
|
if (intent?.action != Intent.ACTION_SEND) return
|
|
if (intent.type != "text/plain") return
|
|
offen = intent.getStringExtra(Intent.EXTRA_TEXT)
|
|
// Aus dem Intent entfernen, damit ein Lagewechsel (Drehen) ihn nicht
|
|
// ein zweites Mal liefert.
|
|
intent.removeExtra(Intent.EXTRA_TEXT)
|
|
}
|
|
|
|
fun handle(call: MethodCall, result: MethodChannel.Result) {
|
|
when (call.method) {
|
|
"hole" -> {
|
|
// Nach dem Abholen leeren: sonst spraenge die App bei jedem
|
|
// Wiedereintritt erneut in den Downloader.
|
|
val text = offen
|
|
offen = null
|
|
result.success(text)
|
|
}
|
|
else -> result.notImplemented()
|
|
}
|
|
}
|
|
}
|