fix: 书源解析获取内容

pull/95/head
kunfei 5 years ago
parent 3ff98e534b
commit 67f882f2bc
  1. 66
      app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt
  2. 101
      app/src/main/java/io/legado/app/ui/widget/SelectActionBar.kt
  3. 3
      app/src/main/java/io/legado/app/utils/ContextExtensions.kt
  4. 55
      app/src/main/res/layout/activity_book_source.xml
  5. 50
      app/src/main/res/layout/view_select_action_bar.xml

@ -7,7 +7,7 @@ import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.SubMenu import android.view.SubMenu
import android.widget.PopupMenu import androidx.appcompat.widget.PopupMenu
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
@ -33,11 +33,11 @@ import io.legado.app.service.help.CheckSource
import io.legado.app.ui.book.source.edit.BookSourceEditActivity import io.legado.app.ui.book.source.edit.BookSourceEditActivity
import io.legado.app.ui.filechooser.FileChooserDialog import io.legado.app.ui.filechooser.FileChooserDialog
import io.legado.app.ui.qrcode.QrCodeActivity import io.legado.app.ui.qrcode.QrCodeActivity
import io.legado.app.ui.widget.SelectActionBar
import io.legado.app.utils.* import io.legado.app.utils.*
import kotlinx.android.synthetic.main.activity_book_source.* import kotlinx.android.synthetic.main.activity_book_source.*
import kotlinx.android.synthetic.main.dialog_edit_text.view.* import kotlinx.android.synthetic.main.dialog_edit_text.view.*
import kotlinx.android.synthetic.main.view_search.* import kotlinx.android.synthetic.main.view_search.*
import org.jetbrains.anko.sdk27.listeners.onClick
import org.jetbrains.anko.startActivity import org.jetbrains.anko.startActivity
import org.jetbrains.anko.startActivityForResult import org.jetbrains.anko.startActivityForResult
import org.jetbrains.anko.toast import org.jetbrains.anko.toast
@ -57,7 +57,6 @@ class BookSourceActivity : VMBaseActivity<BookSourceViewModel>(R.layout.activity
private var bookSourceLiveDate: LiveData<List<BookSource>>? = null private var bookSourceLiveDate: LiveData<List<BookSource>>? = null
private var groups = linkedSetOf<String>() private var groups = linkedSetOf<String>()
private var groupMenu: SubMenu? = null private var groupMenu: SubMenu? = null
private lateinit var selMenu: PopupMenu
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
initUriScheme() initUriScheme()
@ -65,7 +64,7 @@ class BookSourceActivity : VMBaseActivity<BookSourceViewModel>(R.layout.activity
initSearchView() initSearchView()
initLiveDataBookSource() initLiveDataBookSource()
initLiveDataGroup() initLiveDataGroup()
initViewEvent() initSelectActionBar()
} }
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean { override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {
@ -156,23 +155,28 @@ class BookSourceActivity : VMBaseActivity<BookSourceViewModel>(R.layout.activity
}) })
} }
private fun initViewEvent() { private fun initSelectActionBar() {
selMenu = PopupMenu(this, iv_menu_more) select_action_bar.setMainActionText(R.string.delete)
selMenu.inflate(R.menu.book_source_sel) select_action_bar.inflateMenu(R.menu.book_source_sel)
selMenu.setOnMenuItemClickListener(this) select_action_bar.setOnMenuItemClickListener(this)
cb_selected_all.onClick { select_action_bar.setCallBack(object : SelectActionBar.CallBack {
if (adapter.getSelection().size == adapter.getActualItemCount()) { override fun selectAll(selectAll: Boolean) {
adapter.revertSelection() if (selectAll) {
} else {
adapter.selectAll() adapter.selectAll()
} else {
adapter.revertSelection()
} }
} }
btn_revert_selection.onClick {
override fun revertSelection() {
adapter.revertSelection() adapter.revertSelection()
} }
iv_menu_more.onClick {
selMenu.show() override fun onClickMainAction() {
super.onClickMainAction()
} }
})
} }
override fun onMenuItemClick(item: MenuItem?): Boolean { override fun onMenuItemClick(item: MenuItem?): Boolean {
@ -259,37 +263,7 @@ class BookSourceActivity : VMBaseActivity<BookSourceViewModel>(R.layout.activity
} }
override fun upCountView() { override fun upCountView() {
val selectCount = adapter.getSelection().size select_action_bar.upCountView(adapter.getSelection().size, adapter.getActualItemCount())
if (selectCount == 0) {
cb_selected_all.isChecked = false
} else {
cb_selected_all.isChecked = selectCount >= adapter.getActualItemCount()
}
//重置全选的文字
if (cb_selected_all.isChecked) {
cb_selected_all.text = getString(
R.string.select_cancel_count,
selectCount,
adapter.getActualItemCount()
)
} else {
cb_selected_all.text = getString(
R.string.select_all_count,
selectCount,
adapter.getActualItemCount()
)
}
setMenuClickable(selectCount > 0)
}
private fun setMenuClickable(isClickable: Boolean) {
//设置是否可删除
btn_delete.isEnabled = isClickable
btn_delete.isClickable = isClickable
//设置是否可添加书籍
btn_revert_selection.isEnabled = isClickable
btn_revert_selection.isClickable = isClickable
} }
override fun onFilePicked(requestCode: Int, currentPath: String) { override fun onFilePicked(requestCode: Int, currentPath: String) {

@ -0,0 +1,101 @@
package io.legado.app.ui.widget
import android.content.Context
import android.util.AttributeSet
import android.view.Gravity
import android.view.Menu
import android.view.View
import androidx.annotation.MenuRes
import androidx.annotation.StringRes
import androidx.appcompat.widget.LinearLayoutCompat
import androidx.appcompat.widget.PopupMenu
import io.legado.app.R
import io.legado.app.utils.dp
import io.legado.app.utils.visible
import kotlinx.android.synthetic.main.view_select_action_bar.view.*
import org.jetbrains.anko.sdk27.listeners.onClick
class SelectActionBar(context: Context, attrs: AttributeSet?) : LinearLayoutCompat(context, attrs) {
private var callBack: CallBack? = null
private var selMenu: PopupMenu? = null
init {
setBackgroundResource(R.color.background_menu)
setPadding(16.dp, 6.dp, 16.dp, 6.dp)
gravity = Gravity.CENTER_VERTICAL
View.inflate(context, R.layout.view_select_action_bar, this)
cb_selected_all.setOnCheckedChangeListener { buttonView, isChecked ->
if (buttonView.isPressed) {
callBack?.selectAll(isChecked)
}
}
btn_revert_selection.onClick { callBack?.revertSelection() }
btn_select_action_main.onClick { callBack?.onClickMainAction() }
iv_menu_more.onClick { selMenu?.show() }
}
fun setMainActionText(text: String) {
btn_select_action_main.text = text
btn_select_action_main.visible()
}
fun setMainActionText(@StringRes id: Int) {
btn_select_action_main.setText(id)
btn_select_action_main.visible()
}
fun inflateMenu(@MenuRes resId: Int): Menu? {
selMenu = PopupMenu(context, iv_menu_more)
selMenu?.inflate(resId)
iv_menu_more.visible()
return selMenu?.menu
}
fun setCallBack(callBack: CallBack) {
this.callBack = callBack
}
fun setOnMenuItemClickListener(listener: PopupMenu.OnMenuItemClickListener) {
selMenu?.setOnMenuItemClickListener(listener)
}
fun upCountView(selectCount: Int, allCount: Int) {
if (selectCount == 0) {
cb_selected_all.isChecked = false
} else {
cb_selected_all.isChecked = selectCount >= allCount
}
//重置全选的文字
if (cb_selected_all.isChecked) {
cb_selected_all.text = context.getString(
R.string.select_cancel_count,
selectCount,
allCount
)
} else {
cb_selected_all.text = context.getString(
R.string.select_all_count,
selectCount,
allCount
)
}
setMenuClickable(selectCount > 0)
}
private fun setMenuClickable(isClickable: Boolean) {
btn_revert_selection.isEnabled = isClickable
btn_revert_selection.isClickable = isClickable
btn_select_action_main.isEnabled = isClickable
btn_select_action_main.isClickable = isClickable
}
interface CallBack {
fun selectAll(selectAll: Boolean)
fun revertSelection()
fun onClickMainAction() {}
}
}

@ -65,6 +65,9 @@ fun Context.getCompatDrawable(@DrawableRes id: Int): Drawable? = ContextCompat.g
fun Context.getCompatColorStateList(@ColorRes id: Int): ColorStateList? = fun Context.getCompatColorStateList(@ColorRes id: Int): ColorStateList? =
ContextCompat.getColorStateList(this, id) ContextCompat.getColorStateList(this, id)
/**
* 系统息屏时间
*/
fun Context.getScreenOffTime(): Int { fun Context.getScreenOffTime(): Int {
var screenOffTime = 0 var screenOffTime = 0
try { try {

@ -3,7 +3,6 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"> android:orientation="vertical">
<io.legado.app.ui.widget.TitleBar <io.legado.app.ui.widget.TitleBar
@ -27,57 +26,9 @@
</FrameLayout> </FrameLayout>
<!--文件点击按钮--> <io.legado.app.ui.widget.SelectActionBar
<LinearLayout android:id="@+id/select_action_bar"
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:gravity="center_vertical"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:elevation="2dp">
<io.legado.app.lib.theme.view.ATECheckBox
android:id="@+id/cb_selected_all"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="5dp"
android:text="@string/select_all_count"
android:textColor="@color/tv_text_default" />
<io.legado.app.lib.theme.view.ATEAccentStrokeTextView
android:id="@+id/btn_revert_selection"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:padding="5dp"
android:gravity="center"
android:minWidth="80dp"
android:text="@string/revert_selection" />
<io.legado.app.lib.theme.view.ATEAccentStrokeTextView
android:id="@+id/btn_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:padding="5dp"
android:minWidth="80dp"
android:gravity="center"
android:text="@string/delete" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_menu_more"
android:layout_width="36dp"
android:layout_height="36dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="6dp"
android:src="@drawable/ic_more_vert"
android:tint="@color/tv_text_default"
tools:ignore="RtlHardcoded" />
</LinearLayout>
</LinearLayout> </LinearLayout>

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="2dp">
<io.legado.app.lib.theme.view.ATECheckBox
android:id="@+id/cb_selected_all"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="5dp"
android:text="@string/select_all_count"
android:textColor="@color/tv_text_default" />
<io.legado.app.lib.theme.view.ATEAccentStrokeTextView
android:id="@+id/btn_revert_selection"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:padding="5dp"
android:gravity="center"
android:minWidth="80dp"
android:text="@string/revert_selection" />
<io.legado.app.lib.theme.view.ATEAccentStrokeTextView
android:id="@+id/btn_select_action_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:padding="5dp"
android:minWidth="80dp"
android:gravity="center"
android:visibility="gone"
android:text="@string/app_name" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_menu_more"
android:layout_width="36dp"
android:layout_height="36dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="6dp"
android:src="@drawable/ic_more_vert"
android:tint="@color/tv_text_default"
android:visibility="gone"
tools:ignore="RtlHardcoded" />
</merge>
Loading…
Cancel
Save