Merge remote-tracking branch 'origin/master'

# Conflicts:
#	app/src/main/java/io/legado/app/ui/sourcedebug/SourceDebugModel.kt
pull/32/head
kunfei 5 years ago
commit f05cf0274d
  1. 6
      app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt
  2. 18
      app/src/main/java/io/legado/app/ui/sourcedebug/SourceDebugActivity.kt
  3. 11
      app/src/main/java/io/legado/app/ui/sourcedebug/SourceDebugModel.kt
  4. 77
      app/src/main/java/io/legado/app/ui/widget/PageView.kt
  5. 21
      app/src/main/java/io/legado/app/utils/FragmentExtensions.kt
  6. 2
      app/src/main/java/io/legado/app/utils/ViewExtensions.kt
  7. 16
      app/src/main/res/layout/activity_read.xml

@ -6,9 +6,9 @@ import android.view.MenuItem
import android.view.View import android.view.View
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseFragment import io.legado.app.base.BaseFragment
import io.legado.app.ui.search.SearchActivity import io.legado.app.ui.read.ReadActivity
import io.legado.app.utils.startActivity
import kotlinx.android.synthetic.main.view_title_bar.* import kotlinx.android.synthetic.main.view_title_bar.*
import org.jetbrains.anko.startActivity
class MyFragment : BaseFragment(R.layout.fragment_my_config) { class MyFragment : BaseFragment(R.layout.fragment_my_config) {
@ -26,7 +26,7 @@ class MyFragment : BaseFragment(R.layout.fragment_my_config) {
override fun onCompatOptionsItemSelected(item: MenuItem) { override fun onCompatOptionsItemSelected(item: MenuItem) {
when (item.itemId) { when (item.itemId) {
R.id.action_settings -> requireContext().startActivity<SearchActivity>() R.id.action_settings -> startActivity<ReadActivity>()
} }
} }
} }

@ -9,14 +9,11 @@ import androidx.appcompat.widget.SearchView
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.VMBaseActivity import io.legado.app.base.VMBaseActivity
import io.legado.app.constant.Bus
import io.legado.app.help.EventMessage
import io.legado.app.lib.theme.ATH import io.legado.app.lib.theme.ATH
import io.legado.app.lib.theme.accentColor import io.legado.app.lib.theme.accentColor
import io.legado.app.ui.qrcode.QrCodeActivity import io.legado.app.ui.qrcode.QrCodeActivity
import io.legado.app.utils.getViewModel import io.legado.app.utils.getViewModel
import io.legado.app.utils.hideSoftInput import io.legado.app.utils.hideSoftInput
import io.legado.app.utils.observeEvent
import kotlinx.android.synthetic.main.activity_source_debug.* import kotlinx.android.synthetic.main.activity_source_debug.*
import kotlinx.android.synthetic.main.view_title_bar.* import kotlinx.android.synthetic.main.view_title_bar.*
import org.jetbrains.anko.startActivityForResult import org.jetbrains.anko.startActivityForResult
@ -34,6 +31,12 @@ class SourceDebugActivity : VMBaseActivity<SourceDebugModel>(R.layout.activity_s
viewModel.init(intent.getStringExtra("key")) viewModel.init(intent.getStringExtra("key"))
initRecyclerView() initRecyclerView()
initSearchView() initSearchView()
viewModel.observe{state, msg->
adapter.addItem(msg)
if (state == -1 || state == 1000) {
rotate_loading.hide()
}
}
} }
private fun initRecyclerView() { private fun initRecyclerView() {
@ -98,13 +101,4 @@ class SourceDebugActivity : VMBaseActivity<SourceDebugModel>(R.layout.activity_s
} }
} }
} }
override fun observeLiveBus() {
observeEvent<EventMessage>(Bus.SOURCE_DEBUG_LOG) {
adapter.addItem(it.obj as String)
if (it.what == -1 || it.what == 1000) {
rotate_loading.hide()
}
}
}
} }

@ -8,12 +8,13 @@ import io.legado.app.help.EventMessage
import io.legado.app.model.WebBook import io.legado.app.model.WebBook
import io.legado.app.model.webbook.SourceDebug import io.legado.app.model.webbook.SourceDebug
import io.legado.app.utils.postEvent import io.legado.app.utils.postEvent
import kotlinx.coroutines.launch
class SourceDebugModel(application: Application) : BaseViewModel(application), SourceDebug.Callback { class SourceDebugModel(application: Application) : BaseViewModel(application), SourceDebug.Callback {
private var webBook: WebBook? = null private var webBook: WebBook? = null
private var callback: ((Int, String)-> Unit)? = null
fun init(sourceUrl: String?) { fun init(sourceUrl: String?) {
sourceUrl?.let { sourceUrl?.let {
//优先使用这个,不会抛出异常 //优先使用这个,不会抛出异常
@ -24,6 +25,10 @@ class SourceDebugModel(application: Application) : BaseViewModel(application), S
} }
} }
fun observe(callback: (Int, String)-> Unit){
this.callback = callback
}
fun startDebug(key: String, start: (() -> Unit)? = null, error: (() -> Unit)? = null) { fun startDebug(key: String, start: (() -> Unit)? = null, error: (() -> Unit)? = null) {
webBook?.let { webBook?.let {
start?.invoke() start?.invoke()
@ -32,9 +37,7 @@ class SourceDebugModel(application: Application) : BaseViewModel(application), S
} }
override fun printLog(state: Int, msg: String) { override fun printLog(state: Int, msg: String) {
launch { callback?.invoke(state, msg)
postEvent(Bus.SOURCE_DEBUG_LOG, EventMessage.obtain(state, msg))
}
} }
override fun onCleared() { override fun onCleared() {

@ -0,0 +1,77 @@
package io.legado.app.ui.widget
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Rect
import android.graphics.drawable.GradientDrawable
import android.util.AttributeSet
import android.util.Log
import android.view.MotionEvent
import androidx.appcompat.widget.AppCompatTextView
import io.legado.app.utils.screenshot
import kotlin.math.abs
class PageView(context: Context, attrs: AttributeSet) : AppCompatTextView(context, attrs) {
private var bitmap: Bitmap? = null
private var downX: Float = 0.toFloat()
private var offset: Float = 0.toFloat()
private val srcRect: Rect = Rect()
private val destRect: Rect = Rect()
private val shadowDrawable: GradientDrawable
init {
val shadowColors = intArrayOf(0x66111111, 0x00000000)
shadowDrawable = GradientDrawable(
GradientDrawable.Orientation.LEFT_RIGHT, shadowColors
)
shadowDrawable.gradientType = GradientDrawable.LINEAR_GRADIENT
}
override fun onDraw(canvas: Canvas?) {
canvas?.save()
super.onDraw(canvas)
canvas?.restore()
bitmap?.let {
srcRect.set(0, 0, width, height)
destRect.set(-width + offset.toInt(), 0, offset.toInt(), height)
canvas?.drawBitmap(it, srcRect, destRect, null)
addShadow(offset.toInt(), canvas)
}
}
//添加阴影
private fun addShadow(left: Int, canvas: Canvas?) {
canvas?.let {
shadowDrawable.setBounds(left, 0, left + 30, height)
shadowDrawable.draw(it)
}
}
override fun onTouchEvent(event: MotionEvent?): Boolean {
when (event?.action) {
MotionEvent.ACTION_DOWN -> {
bitmap = screenshot()
Log.e("TAG", "bitmap == null: " + (bitmap == null))
downX = event.x
offset = 0.toFloat()
invalidate()
}
MotionEvent.ACTION_MOVE -> {
offset = abs(event.x - downX)
invalidate()
}
MotionEvent.ACTION_UP -> {
bitmap = null
invalidate()
}
}
return true
}
}

@ -1,5 +1,8 @@
package io.legado.app.utils package io.legado.app.utils
import android.app.Activity
import android.app.Service
import android.content.Intent
import android.content.res.ColorStateList import android.content.res.ColorStateList
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import androidx.annotation.ColorRes import androidx.annotation.ColorRes
@ -8,6 +11,7 @@ import androidx.core.content.edit
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import org.jetbrains.anko.connectivityManager import org.jetbrains.anko.connectivityManager
import org.jetbrains.anko.defaultSharedPreferences import org.jetbrains.anko.defaultSharedPreferences
import org.jetbrains.anko.internals.AnkoInternals
fun Fragment.isOnline() = requireContext().connectivityManager.activeNetworkInfo?.isConnected == true fun Fragment.isOnline() = requireContext().connectivityManager.activeNetworkInfo?.isConnected == true
@ -55,3 +59,20 @@ val Fragment.isNightTheme: Boolean
val Fragment.isTransparentStatusBar: Boolean val Fragment.isTransparentStatusBar: Boolean
get() = getPrefBoolean("transparentStatusBar") get() = getPrefBoolean("transparentStatusBar")
inline fun <reified T : Activity> Fragment.startActivity(vararg params: Pair<String, Any?>) =
AnkoInternals.internalStartActivity(requireActivity(), T::class.java, params)
inline fun <reified T : Activity> Fragment.startActivityForResult(requestCode: Int, vararg params: Pair<String, Any?>) =
startActivityForResult(AnkoInternals.createIntent(requireActivity(), T::class.java, params), requestCode)
inline fun <reified T : Service> Fragment.startService(vararg params: Pair<String, Any?>) =
AnkoInternals.internalStartService(requireActivity(), T::class.java, params)
inline fun <reified T : Service> Fragment.stopService(vararg params: Pair<String, Any?>) =
AnkoInternals.internalStopService(requireActivity(), T::class.java, params)
inline fun <reified T : Any> Fragment.intentFor(vararg params: Pair<String, Any?>): Intent =
AnkoInternals.createIntent(requireActivity(), T::class.java, params)

@ -55,7 +55,7 @@ fun View.visible() {
fun View.screenshot(): Bitmap? { fun View.screenshot(): Bitmap? {
return runCatching { return runCatching {
val screenshot = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565) val screenshot = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
val c = Canvas(screenshot) val c = Canvas(screenshot)
c.translate(-scrollX.toFloat(), -scrollY.toFloat()) c.translate(-scrollX.toFloat(), -scrollY.toFloat())
draw(c) draw(c)

@ -1,7 +1,17 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<io.legado.app.ui.widget.PageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="30dp"
android:background="#C6BAA1"
android:textColor="@color/black"
android:lineSpacingExtra="4dp"
android:textSize="18dp"
android:text="2342343333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333323423433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333234234333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333332342343333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333323423433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333234234333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333332342343333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333323423433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"/>
</LinearLayout> </LinearLayout>
Loading…
Cancel
Save