Unify MainActivity nav behaviour
This commit is contained in:
1 parent
2e23167e94
commit
2da8cfde01
12 files changed
+89
-79
No files matched your search
@@ -43,6 +43,7 @@ import com.hippo.ehviewer.client.EhUrl
|
||||
import com.hippo.ehviewer.client.EhUtils
|
||||
import com.hippo.ehviewer.client.data.GalleryDetail
|
||||
import com.hippo.ehviewer.client.thumbUrl
|
||||
import com.hippo.ehviewer.ui.scene.navWithUrl
|
||||
import com.hippo.ehviewer.util.tellClipboardWithToast
|
||||
|
||||
private const val INDEX_URL = 2
|
||||
|
||||
@@ -65,6 +65,8 @@ import com.hippo.ehviewer.ui.scene.GalleryDetailScene
|
||||
import com.hippo.ehviewer.ui.scene.GalleryListScene
|
||||
import com.hippo.ehviewer.ui.scene.GalleryListScene.Companion.toStartArgs
|
||||
import com.hippo.ehviewer.ui.scene.ProgressScene
|
||||
import com.hippo.ehviewer.ui.scene.navAnimated
|
||||
import com.hippo.ehviewer.ui.scene.navWithUrl
|
||||
import com.hippo.ehviewer.util.addTextToClipboard
|
||||
import com.hippo.ehviewer.util.getParcelableExtraCompat
|
||||
import com.hippo.ehviewer.util.getUrlFromClipboard
|
||||
@@ -130,7 +132,7 @@ class MainActivity : EhActivity() {
|
||||
if ("text/plain" == type) {
|
||||
val builder = ListUrlBuilder()
|
||||
builder.keyword = intent.getStringExtra(Intent.EXTRA_TEXT)
|
||||
navController.navigate(
|
||||
navController.navAnimated(
|
||||
R.id.galleryListScene,
|
||||
builder.toStartArgs(),
|
||||
)
|
||||
@@ -144,7 +146,7 @@ class MainActivity : EhActivity() {
|
||||
builder.mode = ListUrlBuilder.MODE_IMAGE_SEARCH
|
||||
builder.imagePath = temp.path
|
||||
builder.isUseSimilarityScan = true
|
||||
navController.navigate(
|
||||
navController.navAnimated(
|
||||
R.id.galleryListScene,
|
||||
builder.toStartArgs(),
|
||||
)
|
||||
@@ -154,7 +156,7 @@ class MainActivity : EhActivity() {
|
||||
}
|
||||
} else if (action == DownloadService.ACTION_START_DOWNLOADSCENE) {
|
||||
val args = intent.getBundleExtra(DownloadService.ACTION_START_DOWNLOADSCENE_ARGS)
|
||||
navController.navigate(R.id.nav_downloads, args)
|
||||
navController.navAnimated(R.id.nav_downloads, args)
|
||||
}
|
||||
|
||||
return false
|
||||
@@ -344,7 +346,7 @@ class MainActivity : EhActivity() {
|
||||
args.putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GID_TOKEN)
|
||||
args.putLong(GalleryDetailScene.KEY_GID, result1.gid)
|
||||
args.putString(GalleryDetailScene.KEY_TOKEN, result1.token)
|
||||
launch = { navController.navigate(R.id.galleryDetailScene, args) }
|
||||
launch = { navController.navAnimated(R.id.galleryDetailScene, args) }
|
||||
}
|
||||
val result2 = GalleryPageUrlParser.parse(text, false)
|
||||
if (result2 != null) {
|
||||
@@ -353,7 +355,7 @@ class MainActivity : EhActivity() {
|
||||
args.putLong(ProgressScene.KEY_GID, result2.gid)
|
||||
args.putString(ProgressScene.KEY_PTOKEN, result2.pToken)
|
||||
args.putInt(ProgressScene.KEY_PAGE, result2.page)
|
||||
launch = { navController.navigate(R.id.progressScene, args) }
|
||||
launch = { navController.navAnimated(R.id.progressScene, args) }
|
||||
}
|
||||
launch?.let {
|
||||
withUIContext {
|
||||
|
||||
@@ -18,19 +18,12 @@ package com.hippo.ehviewer.ui
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.widget.Toast
|
||||
import androidx.annotation.MainThread
|
||||
import androidx.browser.customtabs.CustomTabsIntent
|
||||
import androidx.navigation.NavController
|
||||
import com.hippo.ehviewer.R
|
||||
import com.hippo.ehviewer.client.data.GalleryDetail
|
||||
import com.hippo.ehviewer.client.parser.GalleryDetailUrlParser
|
||||
import com.hippo.ehviewer.client.parser.GalleryListUrlParser
|
||||
import com.hippo.ehviewer.client.parser.GalleryPageUrlParser
|
||||
import com.hippo.ehviewer.ui.scene.GalleryDetailScene
|
||||
import com.hippo.ehviewer.ui.scene.GalleryListScene
|
||||
import com.hippo.ehviewer.ui.scene.ProgressScene
|
||||
|
||||
private val intent = CustomTabsIntent.Builder().apply { setShowTitle(true) }.build()
|
||||
|
||||
@@ -59,38 +52,3 @@ fun Context.jumpToReaderByPage(url: String, detail: GalleryDetail): Boolean {
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@MainThread
|
||||
fun NavController.navWithUrl(url: String): Boolean {
|
||||
if (url.isEmpty()) return false
|
||||
GalleryListUrlParser.parse(url)?.let { lub ->
|
||||
Bundle().apply {
|
||||
putString(GalleryListScene.KEY_ACTION, GalleryListScene.ACTION_LIST_URL_BUILDER)
|
||||
putParcelable(GalleryListScene.KEY_LIST_URL_BUILDER, lub)
|
||||
navigate(R.id.galleryListScene, this)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
GalleryDetailUrlParser.parse(url)?.apply {
|
||||
Bundle().apply {
|
||||
putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GID_TOKEN)
|
||||
putLong(GalleryDetailScene.KEY_GID, gid)
|
||||
putString(GalleryDetailScene.KEY_TOKEN, token)
|
||||
navigate(R.id.galleryDetailScene, this)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
GalleryPageUrlParser.parse(url)?.apply {
|
||||
Bundle().apply {
|
||||
putString(ProgressScene.KEY_ACTION, ProgressScene.ACTION_GALLERY_TOKEN)
|
||||
putLong(ProgressScene.KEY_GID, gid)
|
||||
putString(ProgressScene.KEY_PTOKEN, pToken)
|
||||
putInt(ProgressScene.KEY_PAGE, page)
|
||||
navigate(R.id.progressScene, this)
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
@@ -29,8 +29,6 @@ import androidx.core.view.GravityCompat
|
||||
import androidx.core.view.SoftwareKeyboardControllerCompat
|
||||
import androidx.drawerlayout.widget.DrawerLayout
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.navigation.NavOptions
|
||||
import androidx.navigation.fragment.NavHostFragment
|
||||
import com.hippo.ehviewer.ui.MainActivity
|
||||
import rikka.core.res.resolveDrawable
|
||||
|
||||
@@ -202,17 +200,6 @@ abstract class BaseScene : Fragment() {
|
||||
val theme: Theme
|
||||
get() = requireActivity().theme
|
||||
|
||||
@SuppressLint("PrivateResource")
|
||||
fun navigate(id: Int, args: Bundle?, singleTop: Boolean = false) {
|
||||
val options: NavOptions = NavOptions.Builder().setLaunchSingleTop(singleTop)
|
||||
.setEnterAnim(androidx.fragment.R.animator.fragment_open_enter)
|
||||
.setExitAnim(androidx.fragment.R.animator.fragment_open_exit)
|
||||
.setPopEnterAnim(androidx.fragment.R.animator.fragment_close_enter)
|
||||
.setPopExitAnim(androidx.fragment.R.animator.fragment_close_exit)
|
||||
.build()
|
||||
NavHostFragment.findNavController(this).navigate(id, args, options)
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val LENGTH_SHORT = 0
|
||||
const val LENGTH_LONG = 1
|
||||
|
||||
@@ -834,7 +834,7 @@ class DownloadsScene :
|
||||
GalleryDetailScene.ACTION_GALLERY_INFO,
|
||||
)
|
||||
args.putParcelable(GalleryDetailScene.KEY_GALLERY_INFO, list[index])
|
||||
navigate(R.id.galleryDetailScene, args)
|
||||
navAnimated(R.id.galleryDetailScene, args)
|
||||
} else if (binding.start === v) {
|
||||
val intent = Intent(activity, DownloadService::class.java)
|
||||
intent.action = DownloadService.ACTION_START
|
||||
|
||||
@@ -399,7 +399,7 @@ class FavoritesScene :
|
||||
GalleryDetailScene.ACTION_GALLERY_INFO,
|
||||
)
|
||||
args.putParcelable(GalleryDetailScene.KEY_GALLERY_INFO, gi)
|
||||
navigate(R.id.galleryDetailScene, args)
|
||||
navAnimated(R.id.galleryDetailScene, args)
|
||||
}
|
||||
}
|
||||
return true
|
||||
|
||||
@@ -78,7 +78,6 @@ import com.hippo.ehviewer.ui.legacy.ObservedTextView
|
||||
import com.hippo.ehviewer.ui.legacy.URLImageGetter
|
||||
import com.hippo.ehviewer.ui.legacy.ViewTransition
|
||||
import com.hippo.ehviewer.ui.legacy.WindowInsetsAnimationHelper
|
||||
import com.hippo.ehviewer.ui.navWithUrl
|
||||
import com.hippo.ehviewer.ui.openBrowser
|
||||
import com.hippo.ehviewer.ui.scene.GalleryListScene.Companion.toStartArgs
|
||||
import com.hippo.ehviewer.util.ExceptionUtils
|
||||
@@ -815,7 +814,7 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh
|
||||
mode = ListUrlBuilder.MODE_UPLOADER
|
||||
keyword = it
|
||||
}
|
||||
navigate(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
navAnimated(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
}
|
||||
}
|
||||
time.text = ReadableTime.getTimeAgo(value.time)
|
||||
|
||||
@@ -776,7 +776,7 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener {
|
||||
}
|
||||
val lub = ListUrlBuilder()
|
||||
lub.category = category
|
||||
navigate(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
navAnimated(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
}
|
||||
|
||||
private fun onUploaderChipClick() {
|
||||
@@ -786,7 +786,7 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener {
|
||||
val lub = ListUrlBuilder()
|
||||
lub.mode = ListUrlBuilder.MODE_UPLOADER
|
||||
lub.keyword = uploader
|
||||
navigate(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
navAnimated(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
}
|
||||
|
||||
private fun onDownloadButtonClick() {
|
||||
@@ -945,7 +945,7 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener {
|
||||
args.putString(KEY_ACTION, ACTION_GID_TOKEN)
|
||||
args.putLong(KEY_GID, newerVersion.gid)
|
||||
args.putString(KEY_TOKEN, newerVersion.token)
|
||||
navigate(R.id.galleryDetailScene, args)
|
||||
navAnimated(R.id.galleryDetailScene, args)
|
||||
}
|
||||
.show()
|
||||
}
|
||||
@@ -1041,7 +1041,7 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener {
|
||||
val lub = ListUrlBuilder()
|
||||
lub.mode = ListUrlBuilder.MODE_TAG
|
||||
lub.keyword = tag
|
||||
navigate(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
navAnimated(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
}
|
||||
|
||||
val hapticFeedback = LocalHapticFeedback.current
|
||||
@@ -1083,7 +1083,7 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener {
|
||||
GalleryCommentsScene.KEY_GALLERY_DETAIL,
|
||||
galleryDetail,
|
||||
)
|
||||
navigate(R.id.galleryCommentsScene, args)
|
||||
navAnimated(R.id.galleryCommentsScene, args)
|
||||
}
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
@@ -1146,7 +1146,7 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener {
|
||||
val lub = ListUrlBuilder()
|
||||
lub.mode = ListUrlBuilder.MODE_NORMAL
|
||||
lub.keyword = "\"" + keyword + "\""
|
||||
navigate(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
navAnimated(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
return
|
||||
}
|
||||
val artist = getArtist(gd.tags)
|
||||
@@ -1154,14 +1154,14 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener {
|
||||
val lub = ListUrlBuilder()
|
||||
lub.mode = ListUrlBuilder.MODE_TAG
|
||||
lub.keyword = "artist:$artist"
|
||||
navigate(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
navAnimated(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
return
|
||||
}
|
||||
if (null != gd.uploader) {
|
||||
val lub = ListUrlBuilder()
|
||||
lub.mode = ListUrlBuilder.MODE_UPLOADER
|
||||
lub.keyword = gd.uploader
|
||||
navigate(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
navAnimated(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1176,7 +1176,7 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener {
|
||||
val lub = ListUrlBuilder()
|
||||
lub.mode = ListUrlBuilder.MODE_NORMAL
|
||||
lub.hash = key.substringAfterLast('/').substringBefore('-')
|
||||
navigate(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
navAnimated(R.id.galleryListScene, lub.toStartArgs(), true)
|
||||
} catch (e: Throwable) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
@@ -1187,7 +1187,7 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener {
|
||||
val args = Bundle()
|
||||
args.putParcelable(KEY_GALLERY_DETAIL, it)
|
||||
args.putBoolean(KEY_NEXT_PAGE, nextPage)
|
||||
navigate(R.id.galleryPreviewsScene, args)
|
||||
navAnimated(R.id.galleryPreviewsScene, args)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -585,7 +585,7 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, SearchLayout.H
|
||||
val args = Bundle()
|
||||
args.putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GALLERY_INFO)
|
||||
args.putParcelable(GalleryDetailScene.KEY_GALLERY_INFO, gi)
|
||||
navigate(R.id.galleryDetailScene, args)
|
||||
navAnimated(R.id.galleryDetailScene, args)
|
||||
}
|
||||
|
||||
override fun onClickPrimaryFab(view: FabLayout, fab: FloatingActionButton) {
|
||||
@@ -982,7 +982,7 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, SearchLayout.H
|
||||
val args = ListUrlBuilder().apply {
|
||||
set(q)
|
||||
}.toStartArgs().apply { putString(KEY_GOTO, goto) }
|
||||
navigate(R.id.galleryListScene, args, true)
|
||||
navAnimated(R.id.galleryListScene, args, true)
|
||||
setState(STATE_NORMAL)
|
||||
closeDrawer(GravityCompat.END)
|
||||
}
|
||||
@@ -1050,7 +1050,7 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, SearchLayout.H
|
||||
}
|
||||
|
||||
override fun onClick() {
|
||||
navigate(getDestination(), getArgs())
|
||||
navAnimated(getDestination(), getArgs())
|
||||
if (mState == STATE_SIMPLE_SEARCH) {
|
||||
setState(STATE_NORMAL)
|
||||
} else if (mState == STATE_SEARCH_SHOW_LIST) {
|
||||
|
||||
@@ -202,7 +202,7 @@ class HistoryScene : BaseScene() {
|
||||
val args = Bundle()
|
||||
args.putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GALLERY_INFO)
|
||||
args.putParcelable(GalleryDetailScene.KEY_GALLERY_INFO, gi)
|
||||
navigate(R.id.galleryDetailScene, args)
|
||||
navAnimated(R.id.galleryDetailScene, args)
|
||||
}
|
||||
|
||||
private val cardHeight = (3 * listThumbSize * 3).pxToDp.dp
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.hippo.ehviewer.ui.scene
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import androidx.annotation.MainThread
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavOptions
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import com.hippo.ehviewer.R
|
||||
import com.hippo.ehviewer.client.parser.GalleryDetailUrlParser
|
||||
import com.hippo.ehviewer.client.parser.GalleryListUrlParser
|
||||
import com.hippo.ehviewer.client.parser.GalleryPageUrlParser
|
||||
|
||||
@MainThread
|
||||
@SuppressLint("PrivateResource")
|
||||
fun NavController.navAnimated(id: Int, args: Bundle?, singleTop: Boolean = false) {
|
||||
val options: NavOptions = NavOptions.Builder().setLaunchSingleTop(singleTop)
|
||||
.setEnterAnim(androidx.fragment.R.animator.fragment_open_enter)
|
||||
.setExitAnim(androidx.fragment.R.animator.fragment_open_exit)
|
||||
.setPopEnterAnim(androidx.fragment.R.animator.fragment_close_enter)
|
||||
.setPopExitAnim(androidx.fragment.R.animator.fragment_close_exit)
|
||||
.build()
|
||||
navigate(id, args, options)
|
||||
}
|
||||
|
||||
@MainThread
|
||||
fun NavController.navWithUrl(url: String): Boolean {
|
||||
if (url.isEmpty()) return false
|
||||
GalleryListUrlParser.parse(url)?.let { lub ->
|
||||
Bundle().apply {
|
||||
putString(GalleryListScene.KEY_ACTION, GalleryListScene.ACTION_LIST_URL_BUILDER)
|
||||
putParcelable(GalleryListScene.KEY_LIST_URL_BUILDER, lub)
|
||||
navAnimated(R.id.galleryListScene, this)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
GalleryDetailUrlParser.parse(url)?.apply {
|
||||
Bundle().apply {
|
||||
putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GID_TOKEN)
|
||||
putLong(GalleryDetailScene.KEY_GID, gid)
|
||||
putString(GalleryDetailScene.KEY_TOKEN, token)
|
||||
navAnimated(R.id.galleryDetailScene, this)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
GalleryPageUrlParser.parse(url)?.apply {
|
||||
Bundle().apply {
|
||||
putString(ProgressScene.KEY_ACTION, ProgressScene.ACTION_GALLERY_TOKEN)
|
||||
putLong(ProgressScene.KEY_GID, gid)
|
||||
putString(ProgressScene.KEY_PTOKEN, pToken)
|
||||
putInt(ProgressScene.KEY_PAGE, page)
|
||||
navAnimated(R.id.progressScene, this)
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@MainThread
|
||||
fun Fragment.navAnimated(id: Int, args: Bundle?, singleTop: Boolean = false) = findNavController().navAnimated(id, args, singleTop)
|
||||
@@ -61,7 +61,7 @@ class ProgressScene : BaseScene() {
|
||||
arg.putInt(GalleryDetailScene.KEY_PAGE, page)
|
||||
withUIContext {
|
||||
findNavController().popBackStack()
|
||||
navigate(R.id.galleryDetailScene, arg)
|
||||
navAnimated(R.id.galleryDetailScene, arg)
|
||||
}
|
||||
}.onFailure {
|
||||
error = ExceptionUtils.getReadableString(it)
|
||||
|
||||
Reference in new issue
Block a user