From 5372fff318f6a172b6aa3d7b6147d9be90ac86e2 Mon Sep 17 00:00:00 2001 From: GKF Date: Mon, 10 Jun 2019 10:08:23 +0800 Subject: [PATCH 01/26] up --- app/src/main/res/layout/item_book_group.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/item_book_group.xml b/app/src/main/res/layout/item_book_group.xml index dea00be8b..de855941c 100644 --- a/app/src/main/res/layout/item_book_group.xml +++ b/app/src/main/res/layout/item_book_group.xml @@ -1,5 +1,6 @@ \ No newline at end of file + android:padding="5dp" /> \ No newline at end of file From dc4a9df268d7f8d0c818fda74ecfe7e9a75699e5 Mon Sep 17 00:00:00 2001 From: GKF Date: Mon, 10 Jun 2019 10:52:15 +0800 Subject: [PATCH 02/26] up --- .../app/ui/main/bookshelf/BookGroupAdapter.kt | 25 ++++++++++++++++++- app/src/main/res/layout/item_book_group.xml | 1 + 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookGroupAdapter.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookGroupAdapter.kt index 077a610fc..df2ed8f49 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookGroupAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookGroupAdapter.kt @@ -8,6 +8,7 @@ import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import io.legado.app.R import io.legado.app.data.entities.BookGroup +import kotlinx.android.synthetic.main.item_book_group.view.* class BookGroupAdapter : PagedListAdapter(DIFF_CALLBACK) { @@ -24,15 +25,37 @@ class BookGroupAdapter : PagedListAdapter Date: Mon, 10 Jun 2019 11:15:49 +0800 Subject: [PATCH 03/26] up --- .../app/help/AdapterDataObserverProxy.kt | 30 +++++++++++++++++++ .../app/ui/main/bookshelf/BookGroupAdapter.kt | 20 +++++++++---- 2 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/io/legado/app/help/AdapterDataObserverProxy.kt diff --git a/app/src/main/java/io/legado/app/help/AdapterDataObserverProxy.kt b/app/src/main/java/io/legado/app/help/AdapterDataObserverProxy.kt new file mode 100644 index 000000000..9ef120e15 --- /dev/null +++ b/app/src/main/java/io/legado/app/help/AdapterDataObserverProxy.kt @@ -0,0 +1,30 @@ +package io.legado.app.help + +import androidx.recyclerview.widget.RecyclerView + +internal class AdapterDataObserverProxy(var adapterDataObserver: RecyclerView.AdapterDataObserver, var headerCount: Int) : RecyclerView.AdapterDataObserver() { + override fun onChanged() { + adapterDataObserver.onChanged() + } + + override fun onItemRangeChanged(positionStart: Int, itemCount: Int) { + adapterDataObserver.onItemRangeChanged(positionStart + headerCount, itemCount) + } + + override fun onItemRangeChanged(positionStart: Int, itemCount: Int, payload: Any?) { + adapterDataObserver.onItemRangeChanged(positionStart + headerCount, itemCount, payload) + } + + // 当第n个数据被获取,更新第n+1个position + override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { + adapterDataObserver.onItemRangeInserted(positionStart + headerCount, itemCount) + } + + override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) { + adapterDataObserver.onItemRangeRemoved(positionStart + headerCount, itemCount) + } + + override fun onItemRangeMoved(fromPosition: Int, toPosition: Int, itemCount: Int) { + super.onItemRangeMoved(fromPosition + headerCount, toPosition + headerCount, itemCount) + } +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookGroupAdapter.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookGroupAdapter.kt index df2ed8f49..f0416bd67 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookGroupAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookGroupAdapter.kt @@ -8,6 +8,7 @@ import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import io.legado.app.R import io.legado.app.data.entities.BookGroup +import io.legado.app.help.AdapterDataObserverProxy import kotlinx.android.synthetic.main.item_book_group.view.* class BookGroupAdapter : PagedListAdapter(DIFF_CALLBACK) { @@ -26,12 +27,18 @@ class BookGroupAdapter : PagedListAdapter Date: Mon, 10 Jun 2019 11:32:00 +0800 Subject: [PATCH 04/26] up --- .../io/legado/app/ui/main/bookshelf/BookshelfFragment.kt | 3 +++ app/src/main/res/layout/fragment_bookshelf.xml | 7 +++++++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 11 insertions(+) diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt index b3aa3f2be..8d83af662 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt @@ -13,8 +13,10 @@ import io.legado.app.R import io.legado.app.base.BaseFragment import io.legado.app.data.entities.Book import io.legado.app.data.entities.BookGroup +import io.legado.app.lib.theme.ThemeStore import kotlinx.android.synthetic.main.fragment_bookshelf.* import kotlinx.android.synthetic.main.view_title_bar.* +import org.jetbrains.anko.textColor class BookshelfFragment : BaseFragment(R.layout.fragment_bookshelf) { @@ -35,6 +37,7 @@ class BookshelfFragment : BaseFragment(R.layout.fragment_bookshelf) { } private fun initRecyclerView() { + tv_recent_reading.textColor = ThemeStore.accentColor(tv_recent_reading.context) rv_book_group.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) bookGroupAdapter = BookGroupAdapter() rv_book_group.adapter = bookGroupAdapter diff --git a/app/src/main/res/layout/fragment_bookshelf.xml b/app/src/main/res/layout/fragment_bookshelf.xml index b7be3a24d..4ded61ede 100644 --- a/app/src/main/res/layout/fragment_bookshelf.xml +++ b/app/src/main/res/layout/fragment_bookshelf.xml @@ -17,6 +17,13 @@ android:layout_width="match_parent" android:layout_height="wrap_content" /> + + 启用 书架 + 最近阅读 最后阅读 让阅读成为一种习惯。 更新日志 From 304c0991519ce84a9c10b8af40dcaa05aaa0b318 Mon Sep 17 00:00:00 2001 From: GKF Date: Mon, 10 Jun 2019 12:31:05 +0800 Subject: [PATCH 05/26] up --- .../app/ui/main/bookshelf/BookshelfAdapter.kt | 38 ++++++++++++++++--- .../ui/main/bookshelf/BookshelfFragment.kt | 2 + .../res/layout/item_bookshelf_list_add.xml | 7 ++++ 3 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 app/src/main/res/layout/item_bookshelf_list_add.xml diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfAdapter.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfAdapter.kt index e2cf5728f..eae2f0aec 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfAdapter.kt @@ -16,7 +16,7 @@ import kotlinx.android.synthetic.main.item_bookshelf_list.view.* import kotlinx.android.synthetic.main.item_relace_rule.view.tv_name import java.io.File -class BookshelfAdapter : PagedListAdapter(DIFF_CALLBACK) { +class BookshelfAdapter : PagedListAdapter(DIFF_CALLBACK) { companion object { @JvmField @@ -33,13 +33,40 @@ class BookshelfAdapter : PagedListAdapter(D var callBack: CallBack? = null - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { + override fun getItemViewType(position: Int): Int { + if (position == itemCount - 1) { + return 1 + } + return super.getItemViewType(position) + } + + override fun getItemCount(): Int { + return super.getItemCount() + 1 + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + if (viewType == 1) { + return AddViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_bookshelf_list_add, parent, false)) + } return MyViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_bookshelf_list, parent, false)) } - override fun onBindViewHolder(holder: MyViewHolder, position: Int) { - currentList?.get(position)?.let { - holder.bind(it, callBack) + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when (holder) { + is MyViewHolder -> { + currentList?.get(position)?.let { + holder.bind(it, callBack) + } + } + is AddViewHolder -> holder.bind(callBack) + } + + } + + class AddViewHolder(view: View) : RecyclerView.ViewHolder(view) { + + fun bind(callBack: CallBack?) = with(itemView) { + setOnClickListener { callBack?.search() } } } @@ -76,5 +103,6 @@ class BookshelfAdapter : PagedListAdapter(D interface CallBack { fun open(book: Book) + fun search() } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt index 8d83af662..49a74f6c0 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt @@ -7,6 +7,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.Observer import androidx.paging.LivePagedListBuilder import androidx.paging.PagedList +import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.App import io.legado.app.R @@ -42,6 +43,7 @@ class BookshelfFragment : BaseFragment(R.layout.fragment_bookshelf) { bookGroupAdapter = BookGroupAdapter() rv_book_group.adapter = bookGroupAdapter rv_bookshelf.layoutManager = LinearLayoutManager(context) + rv_bookshelf.addItemDecoration(DividerItemDecoration(rv_bookshelf.context, LinearLayoutManager.VERTICAL)) bookshelfAdapter = BookshelfAdapter() rv_bookshelf.adapter = bookshelfAdapter } diff --git a/app/src/main/res/layout/item_bookshelf_list_add.xml b/app/src/main/res/layout/item_bookshelf_list_add.xml new file mode 100644 index 000000000..50282f4a8 --- /dev/null +++ b/app/src/main/res/layout/item_bookshelf_list_add.xml @@ -0,0 +1,7 @@ + + \ No newline at end of file From d066cda2c1e78db3cdd7a2e64f74258eee3c2868 Mon Sep 17 00:00:00 2001 From: GKF Date: Mon, 10 Jun 2019 16:23:46 +0800 Subject: [PATCH 06/26] up --- app/build.gradle | 4 ++ .../io/legado/app/data/dao/BookGroupDao.kt | 5 +++ .../app/ui/config/ThemeConfigFragment.kt | 6 +-- .../ui/main/bookshelf/BookshelfFragment.kt | 28 +++++++++++++ .../ui/main/booksource/BookSourceFragment.kt | 2 +- .../legado/app/utils/AlertDialogExtensions.kt | 5 ++- .../io/legado/app/utils/ViewExtensions.kt | 13 +++++++ app/src/main/res/layout/dialog_input.xml | 39 +++++++++++++++++++ app/src/main/res/values/styles.xml | 8 +--- 9 files changed, 97 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/io/legado/app/utils/ViewExtensions.kt create mode 100644 app/src/main/res/layout/dialog_input.xml diff --git a/app/build.gradle b/app/build.gradle index a403631ad..9268bb0fe 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -129,4 +129,8 @@ dependencies { //颜色选择 implementation 'com.jaredrummler:colorpicker:1.1.0' + //对话框 + implementation 'com.afollestad.material-dialogs:core:3.0.0-rc3' + implementation 'com.afollestad.material-dialogs:input:3.0.0-rc3' + implementation 'com.afollestad.material-dialogs:files:3.0.0-rc3' } diff --git a/app/src/main/java/io/legado/app/data/dao/BookGroupDao.kt b/app/src/main/java/io/legado/app/data/dao/BookGroupDao.kt index b348cfeaa..732ebc06c 100644 --- a/app/src/main/java/io/legado/app/data/dao/BookGroupDao.kt +++ b/app/src/main/java/io/legado/app/data/dao/BookGroupDao.kt @@ -2,6 +2,7 @@ package io.legado.app.data.dao import androidx.paging.DataSource import androidx.room.Dao +import androidx.room.Insert import androidx.room.Query import io.legado.app.data.entities.BookGroup @@ -11,5 +12,9 @@ interface BookGroupDao { @Query("SELECT * FROM book_groups ORDER BY `order`") fun observeAll(): DataSource.Factory + @get:Query("SELECT MAX(groupId) FROM book_groups") + val maxId: Int + @Insert + fun insert(bookGroup: BookGroup) } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt b/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt index 82c198fc2..6f4030cf0 100644 --- a/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt +++ b/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt @@ -54,7 +54,7 @@ class ThemeConfigFragment : PreferenceFragmentCompat(), SharedPreferences.OnShar upTheme(false) } .setNegativeButton(R.string.cancel) { _, _ -> upTheme(false) } - .show().upTint + .show().upTint() } } else { upTheme(false) @@ -74,7 +74,7 @@ class ThemeConfigFragment : PreferenceFragmentCompat(), SharedPreferences.OnShar upTheme(true) } .setNegativeButton(R.string.cancel) { _, _ -> upTheme(true) } - .show().upTint + .show().upTint() } } else { upTheme(true) @@ -105,7 +105,7 @@ class ThemeConfigFragment : PreferenceFragmentCompat(), SharedPreferences.OnShar Handler().postDelayed({ activity?.recreate() }, 100) } .setNegativeButton(R.string.cancel, null) - .show().upTint + .show().upTint() } } } diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt index 49a74f6c0..8392c9686 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt @@ -9,6 +9,8 @@ import androidx.paging.LivePagedListBuilder import androidx.paging.PagedList import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager +import com.afollestad.materialdialogs.MaterialDialog +import com.afollestad.materialdialogs.input.input import io.legado.app.App import io.legado.app.R import io.legado.app.base.BaseFragment @@ -17,6 +19,8 @@ import io.legado.app.data.entities.BookGroup import io.legado.app.lib.theme.ThemeStore import kotlinx.android.synthetic.main.fragment_bookshelf.* import kotlinx.android.synthetic.main.view_title_bar.* +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch import org.jetbrains.anko.textColor class BookshelfFragment : BaseFragment(R.layout.fragment_bookshelf) { @@ -42,6 +46,30 @@ class BookshelfFragment : BaseFragment(R.layout.fragment_bookshelf) { rv_book_group.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) bookGroupAdapter = BookGroupAdapter() rv_book_group.adapter = bookGroupAdapter + bookGroupAdapter.callBack = object : BookGroupAdapter.CallBack { + override fun open(groupId: Int) { + when (groupId) { + -10 -> context?.let { + MaterialDialog(it).show { + title(text = "新建分组") + input(hint = "分组名称") { _, charSequence -> + run { + GlobalScope.launch { + App.db.bookGroupDao().insert( + BookGroup( + App.db.bookGroupDao().maxId + 1, + charSequence.toString() + ) + ) + } + } + } + positiveButton(R.string.ok) + } + } + } + } + } rv_bookshelf.layoutManager = LinearLayoutManager(context) rv_bookshelf.addItemDecoration(DividerItemDecoration(rv_bookshelf.context, LinearLayoutManager.VERTICAL)) bookshelfAdapter = BookshelfAdapter() diff --git a/app/src/main/java/io/legado/app/ui/main/booksource/BookSourceFragment.kt b/app/src/main/java/io/legado/app/ui/main/booksource/BookSourceFragment.kt index 0816a2f4a..3d131fbd1 100644 --- a/app/src/main/java/io/legado/app/ui/main/booksource/BookSourceFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/booksource/BookSourceFragment.kt @@ -101,6 +101,6 @@ class BookSourceFragment : BaseFragment(R.layout.fragment_book_source), BookSour } override fun edit(bookSource: BookSource) { - context?.let { it.startActivity(Pair("data", bookSource.origin)) } + context?.startActivity(Pair("data", bookSource.origin)) } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/utils/AlertDialogExtensions.kt b/app/src/main/java/io/legado/app/utils/AlertDialogExtensions.kt index 300309ca7..e956f1368 100644 --- a/app/src/main/java/io/legado/app/utils/AlertDialogExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/AlertDialogExtensions.kt @@ -3,5 +3,6 @@ package io.legado.app.utils import androidx.appcompat.app.AlertDialog import io.legado.app.lib.theme.ATH -val AlertDialog.upTint: AlertDialog - get() = ATH.setAlertDialogTint(this) \ No newline at end of file +fun AlertDialog.upTint(): AlertDialog { + return ATH.setAlertDialogTint(this) +} diff --git a/app/src/main/java/io/legado/app/utils/ViewExtensions.kt b/app/src/main/java/io/legado/app/utils/ViewExtensions.kt new file mode 100644 index 000000000..ac26c4355 --- /dev/null +++ b/app/src/main/java/io/legado/app/utils/ViewExtensions.kt @@ -0,0 +1,13 @@ +package io.legado.app.utils + +import android.content.Context +import android.view.View +import android.view.inputmethod.InputMethodManager +import io.legado.app.App + +fun View.hidehideSoftInput() = run { + val imm = App.INSTANCE.getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager + imm?.let { + imm.hideSoftInputFromWindow(this.windowToken, 0) + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_input.xml b/app/src/main/res/layout/dialog_input.xml new file mode 100644 index 000000000..e867c1792 --- /dev/null +++ b/app/src/main/res/layout/dialog_input.xml @@ -0,0 +1,39 @@ + + + + + + + + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 3b8558198..1d6fd88d1 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -48,13 +48,7 @@ @color/md_grey_900 - +