mirror of
https://github.com/gedoor/legado.git
synced 2024-09-01 09:34:25 +08:00
Merge pull request #1209 from 1552980358/master
Add support customize background image blurring
This commit is contained in:
commit
bac4db623b
@ -213,6 +213,9 @@ dependencies {
|
||||
implementation("io.noties.markwon:ext-tables:$markwonVersion")
|
||||
implementation("io.noties.markwon:html:$markwonVersion")
|
||||
|
||||
// 谷歌RenderScript库
|
||||
implementation('com.github.android:renderscript-intrinsics-replacement-toolkit:b6363490c3')
|
||||
|
||||
//转换繁体
|
||||
implementation('com.github.liuyueyi.quick-chinese-transfer:quick-transfer-core:0.2.1')
|
||||
|
||||
|
@ -2,6 +2,8 @@ package io.legado.app.base
|
||||
|
||||
import android.content.Context
|
||||
import android.content.res.Configuration
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.util.AttributeSet
|
||||
@ -10,11 +12,15 @@ import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.widget.FrameLayout
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.preference.PreferenceManager
|
||||
import androidx.viewbinding.ViewBinding
|
||||
import com.google.android.renderscript.Toolkit
|
||||
import io.legado.app.App
|
||||
import io.legado.app.R
|
||||
import io.legado.app.constant.AppConst
|
||||
import io.legado.app.constant.PreferKey
|
||||
import io.legado.app.constant.PreferKey.bgImageBlurring
|
||||
import io.legado.app.constant.PreferKey.bgImageNBlurring
|
||||
import io.legado.app.constant.Theme
|
||||
import io.legado.app.help.AppConfig
|
||||
import io.legado.app.help.ThemeConfig
|
||||
@ -174,9 +180,7 @@ abstract class BaseActivity<VB : ViewBinding>(
|
||||
}
|
||||
if (imageBg) {
|
||||
try {
|
||||
ThemeConfig.getBgImage(this)?.let {
|
||||
window.decorView.background = it
|
||||
}
|
||||
window.decorView.background = BitmapDrawable(resources, getBackgroundImage(ThemeConfig.getBgImage(this) ?: return))
|
||||
} catch (e: OutOfMemoryError) {
|
||||
toastOnUi(e.localizedMessage)
|
||||
} catch (e: Exception) {
|
||||
@ -185,6 +189,22 @@ abstract class BaseActivity<VB : ViewBinding>(
|
||||
}
|
||||
}
|
||||
|
||||
private fun getBackgroundImage(bitmap: Bitmap): Bitmap {
|
||||
when (Theme.getTheme()) {
|
||||
Theme.Light -> PreferenceManager.getDefaultSharedPreferences(this).getInt(bgImageBlurring, 0).apply {
|
||||
if (this != 0) {
|
||||
return Toolkit.blur(bitmap, this)
|
||||
}
|
||||
}
|
||||
Theme.Dark -> PreferenceManager.getDefaultSharedPreferences(this).getInt(bgImageNBlurring, 0).apply {
|
||||
if (this != 0) {
|
||||
return Toolkit.blur(bitmap, this)
|
||||
}
|
||||
}
|
||||
}
|
||||
return bitmap
|
||||
}
|
||||
|
||||
private fun setupSystemBar() {
|
||||
if (fullScreen && !isInMultiWindow) {
|
||||
ATH.fullScreen(this)
|
||||
|
@ -91,11 +91,13 @@ object PreferKey {
|
||||
const val cBackground = "colorBackground"
|
||||
const val cBBackground = "colorBottomBackground"
|
||||
const val bgImage = "backgroundImage"
|
||||
const val bgImageBlurring = "backgroundImageBlurring"
|
||||
|
||||
const val cNPrimary = "colorPrimaryNight"
|
||||
const val cNAccent = "colorAccentNight"
|
||||
const val cNBackground = "colorBackgroundNight"
|
||||
const val cNBBackground = "colorBottomBackgroundNight"
|
||||
const val bgImageN = "backgroundImageNight"
|
||||
const val bgImageNBlurring = "backgroundImageNightBlurring"
|
||||
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
package io.legado.app.help
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import androidx.annotation.Keep
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import io.legado.app.R
|
||||
@ -43,14 +43,14 @@ object ThemeConfig {
|
||||
AppCompatDelegate.setDefaultNightMode(targetMode)
|
||||
}
|
||||
|
||||
fun getBgImage(context: Context): Drawable? {
|
||||
fun getBgImage(context: Context): Bitmap? {
|
||||
val bgPath = when (Theme.getTheme()) {
|
||||
Theme.Light -> context.getPrefString(PreferKey.bgImage)
|
||||
Theme.Dark -> context.getPrefString(PreferKey.bgImageN)
|
||||
else -> null
|
||||
}
|
||||
if (bgPath.isNullOrBlank()) return null
|
||||
return BitmapDrawable.createFromPath(bgPath)
|
||||
return BitmapFactory.decodeFile(bgPath)
|
||||
}
|
||||
|
||||
fun upConfig() {
|
||||
|
@ -0,0 +1,53 @@
|
||||
package io.legado.app.ui.config
|
||||
|
||||
import android.app.Dialog
|
||||
import android.content.SharedPreferences
|
||||
import android.os.Bundle
|
||||
import android.widget.SeekBar
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.preference.PreferenceManager
|
||||
import io.legado.app.R
|
||||
import io.legado.app.databinding.FragmentImageBlurringDialogBinding
|
||||
|
||||
class ImageBlurringDialogFragment(private val prefName: String, private val block: () -> Unit): DialogFragment() {
|
||||
|
||||
companion object {
|
||||
private const val DEFAULT_VALUE = 0
|
||||
private const val TAG = "ImageBlurringDialogFragment"
|
||||
}
|
||||
|
||||
private val requireContext get() = requireContext()
|
||||
private var _fragmentImageBlurringDialogBinding: FragmentImageBlurringDialogBinding? = null
|
||||
private val fragmentImageBlurringDialog get() = _fragmentImageBlurringDialogBinding!!
|
||||
private lateinit var sharedPreference: SharedPreferences
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
_fragmentImageBlurringDialogBinding = FragmentImageBlurringDialogBinding.inflate(layoutInflater)
|
||||
sharedPreference = PreferenceManager.getDefaultSharedPreferences(requireContext)
|
||||
sharedPreference.getInt(prefName, DEFAULT_VALUE).apply {
|
||||
fragmentImageBlurringDialog.seekBar.progress = this
|
||||
fragmentImageBlurringDialog.textViewValue.text = this.toString()
|
||||
}
|
||||
fragmentImageBlurringDialog.seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
|
||||
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
|
||||
fragmentImageBlurringDialog.textViewValue.text = progress.toString()
|
||||
}
|
||||
override fun onStartTrackingTouch(seekBar: SeekBar?) = Unit
|
||||
override fun onStopTrackingTouch(seekBar: SeekBar?) = Unit
|
||||
})
|
||||
return AlertDialog.Builder(requireContext)
|
||||
.setTitle(R.string.background_image_blurring_radius)
|
||||
.setView(fragmentImageBlurringDialog.root)
|
||||
.setPositiveButton(R.string.dialog_confirm) { _, _ ->
|
||||
sharedPreference.edit().putInt(prefName, fragmentImageBlurringDialog.seekBar.progress).commit()
|
||||
block()
|
||||
}
|
||||
.setNegativeButton(R.string.dialog_cancel) { _, _ -> }
|
||||
.create()
|
||||
}
|
||||
|
||||
fun show(fragmentManager: FragmentManager) = show(fragmentManager, TAG)
|
||||
|
||||
}
|
@ -183,6 +183,8 @@ class ThemeConfigFragment : BasePreferenceFragment(),
|
||||
}
|
||||
}
|
||||
}
|
||||
PreferKey.bgImageBlurring -> ImageBlurringDialogFragment(PreferKey.bgImageBlurring) { upTheme(false) }.show(parentFragmentManager)
|
||||
PreferKey.bgImageNBlurring -> ImageBlurringDialogFragment(PreferKey.bgImageNBlurring) { upTheme(true) }.show(parentFragmentManager)
|
||||
PreferKey.defaultCover -> if (getPrefString(PreferKey.defaultCover).isNullOrEmpty()) {
|
||||
selectImage.launch(requestCodeCover)
|
||||
} else {
|
||||
|
28
app/src/main/res/layout/fragment_image_blurring_dialog.xml
Normal file
28
app/src/main/res/layout/fragment_image_blurring_dialog.xml
Normal file
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="10dp">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatSeekBar
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:max="25"
|
||||
android:id="@+id/seek_bar" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/text_view_value"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:textSize="17sp"
|
||||
android:textColor="@color/black"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/background_image_hint" />
|
||||
|
||||
</LinearLayout>
|
@ -804,6 +804,9 @@
|
||||
<string name="pre_download_s">預先下載%s章正文</string>
|
||||
<string name="is_enabled">係咪啟用</string>
|
||||
<string name="background_image">背景圖片</string>
|
||||
<string name="background_image_blurring">背景圖片虛化</string>
|
||||
<string name="background_image_blurring_radius">虛化半徑</string>
|
||||
<string name="background_image_hint">0為停用,啓用範圍1~25\n半徑數值越大,虛化效果越高</string>
|
||||
<string name="export_folder">導出資料夾</string>
|
||||
<string name="export_charset">導出編碼</string>
|
||||
<string name="export_to_web_dav">導出到WebDav</string>
|
||||
|
@ -807,6 +807,9 @@
|
||||
<string name="pre_download_s">預先下載%s章正文</string>
|
||||
<string name="is_enabled">是否啟用</string>
|
||||
<string name="background_image">背景圖片</string>
|
||||
<string name="background_image_blurring">背景圖片虛化</string>
|
||||
<string name="background_image_blurring_radius">虛化半徑</string>
|
||||
<string name="background_image_hint">0為停用,啓用範圍1~25\n半徑數值越大,虛化效果越高</string>
|
||||
<string name="export_folder">匯出資料夾</string>
|
||||
<string name="export_charset">匯出編碼</string>
|
||||
<string name="export_to_web_dav">匯出到WebDav</string>
|
||||
|
@ -807,6 +807,9 @@
|
||||
<string name="pre_download_s">预先下载%s章正文</string>
|
||||
<string name="is_enabled">是否启用</string>
|
||||
<string name="background_image">背景图片</string>
|
||||
<string name="background_image_blurring">背景图片虚化</string>
|
||||
<string name="background_image_blurring_radius">虚化半径</string>
|
||||
<string name="background_image_hint">0为停用,启用范围1~25\n半径数值越大,虚化效果越高</string>
|
||||
<string name="export_folder">导出文件夹</string>
|
||||
<string name="export_charset">导出编码</string>
|
||||
<string name="export_to_web_dav">导出到WebDav</string>
|
||||
|
@ -807,6 +807,9 @@
|
||||
<string name="pre_download_s">Download %s chapters in advance</string>
|
||||
<string name="is_enabled">Is enabled</string>
|
||||
<string name="background_image">Background image</string>
|
||||
<string name="background_image_blurring">Background image blurring</string>
|
||||
<string name="background_image_blurring_radius">Blurring radius</string>
|
||||
<string name="background_image_hint">Disabled when 0, enable range from 1 to 25\nThe greater the radius, the stronger the effect of blurring</string>
|
||||
<string name="copy_book_url">Copy book URL</string>
|
||||
<string name="copy_toc_url">Copy chapters URL</string>
|
||||
<string name="export_folder">Export folder</string>
|
||||
|
@ -86,6 +86,10 @@
|
||||
android:key="backgroundImage"
|
||||
android:title="@string/background_image" />
|
||||
|
||||
<io.legado.app.ui.widget.prefs.Preference
|
||||
android:key="backgroundImageBlurring"
|
||||
android:title="@string/background_image_blurring" />
|
||||
|
||||
<io.legado.app.ui.widget.prefs.ColorPreference
|
||||
android:defaultValue="@color/md_grey_200"
|
||||
android:key="colorBottomBackground"
|
||||
@ -149,6 +153,10 @@
|
||||
android:key="backgroundImageNight"
|
||||
android:title="@string/background_image" />
|
||||
|
||||
<io.legado.app.ui.widget.prefs.Preference
|
||||
android:key="backgroundImageNightBlurring"
|
||||
android:title="@string/background_image_blurring" />
|
||||
|
||||
<io.legado.app.ui.widget.prefs.ColorPreference
|
||||
android:defaultValue="@color/md_grey_800"
|
||||
android:key="colorBottomBackgroundNight"
|
||||
|
Loading…
Reference in New Issue
Block a user