Convert GalleryCommentsScene to view binding
This commit is contained in:
1 parent
df7071a22c
commit
2ce55b4aef
1 file changed
+132
-179
@@ -26,7 +26,6 @@ import android.os.Looper
|
||||
import android.text.Html
|
||||
import android.text.Spannable
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.text.TextUtils
|
||||
import android.text.style.CharacterStyle
|
||||
import android.text.style.ForegroundColorSpan
|
||||
import android.text.style.RelativeSizeSpan
|
||||
@@ -42,9 +41,6 @@ import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewAnimationUtils
|
||||
import android.view.ViewGroup
|
||||
import android.widget.EditText
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.text.getSpans
|
||||
@@ -57,9 +53,8 @@ import androidx.navigation.fragment.findNavController
|
||||
import androidx.recyclerview.widget.DefaultItemAnimator
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
import androidx.viewbinding.ViewBinding
|
||||
import com.hippo.ehviewer.R
|
||||
import com.hippo.ehviewer.client.EhEngine
|
||||
import com.hippo.ehviewer.client.EhFilter
|
||||
@@ -70,12 +65,15 @@ import com.hippo.ehviewer.client.data.GalleryDetail
|
||||
import com.hippo.ehviewer.client.data.ListUrlBuilder
|
||||
import com.hippo.ehviewer.client.parser.VoteCommentParser
|
||||
import com.hippo.ehviewer.dao.Filter
|
||||
import com.hippo.ehviewer.databinding.ItemDrawerFavoritesBinding
|
||||
import com.hippo.ehviewer.databinding.ItemGalleryCommentBinding
|
||||
import com.hippo.ehviewer.databinding.ItemGalleryCommentMoreBinding
|
||||
import com.hippo.ehviewer.databinding.ItemGalleryCommentProgressBinding
|
||||
import com.hippo.ehviewer.databinding.SceneGalleryCommentsBinding
|
||||
import com.hippo.ehviewer.ui.jumpToReaderByPage
|
||||
import com.hippo.ehviewer.ui.legacy.BaseDialogBuilder
|
||||
import com.hippo.ehviewer.ui.legacy.EasyRecyclerView
|
||||
import com.hippo.ehviewer.ui.legacy.EditTextDialogBuilder
|
||||
import com.hippo.ehviewer.ui.legacy.FabLayout
|
||||
import com.hippo.ehviewer.ui.legacy.LinkifyTextView
|
||||
import com.hippo.ehviewer.ui.legacy.ObservedTextView
|
||||
import com.hippo.ehviewer.ui.legacy.URLImageGetter
|
||||
import com.hippo.ehviewer.ui.legacy.ViewTransition
|
||||
@@ -92,7 +90,6 @@ import com.hippo.ehviewer.util.toBBCode
|
||||
import com.hippo.ehviewer.yorozuya.AnimationUtils
|
||||
import com.hippo.ehviewer.yorozuya.SimpleAnimatorListener
|
||||
import com.hippo.ehviewer.yorozuya.StringUtils
|
||||
import com.hippo.ehviewer.yorozuya.ViewUtils
|
||||
import com.hippo.ehviewer.yorozuya.collect.IntList
|
||||
import eu.kanade.tachiyomi.util.lang.launchIO
|
||||
import eu.kanade.tachiyomi.util.lang.withUIContext
|
||||
@@ -101,17 +98,12 @@ import rikka.core.res.resolveColor
|
||||
import kotlin.math.hypot
|
||||
|
||||
class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefreshListener {
|
||||
private var _binding: SceneGalleryCommentsBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
private val mCallback = EditPanelOnBackPressedCallback()
|
||||
private var mGalleryDetail: GalleryDetail? = null
|
||||
private var mRecyclerView: EasyRecyclerView? = null
|
||||
private var mFabLayout: FabLayout? = null
|
||||
private var mFab: FloatingActionButton? = null
|
||||
private var mEditPanel: View? = null
|
||||
private var mSendImage: ImageView? = null
|
||||
private var mEditText: EditText? = null
|
||||
private var mAdapter: CommentAdapter? = null
|
||||
private var mViewTransition: ViewTransition? = null
|
||||
private var mRefreshLayout: SwipeRefreshLayout? = null
|
||||
private var mSendDrawable: Drawable? = null
|
||||
private var mPencilDrawable: Drawable? = null
|
||||
private var mCommentId: Long = 0
|
||||
@@ -157,31 +149,25 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
savedInstanceState: Bundle?,
|
||||
): View {
|
||||
val view = inflater.inflate(R.layout.scene_gallery_comments, container, false) as ViewGroup
|
||||
mRecyclerView = ViewUtils.`$$`(view, R.id.recycler_view) as EasyRecyclerView
|
||||
setLiftOnScrollTargetView(mRecyclerView)
|
||||
val tip = ViewUtils.`$$`(view, R.id.tip) as TextView
|
||||
mEditPanel = ViewUtils.`$$`(view, R.id.edit_panel)
|
||||
mSendImage = ViewUtils.`$$`(mEditPanel, R.id.send) as ImageView
|
||||
mEditText = ViewUtils.`$$`(mEditPanel, R.id.edit_text) as EditText
|
||||
mFabLayout = ViewUtils.`$$`(view, R.id.fab_layout) as FabLayout
|
||||
mFab = ViewUtils.`$$`(view, R.id.fab) as FloatingActionButton
|
||||
mRefreshLayout = ViewUtils.`$$`(view, R.id.refresh_layout) as SwipeRefreshLayout
|
||||
_binding = SceneGalleryCommentsBinding.bind(view)
|
||||
setLiftOnScrollTargetView(binding.recyclerView)
|
||||
val tip = binding.tip
|
||||
|
||||
// Workaround for fab and edittext render out of screen
|
||||
view.removeView(mFabLayout)
|
||||
view.removeView(mEditPanel!!.parent as View)
|
||||
view.removeView(binding.fabLayout)
|
||||
view.removeView(binding.editPanel.parent as View)
|
||||
assert(container != null)
|
||||
container!!.addView(mFabLayout)
|
||||
container.addView(mEditPanel!!.parent as View)
|
||||
container!!.addView(binding.fabLayout)
|
||||
container.addView(binding.editPanel.parent as View)
|
||||
ViewCompat.setWindowInsetsAnimationCallback(
|
||||
view,
|
||||
WindowInsetsAnimationHelper(
|
||||
WindowInsetsAnimationCompat.Callback.DISPATCH_MODE_STOP,
|
||||
mEditPanel,
|
||||
mFabLayout,
|
||||
binding.editPanel,
|
||||
binding.fabLayout,
|
||||
),
|
||||
)
|
||||
mRefreshLayout!!.setOnRefreshListener(this)
|
||||
binding.refreshLayout.setOnRefreshListener(this)
|
||||
val context = requireContext()
|
||||
val drawable = ContextCompat.getDrawable(context, R.drawable.big_sad_pandroid)
|
||||
drawable!!.setBounds(0, 0, drawable.intrinsicWidth, drawable.intrinsicHeight)
|
||||
@@ -189,20 +175,20 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
mSendDrawable = ContextCompat.getDrawable(context, R.drawable.v_send_dark_x24)
|
||||
mPencilDrawable = ContextCompat.getDrawable(context, R.drawable.v_pencil_dark_x24)
|
||||
mAdapter = CommentAdapter()
|
||||
mRecyclerView!!.adapter = mAdapter
|
||||
mRecyclerView!!.layoutManager = LinearLayoutManager(
|
||||
binding.recyclerView.adapter = mAdapter
|
||||
binding.recyclerView.layoutManager = LinearLayoutManager(
|
||||
context,
|
||||
RecyclerView.VERTICAL,
|
||||
false,
|
||||
)
|
||||
mRecyclerView!!.setHasFixedSize(true)
|
||||
binding.recyclerView.setHasFixedSize(true)
|
||||
// Cancel change animator
|
||||
val itemAnimator = mRecyclerView!!.itemAnimator
|
||||
val itemAnimator = binding.recyclerView.itemAnimator
|
||||
if (itemAnimator is DefaultItemAnimator) {
|
||||
itemAnimator.supportsChangeAnimations = false
|
||||
}
|
||||
mSendImage!!.setOnClickListener(this)
|
||||
mEditText!!.customSelectionActionModeCallback = object : ActionMode.Callback {
|
||||
binding.send.setOnClickListener(this)
|
||||
binding.editText.customSelectionActionModeCallback = object : ActionMode.Callback {
|
||||
override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
|
||||
requireActivity().menuInflater.inflate(R.menu.context_comment, menu)
|
||||
return true
|
||||
@@ -214,9 +200,9 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
|
||||
override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
|
||||
item?.let {
|
||||
val text = mEditText!!.editableText
|
||||
val start = mEditText!!.selectionStart
|
||||
val end = mEditText!!.selectionEnd
|
||||
val text = binding.editText.editableText
|
||||
val start = binding.editText.selectionStart
|
||||
val end = binding.editText.selectionEnd
|
||||
when (item.itemId) {
|
||||
R.id.action_bold -> text[start, end] = StyleSpan(Typeface.BOLD)
|
||||
|
||||
@@ -230,7 +216,7 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
val oldSpans = text.getSpans<URLSpan>(start, end)
|
||||
var oldUrl = "https://"
|
||||
oldSpans.forEach {
|
||||
if (!TextUtils.isEmpty(it.url)) {
|
||||
if (!it.url.isNullOrEmpty()) {
|
||||
oldUrl = it.url
|
||||
}
|
||||
}
|
||||
@@ -246,7 +232,7 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
button?.setOnClickListener(
|
||||
View.OnClickListener {
|
||||
val url = builder.text.trim()
|
||||
if (TextUtils.isEmpty(url)) {
|
||||
if (url.isEmpty()) {
|
||||
builder.setError(getString(R.string.text_is_empty))
|
||||
return@OnClickListener
|
||||
} else {
|
||||
@@ -273,11 +259,10 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
override fun onDestroyActionMode(mode: ActionMode?) {
|
||||
}
|
||||
}
|
||||
mFab!!.setOnClickListener(this)
|
||||
addAboveSnackView(mEditPanel)
|
||||
addAboveSnackView(mFabLayout)
|
||||
mViewTransition =
|
||||
ViewTransition(mRecyclerView, tip)
|
||||
binding.fab.setOnClickListener(this)
|
||||
addAboveSnackView(binding.editPanel)
|
||||
addAboveSnackView(binding.fabLayout)
|
||||
mViewTransition = ViewTransition(binding.recyclerView, tip)
|
||||
updateView(false)
|
||||
return view
|
||||
}
|
||||
@@ -300,21 +285,9 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
mCallback.remove()
|
||||
if (null != mRecyclerView) {
|
||||
mRecyclerView!!.stopScroll()
|
||||
mRecyclerView = null
|
||||
}
|
||||
if (null != mEditPanel) {
|
||||
removeAboveSnackView(mEditPanel)
|
||||
mEditPanel = null
|
||||
}
|
||||
if (null != mFabLayout) {
|
||||
removeAboveSnackView(mFabLayout)
|
||||
mFabLayout = null
|
||||
}
|
||||
mFab = null
|
||||
mSendImage = null
|
||||
mEditText = null
|
||||
binding.recyclerView.stopScroll()
|
||||
removeAboveSnackView(binding.editPanel)
|
||||
removeAboveSnackView(binding.fabLayout)
|
||||
mAdapter = null
|
||||
mViewTransition = null
|
||||
}
|
||||
@@ -384,8 +357,7 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
}
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
fun showVoteStatusDialog(context: Context?, voteStatus: String?) {
|
||||
var context = context
|
||||
fun showVoteStatusDialog(context: Context, voteStatus: String?) {
|
||||
val temp = StringUtils.split(voteStatus, ',')
|
||||
val length = temp.size
|
||||
val userArray = arrayOfNulls<String>(length)
|
||||
@@ -402,25 +374,24 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
voteArray[i] = StringUtils.trim(str.substring(index + 1))
|
||||
}
|
||||
}
|
||||
val builder = BaseDialogBuilder(context!!)
|
||||
context = builder.context
|
||||
val inflater = LayoutInflater.from(context)
|
||||
val builder = BaseDialogBuilder(context)
|
||||
val builderContext = builder.context
|
||||
val inflater = LayoutInflater.from(builderContext)
|
||||
val rv = inflater.inflate(R.layout.dialog_recycler_view, null) as EasyRecyclerView
|
||||
rv.adapter = object : RecyclerView.Adapter<InfoHolder>() {
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): InfoHolder {
|
||||
return InfoHolder(inflater.inflate(R.layout.item_drawer_favorites, parent, false))
|
||||
rv.adapter = object : RecyclerView.Adapter<VoteHolder>() {
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VoteHolder {
|
||||
return VoteHolder(ItemDrawerFavoritesBinding.inflate(inflater, parent, false))
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: InfoHolder, position: Int) {
|
||||
holder.key.text = userArray[position]
|
||||
holder.value.text = voteArray[position]
|
||||
override fun onBindViewHolder(holder: VoteHolder, position: Int) {
|
||||
holder.bind(userArray[position], voteArray[position])
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return length
|
||||
}
|
||||
}
|
||||
rv.layoutManager = LinearLayoutManager(context)
|
||||
rv.layoutManager = LinearLayoutManager(builderContext)
|
||||
rv.clipToPadding = false
|
||||
builder.setView(rv).show()
|
||||
}
|
||||
@@ -452,7 +423,7 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
menu.add(resources.getString(if (comment.voteDownEd) R.string.cancel_vote_down else R.string.vote_down))
|
||||
menuId.add(R.id.vote_down)
|
||||
}
|
||||
if (!TextUtils.isEmpty(comment.voteState)) {
|
||||
if (!comment.voteState.isNullOrEmpty()) {
|
||||
menu.add(resources.getString(R.string.check_vote_status))
|
||||
menuId.add(R.id.check_vote_status)
|
||||
}
|
||||
@@ -474,7 +445,7 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
showVoteStatusDialog(context, comment.voteState)
|
||||
} else if (id == R.id.edit_comment) {
|
||||
prepareEditComment(comment.id, text)
|
||||
if (!mInAnimation && mEditPanel != null && mEditPanel!!.visibility != View.VISIBLE) {
|
||||
if (!mInAnimation && binding.editPanel.visibility != View.VISIBLE) {
|
||||
showEditPanel(true)
|
||||
}
|
||||
}
|
||||
@@ -485,8 +456,8 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
val activity = mainActivity ?: return false
|
||||
val holder = parent!!.getChildViewHolder(view2!!)
|
||||
if (holder is ActualCommentHolder) {
|
||||
val span = holder.comment.currentSpan
|
||||
holder.comment.clearCurrentSpan()
|
||||
val span = holder.binding.comment.currentSpan
|
||||
holder.binding.comment.clearCurrentSpan()
|
||||
val detail = mGalleryDetail ?: return false
|
||||
if (span is URLSpan) {
|
||||
if (!activity.jumpToReaderByPage(span.url, detail)) {
|
||||
@@ -535,43 +506,33 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
|
||||
private fun prepareNewComment() {
|
||||
mCommentId = 0
|
||||
if (mSendImage != null) {
|
||||
mSendImage!!.setImageDrawable(mSendDrawable)
|
||||
}
|
||||
binding.send.setImageDrawable(mSendDrawable)
|
||||
}
|
||||
|
||||
private fun prepareEditComment(commentId: Long, text: CharSequence) {
|
||||
mCommentId = commentId
|
||||
mEditText?.setText(text)
|
||||
if (mSendImage != null) {
|
||||
mSendImage!!.setImageDrawable(mPencilDrawable)
|
||||
}
|
||||
binding.editText.setText(text)
|
||||
binding.send.setImageDrawable(mPencilDrawable)
|
||||
}
|
||||
|
||||
private fun showEditPanelWithAnimation() {
|
||||
if (null == mFab || null == mEditPanel) {
|
||||
return
|
||||
}
|
||||
mInAnimation = true
|
||||
mFab!!.translationX = 0.0f
|
||||
mFab!!.translationY = 0.0f
|
||||
mFab!!.scaleX = 1.0f
|
||||
mFab!!.scaleY = 1.0f
|
||||
val fabEndX = mEditPanel!!.left + mEditPanel!!.width / 2 - mFab!!.width / 2
|
||||
val fabEndY = mEditPanel!!.top + mEditPanel!!.height / 2 - mFab!!.height / 2
|
||||
mFab!!.animate().x(fabEndX.toFloat()).y(fabEndY.toFloat()).scaleX(0.0f).scaleY(0.0f)
|
||||
binding.fab.translationX = 0.0f
|
||||
binding.fab.translationY = 0.0f
|
||||
binding.fab.scaleX = 1.0f
|
||||
binding.fab.scaleY = 1.0f
|
||||
val fabEndX = binding.editPanel.left + binding.editPanel.width / 2 - binding.fab.width / 2
|
||||
val fabEndY = binding.editPanel.top + binding.editPanel.height / 2 - binding.fab.height / 2
|
||||
binding.fab.animate().x(fabEndX.toFloat()).y(fabEndY.toFloat()).scaleX(0.0f).scaleY(0.0f)
|
||||
.setInterpolator(AnimationUtils.SLOW_FAST_SLOW_INTERPOLATOR)
|
||||
.setDuration(300L).setListener(object : SimpleAnimatorListener() {
|
||||
override fun onAnimationEnd(animation: Animator) {
|
||||
if (null == mFab || null == mEditPanel) {
|
||||
return
|
||||
}
|
||||
(mFab as View).visibility = View.INVISIBLE
|
||||
mEditPanel!!.visibility = View.VISIBLE
|
||||
val halfW = mEditPanel!!.width / 2
|
||||
val halfH = mEditPanel!!.height / 2
|
||||
(binding.fab as View).visibility = View.INVISIBLE
|
||||
binding.editPanel.visibility = View.VISIBLE
|
||||
val halfW = binding.editPanel.width / 2
|
||||
val halfH = binding.editPanel.height / 2
|
||||
val animator = ViewAnimationUtils.createCircularReveal(
|
||||
mEditPanel,
|
||||
binding.editPanel,
|
||||
halfW,
|
||||
halfH,
|
||||
0f,
|
||||
@@ -592,23 +553,17 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
if (animation) {
|
||||
showEditPanelWithAnimation()
|
||||
} else {
|
||||
if (null == mFab || null == mEditPanel) {
|
||||
return
|
||||
}
|
||||
(mFab as View).visibility = View.INVISIBLE
|
||||
mEditPanel!!.visibility = View.VISIBLE
|
||||
(binding.fab as View).visibility = View.INVISIBLE
|
||||
binding.editPanel.visibility = View.VISIBLE
|
||||
}
|
||||
}
|
||||
|
||||
private fun hideEditPanelWithAnimation() {
|
||||
if (null == mFab || null == mEditPanel) {
|
||||
return
|
||||
}
|
||||
mInAnimation = true
|
||||
val halfW = mEditPanel!!.width / 2
|
||||
val halfH = mEditPanel!!.height / 2
|
||||
val halfW = binding.editPanel.width / 2
|
||||
val halfH = binding.editPanel.height / 2
|
||||
val animator = ViewAnimationUtils.createCircularReveal(
|
||||
mEditPanel,
|
||||
binding.editPanel,
|
||||
halfW,
|
||||
halfH,
|
||||
hypot(halfW.toDouble(), halfH.toDouble()).toFloat(),
|
||||
@@ -616,25 +571,25 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
).setDuration(300L)
|
||||
animator.addListener(object : SimpleAnimatorListener() {
|
||||
override fun onAnimationEnd(a: Animator) {
|
||||
if (null == mFab || null == mEditPanel) {
|
||||
return
|
||||
}
|
||||
if (Looper.myLooper() != Looper.getMainLooper()) {
|
||||
// Some devices may run this block in non-UI thread.
|
||||
// It might be a bug of Android OS.
|
||||
// Check it here to avoid crash.
|
||||
return
|
||||
}
|
||||
mEditPanel!!.visibility = View.GONE
|
||||
(mFab as View).visibility = View.VISIBLE
|
||||
val fabStartX = mEditPanel!!.left + mEditPanel!!.width / 2 - mFab!!.width / 2
|
||||
val fabStartY = mEditPanel!!.top + mEditPanel!!.height / 2 - mFab!!.height / 2
|
||||
mFab!!.x = fabStartX.toFloat()
|
||||
mFab!!.y = fabStartY.toFloat()
|
||||
mFab!!.scaleX = 0.0f
|
||||
mFab!!.scaleY = 0.0f
|
||||
mFab!!.rotation = -45.0f
|
||||
mFab!!.animate().translationX(0.0f).translationY(0.0f).scaleX(1.0f).scaleY(1.0f)
|
||||
binding.editPanel.visibility = View.GONE
|
||||
(binding.fab as View).visibility = View.VISIBLE
|
||||
val fabStartX =
|
||||
binding.editPanel.left + binding.editPanel.width / 2 - binding.fab.width / 2
|
||||
val fabStartY =
|
||||
binding.editPanel.top + binding.editPanel.height / 2 - binding.fab.height / 2
|
||||
binding.fab.x = fabStartX.toFloat()
|
||||
binding.fab.y = fabStartY.toFloat()
|
||||
binding.fab.scaleX = 0.0f
|
||||
binding.fab.scaleY = 0.0f
|
||||
binding.fab.rotation = -45.0f
|
||||
binding.fab.animate().translationX(0.0f).translationY(0.0f).scaleX(1.0f)
|
||||
.scaleY(1.0f)
|
||||
.rotation(0.0f)
|
||||
.setInterpolator(AnimationUtils.SLOW_FAST_SLOW_INTERPOLATOR)
|
||||
.setDuration(300L).setListener(object : SimpleAnimatorListener() {
|
||||
@@ -653,11 +608,8 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
if (animation) {
|
||||
hideEditPanelWithAnimation()
|
||||
} else {
|
||||
if (null == mFab || null == mEditPanel) {
|
||||
return
|
||||
}
|
||||
(mFab as View).visibility = View.VISIBLE
|
||||
mEditPanel!!.visibility = View.INVISIBLE
|
||||
(binding.fab as View).visibility = View.VISIBLE
|
||||
binding.editPanel.visibility = View.INVISIBLE
|
||||
}
|
||||
}
|
||||
|
||||
@@ -676,17 +628,17 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
override fun onClick(v: View) {
|
||||
val context = context
|
||||
val activity = mainActivity
|
||||
if (null == context || null == activity || null == mEditText) {
|
||||
if (null == context || null == activity) {
|
||||
return
|
||||
}
|
||||
if (mFab === v) {
|
||||
if (binding.fab === v) {
|
||||
if (!mInAnimation) {
|
||||
prepareNewComment()
|
||||
showEditPanel(true)
|
||||
}
|
||||
} else if (mSendImage === v) {
|
||||
} else if (binding.send === v) {
|
||||
if (!mInAnimation) {
|
||||
val comment = mEditText?.text?.toBBCode()?.takeIf { it.isNotBlank() } ?: return
|
||||
val comment = binding.editText.text?.toBBCode()?.takeIf { it.isNotBlank() } ?: return
|
||||
val url = galleryDetailUrl ?: return
|
||||
lifecycleScope.launchIO {
|
||||
runSuspendCatching {
|
||||
@@ -723,7 +675,7 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
if (mGalleryDetail == null || mAdapter == null) {
|
||||
return
|
||||
}
|
||||
mRefreshLayout!!.isRefreshing = false
|
||||
binding.refreshLayout.isRefreshing = false
|
||||
mRefreshingComments = false
|
||||
mGalleryDetail!!.comments = result
|
||||
mAdapter!!.notifyDataSetChanged()
|
||||
@@ -734,7 +686,7 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
if (mAdapter == null) {
|
||||
return
|
||||
}
|
||||
mRefreshLayout!!.isRefreshing = false
|
||||
binding.refreshLayout.isRefreshing = false
|
||||
mRefreshingComments = false
|
||||
val position = mAdapter!!.itemCount - 1
|
||||
if (position >= 0) {
|
||||
@@ -750,9 +702,7 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
mAdapter!!.notifyDataSetChanged()
|
||||
|
||||
// Remove text
|
||||
if (mEditText != null) {
|
||||
mEditText!!.setText("")
|
||||
}
|
||||
binding.editText.setText("")
|
||||
updateView(true)
|
||||
}
|
||||
|
||||
@@ -796,32 +746,24 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
}
|
||||
}
|
||||
|
||||
private class InfoHolder(itemView: View?) : RecyclerView.ViewHolder(
|
||||
itemView!!,
|
||||
) {
|
||||
val key: TextView
|
||||
val value: TextView
|
||||
|
||||
init {
|
||||
key = ViewUtils.`$$`(itemView, R.id.key) as TextView
|
||||
value = ViewUtils.`$$`(itemView, R.id.value) as TextView
|
||||
private class VoteHolder(private val binding: ItemDrawerFavoritesBinding) :
|
||||
RecyclerView.ViewHolder(binding.root) {
|
||||
fun bind(user: String?, vote: String?) {
|
||||
binding.key.text = user
|
||||
binding.value.text = vote
|
||||
}
|
||||
}
|
||||
|
||||
private abstract class CommentHolder(inflater: LayoutInflater, resId: Int, parent: ViewGroup?) :
|
||||
RecyclerView.ViewHolder(inflater.inflate(resId, parent, false))
|
||||
private abstract class CommentHolder(binding: ViewBinding) :
|
||||
RecyclerView.ViewHolder(binding.root)
|
||||
|
||||
private class MoreCommentHolder(inflater: LayoutInflater, parent: ViewGroup?) :
|
||||
CommentHolder(inflater, R.layout.item_gallery_comment_more, parent)
|
||||
private class MoreCommentHolder(binding: ItemGalleryCommentMoreBinding) : CommentHolder(binding)
|
||||
|
||||
private class ProgressCommentHolder(inflater: LayoutInflater, parent: ViewGroup?) :
|
||||
CommentHolder(inflater, R.layout.item_gallery_comment_progress, parent)
|
||||
private class ProgressCommentHolder(binding: ItemGalleryCommentProgressBinding) :
|
||||
CommentHolder(binding)
|
||||
|
||||
private inner class ActualCommentHolder(inflater: LayoutInflater, parent: ViewGroup?) :
|
||||
CommentHolder(inflater, R.layout.item_gallery_comment, parent) {
|
||||
private val user: TextView = itemView.findViewById(R.id.user)
|
||||
private val time: TextView = itemView.findViewById(R.id.time)
|
||||
val comment: LinkifyTextView = itemView.findViewById(R.id.comment)
|
||||
private inner class ActualCommentHolder(val binding: ItemGalleryCommentBinding) :
|
||||
CommentHolder(binding) {
|
||||
lateinit var sp: CharSequence
|
||||
|
||||
private fun generateComment(
|
||||
@@ -864,20 +806,22 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
}
|
||||
|
||||
fun bind(value: GalleryComment) {
|
||||
user.text = value.user?.let {
|
||||
if (value.uploader) getString(R.string.comment_user_uploader, it) else it
|
||||
}
|
||||
user.setOnClickListener {
|
||||
value.user?.let {
|
||||
val lub = ListUrlBuilder().apply {
|
||||
mode = ListUrlBuilder.MODE_UPLOADER
|
||||
keyword = it
|
||||
}
|
||||
navigate(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
binding.run {
|
||||
user.text = value.user?.let {
|
||||
if (value.uploader) getString(R.string.comment_user_uploader, it) else it
|
||||
}
|
||||
user.setOnClickListener {
|
||||
value.user?.let {
|
||||
val lub = ListUrlBuilder().apply {
|
||||
mode = ListUrlBuilder.MODE_UPLOADER
|
||||
keyword = it
|
||||
}
|
||||
navigate(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
}
|
||||
}
|
||||
time.text = ReadableTime.getTimeAgo(value.time)
|
||||
comment.text = generateComment(binding.comment.context, binding.comment, value)
|
||||
}
|
||||
time.text = ReadableTime.getTimeAgo(value.time)
|
||||
comment.text = generateComment(comment.context, comment, value)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -886,9 +830,18 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CommentHolder {
|
||||
return when (viewType) {
|
||||
TYPE_COMMENT -> ActualCommentHolder(mInflater, parent)
|
||||
TYPE_MORE -> MoreCommentHolder(mInflater, parent)
|
||||
TYPE_PROGRESS -> ProgressCommentHolder(mInflater, parent)
|
||||
TYPE_COMMENT -> ActualCommentHolder(
|
||||
ItemGalleryCommentBinding.inflate(mInflater, parent, false),
|
||||
)
|
||||
|
||||
TYPE_MORE -> MoreCommentHolder(
|
||||
ItemGalleryCommentMoreBinding.inflate(mInflater, parent, false),
|
||||
)
|
||||
|
||||
TYPE_PROGRESS -> ProgressCommentHolder(
|
||||
ItemGalleryCommentProgressBinding.inflate(mInflater, parent, false),
|
||||
)
|
||||
|
||||
else -> throw IllegalStateException("Invalid view type: $viewType")
|
||||
}
|
||||
}
|
||||
@@ -900,7 +853,7 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
}
|
||||
holder.itemView.setOnClickListener {
|
||||
onItemClick(
|
||||
mRecyclerView,
|
||||
binding.recyclerView,
|
||||
holder.itemView,
|
||||
position,
|
||||
)
|
||||
@@ -933,7 +886,7 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
|
||||
internal inner class EditPanelOnBackPressedCallback : OnBackPressedCallback(false) {
|
||||
override fun handleOnBackPressed() {
|
||||
if (!mInAnimation && null != mEditPanel && mEditPanel!!.visibility == View.VISIBLE) {
|
||||
if (!mInAnimation && binding.editPanel.visibility == View.VISIBLE) {
|
||||
hideEditPanel(true)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user