This commit is contained in:
kunfei
2023-04-01 12:13:34 +08:00
parent d81685ab86
commit b4837a8d46
11 changed files with 132 additions and 90 deletions
-1
View File
@@ -104,7 +104,6 @@ android {
} }
google { google {
dimension "mode" dimension "mode"
minSdk 26
applicationId "io.legado.play" applicationId "io.legado.play"
manifestPlaceholders.put("APP_CHANNEL_VALUE", "google") manifestPlaceholders.put("APP_CHANNEL_VALUE", "google")
} }
@@ -60,8 +60,9 @@ class GroupEditDialog() : BaseDialogFragment(R.layout.dialog_book_group_edit) {
bookGroup?.let { bookGroup?.let {
binding.btnDelete.visible(it.groupId > 0 || it.groupId == Long.MIN_VALUE) binding.btnDelete.visible(it.groupId > 0 || it.groupId == Long.MIN_VALUE)
binding.tieGroupName.setText(it.groupName) binding.tieGroupName.setText(it.groupName)
binding.spSort.setSelection(it.bookSort + 1)
binding.ivCover.load(it.cover) binding.ivCover.load(it.cover)
binding.spSort.setSelection(it.bookSort + 1)
binding.cbEnableRefresh.isChecked = it.enableRefresh
} ?: let { } ?: let {
binding.toolBar.title = getString(R.string.add_group) binding.toolBar.title = getString(R.string.add_group)
binding.btnDelete.gone() binding.btnDelete.gone()
@@ -79,15 +80,24 @@ class GroupEditDialog() : BaseDialogFragment(R.layout.dialog_book_group_edit) {
if (groupName.isNullOrEmpty()) { if (groupName.isNullOrEmpty()) {
toastOnUi("分组名称不能为空") toastOnUi("分组名称不能为空")
} else { } else {
val bookSort = binding.spSort.selectedItemPosition - 1
val coverPath = binding.ivCover.bitmapPath
val enableRefresh = binding.cbEnableRefresh.isChecked
bookGroup?.let { bookGroup?.let {
it.groupName = groupName it.groupName = groupName
it.cover = binding.ivCover.bitmapPath it.cover = coverPath
it.bookSort = binding.spSort.selectedItemPosition - 1 it.bookSort = bookSort
it.enableRefresh = enableRefresh
viewModel.upGroup(it) { viewModel.upGroup(it) {
dismiss() dismiss()
} }
} ?: let { } ?: let {
viewModel.addGroup(groupName, binding.ivCover.bitmapPath) { viewModel.addGroup(
groupName,
bookSort,
enableRefresh,
coverPath
) {
dismiss() dismiss()
} }
} }
@@ -15,13 +15,21 @@ class GroupViewModel(application: Application) : BaseViewModel(application) {
} }
} }
fun addGroup(groupName: String, cover: String?, finally: () -> Unit) { fun addGroup(
groupName: String,
bookSort: Int,
enableRefresh: Boolean,
cover: String?,
finally: () -> Unit
) {
execute { execute {
val groupId = appDb.bookGroupDao.getUnusedId() val groupId = appDb.bookGroupDao.getUnusedId()
val bookGroup = BookGroup( val bookGroup = BookGroup(
groupId = groupId, groupId = groupId,
groupName = groupName, groupName = groupName,
cover = cover, cover = cover,
bookSort = bookSort,
enableRefresh = enableRefresh,
order = appDb.bookGroupDao.maxOrder.plus(1) order = appDb.bookGroupDao.maxOrder.plus(1)
) )
appDb.bookGroupDao.getByID(groupId) ?: appDb.bookDao.removeGroup(groupId) appDb.bookGroupDao.getByID(groupId) ?: appDb.bookDao.removeGroup(groupId)
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/background_menu"> android:orientation="vertical">
<androidx.appcompat.widget.Toolbar <androidx.appcompat.widget.Toolbar
android:id="@+id/tool_bar" android:id="@+id/tool_bar"
@@ -15,99 +15,117 @@
android:theme="?attr/actionBarStyle" android:theme="?attr/actionBarStyle"
app:displayHomeAsUp="false" app:displayHomeAsUp="false"
app:fitStatusBar="false" app:fitStatusBar="false"
app:layout_constraintTop_toTopOf="parent"
app:popupTheme="@style/AppTheme.PopupOverlay" app:popupTheme="@style/AppTheme.PopupOverlay"
app:title="@string/group_edit" app:title="@string/group_edit"
app:titleTextAppearance="@style/ToolbarTitle" /> app:titleTextAppearance="@style/ToolbarTitle" />
<io.legado.app.ui.widget.image.CoverImageView <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/iv_cover" android:layout_width="match_parent"
android:layout_width="90dp"
android:layout_height="126dp"
android:layout_margin="6dp"
android:contentDescription="@string/img_cover"
android:scaleType="centerCrop"
android:src="@drawable/image_cover_default"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tool_bar"
tools:ignore="ImageContrastCheck" />
<io.legado.app.ui.widget.text.TextInputLayout
android:id="@+id/til_group_name"
android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="6dp" android:background="@color/background_menu">
android:hint="@string/group_name"
app:layout_constraintBottom_toTopOf="@+id/tv_sort"
app:layout_constraintLeft_toRightOf="@+id/iv_cover"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tool_bar">
<io.legado.app.lib.theme.view.ThemeEditText <io.legado.app.ui.widget.image.CoverImageView
android:id="@+id/tie_group_name" android:id="@+id/iv_cover"
android:layout_width="match_parent" android:layout_width="90dp"
android:layout_height="126dp"
android:layout_margin="6dp"
android:contentDescription="@string/img_cover"
android:scaleType="centerCrop"
android:src="@drawable/image_cover_default"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ImageContrastCheck" />
<io.legado.app.ui.widget.text.TextInputLayout
android:id="@+id/til_group_name"
android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:maxLines="2" android:layout_margin="6dp"
tools:ignore="TouchTargetSizeCheck,SpeakableTextPresentCheck" /> android:hint="@string/group_name"
</io.legado.app.ui.widget.text.TextInputLayout> app:layout_constraintBottom_toTopOf="@+id/tv_sort"
app:layout_constraintLeft_toRightOf="@+id/iv_cover"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
<io.legado.app.ui.widget.text.AccentTextView <io.legado.app.lib.theme.view.ThemeEditText
android:id="@+id/tv_sort" android:id="@+id/tie_group_name"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
tools:ignore="TouchTargetSizeCheck,SpeakableTextPresentCheck" />
</io.legado.app.ui.widget.text.TextInputLayout>
<io.legado.app.ui.widget.text.AccentTextView
android:id="@+id/tv_sort"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="3dp"
android:text="@string/sort"
android:textColor="@color/primaryText"
app:layout_constraintLeft_toLeftOf="@id/til_group_name"
app:layout_constraintTop_toBottomOf="@id/til_group_name" />
<androidx.appcompat.widget.AppCompatSpinner
android:id="@+id/sp_sort"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="6dp"
android:entries="@array/book_sort"
app:layout_constraintBottom_toBottomOf="@id/tv_sort"
app:layout_constraintLeft_toRightOf="@+id/tv_sort"
app:layout_constraintTop_toTopOf="@id/tv_sort"
app:theme="@style/Spinner"
tools:ignore="RtlHardcoded" />
<io.legado.app.lib.theme.view.ThemeCheckBox
android:id="@+id/cb_enable_refresh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/allow_drop_down_refresh"
android:checked="true"
app:layout_constraintTop_toBottomOf="@+id/tv_sort"
app:layout_constraintLeft_toLeftOf="@id/tv_sort" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/sort" android:orientation="horizontal"
android:textColor="@color/primaryText" android:gravity="center_vertical">
app:layout_constraintBottom_toTopOf="@id/btn_ok"
app:layout_constraintLeft_toLeftOf="@id/til_group_name"
app:layout_constraintTop_toBottomOf="@id/til_group_name" />
<androidx.appcompat.widget.AppCompatSpinner <io.legado.app.ui.widget.text.AccentTextView
android:id="@+id/sp_sort" android:id="@+id/btn_delete"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="6dp" android:layout_margin="12dp"
android:entries="@array/book_sort" android:padding="6dp"
app:layout_constraintBottom_toBottomOf="@id/tv_sort" android:text="@string/delete"
app:layout_constraintLeft_toRightOf="@+id/tv_sort" tools:ignore="RtlHardcoded" />
app:layout_constraintTop_toTopOf="@id/tv_sort"
app:theme="@style/Spinner"
tools:ignore="RtlHardcoded" />
<io.legado.app.ui.widget.text.AccentTextView <Space
android:id="@+id/btn_delete" android:layout_width="0dp"
android:layout_width="wrap_content" android:layout_height="1dp"
android:layout_height="wrap_content" android:layout_weight="1" />
android:layout_margin="6dp"
android:padding="6dp"
android:text="@string/delete"
app:layout_constraintBottom_toBottomOf="@id/btn_ok"
app:layout_constraintLeft_toRightOf="@+id/iv_cover"
app:layout_constraintTop_toTopOf="@+id/btn_ok"
tools:ignore="RtlHardcoded" />
<io.legado.app.ui.widget.text.AccentTextView <io.legado.app.ui.widget.text.AccentTextView
android:id="@+id/btn_ok" android:id="@+id/btn_cancel"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="6dp" android:layout_margin="12dp"
android:padding="6dp" android:padding="6dp"
android:text="@string/ok" android:text="@string/cancel" />
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_sort"
tools:ignore="RtlHardcoded" />
<io.legado.app.ui.widget.text.AccentTextView <io.legado.app.ui.widget.text.AccentTextView
android:id="@+id/btn_cancel" android:id="@+id/btn_ok"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="6dp" android:layout_margin="12dp"
android:padding="6dp" android:padding="6dp"
android:text="@string/cancel" android:text="@string/ok"
app:layout_constraintBottom_toBottomOf="@id/btn_ok" tools:ignore="RtlHardcoded" />
app:layout_constraintRight_toLeftOf="@+id/btn_ok"
app:layout_constraintTop_toTopOf="@+id/btn_ok" />
</androidx.constraintlayout.widget.ConstraintLayout> </LinearLayout>
</LinearLayout>
@@ -1090,4 +1090,5 @@
<string name="file_manage">文件管理</string> <string name="file_manage">文件管理</string>
<string name="file_manage_summary">管理私有文件夹的文件</string> <string name="file_manage_summary">管理私有文件夹的文件</string>
<string name="create_folder">创建文件夹</string> <string name="create_folder">创建文件夹</string>
<string name="allow_drop_down_refresh">允许下拉刷新</string>
</resources> </resources>
@@ -1093,4 +1093,5 @@
<string name="file_manage">文件管理</string> <string name="file_manage">文件管理</string>
<string name="file_manage_summary">管理私有文件夹的文件</string> <string name="file_manage_summary">管理私有文件夹的文件</string>
<string name="create_folder">创建文件夹</string> <string name="create_folder">创建文件夹</string>
<string name="allow_drop_down_refresh">允许下拉刷新</string>
</resources> </resources>
@@ -1093,4 +1093,5 @@
<string name="file_manage">文件管理</string> <string name="file_manage">文件管理</string>
<string name="file_manage_summary">管理私有文件夹的文件</string> <string name="file_manage_summary">管理私有文件夹的文件</string>
<string name="create_folder">创建文件夹</string> <string name="create_folder">创建文件夹</string>
<string name="allow_drop_down_refresh">允许下拉刷新</string>
</resources> </resources>
@@ -1090,4 +1090,5 @@
<string name="file_manage">文件管理</string> <string name="file_manage">文件管理</string>
<string name="file_manage_summary">管理私有文件夹的文件</string> <string name="file_manage_summary">管理私有文件夹的文件</string>
<string name="create_folder">创建文件夹</string> <string name="create_folder">创建文件夹</string>
<string name="allow_drop_down_refresh">允许下拉刷新</string>
</resources> </resources>
@@ -1092,4 +1092,5 @@
<string name="file_manage">文件管理</string> <string name="file_manage">文件管理</string>
<string name="file_manage_summary">管理私有文件夹的文件</string> <string name="file_manage_summary">管理私有文件夹的文件</string>
<string name="create_folder">创建文件夹</string> <string name="create_folder">创建文件夹</string>
<string name="allow_drop_down_refresh">允许下拉刷新</string>
</resources> </resources>
+1
View File
@@ -1092,4 +1092,5 @@
<string name="file_manage">文件管理</string> <string name="file_manage">文件管理</string>
<string name="file_manage_summary">管理私有文件夹的文件</string> <string name="file_manage_summary">管理私有文件夹的文件</string>
<string name="create_folder">创建文件夹</string> <string name="create_folder">创建文件夹</string>
<string name="allow_drop_down_refresh">允许下拉刷新</string>
</resources> </resources>
+1
View File
@@ -1093,4 +1093,5 @@
<string name="file_manage">文件管理</string> <string name="file_manage">文件管理</string>
<string name="file_manage_summary">管理私有文件夹的文件</string> <string name="file_manage_summary">管理私有文件夹的文件</string>
<string name="create_folder">创建文件夹</string> <string name="create_folder">创建文件夹</string>
<string name="allow_drop_down_refresh">允许下拉刷新</string>
</resources> </resources>