add sentence service
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package cn.learningpad.oraltrainer.sample
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
@@ -19,9 +20,16 @@ import cn.learningpad.oraltrainer.sdk.OralTrainerSdk
|
||||
import cn.learningpad.oraltrainer.sdk.PlaybackSnapshot
|
||||
import cn.learningpad.oraltrainer.sdk.PlayerConfig
|
||||
import cn.learningpad.oraltrainer.sdk.SentenceBoundary
|
||||
import cn.learningpad.oraltrainer.sdk.SentenceBoundaryApiCallback
|
||||
import cn.learningpad.oraltrainer.sdk.TrainingMediaItem
|
||||
import cn.learningpad.oraltrainer.sdk.SentenceBoundaryApiResult
|
||||
|
||||
class MainActivity : Activity() {
|
||||
private companion object {
|
||||
const val PICK_VIDEO_REQUEST = 1001
|
||||
}
|
||||
|
||||
private lateinit var sdk: OralTrainerSdk
|
||||
private lateinit var controller: OralTrainerController
|
||||
private lateinit var statusText: TextView
|
||||
private lateinit var sentenceText: TextView
|
||||
@@ -29,7 +37,7 @@ class MainActivity : Activity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
val sdk = OralTrainerSdk.init(this)
|
||||
sdk = OralTrainerSdk.init(this)
|
||||
controller = sdk.createController(
|
||||
playerConfig = PlayerConfig(
|
||||
sentenceMode = true,
|
||||
@@ -66,8 +74,8 @@ class MainActivity : Activity() {
|
||||
addView(commandButton("快退") { controller.rewind() })
|
||||
addView(commandButton("播放/暂停") { controller.togglePlayPause() })
|
||||
addView(commandButton("快进") { controller.fastForward() })
|
||||
addView(commandButton("上一句") { controller.seekToPreviousSentence() })
|
||||
addView(commandButton("下一句") { controller.seekToNextSentence() })
|
||||
addView(commandButton("上一句") { controller.previousSentenceOrRewind() })
|
||||
addView(commandButton("下一句") { controller.nextSentenceOrForward() })
|
||||
}
|
||||
|
||||
val root = LinearLayout(this).apply {
|
||||
@@ -77,6 +85,10 @@ class MainActivity : Activity() {
|
||||
addView(statusText)
|
||||
addView(sentenceText)
|
||||
addView(controls)
|
||||
addView(Button(this@MainActivity).apply {
|
||||
text = "选择本地视频"
|
||||
setOnClickListener { openLocalVideoPicker() }
|
||||
})
|
||||
}
|
||||
setContentView(root)
|
||||
|
||||
@@ -108,6 +120,37 @@ class MainActivity : Activity() {
|
||||
controller.loadItem(sampleOnlineLesson())
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
if (requestCode != PICK_VIDEO_REQUEST || resultCode != RESULT_OK) {
|
||||
return
|
||||
}
|
||||
val uri = data?.data ?: return
|
||||
val persistableFlags = data.flags and Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||
if (persistableFlags != 0) {
|
||||
runCatching {
|
||||
contentResolver.takePersistableUriPermission(uri, persistableFlags)
|
||||
}
|
||||
}
|
||||
val item = TrainingMediaItem(
|
||||
id = uri.toString(),
|
||||
title = uri.lastPathSegment ?: "本地视频",
|
||||
uri = uri,
|
||||
)
|
||||
controller.loadItem(item)
|
||||
statusText.text = "正在获取句子边界..."
|
||||
sdk.sentenceBoundaryApi.fetchForUri(uri, contentResolver, object : SentenceBoundaryApiCallback {
|
||||
override fun onSuccess(result: SentenceBoundaryApiResult) {
|
||||
controller.loadItem(item.copy(sentences = result.sentences))
|
||||
statusText.text = "句子边界已加载:${result.sentences.size} 句"
|
||||
}
|
||||
|
||||
override fun onError(error: Throwable) {
|
||||
statusText.text = "句子边界获取失败,使用 10 秒跳转:${error.message.orEmpty()}"
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
controller.release()
|
||||
super.onDestroy()
|
||||
@@ -128,6 +171,18 @@ class MainActivity : Activity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun openLocalVideoPicker() {
|
||||
startActivityForResult(
|
||||
Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
|
||||
addCategory(Intent.CATEGORY_OPENABLE)
|
||||
type = "video/*"
|
||||
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
|
||||
},
|
||||
PICK_VIDEO_REQUEST,
|
||||
)
|
||||
}
|
||||
|
||||
private fun sampleOnlineLesson(): TrainingMediaItem {
|
||||
return TrainingMediaItem(
|
||||
id = "online_sample_01",
|
||||
|
||||
Reference in New Issue
Block a user