更新界面
This commit is contained in:
@@ -88,6 +88,7 @@ android {
|
|||||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'cronet-proguard-rules.pro'
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'cronet-proguard-rules.pro'
|
||||||
}
|
}
|
||||||
debug {
|
debug {
|
||||||
|
applicationIdSuffix ".debug"
|
||||||
if (project.hasProperty("RELEASE_STORE_FILE")) {
|
if (project.hasProperty("RELEASE_STORE_FILE")) {
|
||||||
signingConfig signingConfigs.myConfig
|
signingConfig signingConfigs.myConfig
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,5 +25,33 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"configuration_version": "1",
|
||||||
|
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "735500663982",
|
||||||
|
"project_id": "kazesa-debug",
|
||||||
|
"storage_bucket": "kazesa-debug.firebasestorage.app"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:735500663982:android:68276b2e9a0c230069013f",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "io.legato.kazusa.debug"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyDt65UOURbutB8DnTOEGuDf6Vhw56T9nq4"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
"configuration_version": "1"
|
"configuration_version": "1"
|
||||||
}
|
}
|
||||||
@@ -28,6 +28,7 @@
|
|||||||
android:label="${app_name}"
|
android:label="${app_name}"
|
||||||
android:networkSecurityConfig="@xml/network_security_config"
|
android:networkSecurityConfig="@xml/network_security_config"
|
||||||
android:requestLegacyExternalStorage="true"
|
android:requestLegacyExternalStorage="true"
|
||||||
|
android:enableOnBackInvokedCallback="true"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/Base.AppTheme"
|
android:theme="@style/Base.AppTheme"
|
||||||
tools:ignore="AllowBackup,GoogleAppIndexingWarning,UnusedAttribute">
|
tools:ignore="AllowBackup,GoogleAppIndexingWarning,UnusedAttribute">
|
||||||
@@ -125,6 +126,7 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".ui.book.read.ReadBookActivity"
|
android:name=".ui.book.read.ReadBookActivity"
|
||||||
android:configChanges="locale|keyboardHidden|smallestScreenSize|screenLayout"
|
android:configChanges="locale|keyboardHidden|smallestScreenSize|screenLayout"
|
||||||
|
android:enableOnBackInvokedCallback="true"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:launchMode="singleTask">
|
android:launchMode="singleTask">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
@@ -140,6 +142,7 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".ui.book.manga.ReadMangaActivity"
|
android:name=".ui.book.manga.ReadMangaActivity"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
|
android:enableOnBackInvokedCallback="true"
|
||||||
android:launchMode="singleTask">
|
android:launchMode="singleTask">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="com.samsung.android.support.REMOTE_ACTION" />
|
<action android:name="com.samsung.android.support.REMOTE_ACTION" />
|
||||||
@@ -214,56 +217,47 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".ui.about.AboutActivity"
|
android:name=".ui.about.AboutActivity"
|
||||||
android:enableOnBackInvokedCallback="true"
|
android:enableOnBackInvokedCallback="true"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask" />
|
||||||
android:screenOrientation="behind" />
|
|
||||||
<!-- 书源管理 -->
|
<!-- 书源管理 -->
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.book.source.manage.BookSourceActivity"
|
android:name=".ui.book.source.manage.BookSourceActivity"
|
||||||
android:enableOnBackInvokedCallback="true"
|
android:enableOnBackInvokedCallback="true"
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop" />
|
||||||
android:screenOrientation="behind" />
|
|
||||||
<!-- 订阅源管理 -->
|
<!-- 订阅源管理 -->
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.rss.source.manage.RssSourceActivity"
|
android:name=".ui.rss.source.manage.RssSourceActivity"
|
||||||
android:enableOnBackInvokedCallback="true"
|
android:enableOnBackInvokedCallback="true"
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop" />
|
||||||
android:screenOrientation="behind" />
|
|
||||||
<!-- txt目录规则管理 -->
|
<!-- txt目录规则管理 -->
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.book.toc.rule.TxtTocRuleActivity"
|
android:name=".ui.book.toc.rule.TxtTocRuleActivity"
|
||||||
android:enableOnBackInvokedCallback="true"
|
android:enableOnBackInvokedCallback="true"
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop" />
|
||||||
android:screenOrientation="behind" />
|
|
||||||
<!-- 替换规则界面 -->
|
<!-- 替换规则界面 -->
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.replace.ReplaceRuleActivity"
|
android:name=".ui.replace.ReplaceRuleActivity"
|
||||||
android:enableOnBackInvokedCallback="true"
|
android:enableOnBackInvokedCallback="true"
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop" />
|
||||||
android:screenOrientation="behind" />
|
|
||||||
<!-- 书籍管理 -->
|
<!-- 书籍管理 -->
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.book.manage.BookshelfManageActivity"
|
android:name=".ui.book.manage.BookshelfManageActivity"
|
||||||
android:enableOnBackInvokedCallback="true"
|
android:enableOnBackInvokedCallback="true"
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop" />
|
||||||
android:screenOrientation="behind" />
|
|
||||||
<!-- 书源调试 -->
|
<!-- 书源调试 -->
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.book.source.debug.BookSourceDebugActivity"
|
android:name=".ui.book.source.debug.BookSourceDebugActivity"
|
||||||
android:enableOnBackInvokedCallback="true"
|
android:enableOnBackInvokedCallback="true"
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop" />
|
||||||
android:screenOrientation="behind" />
|
|
||||||
<!-- 目录 -->
|
<!-- 目录 -->
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.book.toc.TocActivity"
|
android:name=".ui.book.toc.TocActivity"
|
||||||
android:enableOnBackInvokedCallback="true"
|
android:enableOnBackInvokedCallback="true"
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop" />
|
||||||
android:screenOrientation="behind" />
|
|
||||||
<!-- 正文搜索 -->
|
<!-- 正文搜索 -->
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.book.searchContent.SearchContentActivity"
|
android:name=".ui.book.searchContent.SearchContentActivity"
|
||||||
android:enableOnBackInvokedCallback="true"
|
android:enableOnBackInvokedCallback="true"
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop" />
|
||||||
android:screenOrientation="behind" />
|
|
||||||
<!-- RSS条目 -->
|
<!-- RSS条目 -->
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.rss.article.RssSortActivity"
|
android:name=".ui.rss.article.RssSortActivity"
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import io.legato.kazusa.utils.compress.ZipUtils
|
|||||||
import io.legato.kazusa.utils.fromJsonObject
|
import io.legato.kazusa.utils.fromJsonObject
|
||||||
import io.legato.kazusa.utils.getPrefString
|
import io.legato.kazusa.utils.getPrefString
|
||||||
import io.legato.kazusa.utils.isJson
|
import io.legato.kazusa.utils.isJson
|
||||||
import io.legato.kazusa.utils.removePref
|
|
||||||
import io.legato.kazusa.utils.toastOnUi
|
import io.legato.kazusa.utils.toastOnUi
|
||||||
import kotlinx.coroutines.ensureActive
|
import kotlinx.coroutines.ensureActive
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
@@ -166,7 +165,7 @@ object AppWebDav {
|
|||||||
val auth = Authorization(account, password)
|
val auth = Authorization(account, password)
|
||||||
checkAuthorization(auth)
|
checkAuthorization(auth)
|
||||||
|
|
||||||
appCtx.toastOnUi("WebDAV 服务正常")
|
appCtx.toastOnUi("WebDAV 服务可用")
|
||||||
true
|
true
|
||||||
}.getOrElse {
|
}.getOrElse {
|
||||||
it.printStackTrace()
|
it.printStackTrace()
|
||||||
|
|||||||
@@ -13,7 +13,10 @@ data class AppReleaseInfo(
|
|||||||
val downloadUrl: String,
|
val downloadUrl: String,
|
||||||
val assetUrl: String
|
val assetUrl: String
|
||||||
) {
|
) {
|
||||||
val versionName: String = name.split("_").getOrNull(2)?.dropLast(2) ?: ""
|
val versionName: String = Regex("""legado_app_([\d.]+)""")
|
||||||
|
.find(name)
|
||||||
|
?.groupValues?.get(1)
|
||||||
|
?: ""
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class AppVariant {
|
enum class AppVariant {
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
package io.legato.kazusa.ui.about
|
package io.legato.kazusa.ui.about
|
||||||
|
|
||||||
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
|
||||||
import io.legato.kazusa.R
|
import io.legato.kazusa.R
|
||||||
import io.legato.kazusa.base.BaseDialogFragment
|
import io.legato.kazusa.base.BaseBottomSheetDialogFragment
|
||||||
import io.legato.kazusa.databinding.DialogUpdateBinding
|
import io.legato.kazusa.databinding.DialogUpdateBinding
|
||||||
import io.legato.kazusa.help.update.AppUpdate
|
import io.legato.kazusa.help.update.AppUpdate
|
||||||
//import io.legado.app.lib.theme.primaryColor
|
|
||||||
import io.legato.kazusa.model.Download
|
import io.legato.kazusa.model.Download
|
||||||
import io.legato.kazusa.utils.setLayout
|
|
||||||
import io.legato.kazusa.utils.toastOnUi
|
import io.legato.kazusa.utils.toastOnUi
|
||||||
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||||
import io.noties.markwon.Markwon
|
import io.noties.markwon.Markwon
|
||||||
@@ -17,7 +15,7 @@ import io.noties.markwon.ext.tables.TablePlugin
|
|||||||
import io.noties.markwon.html.HtmlPlugin
|
import io.noties.markwon.html.HtmlPlugin
|
||||||
import io.noties.markwon.image.glide.GlideImagesPlugin
|
import io.noties.markwon.image.glide.GlideImagesPlugin
|
||||||
|
|
||||||
class UpdateDialog() : BaseDialogFragment(R.layout.dialog_update) {
|
class UpdateDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_update) {
|
||||||
|
|
||||||
constructor(updateInfo: AppUpdate.UpdateInfo) : this() {
|
constructor(updateInfo: AppUpdate.UpdateInfo) : this() {
|
||||||
arguments = Bundle().apply {
|
arguments = Bundle().apply {
|
||||||
@@ -32,7 +30,6 @@ class UpdateDialog() : BaseDialogFragment(R.layout.dialog_update) {
|
|||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
setLayout(0.9f, ViewGroup.LayoutParams.WRAP_CONTENT)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
@@ -57,8 +54,19 @@ class UpdateDialog() : BaseDialogFragment(R.layout.dialog_update) {
|
|||||||
when (it.itemId) {
|
when (it.itemId) {
|
||||||
R.id.menu_download -> {
|
R.id.menu_download -> {
|
||||||
val url = arguments?.getString("url")
|
val url = arguments?.getString("url")
|
||||||
val name = arguments?.getString("name")
|
val baseName = arguments?.getString("name")
|
||||||
if (url != null && name != null) {
|
?.removeSuffix(".apk")
|
||||||
|
|
||||||
|
val abi = Build.SUPPORTED_ABIS.firstOrNull() ?: "universal"
|
||||||
|
val abiSuffix = when {
|
||||||
|
abi.contains("arm64") -> "arm64-v8a"
|
||||||
|
abi.contains("armeabi") -> "armeabi-v7a"
|
||||||
|
else -> "universal"
|
||||||
|
}
|
||||||
|
|
||||||
|
val name = "${baseName}_$abiSuffix.apk"
|
||||||
|
|
||||||
|
if (url != null && baseName != null) {
|
||||||
Download.start(requireContext(), url, name)
|
Download.start(requireContext(), url, name)
|
||||||
toastOnUi(R.string.download_start)
|
toastOnUi(R.string.download_start)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import androidx.appcompat.widget.Toolbar
|
|||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import io.legato.kazusa.R
|
import io.legato.kazusa.R
|
||||||
import io.legato.kazusa.base.BaseDialogFragment
|
import io.legato.kazusa.base.BaseBottomSheetDialogFragment
|
||||||
import io.legato.kazusa.base.adapter.ItemViewHolder
|
import io.legato.kazusa.base.adapter.ItemViewHolder
|
||||||
import io.legato.kazusa.base.adapter.RecyclerAdapter
|
import io.legato.kazusa.base.adapter.RecyclerAdapter
|
||||||
import io.legato.kazusa.constant.PreferKey
|
import io.legato.kazusa.constant.PreferKey
|
||||||
@@ -33,7 +33,7 @@ import splitties.views.onClick
|
|||||||
/**
|
/**
|
||||||
* 导入书源弹出窗口
|
* 导入书源弹出窗口
|
||||||
*/
|
*/
|
||||||
class ImportBookSourceDialog() : BaseDialogFragment(R.layout.dialog_recycler_view),
|
class ImportBookSourceDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_recycler_view),
|
||||||
Toolbar.OnMenuItemClickListener,
|
Toolbar.OnMenuItemClickListener,
|
||||||
CodeDialog.Callback {
|
CodeDialog.Callback {
|
||||||
|
|
||||||
@@ -50,7 +50,6 @@ class ImportBookSourceDialog() : BaseDialogFragment(R.layout.dialog_recycler_vie
|
|||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDismiss(dialog: DialogInterface) {
|
override fun onDismiss(dialog: DialogInterface) {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import android.graphics.drawable.GradientDrawable
|
|||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE
|
import android.view.WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE
|
||||||
|
import android.view.animation.AlphaAnimation
|
||||||
import android.view.animation.Animation
|
import android.view.animation.Animation
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
@@ -36,6 +37,7 @@ import io.legato.kazusa.utils.modifyBegin
|
|||||||
import io.legato.kazusa.utils.openUrl
|
import io.legato.kazusa.utils.openUrl
|
||||||
import io.legato.kazusa.utils.putPrefBoolean
|
import io.legato.kazusa.utils.putPrefBoolean
|
||||||
import io.legato.kazusa.utils.startActivity
|
import io.legato.kazusa.utils.startActivity
|
||||||
|
import io.legato.kazusa.utils.themeColor
|
||||||
import io.legato.kazusa.utils.visible
|
import io.legato.kazusa.utils.visible
|
||||||
import splitties.views.onClick
|
import splitties.views.onClick
|
||||||
import splitties.views.onLongClick
|
import splitties.views.onLongClick
|
||||||
@@ -52,6 +54,7 @@ class ReadMenu @JvmOverloads constructor(
|
|||||||
private val binding = ViewReadMenuBinding.inflate(LayoutInflater.from(context), this, true)
|
private val binding = ViewReadMenuBinding.inflate(LayoutInflater.from(context), this, true)
|
||||||
private var confirmSkipToChapter: Boolean = false
|
private var confirmSkipToChapter: Boolean = false
|
||||||
private var isMenuOutAnimating = false
|
private var isMenuOutAnimating = false
|
||||||
|
|
||||||
private val menuTopIn: Animation by lazy {
|
private val menuTopIn: Animation by lazy {
|
||||||
loadAnimation(context, R.anim.anim_readbook_top_in)
|
loadAnimation(context, R.anim.anim_readbook_top_in)
|
||||||
}
|
}
|
||||||
@@ -64,6 +67,17 @@ class ReadMenu @JvmOverloads constructor(
|
|||||||
private val menuBottomOut: Animation by lazy {
|
private val menuBottomOut: Animation by lazy {
|
||||||
loadAnimation(context, R.anim.anim_readbook_bottom_out)
|
loadAnimation(context, R.anim.anim_readbook_bottom_out)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val fadeIn = AlphaAnimation(0f, 1f).apply {
|
||||||
|
duration = 280
|
||||||
|
fillAfter = true
|
||||||
|
}
|
||||||
|
|
||||||
|
private val fadeOut = AlphaAnimation(1f, 0f).apply {
|
||||||
|
duration = 280
|
||||||
|
fillAfter = true
|
||||||
|
}
|
||||||
|
|
||||||
// private val immersiveMenu: Boolean
|
// private val immersiveMenu: Boolean
|
||||||
// get() = AppConfig.readBarStyleFollowPage && ReadBookConfig.durConfig.curBgType() == 0
|
// get() = AppConfig.readBarStyleFollowPage && ReadBookConfig.durConfig.curBgType() == 0
|
||||||
// private var bgColor: Int = if (immersiveMenu) {
|
// private var bgColor: Int = if (immersiveMenu) {
|
||||||
@@ -84,11 +98,13 @@ class ReadMenu @JvmOverloads constructor(
|
|||||||
// .setPressedColor(ColorUtils.darkenColor(bgColor))
|
// .setPressedColor(ColorUtils.darkenColor(bgColor))
|
||||||
// .create()
|
// .create()
|
||||||
private var onMenuOutEnd: (() -> Unit)? = null
|
private var onMenuOutEnd: (() -> Unit)? = null
|
||||||
|
|
||||||
private val showBrightnessView
|
private val showBrightnessView
|
||||||
get() = context.getPrefBoolean(
|
get() = context.getPrefBoolean(
|
||||||
PreferKey.showBrightnessView,
|
PreferKey.showBrightnessView,
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
|
|
||||||
private val sourceMenu by lazy {
|
private val sourceMenu by lazy {
|
||||||
PopupMenu(context, binding.tvSourceAction).apply {
|
PopupMenu(context, binding.tvSourceAction).apply {
|
||||||
inflate(R.menu.book_read_source)
|
inflate(R.menu.book_read_source)
|
||||||
@@ -249,10 +265,10 @@ class ReadMenu @JvmOverloads constructor(
|
|||||||
|
|
||||||
fun upBrightnessState() {
|
fun upBrightnessState() {
|
||||||
if (brightnessAuto()) {
|
if (brightnessAuto()) {
|
||||||
//binding.ivBrightnessAuto.setColorFilter(context.accentColor)
|
binding.ivBrightnessAuto.setColorFilter(context.themeColor(com.google.android.material.R.attr.colorPrimary))
|
||||||
binding.seekBrightness.isEnabled = false
|
binding.seekBrightness.isEnabled = false
|
||||||
} else {
|
} else {
|
||||||
//binding.ivBrightnessAuto.setColorFilter(context.buttonDisabledColor)
|
binding.ivBrightnessAuto.setColorFilter(context.themeColor(com.google.android.material.R.attr.colorOnSurface))
|
||||||
binding.seekBrightness.isEnabled = true
|
binding.seekBrightness.isEnabled = true
|
||||||
}
|
}
|
||||||
setScreenBrightness(AppConfig.readBrightness.toFloat())
|
setScreenBrightness(AppConfig.readBrightness.toFloat())
|
||||||
@@ -283,6 +299,7 @@ class ReadMenu @JvmOverloads constructor(
|
|||||||
if (anim) {
|
if (anim) {
|
||||||
binding.titleBar.startAnimation(menuTopIn)
|
binding.titleBar.startAnimation(menuTopIn)
|
||||||
binding.bottomMenu.startAnimation(menuBottomIn)
|
binding.bottomMenu.startAnimation(menuBottomIn)
|
||||||
|
updateBrightnessVisibility(true)
|
||||||
} else {
|
} else {
|
||||||
menuInListener.onAnimationStart(menuBottomIn)
|
menuInListener.onAnimationStart(menuBottomIn)
|
||||||
menuInListener.onAnimationEnd(menuBottomIn)
|
menuInListener.onAnimationEnd(menuBottomIn)
|
||||||
@@ -299,6 +316,8 @@ class ReadMenu @JvmOverloads constructor(
|
|||||||
if (anim) {
|
if (anim) {
|
||||||
binding.titleBar.startAnimation(menuTopOut)
|
binding.titleBar.startAnimation(menuTopOut)
|
||||||
binding.bottomMenu.startAnimation(menuBottomOut)
|
binding.bottomMenu.startAnimation(menuBottomOut)
|
||||||
|
updateBrightnessVisibility(false)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
menuOutListener.onAnimationStart(menuBottomOut)
|
menuOutListener.onAnimationStart(menuBottomOut)
|
||||||
menuOutListener.onAnimationEnd(menuBottomOut)
|
menuOutListener.onAnimationEnd(menuBottomOut)
|
||||||
@@ -306,6 +325,16 @@ class ReadMenu @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun updateBrightnessVisibility(boolean: Boolean) {
|
||||||
|
if (showBrightnessView) {
|
||||||
|
if(boolean){
|
||||||
|
binding.llBrightness.startAnimation(fadeIn)
|
||||||
|
}else{
|
||||||
|
binding.llBrightness.startAnimation(fadeOut)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun brightnessAuto(): Boolean {
|
private fun brightnessAuto(): Boolean {
|
||||||
return context.getPrefBoolean("brightnessAuto", true) || !showBrightnessView
|
return context.getPrefBoolean("brightnessAuto", true) || !showBrightnessView
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,14 +4,14 @@ import android.content.DialogInterface
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import io.legato.kazusa.R
|
import io.legato.kazusa.R
|
||||||
import io.legato.kazusa.base.BaseDialogFragment
|
import io.legato.kazusa.base.BaseBottomSheetDialogFragment
|
||||||
import io.legato.kazusa.constant.EventBus
|
import io.legato.kazusa.constant.EventBus
|
||||||
import io.legato.kazusa.databinding.DialogReadPaddingBinding
|
import io.legato.kazusa.databinding.DialogReadPaddingBinding
|
||||||
import io.legato.kazusa.help.config.ReadBookConfig
|
import io.legato.kazusa.help.config.ReadBookConfig
|
||||||
import io.legato.kazusa.utils.postEvent
|
import io.legato.kazusa.utils.postEvent
|
||||||
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||||
|
|
||||||
class PaddingConfigDialog : BaseDialogFragment(R.layout.dialog_read_padding) {
|
class PaddingConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_padding) {
|
||||||
|
|
||||||
private val binding by viewBinding(DialogReadPaddingBinding::bind)
|
private val binding by viewBinding(DialogReadPaddingBinding::bind)
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package io.legato.kazusa.ui.book.read.config
|
package io.legato.kazusa.ui.book.read.config
|
||||||
|
|
||||||
import android.content.DialogInterface
|
import android.content.DialogInterface
|
||||||
import android.graphics.Color
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
@@ -20,15 +19,11 @@ import io.legato.kazusa.lib.dialogs.selector
|
|||||||
import io.legato.kazusa.model.ReadBook
|
import io.legato.kazusa.model.ReadBook
|
||||||
import io.legato.kazusa.ui.book.read.ReadBookActivity
|
import io.legato.kazusa.ui.book.read.ReadBookActivity
|
||||||
import io.legato.kazusa.ui.font.FontSelectDialog
|
import io.legato.kazusa.ui.font.FontSelectDialog
|
||||||
import io.legato.kazusa.ui.widget.DetailSeekBar
|
|
||||||
import io.legato.kazusa.utils.ChineseUtils
|
import io.legato.kazusa.utils.ChineseUtils
|
||||||
import io.legato.kazusa.utils.postEvent
|
import io.legato.kazusa.utils.postEvent
|
||||||
import io.legato.kazusa.utils.showDialogFragment
|
import io.legato.kazusa.utils.showDialogFragment
|
||||||
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||||
import splitties.views.onLongClick
|
import splitties.views.onLongClick
|
||||||
import androidx.core.graphics.drawable.toDrawable
|
|
||||||
import androidx.transition.TransitionManager
|
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
|
||||||
import io.legato.kazusa.help.config.ThemeConfig
|
import io.legato.kazusa.help.config.ThemeConfig
|
||||||
|
|
||||||
class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_style),
|
class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_style),
|
||||||
@@ -38,8 +33,6 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
|
|||||||
private val callBack get() = activity as? ReadBookActivity
|
private val callBack get() = activity as? ReadBookActivity
|
||||||
private lateinit var styleAdapter: StyleAdapter
|
private lateinit var styleAdapter: StyleAdapter
|
||||||
|
|
||||||
private lateinit var allSliders: List<DetailSeekBar>
|
|
||||||
|
|
||||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
(activity as ReadBookActivity).bottomDialog++
|
(activity as ReadBookActivity).bottomDialog++
|
||||||
initView()
|
initView()
|
||||||
@@ -158,22 +151,6 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
|
|||||||
postEvent(EventBus.UP_CONFIG, arrayListOf(1, 2, 5))
|
postEvent(EventBus.UP_CONFIG, arrayListOf(1, 2, 5))
|
||||||
}
|
}
|
||||||
|
|
||||||
allSliders = listOf(
|
|
||||||
dsbTextSize,
|
|
||||||
dsbTextLetterSpacing,
|
|
||||||
dsbLineSize,
|
|
||||||
dsbParagraphSpacing
|
|
||||||
)
|
|
||||||
|
|
||||||
allSliders.forEach { seekBar ->
|
|
||||||
seekBar.onStartTracking = {
|
|
||||||
setOnlyActiveSeekBarVisible(seekBar, true)
|
|
||||||
}
|
|
||||||
seekBar.onStopTracking = {
|
|
||||||
setOnlyActiveSeekBarVisible(seekBar, false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dsbTextSize.onChanged = {
|
dsbTextSize.onChanged = {
|
||||||
ReadBookConfig.textSize = it + 5
|
ReadBookConfig.textSize = it + 5
|
||||||
postEvent(EventBus.UP_CONFIG, arrayListOf(8, 5))
|
postEvent(EventBus.UP_CONFIG, arrayListOf(8, 5))
|
||||||
@@ -192,24 +169,6 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setOnlyActiveSeekBarVisible(activeSeekBar: DetailSeekBar, visible: Boolean) {
|
|
||||||
TransitionManager.beginDelayedTransition(binding.rootView)
|
|
||||||
if (visible) {
|
|
||||||
binding.setBar.visibility = View.GONE
|
|
||||||
binding.setBottomBar.visibility = View.GONE
|
|
||||||
} else {
|
|
||||||
binding.setBar.visibility = View.VISIBLE
|
|
||||||
binding.setBottomBar.visibility = View.VISIBLE
|
|
||||||
}
|
|
||||||
allSliders.forEach { seekBar ->
|
|
||||||
if (seekBar != activeSeekBar) {
|
|
||||||
seekBar.visibility = if (visible) View.GONE else View.VISIBLE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private fun changeBgTextConfig(index: Int) {
|
private fun changeBgTextConfig(index: Int) {
|
||||||
val oldIndex = ReadBookConfig.styleSelect
|
val oldIndex = ReadBookConfig.styleSelect
|
||||||
if (index != oldIndex) {
|
if (index != oldIndex) {
|
||||||
|
|||||||
@@ -2,10 +2,9 @@ package io.legato.kazusa.ui.book.read.config
|
|||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
|
||||||
import com.jaredrummler.android.colorpicker.ColorPickerDialog
|
import com.jaredrummler.android.colorpicker.ColorPickerDialog
|
||||||
import io.legato.kazusa.R
|
import io.legato.kazusa.R
|
||||||
import io.legato.kazusa.base.BaseDialogFragment
|
import io.legato.kazusa.base.BaseBottomSheetDialogFragment
|
||||||
import io.legato.kazusa.constant.EventBus
|
import io.legato.kazusa.constant.EventBus
|
||||||
import io.legato.kazusa.databinding.DialogTipConfigBinding
|
import io.legato.kazusa.databinding.DialogTipConfigBinding
|
||||||
import io.legato.kazusa.help.config.ReadBookConfig
|
import io.legato.kazusa.help.config.ReadBookConfig
|
||||||
@@ -16,11 +15,10 @@ import io.legato.kazusa.utils.getIndexById
|
|||||||
import io.legato.kazusa.utils.hexString
|
import io.legato.kazusa.utils.hexString
|
||||||
import io.legato.kazusa.utils.observeEvent
|
import io.legato.kazusa.utils.observeEvent
|
||||||
import io.legato.kazusa.utils.postEvent
|
import io.legato.kazusa.utils.postEvent
|
||||||
import io.legato.kazusa.utils.setLayout
|
|
||||||
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||||
|
|
||||||
|
|
||||||
class TipConfigDialog : BaseDialogFragment(R.layout.dialog_tip_config) {
|
class TipConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_tip_config) {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val TIP_COLOR = 7897
|
const val TIP_COLOR = 7897
|
||||||
@@ -31,7 +29,6 @@ class TipConfigDialog : BaseDialogFragment(R.layout.dialog_tip_config) {
|
|||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
|||||||
@@ -1,16 +1,13 @@
|
|||||||
package io.legato.kazusa.ui.config
|
package io.legato.kazusa.ui.config
|
||||||
|
|
||||||
import android.app.AlertDialog
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.text.InputType
|
import android.text.InputType
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuInflater
|
import android.view.MenuInflater
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.EditText
|
|
||||||
import androidx.core.view.MenuProvider
|
import androidx.core.view.MenuProvider
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
@@ -18,8 +15,6 @@ import androidx.preference.EditTextPreference
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
|
||||||
import com.google.android.material.dialog.MaterialDialogs
|
|
||||||
import io.legato.kazusa.R
|
import io.legato.kazusa.R
|
||||||
import io.legato.kazusa.constant.AppLog
|
import io.legato.kazusa.constant.AppLog
|
||||||
import io.legato.kazusa.constant.PreferKey
|
import io.legato.kazusa.constant.PreferKey
|
||||||
@@ -39,12 +34,10 @@ import io.legato.kazusa.lib.dialogs.selector
|
|||||||
import io.legato.kazusa.lib.permission.Permissions
|
import io.legato.kazusa.lib.permission.Permissions
|
||||||
import io.legato.kazusa.lib.permission.PermissionsCompat
|
import io.legato.kazusa.lib.permission.PermissionsCompat
|
||||||
import io.legato.kazusa.lib.prefs.fragment.PreferenceFragment
|
import io.legato.kazusa.lib.prefs.fragment.PreferenceFragment
|
||||||
//import io.legado.app.lib.theme.primaryColor
|
|
||||||
import io.legato.kazusa.ui.about.AppLogDialog
|
import io.legato.kazusa.ui.about.AppLogDialog
|
||||||
import io.legato.kazusa.ui.file.HandleFileContract
|
import io.legato.kazusa.ui.file.HandleFileContract
|
||||||
import io.legato.kazusa.ui.widget.dialog.WaitDialog
|
import io.legato.kazusa.ui.widget.dialog.WaitDialog
|
||||||
import io.legato.kazusa.utils.FileDoc
|
import io.legato.kazusa.utils.FileDoc
|
||||||
import io.legato.kazusa.utils.applyTint
|
|
||||||
import io.legato.kazusa.utils.checkWrite
|
import io.legato.kazusa.utils.checkWrite
|
||||||
import io.legato.kazusa.utils.getPrefString
|
import io.legato.kazusa.utils.getPrefString
|
||||||
import io.legato.kazusa.utils.isContentScheme
|
import io.legato.kazusa.utils.isContentScheme
|
||||||
@@ -222,9 +215,6 @@ class BackupConfigFragment : PreferenceFragment(),
|
|||||||
}
|
}
|
||||||
"web_dav_auth" -> {
|
"web_dav_auth" -> {
|
||||||
showWebDavAuthDialog()
|
showWebDavAuthDialog()
|
||||||
lifecycleScope.launch {
|
|
||||||
testWebDav()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
"web_dav_backup" -> backup()
|
"web_dav_backup" -> backup()
|
||||||
"web_dav_restore" -> restore()
|
"web_dav_restore" -> restore()
|
||||||
@@ -254,6 +244,9 @@ class BackupConfigFragment : PreferenceFragment(),
|
|||||||
|
|
||||||
upPreferenceSummary(PreferKey.webDavAccount, account)
|
upPreferenceSummary(PreferKey.webDavAccount, account)
|
||||||
upPreferenceSummary(PreferKey.webDavPassword, password)
|
upPreferenceSummary(PreferKey.webDavPassword, password)
|
||||||
|
lifecycleScope.launch {
|
||||||
|
testWebDav()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cancelButton()
|
cancelButton()
|
||||||
|
|||||||
@@ -2,24 +2,16 @@ package io.legato.kazusa.ui.widget
|
|||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Build
|
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.MotionEvent
|
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import androidx.annotation.RequiresApi
|
|
||||||
import androidx.appcompat.widget.TooltipCompat
|
import androidx.appcompat.widget.TooltipCompat
|
||||||
import com.google.android.material.slider.Slider
|
import com.google.android.material.slider.Slider
|
||||||
import io.legato.kazusa.R
|
import io.legato.kazusa.R
|
||||||
import io.legato.kazusa.databinding.ViewDetailSeekBarBinding
|
import io.legato.kazusa.databinding.ViewDetailSeekBarBinding
|
||||||
//import io.legado.app.lib.theme.bottomBackground
|
|
||||||
//import io.legado.app.lib.theme.getPrimaryTextColor
|
|
||||||
import io.legato.kazusa.ui.widget.seekbar.SeekBarChangeListener
|
import io.legato.kazusa.ui.widget.seekbar.SeekBarChangeListener
|
||||||
import kotlin.math.abs
|
|
||||||
|
|
||||||
|
|
||||||
@RequiresApi(Build.VERSION_CODES.O)
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
@SuppressLint("ClickableViewAccessibility")
|
||||||
class DetailSeekBar @JvmOverloads constructor(
|
class DetailSeekBar @JvmOverloads constructor(
|
||||||
context: Context,
|
context: Context,
|
||||||
@@ -31,6 +23,11 @@ class DetailSeekBar @JvmOverloads constructor(
|
|||||||
private val isBottomBackground: Boolean
|
private val isBottomBackground: Boolean
|
||||||
|
|
||||||
var valueFormat: ((progress: Int) -> String)? = null
|
var valueFormat: ((progress: Int) -> String)? = null
|
||||||
|
set(value) {
|
||||||
|
field = value
|
||||||
|
upValue()
|
||||||
|
}
|
||||||
|
|
||||||
var onStartTracking: (() -> Unit)? = null
|
var onStartTracking: (() -> Unit)? = null
|
||||||
var onChanged: ((progress: Int) -> Unit)? = null
|
var onChanged: ((progress: Int) -> Unit)? = null
|
||||||
var onStopTracking: (() -> Unit)? = null
|
var onStopTracking: (() -> Unit)? = null
|
||||||
@@ -39,7 +36,6 @@ class DetailSeekBar @JvmOverloads constructor(
|
|||||||
get() = binding.slider.value.toInt()
|
get() = binding.slider.value.toInt()
|
||||||
set(value) {
|
set(value) {
|
||||||
binding.slider.value = value.toFloat()
|
binding.slider.value = value.toFloat()
|
||||||
upValue()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var max: Int
|
var max: Int
|
||||||
@@ -54,7 +50,6 @@ class DetailSeekBar @JvmOverloads constructor(
|
|||||||
typedArray.getBoolean(R.styleable.DetailSeekBar_isBottomBackground, false)
|
typedArray.getBoolean(R.styleable.DetailSeekBar_isBottomBackground, false)
|
||||||
val title = typedArray.getText(R.styleable.DetailSeekBar_title)
|
val title = typedArray.getText(R.styleable.DetailSeekBar_title)
|
||||||
|
|
||||||
|
|
||||||
binding.tvSeekTitle.apply {
|
binding.tvSeekTitle.apply {
|
||||||
text = title
|
text = title
|
||||||
TooltipCompat.setTooltipText(this, title)
|
TooltipCompat.setTooltipText(this, title)
|
||||||
@@ -93,23 +88,6 @@ class DetailSeekBar @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
binding.slider.setOnTouchListener { _, event ->
|
|
||||||
if (event.action == MotionEvent.ACTION_DOWN) {
|
|
||||||
val slider = binding.slider
|
|
||||||
val sliderWidth = slider.width - slider.paddingStart - slider.paddingEnd
|
|
||||||
val touchX = event.x - slider.paddingStart
|
|
||||||
|
|
||||||
val proportion = (slider.value - slider.valueFrom) / (slider.valueTo - slider.valueFrom)
|
|
||||||
val thumbCenterX = proportion * sliderWidth
|
|
||||||
|
|
||||||
val thumbRadiusPx = slider.thumbRadius * 2f // 可适当扩大滑块判断区域
|
|
||||||
|
|
||||||
val isTouchNearThumb = kotlin.math.abs(touchX - thumbCenterX) <= thumbRadiusPx
|
|
||||||
return@setOnTouchListener !isTouchNearThumb // 拦截不是点在滑块上的点击
|
|
||||||
}
|
|
||||||
return@setOnTouchListener false
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun upValue(progress: Int = binding.slider.value.toInt()) {
|
private fun upValue(progress: Int = binding.slider.value.toInt()) {
|
||||||
@@ -124,4 +102,8 @@ class DetailSeekBar @JvmOverloads constructor(
|
|||||||
upValue(progress)
|
upValue(progress)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setTitle(title: CharSequence?) {
|
||||||
|
binding.tvSeekTitle.text = title
|
||||||
|
TooltipCompat.setTooltipText(binding.tvSeekTitle, title)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,188 @@
|
|||||||
|
package io.legato.kazusa.ui.widget
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.Handler
|
||||||
|
import android.os.Looper
|
||||||
|
import android.util.AttributeSet
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.MotionEvent
|
||||||
|
import android.widget.FrameLayout
|
||||||
|
import androidx.appcompat.widget.TooltipCompat
|
||||||
|
import io.legato.kazusa.R
|
||||||
|
import io.legato.kazusa.databinding.ViewSimpleCounterBinding
|
||||||
|
import io.legato.kazusa.lib.dialogs.alert
|
||||||
|
|
||||||
|
@SuppressLint("ViewConstructor", "ClickableViewAccessibility")
|
||||||
|
class SimpleCounterView @JvmOverloads constructor(
|
||||||
|
context: Context,
|
||||||
|
attrs: AttributeSet? = null
|
||||||
|
) : FrameLayout(context, attrs) {
|
||||||
|
|
||||||
|
private val binding = ViewSimpleCounterBinding.inflate(LayoutInflater.from(context), this)
|
||||||
|
|
||||||
|
private var _progress = 0
|
||||||
|
private var _max = 100
|
||||||
|
private val isBottomBackground: Boolean
|
||||||
|
|
||||||
|
var valueFormat: ((Int) -> String)? = null
|
||||||
|
var onChanged: ((Int) -> Unit)? = null
|
||||||
|
|
||||||
|
private val handler = Handler(Looper.getMainLooper())
|
||||||
|
private var isIncrementing = false
|
||||||
|
private var isDecrementing = false
|
||||||
|
|
||||||
|
private val longPressDelay = 400L
|
||||||
|
private val repeatInterval = 320L
|
||||||
|
|
||||||
|
|
||||||
|
var progress: Int
|
||||||
|
get() = _progress
|
||||||
|
set(value) {
|
||||||
|
_progress = value.coerceIn(0, _max)
|
||||||
|
updateValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
var max: Int
|
||||||
|
get() = _max
|
||||||
|
set(value) {
|
||||||
|
_max = value
|
||||||
|
_progress = _progress.coerceAtMost(_max)
|
||||||
|
updateValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.DetailSeekBar)
|
||||||
|
isBottomBackground = typedArray.getBoolean(R.styleable.DetailSeekBar_isBottomBackground, false)
|
||||||
|
val title = typedArray.getText(R.styleable.DetailSeekBar_title)
|
||||||
|
_max = typedArray.getInt(R.styleable.DetailSeekBar_max, 100)
|
||||||
|
typedArray.recycle()
|
||||||
|
|
||||||
|
binding.tvSeekTitle.text = title
|
||||||
|
TooltipCompat.setTooltipText(binding.tvSeekTitle, title)
|
||||||
|
|
||||||
|
binding.ivSeekPlus.setOnClickListener {
|
||||||
|
if (_progress < _max) {
|
||||||
|
_progress++
|
||||||
|
updateValue()
|
||||||
|
onChanged?.invoke(_progress)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.ivSeekReduce.setOnClickListener {
|
||||||
|
if (_progress > 0) {
|
||||||
|
_progress--
|
||||||
|
updateValue()
|
||||||
|
onChanged?.invoke(_progress)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.ivSeekPlus.setOnTouchListener { _, event ->
|
||||||
|
when (event.action) {
|
||||||
|
MotionEvent.ACTION_DOWN -> {
|
||||||
|
isIncrementing = true
|
||||||
|
handler.postDelayed(startIncrementRunnable, longPressDelay)
|
||||||
|
}
|
||||||
|
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
|
||||||
|
isIncrementing = false
|
||||||
|
handler.removeCallbacks(startIncrementRunnable)
|
||||||
|
handler.removeCallbacks(incrementRunnable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.ivSeekReduce.setOnTouchListener { _, event ->
|
||||||
|
when (event.action) {
|
||||||
|
MotionEvent.ACTION_DOWN -> {
|
||||||
|
isDecrementing = true
|
||||||
|
handler.postDelayed(startDecrementRunnable, longPressDelay)
|
||||||
|
}
|
||||||
|
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
|
||||||
|
isDecrementing = false
|
||||||
|
handler.removeCallbacks(startDecrementRunnable)
|
||||||
|
handler.removeCallbacks(decrementRunnable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.tvSeekValue.setOnClickListener {
|
||||||
|
showSeekBarDialog()
|
||||||
|
}
|
||||||
|
|
||||||
|
updateValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun showSeekBarDialog() {
|
||||||
|
context.alert(title = null, message = null) {
|
||||||
|
customView {
|
||||||
|
val detailSeekBar = DetailSeekBar(ctx).apply {
|
||||||
|
max = _max
|
||||||
|
progress = _progress
|
||||||
|
valueFormat = this@SimpleCounterView.valueFormat
|
||||||
|
setTitle(binding.tvSeekTitle.text)
|
||||||
|
onChanged = {
|
||||||
|
_progress = it
|
||||||
|
updateValue()
|
||||||
|
this@SimpleCounterView.onChanged?.invoke(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FrameLayout(ctx).apply {
|
||||||
|
setPadding(64, 0, 64, 0)
|
||||||
|
addView(detailSeekBar, LayoutParams(
|
||||||
|
LayoutParams.MATCH_PARENT,
|
||||||
|
LayoutParams.WRAP_CONTENT
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
okButton()
|
||||||
|
cancelButton()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private fun updateValue() {
|
||||||
|
binding.tvSeekValue.text = valueFormat?.invoke(_progress) ?: _progress.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
private val startIncrementRunnable = Runnable {
|
||||||
|
handler.post(incrementRunnable)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val startDecrementRunnable = Runnable {
|
||||||
|
handler.post(decrementRunnable)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val incrementRunnable = object : Runnable {
|
||||||
|
override fun run() {
|
||||||
|
if (_progress < _max) {
|
||||||
|
_progress++
|
||||||
|
updateValue()
|
||||||
|
onChanged?.invoke(_progress)
|
||||||
|
handler.postDelayed(this, repeatInterval)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private val decrementRunnable = object : Runnable {
|
||||||
|
override fun run() {
|
||||||
|
if (_progress > 0) {
|
||||||
|
_progress--
|
||||||
|
updateValue()
|
||||||
|
onChanged?.invoke(_progress)
|
||||||
|
handler.postDelayed(this, repeatInterval)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDetachedFromWindow() {
|
||||||
|
handler.removeCallbacks(incrementRunnable)
|
||||||
|
handler.removeCallbacks(decrementRunnable)
|
||||||
|
super.onDetachedFromWindow()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -3,15 +3,7 @@ package io.legato.kazusa.ui.widget.text
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import com.google.android.material.textfield.TextInputLayout
|
import com.google.android.material.textfield.TextInputLayout
|
||||||
import io.legato.kazusa.lib.theme.Selector
|
|
||||||
import io.legato.kazusa.lib.theme.ThemeStore
|
|
||||||
|
|
||||||
class TextInputLayout(context: Context, attrs: AttributeSet?) : TextInputLayout(context, attrs) {
|
class TextInputLayout(context: Context, attrs: AttributeSet?) : TextInputLayout(context, attrs) {
|
||||||
|
|
||||||
init {
|
|
||||||
if (!isInEditMode) {
|
|
||||||
defaultHintTextColor =
|
|
||||||
Selector.colorBuild().setDefaultColor(ThemeStore.accentColor(context)).create()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,8 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:paddingLeft="20dp"
|
android:paddingVertical="8dp"
|
||||||
android:paddingRight="20dp"
|
android:paddingHorizontal="16dp"
|
||||||
android:paddingTop="12dp"
|
|
||||||
android:overScrollMode="ifContentScrolls">
|
android:overScrollMode="ifContentScrolls">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@@ -17,8 +16,8 @@
|
|||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingTop="6dp"
|
android:paddingTop="8dp"
|
||||||
android:paddingBottom="6dp">
|
android:paddingBottom="8dp">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_add_group_title"
|
android:id="@+id/tv_add_group_title"
|
||||||
@@ -38,7 +37,7 @@
|
|||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
app:layout_constraintRight_toLeftOf="@+id/sw_add_group" />
|
app:layout_constraintRight_toLeftOf="@+id/sw_add_group" />
|
||||||
|
|
||||||
<io.legato.kazusa.lib.theme.view.ThemeSwitch
|
<com.google.android.material.materialswitch.MaterialSwitch
|
||||||
android:id="@+id/sw_add_group"
|
android:id="@+id/sw_add_group"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@@ -51,19 +50,20 @@
|
|||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.text.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/text_input_layout"
|
android:id="@+id/text_input_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingTop="6dp">
|
android:paddingTop="8dp">
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.text.AutoCompleteTextView
|
<io.legato.kazusa.ui.widget.text.AutoCompleteTextView
|
||||||
android:id="@+id/edit_view"
|
android:id="@+id/edit_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:padding="16dp"
|
||||||
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" />
|
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" />
|
||||||
|
|
||||||
</io.legato.kazusa.ui.widget.text.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:overScrollMode="ifContentScrolls"
|
android:overScrollMode="ifContentScrolls"
|
||||||
@@ -10,13 +9,13 @@
|
|||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.text.AutoCompleteTextView
|
<io.legato.kazusa.ui.widget.text.AutoCompleteTextView
|
||||||
android:id="@+id/edit_view"
|
android:id="@+id/edit_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingVertical="16dp"
|
android:padding="16dp" />
|
||||||
android:paddingHorizontal="16dp"
|
|
||||||
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" />
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
</androidx.core.widget.NestedScrollView>
|
</androidx.core.widget.NestedScrollView>
|
||||||
@@ -41,8 +41,8 @@
|
|||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/tv_day_night"
|
android:id="@+id/tv_day_night"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="36dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="36dp"
|
||||||
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
|
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
|
||||||
android:layout_marginStart="8dp"
|
android:layout_marginStart="8dp"
|
||||||
app:icon="@drawable/ic_brightness"
|
app:icon="@drawable/ic_brightness"
|
||||||
@@ -68,6 +68,7 @@
|
|||||||
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
|
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
|
||||||
android:layout_width="64dp"
|
android:layout_width="64dp"
|
||||||
android:layout_height="64dp"
|
android:layout_height="64dp"
|
||||||
|
android:layout_weight="2"
|
||||||
app:icon="@drawable/font_bold"
|
app:icon="@drawable/font_bold"
|
||||||
app:iconGravity="textTop"
|
app:iconGravity="textTop"
|
||||||
android:text="@string/font_weight_text" />
|
android:text="@string/font_weight_text" />
|
||||||
@@ -81,6 +82,7 @@
|
|||||||
android:id="@+id/tv_text_font"
|
android:id="@+id/tv_text_font"
|
||||||
android:layout_width="64dp"
|
android:layout_width="64dp"
|
||||||
android:layout_height="64dp"
|
android:layout_height="64dp"
|
||||||
|
android:layout_weight="2"
|
||||||
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
|
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
|
||||||
app:icon="@drawable/font_style"
|
app:icon="@drawable/font_style"
|
||||||
app:iconGravity="textTop"
|
app:iconGravity="textTop"
|
||||||
@@ -95,6 +97,7 @@
|
|||||||
android:id="@+id/tv_text_indent"
|
android:id="@+id/tv_text_indent"
|
||||||
android:layout_width="64dp"
|
android:layout_width="64dp"
|
||||||
android:layout_height="64dp"
|
android:layout_height="64dp"
|
||||||
|
android:layout_weight="2"
|
||||||
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
|
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
|
||||||
app:icon="@drawable/ic_segment"
|
app:icon="@drawable/ic_segment"
|
||||||
app:iconGravity="textTop"
|
app:iconGravity="textTop"
|
||||||
@@ -109,6 +112,7 @@
|
|||||||
android:id="@+id/tv_padding"
|
android:id="@+id/tv_padding"
|
||||||
android:layout_width="64dp"
|
android:layout_width="64dp"
|
||||||
android:layout_height="64dp"
|
android:layout_height="64dp"
|
||||||
|
android:layout_weight="2"
|
||||||
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
|
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
|
||||||
app:icon="@drawable/ic_padding"
|
app:icon="@drawable/ic_padding"
|
||||||
app:iconGravity="textTop"
|
app:iconGravity="textTop"
|
||||||
@@ -151,42 +155,64 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.DetailSeekBar
|
<LinearLayout
|
||||||
android:id="@+id/dsb_text_size"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginHorizontal="16dp"
|
android:gravity="center_vertical"
|
||||||
|
android:orientation="horizontal"
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
app:isBottomBackground="true"
|
android:layout_marginHorizontal="16dp">
|
||||||
app:max="45"
|
<io.legato.kazusa.ui.widget.SimpleCounterView
|
||||||
app:title="@string/text_size" />
|
android:id="@+id/dsb_text_size"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:isBottomBackground="true"
|
||||||
|
app:max="45"
|
||||||
|
app:title="@string/text_size" />
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.DetailSeekBar
|
<View
|
||||||
android:id="@+id/dsb_text_letter_spacing"
|
android:layout_width="0dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_weight="1"/>
|
||||||
android:layout_marginHorizontal="16dp"
|
|
||||||
app:isBottomBackground="true"
|
|
||||||
app:max="100"
|
|
||||||
app:title="@string/text_letter_spacing" />
|
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.DetailSeekBar
|
<io.legato.kazusa.ui.widget.SimpleCounterView
|
||||||
|
android:id="@+id/dsb_text_letter_spacing"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:isBottomBackground="true"
|
||||||
|
app:max="100"
|
||||||
|
app:title="@string/text_letter_spacing" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
android:layout_marginHorizontal="16dp">
|
||||||
|
|
||||||
|
<io.legato.kazusa.ui.widget.SimpleCounterView
|
||||||
android:id="@+id/dsb_line_size"
|
android:id="@+id/dsb_line_size"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginHorizontal="16dp"
|
|
||||||
app:isBottomBackground="true"
|
app:isBottomBackground="true"
|
||||||
app:max="20"
|
app:max="20"
|
||||||
app:title="@string/line_size" />
|
app:title="@string/line_size" />
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.DetailSeekBar
|
<View
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"/>
|
||||||
|
|
||||||
|
<io.legato.kazusa.ui.widget.SimpleCounterView
|
||||||
android:id="@+id/dsb_paragraph_spacing"
|
android:id="@+id/dsb_paragraph_spacing"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginHorizontal="16dp"
|
|
||||||
app:isBottomBackground="true"
|
app:isBottomBackground="true"
|
||||||
app:max="20"
|
app:max="20"
|
||||||
app:title="@string/paragraph_size" />
|
app:title="@string/paragraph_size" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/set_bottom_bar"
|
android:id="@+id/set_bottom_bar"
|
||||||
@@ -201,6 +227,7 @@
|
|||||||
android:layout_marginHorizontal="16dp"
|
android:layout_marginHorizontal="16dp"
|
||||||
android:layout_marginBottom="4dp"
|
android:layout_marginBottom="4dp"
|
||||||
android:text="@string/page_anim"
|
android:text="@string/page_anim"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
android:textSize="12sp" />
|
android:textSize="12sp" />
|
||||||
|
|
||||||
<HorizontalScrollView
|
<HorizontalScrollView
|
||||||
@@ -222,8 +249,7 @@
|
|||||||
style="@style/Widget.Material3.Chip.Filter"
|
style="@style/Widget.Material3.Chip.Filter"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/page_anim_cover"
|
android:text="@string/page_anim_cover" />
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- 滑动动画 Chip -->
|
<!-- 滑动动画 Chip -->
|
||||||
<com.google.android.material.chip.Chip
|
<com.google.android.material.chip.Chip
|
||||||
@@ -232,8 +258,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_margin="4dp"
|
android:layout_margin="4dp"
|
||||||
android:text="@string/page_anim_slide"
|
android:text="@string/page_anim_slide" />
|
||||||
app:chipStrokeWidth="1dp" />
|
|
||||||
|
|
||||||
<!-- 仿真翻页 Chip -->
|
<!-- 仿真翻页 Chip -->
|
||||||
<com.google.android.material.chip.Chip
|
<com.google.android.material.chip.Chip
|
||||||
@@ -242,8 +267,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_margin="4dp"
|
android:layout_margin="4dp"
|
||||||
android:text="@string/page_anim_simulation"
|
android:text="@string/page_anim_simulation" />
|
||||||
app:chipStrokeWidth="1dp" />
|
|
||||||
|
|
||||||
<!-- 滚动动画 Chip -->
|
<!-- 滚动动画 Chip -->
|
||||||
<com.google.android.material.chip.Chip
|
<com.google.android.material.chip.Chip
|
||||||
@@ -252,8 +276,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_margin="4dp"
|
android:layout_margin="4dp"
|
||||||
android:text="@string/page_anim_scroll"
|
android:text="@string/page_anim_scroll" />
|
||||||
app:chipStrokeWidth="1dp" />
|
|
||||||
|
|
||||||
<!-- 无动画 Chip -->
|
<!-- 无动画 Chip -->
|
||||||
<com.google.android.material.chip.Chip
|
<com.google.android.material.chip.Chip
|
||||||
@@ -262,8 +285,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_margin="4dp"
|
android:layout_margin="4dp"
|
||||||
android:text="@string/page_anim_none"
|
android:text="@string/page_anim_none" />
|
||||||
app:chipStrokeWidth="1dp" />
|
|
||||||
|
|
||||||
</com.google.android.material.chip.ChipGroup>
|
</com.google.android.material.chip.ChipGroup>
|
||||||
</HorizontalScrollView>
|
</HorizontalScrollView>
|
||||||
@@ -280,7 +302,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="16dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:alpha="0.75"
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
android:text="@string/text_bg_style"
|
android:text="@string/text_bg_style"
|
||||||
android:textSize="12sp" />
|
android:textSize="12sp" />
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,32 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:padding="10dp">
|
android:paddingHorizontal="16dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:gravity="center"
|
||||||
|
android:paddingVertical="16dp"
|
||||||
|
android:paddingHorizontal="16dp">
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="36dp"
|
||||||
|
android:layout_height="4dp"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:background="@drawable/bg_bottom_sheet_handle"
|
||||||
|
android:layout_marginBottom="16dp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/bottom_sheet_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="界面设置"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/ll_header_padding"
|
android:id="@+id/ll_header_padding"
|
||||||
@@ -20,16 +45,16 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal">
|
||||||
android:paddingBottom="10dp">
|
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.text.AccentTextView
|
<io.legato.kazusa.ui.widget.text.AccentTextView
|
||||||
android:id="@+id/tv_header_padding"
|
android:id="@+id/tv_header_padding"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginVertical="8dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:text="@string/header"
|
android:text="@string/header"
|
||||||
android:textSize="18sp" />
|
style="@style/ChapterNameText" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
@@ -39,38 +64,61 @@
|
|||||||
<com.google.android.material.checkbox.MaterialCheckBox
|
<com.google.android.material.checkbox.MaterialCheckBox
|
||||||
android:id="@+id/cb_show_top_line"
|
android:id="@+id/cb_show_top_line"
|
||||||
android:layout_width="20dp"
|
android:layout_width="20dp"
|
||||||
android:layout_height="20dp"
|
android:layout_height="20dp" />
|
||||||
android:layout_margin="6dp" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.DetailSeekBar
|
<LinearLayout
|
||||||
android:id="@+id/dsb_header_padding_top"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:max="100"
|
android:orientation="horizontal">
|
||||||
app:title="@string/padding_top" />
|
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.DetailSeekBar
|
<io.legato.kazusa.ui.widget.SimpleCounterView
|
||||||
android:id="@+id/dsb_header_padding_bottom"
|
android:id="@+id/dsb_header_padding_top"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:max="100"
|
||||||
|
app:title="@string/padding_top" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"/>
|
||||||
|
|
||||||
|
<io.legato.kazusa.ui.widget.SimpleCounterView
|
||||||
|
android:id="@+id/dsb_header_padding_bottom"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:max="100"
|
||||||
|
app:title="@string/padding_bottom" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:max="100"
|
android:orientation="horizontal">
|
||||||
app:title="@string/padding_bottom" />
|
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.DetailSeekBar
|
<io.legato.kazusa.ui.widget.SimpleCounterView
|
||||||
android:id="@+id/dsb_header_padding_left"
|
android:id="@+id/dsb_header_padding_left"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:max="100"
|
app:max="100"
|
||||||
app:title="@string/padding_left" />
|
app:title="@string/padding_left" />
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.DetailSeekBar
|
<View
|
||||||
android:id="@+id/dsb_header_padding_right"
|
android:layout_width="0dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_weight="1"/>
|
||||||
app:max="100"
|
|
||||||
app:title="@string/padding_right" />
|
<io.legato.kazusa.ui.widget.SimpleCounterView
|
||||||
|
android:id="@+id/dsb_header_padding_right"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:max="100"
|
||||||
|
app:title="@string/padding_right" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@@ -78,38 +126,62 @@
|
|||||||
android:id="@+id/tv_body_padding"
|
android:id="@+id/tv_body_padding"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingTop="10dp"
|
android:paddingTop="8dp"
|
||||||
android:paddingBottom="10dp"
|
android:paddingBottom="8dp"
|
||||||
android:text="@string/main_body"
|
android:text="@string/main_body"
|
||||||
android:textSize="18sp" />
|
style="@style/ChapterNameText" />
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.DetailSeekBar
|
<LinearLayout
|
||||||
android:id="@+id/dsb_padding_top"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:max="200"
|
android:orientation="horizontal">
|
||||||
app:title="@string/padding_top" />
|
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.DetailSeekBar
|
<io.legato.kazusa.ui.widget.SimpleCounterView
|
||||||
android:id="@+id/dsb_padding_bottom"
|
android:id="@+id/dsb_padding_top"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:max="200"
|
||||||
|
app:title="@string/padding_top" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"/>
|
||||||
|
|
||||||
|
<io.legato.kazusa.ui.widget.SimpleCounterView
|
||||||
|
android:id="@+id/dsb_padding_bottom"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:max="100"
|
||||||
|
app:title="@string/padding_bottom" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:max="100"
|
android:orientation="horizontal">
|
||||||
app:title="@string/padding_bottom" />
|
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.DetailSeekBar
|
<io.legato.kazusa.ui.widget.SimpleCounterView
|
||||||
android:id="@+id/dsb_padding_left"
|
android:id="@+id/dsb_padding_left"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:max="100"
|
app:max="100"
|
||||||
app:title="@string/padding_left" />
|
app:title="@string/padding_left" />
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.DetailSeekBar
|
<View
|
||||||
android:id="@+id/dsb_padding_right"
|
android:layout_width="0dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_weight="1"/>
|
||||||
app:max="100"
|
|
||||||
app:title="@string/padding_right" />
|
<io.legato.kazusa.ui.widget.SimpleCounterView
|
||||||
|
android:id="@+id/dsb_padding_right"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:max="100"
|
||||||
|
app:title="@string/padding_right" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@@ -121,10 +193,10 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:paddingTop="10dp"
|
android:paddingTop="8dp"
|
||||||
android:paddingBottom="10dp"
|
android:paddingBottom="8dp"
|
||||||
android:text="@string/footer"
|
android:text="@string/footer"
|
||||||
android:textSize="18sp" />
|
style="@style/ChapterNameText" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
@@ -139,33 +211,57 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.DetailSeekBar
|
<LinearLayout
|
||||||
android:id="@+id/dsb_footer_padding_top"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:max="100"
|
android:orientation="horizontal">
|
||||||
app:title="@string/padding_top" />
|
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.DetailSeekBar
|
<io.legato.kazusa.ui.widget.SimpleCounterView
|
||||||
android:id="@+id/dsb_footer_padding_bottom"
|
android:id="@+id/dsb_footer_padding_top"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:max="100"
|
app:max="100"
|
||||||
app:title="@string/padding_bottom" />
|
app:title="@string/padding_top" />
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.DetailSeekBar
|
<View
|
||||||
android:id="@+id/dsb_footer_padding_left"
|
android:layout_width="0dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_weight="1"/>
|
||||||
app:max="100"
|
|
||||||
app:title="@string/padding_left" />
|
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.DetailSeekBar
|
<io.legato.kazusa.ui.widget.SimpleCounterView
|
||||||
android:id="@+id/dsb_footer_padding_right"
|
android:id="@+id/dsb_footer_padding_bottom"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:max="100"
|
||||||
|
app:title="@string/padding_bottom" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:max="100"
|
android:orientation="horizontal">
|
||||||
app:title="@string/padding_right" />
|
|
||||||
|
<io.legato.kazusa.ui.widget.SimpleCounterView
|
||||||
|
android:id="@+id/dsb_footer_padding_left"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:max="100"
|
||||||
|
app:title="@string/padding_left" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"/>
|
||||||
|
|
||||||
|
<io.legato.kazusa.ui.widget.SimpleCounterView
|
||||||
|
android:id="@+id/dsb_footer_padding_right"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:max="100"
|
||||||
|
app:title="@string/padding_right" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|||||||
@@ -9,13 +9,39 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:padding="16dp">
|
android:paddingHorizontal="16dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:gravity="center"
|
||||||
|
android:paddingVertical="16dp"
|
||||||
|
android:paddingHorizontal="16dp">
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="36dp"
|
||||||
|
android:layout_height="4dp"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:background="@drawable/bg_bottom_sheet_handle"
|
||||||
|
android:layout_marginBottom="16dp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/bottom_sheet_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="界面设置"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/body_title"
|
android:text="@string/body_title"
|
||||||
android:textSize="18sp" />
|
android:textSize="16sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<RadioGroup
|
<RadioGroup
|
||||||
android:id="@+id/rg_title_mode"
|
android:id="@+id/rg_title_mode"
|
||||||
@@ -49,7 +75,6 @@
|
|||||||
android:id="@+id/dsb_title_size"
|
android:id="@+id/dsb_title_size"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="3dp"
|
|
||||||
app:max="10"
|
app:max="10"
|
||||||
app:title="@string/title_font_size" />
|
app:title="@string/title_font_size" />
|
||||||
|
|
||||||
@@ -57,7 +82,6 @@
|
|||||||
android:id="@+id/dsb_title_top"
|
android:id="@+id/dsb_title_top"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="3dp"
|
|
||||||
app:max="100"
|
app:max="100"
|
||||||
app:title="@string/title_margin_top" />
|
app:title="@string/title_margin_top" />
|
||||||
|
|
||||||
@@ -65,7 +89,6 @@
|
|||||||
android:id="@+id/dsb_title_bottom"
|
android:id="@+id/dsb_title_bottom"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="3dp"
|
|
||||||
app:max="100"
|
app:max="100"
|
||||||
app:title="@string/title_margin_bottom" />
|
app:title="@string/title_margin_bottom" />
|
||||||
|
|
||||||
@@ -73,13 +96,16 @@
|
|||||||
android:id="@+id/tv_header_padding"
|
android:id="@+id/tv_header_padding"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingTop="8dp"
|
||||||
android:text="@string/header"
|
android:text="@string/header"
|
||||||
android:textSize="18sp" />
|
android:textSize="16sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/ll_header_show"
|
android:id="@+id/ll_header_show"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingVertical="4dp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry">
|
tools:ignore="RtlHardcoded,RtlSymmetry">
|
||||||
@@ -88,14 +114,12 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:padding="6dp"
|
|
||||||
android:text="@string/show_hide" />
|
android:text="@string/show_hide" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_header_show"
|
android:id="@+id/tv_header_show"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="6dp"
|
|
||||||
tools:text="@string/show_hide" />
|
tools:text="@string/show_hide" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -104,6 +128,7 @@
|
|||||||
android:id="@+id/ll_header_left"
|
android:id="@+id/ll_header_left"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingVertical="4dp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry">
|
tools:ignore="RtlHardcoded,RtlSymmetry">
|
||||||
@@ -112,14 +137,12 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:padding="6dp"
|
|
||||||
android:text="@string/left" />
|
android:text="@string/left" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_header_left"
|
android:id="@+id/tv_header_left"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="6dp"
|
|
||||||
tools:text="@string/title" />
|
tools:text="@string/title" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -128,6 +151,7 @@
|
|||||||
android:id="@+id/ll_header_middle"
|
android:id="@+id/ll_header_middle"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingVertical="4dp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry">
|
tools:ignore="RtlHardcoded,RtlSymmetry">
|
||||||
@@ -136,14 +160,12 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:padding="6dp"
|
|
||||||
android:text="@string/middle" />
|
android:text="@string/middle" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_header_middle"
|
android:id="@+id/tv_header_middle"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="6dp"
|
|
||||||
tools:text="@string/title" />
|
tools:text="@string/title" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -152,6 +174,7 @@
|
|||||||
android:id="@+id/ll_header_right"
|
android:id="@+id/ll_header_right"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingVertical="4dp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry">
|
tools:ignore="RtlHardcoded,RtlSymmetry">
|
||||||
@@ -160,14 +183,12 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:padding="6dp"
|
|
||||||
android:text="@string/right" />
|
android:text="@string/right" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_header_right"
|
android:id="@+id/tv_header_right"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="6dp"
|
|
||||||
tools:text="@string/title" />
|
tools:text="@string/title" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -175,13 +196,16 @@
|
|||||||
<io.legato.kazusa.ui.widget.text.AccentTextView
|
<io.legato.kazusa.ui.widget.text.AccentTextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingTop="8dp"
|
||||||
android:text="@string/footer"
|
android:text="@string/footer"
|
||||||
android:textSize="18sp" />
|
android:textSize="16sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/ll_footer_show"
|
android:id="@+id/ll_footer_show"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingVertical="4dp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry">
|
tools:ignore="RtlHardcoded,RtlSymmetry">
|
||||||
@@ -190,14 +214,12 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:padding="6dp"
|
|
||||||
android:text="@string/show_hide" />
|
android:text="@string/show_hide" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_footer_show"
|
android:id="@+id/tv_footer_show"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="6dp"
|
|
||||||
tools:text="@string/show_hide" />
|
tools:text="@string/show_hide" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -206,6 +228,7 @@
|
|||||||
android:id="@+id/ll_footer_left"
|
android:id="@+id/ll_footer_left"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingVertical="4dp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry">
|
tools:ignore="RtlHardcoded,RtlSymmetry">
|
||||||
@@ -214,14 +237,12 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:padding="6dp"
|
|
||||||
android:text="@string/left" />
|
android:text="@string/left" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_footer_left"
|
android:id="@+id/tv_footer_left"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="6dp"
|
|
||||||
tools:text="@string/title" />
|
tools:text="@string/title" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -230,6 +251,7 @@
|
|||||||
android:id="@+id/ll_footer_middle"
|
android:id="@+id/ll_footer_middle"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingVertical="4dp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry">
|
tools:ignore="RtlHardcoded,RtlSymmetry">
|
||||||
@@ -238,14 +260,12 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:padding="6dp"
|
|
||||||
android:text="@string/middle" />
|
android:text="@string/middle" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_footer_middle"
|
android:id="@+id/tv_footer_middle"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="6dp"
|
|
||||||
tools:text="@string/title" />
|
tools:text="@string/title" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -254,6 +274,7 @@
|
|||||||
android:id="@+id/ll_footer_right"
|
android:id="@+id/ll_footer_right"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingVertical="4dp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry">
|
tools:ignore="RtlHardcoded,RtlSymmetry">
|
||||||
@@ -262,28 +283,29 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:padding="6dp"
|
|
||||||
android:text="@string/right" />
|
android:text="@string/right" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_footer_right"
|
android:id="@+id/tv_footer_right"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="6dp"
|
|
||||||
tools:text="@string/title" />
|
tools:text="@string/title" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.text.AccentTextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingTop="8dp"
|
||||||
android:text="@string/header_footer"
|
android:text="@string/header_footer"
|
||||||
android:textSize="18sp" />
|
android:textSize="16sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/ll_tip_color"
|
android:id="@+id/ll_tip_color"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingVertical="4dp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry">
|
tools:ignore="RtlHardcoded,RtlSymmetry">
|
||||||
@@ -292,14 +314,12 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:padding="6dp"
|
|
||||||
android:text="@string/text_color" />
|
android:text="@string/text_color" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_tip_color"
|
android:id="@+id/tv_tip_color"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="6dp"
|
|
||||||
tools:text="@string/text_color" />
|
tools:text="@string/text_color" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -308,6 +328,7 @@
|
|||||||
android:id="@+id/ll_tip_divider_color"
|
android:id="@+id/ll_tip_divider_color"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingVertical="4dp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry">
|
tools:ignore="RtlHardcoded,RtlSymmetry">
|
||||||
@@ -316,14 +337,12 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:padding="6dp"
|
|
||||||
android:text="@string/tip_divider_color" />
|
android:text="@string/tip_divider_color" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_tip_divider_color"
|
android:id="@+id/tv_tip_divider_color"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="6dp"
|
|
||||||
tools:text="@string/tip_divider_color" />
|
tools:text="@string/tip_divider_color" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|||||||
@@ -12,12 +12,14 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:padding="4dp">
|
android:paddingTop="16dp"
|
||||||
|
android:paddingBottom="8dp">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_seek_title"
|
android:id="@+id/tv_seek_title"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="4dp"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:text="seek"
|
android:text="seek"
|
||||||
tools:ignore="HardcodedText" />
|
tools:ignore="HardcodedText" />
|
||||||
@@ -30,12 +32,14 @@
|
|||||||
<com.google.android.material.card.MaterialCardView
|
<com.google.android.material.card.MaterialCardView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:cardBackgroundColor="@android:color/transparent">
|
android:layout_marginEnd="4dp"
|
||||||
|
app:strokeWidth="0dp"
|
||||||
|
app:cardBackgroundColor="?attr/colorSurfaceVariant">
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_seek_value"
|
android:id="@+id/tv_seek_value"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingHorizontal="8dp"
|
android:paddingHorizontal="12dp"
|
||||||
android:paddingVertical="4dp"
|
android:paddingVertical="4dp"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:text="0" />
|
android:text="0" />
|
||||||
|
|||||||
@@ -0,0 +1,70 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<merge xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/layout_root"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:paddingVertical="8dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvSeekTitle"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:text="标题"
|
||||||
|
android:textSize="12sp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:textColor="?android:attr/textColorSecondary" />
|
||||||
|
|
||||||
|
<com.google.android.material.card.MaterialCardView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:strokeWidth="0dp"
|
||||||
|
app:cardCornerRadius="24dp"
|
||||||
|
app:cardBackgroundColor="?attr/colorSurfaceVariant">
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="116dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:gravity="center_vertical">
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/iv_seek_reduce"
|
||||||
|
android:layout_width="40dp"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
|
||||||
|
app:backgroundTint="?attr/colorSurfaceContainer"
|
||||||
|
android:contentDescription="@string/reduce"
|
||||||
|
app:icon="@drawable/ic_reduce"
|
||||||
|
app:iconGravity="textStart"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvSeekValue"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="16"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/iv_seek_plus"
|
||||||
|
android:layout_width="40dp"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
|
||||||
|
app:backgroundTint="?attr/colorSurfaceContainer"
|
||||||
|
android:contentDescription="@string/plus"
|
||||||
|
app:icon="@drawable/ic_add"
|
||||||
|
app:iconGravity="textStart"/>
|
||||||
|
</LinearLayout>
|
||||||
|
</com.google.android.material.card.MaterialCardView>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</merge>
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
|
||||||
android:id="@+id/cv_toast"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:cardCornerRadius="10dp"
|
|
||||||
app:cardElevation="2dp"
|
|
||||||
app:cardUseCompatPadding="true">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/tv_text"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:gravity="center_horizontal"
|
|
||||||
android:paddingHorizontal="16dp"
|
|
||||||
android:paddingTop="8dp"
|
|
||||||
android:paddingBottom="10dp"/>
|
|
||||||
|
|
||||||
</androidx.cardview.widget.CardView>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
@@ -74,9 +74,12 @@
|
|||||||
<attr name="speed" format="dimension" />
|
<attr name="speed" format="dimension" />
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
|
<attr name="title" format="string" />
|
||||||
|
<attr name="max" format="integer" />
|
||||||
|
|
||||||
<declare-styleable name="DetailSeekBar">
|
<declare-styleable name="DetailSeekBar">
|
||||||
<attr name="title" format="string" />
|
<attr name="title" />
|
||||||
<attr name="max" format="integer" />
|
<attr name="max" />
|
||||||
<attr name="isBottomBackground" />
|
<attr name="isBottomBackground" />
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
@@ -236,4 +239,10 @@
|
|||||||
</attr>
|
</attr>
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
|
<declare-styleable name="SimpleCounterView">
|
||||||
|
<attr name="title" />
|
||||||
|
<attr name="max" />
|
||||||
|
<attr name="min" format="integer" />
|
||||||
|
</declare-styleable>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
Reference in New Issue
Block a user