ViewBindingize GalleryDetailScene, step 1

This commit is contained in:
tarsin committed 2023-01-12 11:05:41 +08:00
1 parent 13011ed4af
commit 4a73fb565e
3 files changed
+92 -110

No files matched your search

@@ -47,7 +47,6 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.IntDef
import androidx.annotation.StringRes
import androidx.core.content.ContextCompat
import androidx.core.widget.NestedScrollView
import androidx.lifecycle.lifecycleScope
import coil.Coil.imageLoader
import coil.annotation.ExperimentalCoilApi
@@ -85,6 +84,7 @@ import com.hippo.ehviewer.client.parser.TorrentParser
import com.hippo.ehviewer.client.parser.VoteTagParser
import com.hippo.ehviewer.dao.DownloadInfo
import com.hippo.ehviewer.dao.Filter
import com.hippo.ehviewer.databinding.SceneGalleryDetailBinding
import com.hippo.ehviewer.download.DownloadManager.DownloadInfoListener
import com.hippo.ehviewer.gallery.EhPageLoader
import com.hippo.ehviewer.gallery.PageLoader2
@@ -119,21 +119,11 @@ import kotlin.math.roundToInt
class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, DownloadInfoListener,
OnLongClickListener {
/*---------------
View life cycle
---------------*/
private var mTip: TextView? = null
private var _binding: SceneGalleryDetailBinding? = null
private val binding
get() = _binding!!
private var mViewTransition: ViewTransition? = null
// Header
private var mHeader: LinearLayout? = null
private var mThumb: LoadImageView? = null
private var mUploader: TextView? = null
private var mCategory: TextView? = null
private var mActionGroup: ViewGroup? = null
private var mDownload: TextView? = null
private var mRead: TextView? = null
// Below header
private var mBelowHeader: View? = null
@@ -315,17 +305,16 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
override fun onResume() {
super.onResume()
if (mRead != null) {
try {
val galleryProvider: PageLoader2 = EhPageLoader(mGalleryInfo)
galleryProvider.start()
val startPage = galleryProvider.startPage
if (startPage != 0) {
mRead!!.text = getString(R.string.read_from, startPage + 1)
}
galleryProvider.stop()
} catch (ignore: Exception) {
_binding ?: return
try {
val galleryProvider: PageLoader2 = EhPageLoader(mGalleryInfo)
galleryProvider.start()
val startPage = galleryProvider.startPage
if (startPage != 0) {
binding.content.header.read.text = getString(R.string.read_from, startPage + 1)
}
galleryProvider.stop()
} catch (ignore: Exception) {
}
}
@@ -417,35 +406,24 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
} else {
DownloadInfo.STATE_INVALID
}
val view = inflater.inflate(R.layout.scene_gallery_detail, container, false)
val main = ViewUtils.`$$`(view, R.id.main) as ViewGroup
val mainView = ViewUtils.`$$`(main, R.id.scroll_view) as NestedScrollView
setLiftOnScrollTargetView(mainView)
val progressView = ViewUtils.`$$`(main, R.id.progress_view)
mTip = ViewUtils.`$$`(main, R.id.tip) as TextView
mViewTransition = ViewTransition(mainView, progressView, mTip)
val context = context
AssertUtils.assertNotNull(context)
val drawable = ContextCompat.getDrawable(context!!, R.drawable.big_sad_pandroid)
drawable!!.setBounds(0, 0, drawable.intrinsicWidth, drawable.intrinsicHeight)
mTip!!.setCompoundDrawables(null, drawable, null, null)
mTip!!.setOnClickListener(this)
mHeader = ViewUtils.`$$`(mainView, R.id.header) as LinearLayout
mThumb = ViewUtils.`$$`(mHeader, R.id.thumb) as LoadImageView
mUploader = ViewUtils.`$$`(mHeader, R.id.uploader) as TextView
mCategory = ViewUtils.`$$`(mHeader, R.id.category) as TextView
mActionGroup = ViewUtils.`$$`(mHeader, R.id.action_card) as ViewGroup
mDownload = ViewUtils.`$$`(mActionGroup, R.id.download) as TextView
mRead = ViewUtils.`$$`(mActionGroup, R.id.read) as TextView
mUploader!!.setOnClickListener(this)
mCategory!!.setOnClickListener(this)
mDownload!!.setOnClickListener(this)
mDownload!!.setOnLongClickListener(this)
mRead!!.setOnClickListener(this)
mUploader!!.setOnLongClickListener(this)
mBelowHeader = mainView.findViewById(R.id.below_header)
_binding = SceneGalleryDetailBinding.inflate(inflater, container, false)
setLiftOnScrollTargetView(binding.scrollView)
mViewTransition = ViewTransition(binding.scrollView, binding.progressView, binding.tip)
val drawable = ContextCompat.getDrawable(requireContext(), R.drawable.big_sad_pandroid)!!
drawable.setBounds(0, 0, drawable.intrinsicWidth, drawable.intrinsicHeight)
binding.tip.setCompoundDrawables(null, drawable, null, null)
binding.tip.setOnClickListener(this)
binding.content.header.let {
it.uploader.setOnClickListener(this)
it.category.setOnClickListener(this)
it.download.setOnClickListener(this)
it.download.setOnLongClickListener(this)
it.read.setOnClickListener(this)
it.uploader.setOnLongClickListener(this)
}
mBelowHeader = binding.scrollView.findViewById(R.id.below_header)
val belowHeader = mBelowHeader
mInfo = ViewUtils.`$$`(mHeader, R.id.info)
mInfo = ViewUtils.`$$`(binding.content.header.header, R.id.info)
mLanguage = ViewUtils.`$$`(mInfo, R.id.language) as TextView
mPages = ViewUtils.`$$`(mInfo, R.id.pages) as TextView
mSize = ViewUtils.`$$`(mInfo, R.id.size) as TextView
@@ -488,7 +466,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
mGridLayout = ViewUtils.`$$`(mPreviews, R.id.grid_layout) as SimpleGridAutoSpanLayout
mPreviewText = ViewUtils.`$$`(mPreviews, R.id.preview_text) as TextView
mPreviews!!.setOnClickListener(this)
mProgress = ViewUtils.`$$`(mainView, R.id.progress)
mProgress = ViewUtils.`$$`(binding.scrollView, R.id.progress)
mViewTransition2 = ViewTransition(mBelowHeader, mProgress)
if (prepareData()) {
if (mGalleryDetail != null) {
@@ -501,12 +479,12 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
adjustViewVisibility(STATE_REFRESH)
}
} else {
mTip!!.setText(R.string.error_cannot_find_gallery)
binding.tip.setText(R.string.error_cannot_find_gallery)
adjustViewVisibility(STATE_FAILED)
}
downloadManager.addDownloadInfoListener(this)
(requireActivity() as MainActivity).mShareUrl = galleryDetailUrl
return view
return binding.root
}
override fun onDestroyView() {
@@ -515,15 +493,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
AssertUtils.assertNotNull(context)
downloadManager.removeDownloadInfoListener(this)
(requireActivity() as MainActivity).mShareUrl = null
mTip = null
mViewTransition = null
mHeader = null
mThumb = null
mUploader = null
mCategory = null
mActionGroup = null
mDownload = null
mRead = null
mBelowHeader = null
mInfo = null
mLanguage = null
@@ -552,6 +522,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
mPreviewText = null
mProgress = null
mViewTransition2 = null
_binding = null
}
private fun prepareData(): Boolean {
@@ -629,21 +600,19 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
}
private fun bindViewFirst() {
if (mGalleryDetail != null) {
return
}
if (mThumb == null || mUploader == null || mCategory == null) {
return
}
mGalleryDetail ?: return
_binding ?: return
if (ACTION_GALLERY_INFO == mAction && mGalleryInfo != null) {
val gi: GalleryInfo = mGalleryInfo!!
mThumb!!.load(EhCacheKeyFactory.getThumbKey(gi.gid), gi.thumb!!)
setTitle(EhUtils.getSuitableTitle(gi))
mUploader!!.text = gi.uploader
mUploader!!.alpha = if (gi.disowned) .5f else 1f
mCategory!!.text = EhUtils.getCategory(gi.category)
mCategory!!.setTextColor(EhUtils.getCategoryColor(gi.category))
updateDownloadText()
binding.content.header.run {
(thumb as LoadImageView).load(EhCacheKeyFactory.getThumbKey(gi.gid), gi.thumb!!)
setTitle(EhUtils.getSuitableTitle(gi))
uploader.text = gi.uploader
uploader.alpha = if (gi.disowned) .5f else 1f
category.text = EhUtils.getCategory(gi.category)
category.setTextColor(EhUtils.getCategoryColor(gi.category))
updateDownloadText()
}
}
}
@@ -683,16 +652,16 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
}
.show()
}
if (mThumb == null || mUploader == null || mCategory == null || mLanguage == null || mPages == null || mSize == null || mPosted == null || mFavoredTimes == null || mRatingText == null || mRating == null || mTorrent == null || mNewerVersion == null) {
return
}
_binding ?: return
val resources = resources
mThumb!!.load(EhCacheKeyFactory.getThumbKey(gd.gid), gd.thumb!!, true)
setTitle(EhUtils.getSuitableTitle(gd))
mUploader!!.text = gd.uploader
mUploader!!.alpha = if (gd.disowned) .5f else 1f
mCategory!!.text = EhUtils.getCategory(gd.category)
mCategory!!.setTextColor(EhUtils.getCategoryColor(gd.category))
binding.content.header.run {
(thumb as LoadImageView).load(EhCacheKeyFactory.getThumbKey(gd.gid), gd.thumb!!, true)
setTitle(EhUtils.getSuitableTitle(gd))
uploader.text = gd.uploader
uploader.alpha = if (gd.disowned) .5f else 1f
category.text = EhUtils.getCategory(gd.category)
category.setTextColor(EhUtils.getCategoryColor(gd.category))
}
updateDownloadText()
mLanguage!!.text = gd.language
mPages!!.text = resources.getQuantityString(
@@ -899,11 +868,11 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
if (null == context || null == activity) {
return
}
if (mTip === v) {
if (binding.tip === v) {
if (request()) {
adjustViewVisibility(STATE_REFRESH)
}
} else if (mUploader === v) {
} else if (binding.content.header.uploader === v) {
val uploader = uploader
if (TextUtils.isEmpty(uploader) || disowned) {
return
@@ -912,7 +881,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
lub.mode = ListUrlBuilder.MODE_UPLOADER
lub.keyword = uploader
navigate(R.id.galleryListScene, getStartArgs(lub), true)
} else if (mCategory === v) {
} else if (binding.content.header.category === v) {
val category = this.category
if (category == EhUtils.NONE || category == EhUtils.PRIVATE || category == EhUtils.UNKNOWN) {
return
@@ -920,7 +889,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
val lub = ListUrlBuilder()
lub.category = category
navigate(R.id.galleryListScene, getStartArgs(lub), true)
} else if (mDownload === v) {
} else if (binding.content.header.download === v) {
val galleryInfo = galleryInfo
if (galleryInfo != null) {
if (downloadManager.getDownloadState(galleryInfo.gid) == DownloadInfo.STATE_INVALID) {
@@ -940,7 +909,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
.show()
}
}
} else if (mRead === v) {
} else if (binding.content.header.read === v) {
var galleryInfo: GalleryInfo? = null
if (mGalleryInfo != null) {
galleryInfo = mGalleryInfo
@@ -1220,12 +1189,12 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
override fun onLongClick(v: View): Boolean {
val activity = mainActivity ?: return false
if (mUploader === v) {
if (binding.content.header.uploader === v) {
if (TextUtils.isEmpty(uploader) || disowned) {
return false
}
showFilterUploaderDialog()
} else if (mDownload === v) {
} else if (binding.content.header.download === v) {
val galleryInfo = galleryInfo
if (galleryInfo != null) {
CommonOperations.startDownload(activity, galleryInfo, true)
@@ -1263,16 +1232,16 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
}
private fun updateDownloadText() {
if (null == mDownload) {
return
}
when (mDownloadState) {
DownloadInfo.STATE_INVALID -> mDownload!!.setText(R.string.download)
DownloadInfo.STATE_NONE -> mDownload!!.setText(R.string.download_state_none)
DownloadInfo.STATE_WAIT -> mDownload!!.setText(R.string.download_state_wait)
DownloadInfo.STATE_DOWNLOAD -> mDownload!!.setText(R.string.download_state_downloading)
DownloadInfo.STATE_FINISH -> mDownload!!.setText(R.string.download_state_downloaded)
DownloadInfo.STATE_FAILED -> mDownload!!.setText(R.string.download_state_failed)
_binding ?: return
binding.content.header.download.run {
when (mDownloadState) {
DownloadInfo.STATE_INVALID -> setText(R.string.download)
DownloadInfo.STATE_NONE -> setText(R.string.download_state_none)
DownloadInfo.STATE_WAIT -> setText(R.string.download_state_wait)
DownloadInfo.STATE_DOWNLOAD -> setText(R.string.download_state_downloading)
DownloadInfo.STATE_FINISH -> setText(R.string.download_state_downloaded)
DownloadInfo.STATE_FAILED -> setText(R.string.download_state_failed)
}
}
}
@@ -1325,10 +1294,11 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
private fun onGetGalleryDetailFailure(e: Exception) {
e.printStackTrace()
_binding ?: return
val context = context
if (null != context && null != mTip) {
if (null != context) {
val error = ExceptionUtils.getReadableString(e)
mTip!!.text = error
binding.tip.text = error
adjustViewVisibility(STATE_FAILED)
}
}
@@ -19,7 +19,9 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<include layout="@layout/gallery_detail_header" />
<include
android:id="@+id/header"
layout="@layout/gallery_detail_header" />
<FrameLayout
android:layout_width="match_parent"
@@ -31,13 +33,21 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<include layout="@layout/gallery_detail_actions" />
<include
android:id="@+id/actions"
layout="@layout/gallery_detail_actions" />
<include layout="@layout/gallery_detail_tags" />
<include
android:id="@+id/tags"
layout="@layout/gallery_detail_tags" />
<include layout="@layout/gallery_detail_comments" />
<include
android:id="@+id/comments"
layout="@layout/gallery_detail_comments" />
<include layout="@layout/gallery_detail_previews" />
<include
android:id="@+id/previews"
layout="@layout/gallery_detail_previews" />
</LinearLayout>
@@ -26,7 +26,9 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/gallery_detail_content" />
<include
android:id="@+id/content"
layout="@layout/gallery_detail_content" />
</androidx.core.widget.NestedScrollView>