From f3513e6ea89f97f18edf5a8d3d8b15c5c4061b7e Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 08:10:19 +0800 Subject: [PATCH 01/21] up --- app/src/main/java/io/legado/app/help/JsExtensions.kt | 5 +++-- .../main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt | 5 +++-- app/src/main/java/io/legado/app/utils/EncoderUtils.kt | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/JsExtensions.kt b/app/src/main/java/io/legado/app/help/JsExtensions.kt index d321f57fb..9e4bca018 100644 --- a/app/src/main/java/io/legado/app/help/JsExtensions.kt +++ b/app/src/main/java/io/legado/app/help/JsExtensions.kt @@ -1,5 +1,6 @@ package io.legado.app.help +import android.util.Base64 import io.legado.app.model.analyzeRule.AnalyzeUrl import io.legado.app.utils.EncoderUtils import io.legado.app.utils.MD5Utils @@ -29,8 +30,8 @@ object JsExtensions { return EncoderUtils.base64Decode(str) } - fun base64Encode(str: String): String? { - return EncoderUtils.base64Encode(str) + fun base64Encode(str: String, flags: Int = Base64.NO_WRAP): String? { + return EncoderUtils.base64Encode(str, flags) } fun strToMd5By32(str: String): String? { diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index b4bb0276e..82a767ab5 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -1,6 +1,7 @@ package io.legado.app.model.analyzeRule import android.text.TextUtils +import android.util.Base64 import androidx.annotation.Keep import io.legado.app.constant.AppConst.SCRIPT_ENGINE import io.legado.app.constant.Pattern.JS_PATTERN @@ -576,8 +577,8 @@ class AnalyzeRule(private var book: BaseBook? = null) { return EncoderUtils.base64Decode(str) } - fun base64Encode(str: String): String? { - return EncoderUtils.base64Encode(str) + fun base64Encode(str: String, flags: Int = Base64.NO_WRAP): String? { + return EncoderUtils.base64Encode(str, flags) } fun strToMd5By32(str: String): String? { diff --git a/app/src/main/java/io/legado/app/utils/EncoderUtils.kt b/app/src/main/java/io/legado/app/utils/EncoderUtils.kt index 8e5c03522..4858113e3 100644 --- a/app/src/main/java/io/legado/app/utils/EncoderUtils.kt +++ b/app/src/main/java/io/legado/app/utils/EncoderUtils.kt @@ -33,7 +33,7 @@ object EncoderUtils { } } - fun base64Encode(str: String): String? { - return Base64.encodeToString(str.toByteArray(), Base64.DEFAULT) + fun base64Encode(str: String, flags: Int = Base64.NO_WRAP): String? { + return Base64.encodeToString(str.toByteArray(), flags) } } \ No newline at end of file From 9d7d381438e9ed3e39845e460489a10eaec0dca1 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 09:03:27 +0800 Subject: [PATCH 02/21] up --- .../app/service/HttpReadAloudService.kt | 64 ++++++++++++------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index a797118d6..221ba3a45 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -11,11 +11,10 @@ import io.legado.app.utils.getPrefInt import io.legado.app.utils.getPrefString import io.legado.app.utils.postEvent import kotlinx.coroutines.Dispatchers.IO -import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import org.jetbrains.anko.toast import java.io.File +import java.io.FileDescriptor import java.io.FileInputStream import java.net.URLEncoder @@ -25,6 +24,7 @@ class HttpReadAloudService : BaseReadAloudService(), MediaPlayer.OnCompletionListener { private var mediaPlayer = MediaPlayer() + private var playingIndex = -1 override fun onCreate() { super.onCreate() @@ -38,18 +38,9 @@ class HttpReadAloudService : BaseReadAloudService(), mediaPlayer.release() } - private fun getAudioBody(): Map { + private fun getAudioBody(content: String): Map { return mapOf( - Pair( - "tex", - URLEncoder.encode( - URLEncoder.encode( - contentList[nowSpeak], - "UTF-8" - ), - "UTF-8" - ) - ), + Pair("tex", URLEncoder.encode(URLEncoder.encode(content, "UTF-8"), "UTF-8")), Pair("spd", ((getPrefInt("ttsSpeechRate", 25) + 5) / 5).toString()), Pair("per", getPrefString("ttsSpeechPer") ?: "0"), Pair("cuid", "baidu_speech_demo"), @@ -66,28 +57,54 @@ class HttpReadAloudService : BaseReadAloudService(), override fun play() { if (contentList.isEmpty()) return + if (nowSpeak == 0) { + downloadAudio() + } else { + val file = getSpeakFile(nowSpeak) + if (file.exists()) { + playAudio(FileInputStream(file).fd) + } + } + } + + private fun downloadAudio() { launch(IO) { - if (requestFocus()) { + FileHelp.deleteFile(cacheDir.absolutePath + File.separator + "bdTts") + for (index in 0 until contentList.size) { val bytes = HttpHelper.getByteRetrofit("http://tts.baidu.com") .create(IHttpPostApi::class.java) - .postMapByte("http://tts.baidu.com/text2audio", getAudioBody(), mapOf()) + .postMapByte( + "http://tts.baidu.com/text2audio", + getAudioBody(contentList[index]), mapOf() + ) .execute().body() if (bytes == null) { - withContext(Main) { - toast("访问失败") - } + toast("访问失败") } else { - val file = - FileHelp.getFile(cacheDir.absolutePath + File.separator + "bdTts.mp3") + val file = getSpeakFile(index) file.writeBytes(bytes) - mediaPlayer.reset() - mediaPlayer.setDataSource(FileInputStream(file).fd) - mediaPlayer.prepareAsync() + if (index == nowSpeak) { + playAudio(FileInputStream(file).fd) + } } } } } + @Synchronized + private fun playAudio(fd: FileDescriptor) { + if (playingIndex != nowSpeak) { + playingIndex = nowSpeak + mediaPlayer.reset() + mediaPlayer.setDataSource(fd) + mediaPlayer.prepareAsync() + } + } + + private fun getSpeakFile(index: Int = nowSpeak): File { + return FileHelp.getFile("${cacheDir.absolutePath}${File.separator}bdTts${File.separator}${index}.mp3") + } + override fun pauseReadAloud(pause: Boolean) { super.pauseReadAloud(pause) mediaPlayer.pause() @@ -143,6 +160,7 @@ class HttpReadAloudService : BaseReadAloudService(), nowSpeak++ play() } else { + playingIndex = -1 postEvent(Bus.TTS_TURN_PAGE, 2) } } From 86c4e247d23348b67144444d0806854c8a219635 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 09:17:38 +0800 Subject: [PATCH 03/21] up --- .../java/io/legado/app/service/HttpReadAloudService.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index 221ba3a45..90754a09c 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -23,7 +23,8 @@ class HttpReadAloudService : BaseReadAloudService(), MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener { - private var mediaPlayer = MediaPlayer() + private val mediaPlayer = MediaPlayer() + private val ttsFolder = cacheDir.absolutePath + File.separator + "bdTts" private var playingIndex = -1 override fun onCreate() { @@ -69,7 +70,7 @@ class HttpReadAloudService : BaseReadAloudService(), private fun downloadAudio() { launch(IO) { - FileHelp.deleteFile(cacheDir.absolutePath + File.separator + "bdTts") + FileHelp.deleteFile(ttsFolder) for (index in 0 until contentList.size) { val bytes = HttpHelper.getByteRetrofit("http://tts.baidu.com") .create(IHttpPostApi::class.java) @@ -102,7 +103,7 @@ class HttpReadAloudService : BaseReadAloudService(), } private fun getSpeakFile(index: Int = nowSpeak): File { - return FileHelp.getFile("${cacheDir.absolutePath}${File.separator}bdTts${File.separator}${index}.mp3") + return FileHelp.getFile("${ttsFolder}${File.separator}${index}.mp3") } override fun pauseReadAloud(pause: Boolean) { From 758d7e585b6d207c95ffac9a510b157b45de4771 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 09:21:39 +0800 Subject: [PATCH 04/21] up --- app/src/main/java/io/legado/app/help/JsExtensions.kt | 4 ++++ .../main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/app/src/main/java/io/legado/app/help/JsExtensions.kt b/app/src/main/java/io/legado/app/help/JsExtensions.kt index 9e4bca018..754751b01 100644 --- a/app/src/main/java/io/legado/app/help/JsExtensions.kt +++ b/app/src/main/java/io/legado/app/help/JsExtensions.kt @@ -30,6 +30,10 @@ object JsExtensions { return EncoderUtils.base64Decode(str) } + fun base64Encode(str: String): String? { + return EncoderUtils.base64Encode(str) + } + fun base64Encode(str: String, flags: Int = Base64.NO_WRAP): String? { return EncoderUtils.base64Encode(str, flags) } diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index 82a767ab5..c97fc7b98 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -577,6 +577,10 @@ class AnalyzeRule(private var book: BaseBook? = null) { return EncoderUtils.base64Decode(str) } + fun base64Encode(str: String): String? { + return EncoderUtils.base64Encode(str) + } + fun base64Encode(str: String, flags: Int = Base64.NO_WRAP): String? { return EncoderUtils.base64Encode(str, flags) } From cc5c6b63f0e96e0c0efdd81aa810c7ec8da6a17d Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 09:27:15 +0800 Subject: [PATCH 05/21] up --- .../main/java/io/legado/app/service/HttpReadAloudService.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index 90754a09c..4b277041b 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -24,11 +24,12 @@ class HttpReadAloudService : BaseReadAloudService(), MediaPlayer.OnCompletionListener { private val mediaPlayer = MediaPlayer() - private val ttsFolder = cacheDir.absolutePath + File.separator + "bdTts" + private lateinit var ttsFolder: String private var playingIndex = -1 override fun onCreate() { super.onCreate() + ttsFolder = cacheDir.absolutePath + File.separator + "bdTts" mediaPlayer.setOnErrorListener(this) mediaPlayer.setOnPreparedListener(this) mediaPlayer.setOnCompletionListener(this) From ba348b64c1843e453f1da0abf16bb6897456a5df Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 09:49:43 +0800 Subject: [PATCH 06/21] up --- .../io/legado/app/service/HttpReadAloudService.kt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index 4b277041b..eee68f8e5 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -97,9 +97,14 @@ class HttpReadAloudService : BaseReadAloudService(), private fun playAudio(fd: FileDescriptor) { if (playingIndex != nowSpeak) { playingIndex = nowSpeak - mediaPlayer.reset() - mediaPlayer.setDataSource(fd) - mediaPlayer.prepareAsync() + try { + mediaPlayer.reset() + mediaPlayer.setDataSource(fd) + mediaPlayer.prepareAsync() + } catch (e: Exception) { + e.printStackTrace() + toast(e.localizedMessage) + } } } From b9e709c9961ecded0aa2b7ef08fe9bfd61b4eec9 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 10:00:15 +0800 Subject: [PATCH 07/21] up --- app/src/main/java/io/legado/app/service/HttpReadAloudService.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index eee68f8e5..b4f04a729 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -103,7 +103,6 @@ class HttpReadAloudService : BaseReadAloudService(), mediaPlayer.prepareAsync() } catch (e: Exception) { e.printStackTrace() - toast(e.localizedMessage) } } } From 0c674477796d73a18469dce54532a49641e18aca Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 10:06:04 +0800 Subject: [PATCH 08/21] up --- app/src/main/java/io/legado/app/service/HttpReadAloudService.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index b4f04a729..27d11accc 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -162,7 +162,7 @@ class HttpReadAloudService : BaseReadAloudService(), override fun onCompletion(mp: MediaPlayer?) { readAloudNumber += contentList[nowSpeak].length + 1 - if (nowSpeak < contentList.size) { + if (nowSpeak < contentList.lastIndex) { nowSpeak++ play() } else { From 3d21e636dd1b44c8707acb346ac8ed4282cb9fdb Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 10:16:30 +0800 Subject: [PATCH 09/21] up --- .../java/io/legado/app/service/BaseReadAloudService.kt | 3 ++- .../java/io/legado/app/service/HttpReadAloudService.kt | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/service/BaseReadAloudService.kt b/app/src/main/java/io/legado/app/service/BaseReadAloudService.kt index 9af47f861..8c46f11c8 100644 --- a/app/src/main/java/io/legado/app/service/BaseReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/BaseReadAloudService.kt @@ -101,7 +101,8 @@ abstract class BaseReadAloudService : BaseService(), return super.onStartCommand(intent, flags, startId) } - private fun newReadAloud(dataKey: String?, play: Boolean) { + @CallSuper + open fun newReadAloud(dataKey: String?, play: Boolean) { dataKey?.let { textChapter = IntentDataHelp.getData(dataKey) as? TextChapter textChapter?.let { textChapter -> diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index 27d11accc..6ec27991a 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -11,6 +11,7 @@ import io.legado.app.utils.getPrefInt import io.legado.app.utils.getPrefString import io.legado.app.utils.postEvent import kotlinx.coroutines.Dispatchers.IO +import kotlinx.coroutines.Job import kotlinx.coroutines.launch import org.jetbrains.anko.toast import java.io.File @@ -25,6 +26,7 @@ class HttpReadAloudService : BaseReadAloudService(), private val mediaPlayer = MediaPlayer() private lateinit var ttsFolder: String + private var job: Job? = null private var playingIndex = -1 override fun onCreate() { @@ -57,6 +59,12 @@ class HttpReadAloudService : BaseReadAloudService(), ) } + override fun newReadAloud(dataKey: String?, play: Boolean) { + mediaPlayer.reset() + job?.cancel() + super.newReadAloud(dataKey, play) + } + override fun play() { if (contentList.isEmpty()) return if (nowSpeak == 0) { @@ -70,7 +78,7 @@ class HttpReadAloudService : BaseReadAloudService(), } private fun downloadAudio() { - launch(IO) { + job = launch(IO) { FileHelp.deleteFile(ttsFolder) for (index in 0 until contentList.size) { val bytes = HttpHelper.getByteRetrofit("http://tts.baidu.com") From 382a4a8ab552e6749930cee35213414b13593ce7 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 10:44:15 +0800 Subject: [PATCH 10/21] up --- .../app/service/HttpReadAloudService.kt | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index 6ec27991a..432f95dd8 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -12,6 +12,7 @@ import io.legado.app.utils.getPrefString import io.legado.app.utils.postEvent import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Job +import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import org.jetbrains.anko.toast import java.io.File @@ -81,20 +82,22 @@ class HttpReadAloudService : BaseReadAloudService(), job = launch(IO) { FileHelp.deleteFile(ttsFolder) for (index in 0 until contentList.size) { - val bytes = HttpHelper.getByteRetrofit("http://tts.baidu.com") - .create(IHttpPostApi::class.java) - .postMapByte( - "http://tts.baidu.com/text2audio", - getAudioBody(contentList[index]), mapOf() - ) - .execute().body() - if (bytes == null) { - toast("访问失败") - } else { - val file = getSpeakFile(index) - file.writeBytes(bytes) - if (index == nowSpeak) { - playAudio(FileInputStream(file).fd) + if (isActive) { + val bytes = HttpHelper.getByteRetrofit("http://tts.baidu.com") + .create(IHttpPostApi::class.java) + .postMapByte( + "http://tts.baidu.com/text2audio", + getAudioBody(contentList[index]), mapOf() + ) + .execute().body() + if (bytes == null) { + toast("访问失败") + } else { + val file = getSpeakFile(index) + file.writeBytes(bytes) + if (index == nowSpeak) { + playAudio(FileInputStream(file).fd) + } } } } From 613e68b75d51e2ddb8e1d754ffcfa198f2536f8d Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 11:04:59 +0800 Subject: [PATCH 11/21] up --- app/src/main/java/io/legado/app/service/HttpReadAloudService.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index 432f95dd8..9e2a919cc 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -99,6 +99,8 @@ class HttpReadAloudService : BaseReadAloudService(), playAudio(FileInputStream(file).fd) } } + } else { + break } } } From de46c6a1d5e1374c384baefd1e10c576380d546f Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 11:10:09 +0800 Subject: [PATCH 12/21] up --- .../main/java/io/legado/app/data/api/IHttpPostApi.kt | 4 ++-- .../io/legado/app/service/HttpReadAloudService.kt | 11 ++++------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/io/legado/app/data/api/IHttpPostApi.kt b/app/src/main/java/io/legado/app/data/api/IHttpPostApi.kt index 92b5f1cf3..17bf16ee8 100644 --- a/app/src/main/java/io/legado/app/data/api/IHttpPostApi.kt +++ b/app/src/main/java/io/legado/app/data/api/IHttpPostApi.kt @@ -45,9 +45,9 @@ interface IHttpPostApi { @FormUrlEncoded @POST - fun postMapByte( + fun postMapByteAsync( @Url url: String, @FieldMap(encoded = true) fieldMap: Map, @HeaderMap headers: Map - ): Call + ): Deferred> } diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index 9e2a919cc..cedb58979 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -14,7 +14,6 @@ import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Job import kotlinx.coroutines.isActive import kotlinx.coroutines.launch -import org.jetbrains.anko.toast import java.io.File import java.io.FileDescriptor import java.io.FileInputStream @@ -85,14 +84,12 @@ class HttpReadAloudService : BaseReadAloudService(), if (isActive) { val bytes = HttpHelper.getByteRetrofit("http://tts.baidu.com") .create(IHttpPostApi::class.java) - .postMapByte( + .postMapByteAsync( "http://tts.baidu.com/text2audio", getAudioBody(contentList[index]), mapOf() - ) - .execute().body() - if (bytes == null) { - toast("访问失败") - } else { + ).await() + .body() + if (bytes != null && isActive) { val file = getSpeakFile(index) file.writeBytes(bytes) if (index == nowSpeak) { From 6d1ba3fda11fa9bdc4323f3fa1a75112b1e0c034 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 11:16:00 +0800 Subject: [PATCH 13/21] up --- .../app/service/HttpReadAloudService.kt | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index cedb58979..8e97c5262 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -42,26 +42,10 @@ class HttpReadAloudService : BaseReadAloudService(), mediaPlayer.release() } - private fun getAudioBody(content: String): Map { - return mapOf( - Pair("tex", URLEncoder.encode(URLEncoder.encode(content, "UTF-8"), "UTF-8")), - Pair("spd", ((getPrefInt("ttsSpeechRate", 25) + 5) / 5).toString()), - Pair("per", getPrefString("ttsSpeechPer") ?: "0"), - Pair("cuid", "baidu_speech_demo"), - Pair("idx", "1"), - Pair("cod", "2"), - Pair("lan", "zh"), - Pair("ctp", "1"), - Pair("pdt", "1"), - Pair("vol", "5"), - Pair("pit", "5"), - Pair("_res_tag_", "audio") - ) - } - override fun newReadAloud(dataKey: String?, play: Boolean) { mediaPlayer.reset() job?.cancel() + playingIndex = -1 super.newReadAloud(dataKey, play) } @@ -121,6 +105,23 @@ class HttpReadAloudService : BaseReadAloudService(), return FileHelp.getFile("${ttsFolder}${File.separator}${index}.mp3") } + private fun getAudioBody(content: String): Map { + return mapOf( + Pair("tex", URLEncoder.encode(URLEncoder.encode(content, "UTF-8"), "UTF-8")), + Pair("spd", ((getPrefInt("ttsSpeechRate", 25) + 5) / 5).toString()), + Pair("per", getPrefString("ttsSpeechPer") ?: "0"), + Pair("cuid", "baidu_speech_demo"), + Pair("idx", "1"), + Pair("cod", "2"), + Pair("lan", "zh"), + Pair("ctp", "1"), + Pair("pdt", "1"), + Pair("vol", "5"), + Pair("pit", "5"), + Pair("_res_tag_", "audio") + ) + } + override fun pauseReadAloud(pause: Boolean) { super.pauseReadAloud(pause) mediaPlayer.pause() @@ -176,7 +177,6 @@ class HttpReadAloudService : BaseReadAloudService(), nowSpeak++ play() } else { - playingIndex = -1 postEvent(Bus.TTS_TURN_PAGE, 2) } } From 5db61df0b2014a9151ba73d29c105797e5442374 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 11:28:20 +0800 Subject: [PATCH 14/21] up --- .../java/io/legado/app/service/HttpReadAloudService.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index 8e97c5262..2a29b06c9 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -133,6 +133,13 @@ class HttpReadAloudService : BaseReadAloudService(), } override fun upSpeechRate(reset: Boolean) { + job?.cancel() + mediaPlayer.reset() + for (i in 0 until nowSpeak) { + contentList.removeAt(0) + } + nowSpeak = 0 + playingIndex = -1 play() } From 715f3ed0e85ce4285a7128e3e20d8813808aaad3 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 12:18:59 +0800 Subject: [PATCH 15/21] up --- .../java/io/legado/app/service/HttpReadAloudService.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index 2a29b06c9..465e5e35f 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -107,7 +107,7 @@ class HttpReadAloudService : BaseReadAloudService(), private fun getAudioBody(content: String): Map { return mapOf( - Pair("tex", URLEncoder.encode(URLEncoder.encode(content, "UTF-8"), "UTF-8")), + Pair("tex", encodeTwo(content)), Pair("spd", ((getPrefInt("ttsSpeechRate", 25) + 5) / 5).toString()), Pair("per", getPrefString("ttsSpeechPer") ?: "0"), Pair("cuid", "baidu_speech_demo"), @@ -122,6 +122,14 @@ class HttpReadAloudService : BaseReadAloudService(), ) } + private fun encodeTwo(content: String): String { + return try { + URLEncoder.encode(URLEncoder.encode(content, "UTF-8"), "UTF-8") + } catch (e: Exception) { + "" + } + } + override fun pauseReadAloud(pause: Boolean) { super.pauseReadAloud(pause) mediaPlayer.pause() From fc56d33f7ccbf6454cc9cd9a50f21c224d39e4ad Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 12:35:47 +0800 Subject: [PATCH 16/21] up --- app/src/main/java/io/legado/app/service/HttpReadAloudService.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index 465e5e35f..dd81ce68b 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -126,7 +126,7 @@ class HttpReadAloudService : BaseReadAloudService(), return try { URLEncoder.encode(URLEncoder.encode(content, "UTF-8"), "UTF-8") } catch (e: Exception) { - "" + " " } } From 432344c4df908a6bf60378a086ad7a40c781ace7 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 16:43:23 +0800 Subject: [PATCH 17/21] up --- app/src/main/java/io/legado/app/service/HttpReadAloudService.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index dd81ce68b..90f43f567 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -7,6 +7,7 @@ import io.legado.app.data.api.IHttpPostApi import io.legado.app.help.FileHelp import io.legado.app.help.IntentHelp import io.legado.app.help.http.HttpHelper +import io.legado.app.utils.LogUtils import io.legado.app.utils.getPrefInt import io.legado.app.utils.getPrefString import io.legado.app.utils.postEvent @@ -187,6 +188,7 @@ class HttpReadAloudService : BaseReadAloudService(), } override fun onCompletion(mp: MediaPlayer?) { + LogUtils.d("播放完成", contentList[nowSpeak]) readAloudNumber += contentList[nowSpeak].length + 1 if (nowSpeak < contentList.lastIndex) { nowSpeak++ From 0870c39e93309685bf925acdff9d154579a30b90 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 16:57:56 +0800 Subject: [PATCH 18/21] up --- .../main/java/io/legado/app/utils/FileUtils.kt | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/FileUtils.kt b/app/src/main/java/io/legado/app/utils/FileUtils.kt index 4626fe489..7821f6b49 100644 --- a/app/src/main/java/io/legado/app/utils/FileUtils.kt +++ b/app/src/main/java/io/legado/app/utils/FileUtils.kt @@ -122,12 +122,10 @@ object FileUtils { val type = split[0] var contentUri: Uri? = null - if ("image" == type) { - contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI - } else if ("video" == type) { - contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI - } else if ("audio" == type) { - contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI + when (type) { + "image" -> contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI + "video" -> contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI + "audio" -> contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI } val selection = "_id=?" @@ -136,7 +134,7 @@ object FileUtils { return getDataColumn(context, contentUri, selection, selectionArgs) }// MediaProvider // DownloadsProvider - } else if ("content".equals(uri.scheme!!, ignoreCase = true)) { + } else if ("content".equals(uri.scheme, ignoreCase = true)) { // Return the remote address return if (isGooglePhotosUri(uri)) uri.lastPathSegment else getDataColumn( @@ -146,11 +144,10 @@ object FileUtils { null ) - } else if ("file".equals(uri.scheme!!, ignoreCase = true)) { + } else if ("file".equals(uri.scheme, ignoreCase = true)) { return uri.path }// File // MediaStore (and general) - return null } From a07838a93e514dd9b8873bea7940d7aafe851480 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 16:59:50 +0800 Subject: [PATCH 19/21] up --- app/src/main/java/io/legado/app/utils/FileUtils.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/FileUtils.kt b/app/src/main/java/io/legado/app/utils/FileUtils.kt index 7821f6b49..7c3157172 100644 --- a/app/src/main/java/io/legado/app/utils/FileUtils.kt +++ b/app/src/main/java/io/legado/app/utils/FileUtils.kt @@ -48,8 +48,8 @@ object FileUtils { val list = ArrayList() for (i in 0 until length) { - val storageValume = Array.get(invokeVolumeList, i)//得到StorageVolume对象 - val path = getPath.invoke(storageValume) as String + val storageVolume = Array.get(invokeVolumeList, i)//得到StorageVolume对象 + val path = getPath.invoke(storageVolume) as String list.add(path) } From 30f98e4a39f8120798416b32772657355bbb65ab Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 17:14:44 +0800 Subject: [PATCH 20/21] up --- .../main/java/io/legado/app/utils/FileUtils.kt | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/FileUtils.kt b/app/src/main/java/io/legado/app/utils/FileUtils.kt index 7c3157172..533504279 100644 --- a/app/src/main/java/io/legado/app/utils/FileUtils.kt +++ b/app/src/main/java/io/legado/app/utils/FileUtils.kt @@ -103,11 +103,8 @@ object FileUtils { val id = DocumentsContract.getDocumentId(uri) val split = id.split(":").dropLastWhile { it.isEmpty() }.toTypedArray() val type = split[0] - if ("raw".equals( - type, - ignoreCase = true - ) - ) { //处理某些机型(比如Goole Pixel )ID是raw:/storage/emulated/0/Download/c20f8664da05ab6b4644913048ea8c83.mp4 + if ("raw".equals(type, ignoreCase = true)) { + //处理某些机型(比如Google Pixel )ID是raw:/storage/emulated/0/Download/c20f8664da05ab6b4644913048ea8c83.mp4 return split[1] } @@ -135,14 +132,11 @@ object FileUtils { }// MediaProvider // DownloadsProvider } else if ("content".equals(uri.scheme, ignoreCase = true)) { - // Return the remote address - return if (isGooglePhotosUri(uri)) uri.lastPathSegment else getDataColumn( - context, - uri, - null, - null - ) + return if (isGooglePhotosUri(uri)) + uri.lastPathSegment + else + getDataColumn(context, uri, null, null) } else if ("file".equals(uri.scheme, ignoreCase = true)) { return uri.path From 53e5cd51d2e2827b42884c4daf69a311f7f44546 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 24 Oct 2019 17:40:08 +0800 Subject: [PATCH 21/21] up --- .../app/ui/filechooser/FileChooserDialog.kt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 app/src/main/java/io/legado/app/ui/filechooser/FileChooserDialog.kt diff --git a/app/src/main/java/io/legado/app/ui/filechooser/FileChooserDialog.kt b/app/src/main/java/io/legado/app/ui/filechooser/FileChooserDialog.kt new file mode 100644 index 000000000..6c1fc6fbd --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/filechooser/FileChooserDialog.kt @@ -0,0 +1,20 @@ +package io.legado.app.ui.filechooser + +import androidx.fragment.app.DialogFragment +import androidx.fragment.app.FragmentManager + + +class FileChooserDialog : DialogFragment() { + + companion object { + const val tag = "FileChooserDialog" + + fun show(manager: FragmentManager) { + val fragment = + (manager.findFragmentByTag(tag) as? FileChooserDialog) ?: FileChooserDialog() + fragment.show(manager, tag) + } + } + + +} \ No newline at end of file