From 8c2420da8f80abc379956d8e6054cba641dbbc42 Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Fri, 21 Apr 2023 12:52:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/constant/PreferKey.kt | 1 + .../io/legado/app/help/config/AppConfig.kt | 2 ++ .../java/io/legado/app/help/storage/Backup.kt | 11 ++++++-- .../io/legado/app/service/AudioPlayService.kt | 28 +++++++++++++++++++ app/src/main/res/values-es-rES/strings.xml | 2 ++ app/src/main/res/values-ja-rJP/strings.xml | 2 ++ app/src/main/res/values-pt-rBR/strings.xml | 2 ++ app/src/main/res/values-zh-rHK/strings.xml | 2 ++ app/src/main/res/values-zh-rTW/strings.xml | 2 ++ app/src/main/res/values-zh/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/pref_config_backup.xml | 9 ++++++ 12 files changed, 62 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/legado/app/constant/PreferKey.kt b/app/src/main/java/io/legado/app/constant/PreferKey.kt index fbb1f4e62..969a7ca69 100644 --- a/app/src/main/java/io/legado/app/constant/PreferKey.kt +++ b/app/src/main/java/io/legado/app/constant/PreferKey.kt @@ -126,6 +126,7 @@ object PreferKey { const val readAloudWakeLock = "readAloudWakeLock" const val showLastUpdateTime = "showLastUpdateTime" const val clearWebViewData = "clearWebViewData" + const val onlyLatestBackup = "onlyLatestBackup" const val cPrimary = "colorPrimary" const val cAccent = "colorAccent" diff --git a/app/src/main/java/io/legado/app/help/config/AppConfig.kt b/app/src/main/java/io/legado/app/help/config/AppConfig.kt index 2c8b75fa1..16ceb1b33 100644 --- a/app/src/main/java/io/legado/app/help/config/AppConfig.kt +++ b/app/src/main/java/io/legado/app/help/config/AppConfig.kt @@ -365,6 +365,8 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener { val ignoreAudioFocus get() = appCtx.getPrefBoolean(PreferKey.ignoreAudioFocus, false) + val onlyLatestBackup get() = appCtx.getPrefBoolean(PreferKey.onlyLatestBackup, false) + val doublePageHorizontal: String? get() = appCtx.getPrefString(PreferKey.doublePageHorizontal) diff --git a/app/src/main/java/io/legado/app/help/storage/Backup.kt b/app/src/main/java/io/legado/app/help/storage/Backup.kt index c956d0ee4..7614a70a9 100644 --- a/app/src/main/java/io/legado/app/help/storage/Backup.kt +++ b/app/src/main/java/io/legado/app/help/storage/Backup.kt @@ -159,18 +159,23 @@ object Backup { paths[i] = backupPath + File.separator + paths[i] } FileUtils.delete(zipFilePath) + val backupFileName = if (AppConfig.onlyLatestBackup) { + "backup.zip" + } else { + zipFileName + } if (ZipUtils.zipFiles(paths, zipFilePath)) { when { path.isNullOrBlank() -> { - copyBackup(context.getExternalFilesDir(null)!!, zipFileName) + copyBackup(context.getExternalFilesDir(null)!!, backupFileName) } path.isContentScheme() -> { - copyBackup(context, Uri.parse(path), zipFileName) + copyBackup(context, Uri.parse(path), backupFileName) } else -> { - copyBackup(File(path), zipFileName) + copyBackup(File(path), backupFileName) } } AppWebDav.backUpWebDav(zipFileName) diff --git a/app/src/main/java/io/legado/app/service/AudioPlayService.kt b/app/src/main/java/io/legado/app/service/AudioPlayService.kt index 7a25e9734..fa59c8504 100644 --- a/app/src/main/java/io/legado/app/service/AudioPlayService.kt +++ b/app/src/main/java/io/legado/app/service/AudioPlayService.kt @@ -10,6 +10,7 @@ import android.media.AudioManager import android.net.Uri import android.os.Build import android.os.PowerManager +import android.support.v4.media.MediaMetadataCompat import android.support.v4.media.session.MediaSessionCompat import android.support.v4.media.session.PlaybackStateCompat import androidx.core.app.NotificationCompat @@ -119,6 +120,7 @@ class AudioPlayService : BaseService(), IntentAction.adjustProgress -> { adjustProgress(intent.getIntExtra("position", position)) } + else -> stopSelf() } } @@ -250,9 +252,11 @@ class AudioPlayService : BaseService(), Player.STATE_IDLE -> { // 空闲 } + Player.STATE_BUFFERING -> { // 缓冲中 } + Player.STATE_READY -> { // 准备好 if (exoPlayer.currentPosition != position.toLong()) { @@ -266,9 +270,15 @@ class AudioPlayService : BaseService(), postEvent(EventBus.AUDIO_STATE, Status.PAUSE) } postEvent(EventBus.AUDIO_SIZE, exoPlayer.duration) + mediaSessionCompat?.setMetadata( + MediaMetadataCompat.Builder() + .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, exoPlayer.duration) + .build() + ) upPlayProgress() AudioPlay.saveDurChapter(exoPlayer.duration) } + Player.STATE_ENDED -> { // 结束 upPlayProgressJob?.cancel() @@ -340,6 +350,13 @@ class AudioPlayService : BaseService(), postEvent(EventBus.AUDIO_BUFFER_PROGRESS, exoPlayer.bufferedPosition.toInt()) it.durChapterPos = exoPlayer.currentPosition.toInt() postEvent(EventBus.AUDIO_PROGRESS, it.durChapterPos) + mediaSessionCompat?.setPlaybackState( + PlaybackStateCompat.Builder() + .setActions(PlaybackStateCompat.ACTION_SEEK_TO) + .setState(PlaybackStateCompat.STATE_NONE, exoPlayer.currentPosition, 1f) + .setBufferedPosition(exoPlayer.bufferedPosition) + .build() + ) saveProgress(it) } delay(1000) @@ -430,6 +447,11 @@ class AudioPlayService : BaseService(), private fun initMediaSession() { mediaSessionCompat = MediaSessionCompat(this, "readAloud") mediaSessionCompat?.setCallback(object : MediaSessionCompat.Callback() { + override fun onSeekTo(pos: Long) { + position = pos.toInt() + exoPlayer.seekTo(pos) + } + override fun onMediaButtonEvent(mediaButtonEvent: Intent): Boolean { return MediaButtonReceiver.handleIntent(this@AudioPlayService, mediaButtonEvent) } @@ -472,10 +494,12 @@ class AudioPlayService : BaseService(), AppLog.put("音频焦点获得") } } + AudioManager.AUDIOFOCUS_LOSS -> { AppLog.put("音频焦点丢失,暂停播放") pause() } + AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> { AppLog.put("音频焦点暂时丢失并会很快再次获得,暂停播放") needResumeOnAudioFocusGain = true @@ -484,6 +508,7 @@ class AudioPlayService : BaseService(), pause(false) } } + AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> { // 短暂丢失焦点,这种情况是被其他应用申请了短暂的焦点希望其他声音能压低音量(或者关闭声音)凸显这个声音(比如短信提示音), AppLog.put("音频焦点短暂丢失,不做处理") @@ -491,6 +516,7 @@ class AudioPlayService : BaseService(), } } + /** * 更新通知 */ @@ -502,6 +528,7 @@ class AudioPlayService : BaseService(), R.string.playing_timer, timeMinute ) + else -> getString(R.string.audio_play_t) } nTitle += ": ${AudioPlay.book?.name}" @@ -555,6 +582,7 @@ class AudioPlayService : BaseService(), builder.setStyle( androidx.media.app.NotificationCompat.MediaStyle() .setShowActionsInCompactView(0, 1, 2) + .setMediaSession(mediaSessionCompat?.sessionToken) ) builder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC) builder diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 7df6e0f14..6522d0745 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -1096,4 +1096,6 @@ 选中更新源 设置本地密码 本地密码用来对备份的敏感信息加密和解密,如需在不同设备之间同步,本地密码需一致. + 仅保留最新备份 + 本地备份仅保留最新备份文件 diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 6123a206b..4b7a841f9 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -1099,4 +1099,6 @@ 选中更新源 设置本地密码 本地密码用来对备份的敏感信息加密和解密,如需在不同设备之间同步,本地密码需一致. + 仅保留最新备份 + 本地备份仅保留最新备份文件 diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 2441133c3..af4d081a2 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1099,4 +1099,6 @@ 选中更新源 设置本地密码 本地密码用来对备份的敏感信息加密和解密,如需在不同设备之间同步,本地密码需一致. + 仅保留最新备份 + 本地备份仅保留最新备份文件 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 051a3b5ff..ce3c6c137 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -1096,4 +1096,6 @@ 选中更新源 设置本地密码 本地密码用来对备份的敏感信息加密和解密,如需在不同设备之间同步,本地密码需一致. + 仅保留最新备份 + 本地备份仅保留最新备份文件 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index f28559249..7b6b18510 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1098,4 +1098,6 @@ 选中更新源 设置本地密码 本地密码用来对备份的敏感信息加密和解密,如需在不同设备之间同步,本地密码需一致. + 仅保留最新备份 + 本地备份仅保留最新备份文件 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index f01f24730..c2f8c3153 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1098,4 +1098,6 @@ 选中更新源 设置本地密码 本地密码用来对备份的敏感信息加密和解密,如需在不同设备之间同步,本地密码需一致. + 仅保留最新备份 + 本地备份仅保留最新备份文件 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4f76c089f..96c9aa00b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1099,4 +1099,6 @@ 选中更新源 设置本地密码 本地密码用来对备份的敏感信息加密和解密,如需在不同设备之间同步,本地密码需一致. + 仅保留最新备份 + 本地备份仅保留最新备份文件 diff --git a/app/src/main/res/xml/pref_config_backup.xml b/app/src/main/res/xml/pref_config_backup.xml index f35e73fb6..38810e148 100644 --- a/app/src/main/res/xml/pref_config_backup.xml +++ b/app/src/main/res/xml/pref_config_backup.xml @@ -88,6 +88,15 @@ android:summary="@string/import_old_summary" app:iconSpaceReserved="false" /> + +