Skip to content

Commit 69501b9

Browse files
SoxiaLiSAclaude
andcommitted
refactor(nav): 动态路由入口改走 TemplateRoute,删掉 6 个各自手搓的路由字符串常量
- UserTagSearchSheet.routeOf() 返回 TemplateRoute;UActivity / UserActivityV3.jumpTo() 参数改枚举; FragmentCenter.openFragment(String) → (TemplateRoute),26 个入口跟着变。 - OutWakeActivity.FRAGMENT_WEB/LOGIN、SettingsCatalog.PAGE_CATEGORY、TagEditSheet.WEB_HOME_ROUTE、 MuteTagSheet.MUTED_TAGS_ROUTE、InfoCategoryListFragment / NotificationViewMoreFragment.ROUTE_KEY 这些「一个页面自己藏一份路由字符串」的常量全部删除,指向枚举。 - 精华列:FeatureFeedFragment 读库后先 TemplateRoute.fromKey() 校验,认不得的 dataType 只 Timber.w + return——库里的脏数据不该触发 debug 下的未知路由崩溃;三个落库写入点 (LikeIllust / UserIllust / UserMangaFeedFragment 的 DATA_TYPE_FEATURE)改引用枚举 key, 让「这个字符串是持久化契约」在代码里可见。 真机 Pixel 8 走 UI 验过 43 条路由(含 Serializable extra 的小说详情/正文/评论/喜欢用户列表),0 崩溃。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017PpMNz7Xnv4trztaPfuSBu
1 parent 74f0110 commit 69501b9

17 files changed

Lines changed: 93 additions & 79 deletions

app/src/main/java/ceui/lisa/activities/OutWakeActivity.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import ceui.pixiv.witstudio.dialog.WitDialog;
2121
import ceui.pixiv.witstudio.dialog.WitDialogAction;
2222
import ceui.lisa.core.JavaAsync;
23+
import ceui.pixiv.ui.navigation.TemplateRoute;
2324

2425
public class OutWakeActivity extends BaseActivity<ActivityOutWakeBinding> {
2526

@@ -34,8 +35,6 @@ public class OutWakeActivity extends BaseActivity<ActivityOutWakeBinding> {
3435

3536
private static final String HOST_ACCOUNT = "account";
3637
private static final String HOST_SEARCH = "search";
37-
private static final String FRAGMENT_WEB = "网页链接";
38-
private static final String FRAGMENT_LOGIN = "登录注册";
3938

4039
// 已经发起过 token 交换的登录 code。OAuth 授权码是单次性的,重复提交会被 Pixiv
4140
// 拒成「不正确的请求」(invalid_request)。static 是为了跨 Activity 重建(配置变化/
@@ -229,7 +228,7 @@ private void openWebPage(String url, String title, boolean preferPreserve) {
229228
Intent intent = new Intent(mContext, TemplateActivity.class);
230229
intent.putExtra(Params.URL, url);
231230
intent.putExtra(Params.TITLE, title);
232-
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, FRAGMENT_WEB);
231+
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, TemplateRoute.WEB_LINK.key);
233232
if (preferPreserve) {
234233
intent.putExtra(Params.PREFER_PRESERVE, true);
235234
}
@@ -357,7 +356,7 @@ public void onClick(WitDialog dialog, int index) {
357356
@Override
358357
public void onClick(WitDialog dialog, int index) {
359358
Intent intent = new Intent(mContext, TemplateActivity.class);
360-
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, FRAGMENT_WEB);
359+
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, TemplateRoute.WEB_LINK.key);
361360
intent.putExtra(Params.URL, Params.URL_R18_SETTING);
362361
startActivity(intent);
363362
}
@@ -385,7 +384,7 @@ private void openMainActivity() {
385384
*/
386385
private void backToLoginScreen() {
387386
Intent intent = new Intent(mContext, TemplateActivity.class);
388-
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, FRAGMENT_LOGIN);
387+
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, TemplateRoute.LOGIN.key);
389388
startActivity(intent);
390389
finish();
391390
}

app/src/main/java/ceui/lisa/activities/UActivity.kt

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import kotlinx.coroutines.CancellationException
4949
import kotlinx.coroutines.withContext
5050
import kotlinx.coroutines.Dispatchers
5151
import kotlinx.coroutines.launch
52+
import ceui.pixiv.ui.navigation.TemplateRoute
5253

5354
class UActivity : BaseActivity<ActivityNewUserBinding>(), Display<UserDetailResponse> {
5455
private var userId = 0L
@@ -219,24 +220,24 @@ class UActivity : BaseActivity<ActivityNewUserBinding>(), Display<UserDetailResp
219220

220221
if (totalIllusts > 0) {
221222
labels.add("跳转到插画…")
222-
actions.add { jumpTo(data.user.id, UserIllustJumpHelper.Kind.ILLUST, "插画作品") }
223+
actions.add { jumpTo(data.user.id, UserIllustJumpHelper.Kind.ILLUST, TemplateRoute.USER_ILLUSTS) }
223224
}
224225
if (totalManga > 0) {
225226
labels.add("跳转到漫画…")
226-
actions.add { jumpTo(data.user.id, UserIllustJumpHelper.Kind.MANGA, "漫画作品") }
227+
actions.add { jumpTo(data.user.id, UserIllustJumpHelper.Kind.MANGA, TemplateRoute.USER_MANGA) }
227228
}
228229
// 与 V3 的「更多」菜单对齐:自己的页面也要能进相关用户和下载管理
229230
labels.add(getString(R.string.string_436)) // 相关用户
230231
actions.add {
231232
val intent = Intent(mContext, TemplateActivity::class.java)
232233
intent.putExtra(Params.USER_ID, data.user.id)
233-
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, "相关用户")
234+
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, TemplateRoute.RELATED_USERS.key)
234235
startActivity(intent)
235236
}
236237
labels.add(getString(R.string.bulk_user_menu_open_download_manager))
237238
actions.add {
238239
val intent = Intent(mContext, TemplateActivity::class.java)
239-
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, "下载管理")
240+
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, TemplateRoute.DOWNLOAD_MANAGER.key)
240241
startActivity(intent)
241242
}
242243
// issue #1027:把作者主页固定成桌面图标。桌面不支持时(部分三方 launcher)不摆这一项
@@ -311,15 +312,15 @@ class UActivity : BaseActivity<ActivityNewUserBinding>(), Display<UserDetailResp
311312
val pFriend = View.OnClickListener {
312313
val intent = Intent(mContext, TemplateActivity::class.java)
313314
intent.putExtra(Params.USER_ID, data.user.id)
314-
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, "好P友")
315+
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, TemplateRoute.NICE_FRIENDS.key)
315316
startActivity(intent)
316317
}
317318
baseBind.pFriend.setOnClickListener(pFriend)
318319
baseBind.pFriendS.setOnClickListener(pFriend)
319320
val follow = View.OnClickListener {
320321
val intent = Intent(mContext, TemplateActivity::class.java)
321322
intent.putExtra(Params.USER_ID, data.user.id)
322-
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, "正在关注")
323+
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, TemplateRoute.FOLLOWING.key)
323324
startActivity(intent)
324325
}
325326
baseBind.followCount.setOnClickListener(follow)
@@ -328,17 +329,17 @@ class UActivity : BaseActivity<ActivityNewUserBinding>(), Display<UserDetailResp
328329

329330
private fun openImageDetail(imageUrl: String, saveName: String) {
330331
startActivity(Intent(mContext, TemplateActivity::class.java).apply {
331-
putExtra(TemplateActivity.EXTRA_FRAGMENT, "图片详情")
332+
putExtra(TemplateActivity.EXTRA_FRAGMENT, TemplateRoute.IMAGE_DETAIL.key)
332333
putExtra(Params.URL, imageUrl)
333334
putExtra(Params.TITLE, saveName)
334335
})
335336
}
336337

337-
private fun jumpTo(userID: Long, kind: UserIllustJumpHelper.Kind, fragmentTag: String) {
338+
private fun jumpTo(userID: Long, kind: UserIllustJumpHelper.Kind, route: TemplateRoute) {
338339
UserIllustJumpHelper.showJumpDialog(this, userID, kind) { offset, pickedDate ->
339340
if (isFinishing || isDestroyed) return@showJumpDialog
340341
val intent = Intent(this, TemplateActivity::class.java)
341-
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, fragmentTag)
342+
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, route.key)
342343
intent.putExtra(Params.USER_ID, userID)
343344
intent.putExtra(Params.INITIAL_OFFSET, offset)
344345
if (pickedDate != null) intent.putExtra(Params.TARGET_DATE, pickedDate)

app/src/main/java/ceui/lisa/activities/UserActivityV3.kt

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import kotlinx.coroutines.Dispatchers
5757
import kotlinx.coroutines.launch
5858
import timber.log.Timber
5959
import java.text.NumberFormat
60+
import ceui.pixiv.ui.navigation.TemplateRoute
6061

6162
private const val KEY_TAB_KINDS = "user_v3_tab_kinds"
6263
/**
@@ -587,13 +588,13 @@ class UserActivityV3 : BaseActivity<ActivityUserV3Binding>() {
587588
baseBind.statFollowing.setOnClickListener {
588589
val intent = Intent(mContext, TemplateActivity::class.java)
589590
intent.putExtra(Params.USER_ID, user.id)
590-
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, "正在关注")
591+
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, TemplateRoute.FOLLOWING.key)
591592
startActivity(intent)
592593
}
593594
baseBind.statMypixiv.setOnClickListener {
594595
val intent = Intent(mContext, TemplateActivity::class.java)
595596
intent.putExtra(Params.USER_ID, user.id)
596-
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, "好P友")
597+
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, TemplateRoute.NICE_FRIENDS.key)
597598
startActivity(intent)
598599
}
599600

@@ -619,7 +620,7 @@ class UserActivityV3 : BaseActivity<ActivityUserV3Binding>() {
619620
showBanner(cover) {
620621
if (tryOpenNovelReaderDirect(novel.id)) return@showBanner
621622
startActivity(Intent(this, TemplateActivity::class.java).apply {
622-
putExtra(TemplateActivity.EXTRA_FRAGMENT, "小说详情")
623+
putExtra(TemplateActivity.EXTRA_FRAGMENT, TemplateRoute.NOVEL_DETAIL.key)
623624
putExtra(Params.NOVEL_ID, novel.id)
624625
})
625626
}
@@ -695,7 +696,7 @@ class UserActivityV3 : BaseActivity<ActivityUserV3Binding>() {
695696
baseBind.msgBtn.imageTintList = android.content.res.ColorStateList.valueOf(palette.textAccent)
696697
baseBind.msgBtn.setOnClick {
697698
val intent = android.content.Intent(mContext, TemplateActivity::class.java)
698-
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, "聊天室")
699+
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, TemplateRoute.CHAT.key)
699700
intent.putExtra(TemplateActivity.EXTRA_CHAT_PEER_UID, userId)
700701
startActivity(intent)
701702
}
@@ -721,17 +722,17 @@ class UserActivityV3 : BaseActivity<ActivityUserV3Binding>() {
721722

722723
if (data.profile.total_illusts > 0) {
723724
labels.add("跳转到插画…")
724-
actions.add { jumpTo(data.user.id, UserIllustJumpHelper.Kind.ILLUST, "插画作品") }
725+
actions.add { jumpTo(data.user.id, UserIllustJumpHelper.Kind.ILLUST, TemplateRoute.USER_ILLUSTS) }
725726
}
726727
if (data.profile.total_manga > 0) {
727728
labels.add("跳转到漫画…")
728-
actions.add { jumpTo(data.user.id, UserIllustJumpHelper.Kind.MANGA, "漫画作品") }
729+
actions.add { jumpTo(data.user.id, UserIllustJumpHelper.Kind.MANGA, TemplateRoute.USER_MANGA) }
729730
}
730731
labels.add(getString(R.string.string_436)) // 相关用户
731732
actions.add {
732733
val intent = Intent(this, TemplateActivity::class.java)
733734
intent.putExtra(Params.USER_ID, data.user.id)
734-
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, "相关用户")
735+
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, TemplateRoute.RELATED_USERS.key)
735736
startActivity(intent)
736737
}
737738
if (data.profile.total_illusts > 0) {
@@ -757,7 +758,7 @@ class UserActivityV3 : BaseActivity<ActivityUserV3Binding>() {
757758
labels.add(getString(R.string.bulk_user_menu_open_download_manager))
758759
actions.add {
759760
val intent = Intent(this, TemplateActivity::class.java)
760-
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, "下载管理") // route key
761+
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, TemplateRoute.DOWNLOAD_MANAGER.key) // route key
761762
startActivity(intent)
762763
}
763764
// issue #1027:把作者主页固定成桌面图标。桌面不支持时(部分三方 launcher)不摆这一项
@@ -817,11 +818,11 @@ class UserActivityV3 : BaseActivity<ActivityUserV3Binding>() {
817818
// 不在这里 notifyNewItems —— 等 fetcher 全部抓完才统一唤醒消费者
818819
}
819820

820-
private fun jumpTo(userID: Long, kind: UserIllustJumpHelper.Kind, fragmentTag: String) {
821+
private fun jumpTo(userID: Long, kind: UserIllustJumpHelper.Kind, route: TemplateRoute) {
821822
UserIllustJumpHelper.showJumpDialog(this, userID, kind) { offset, pickedDate ->
822823
if (isFinishing || isDestroyed) return@showJumpDialog
823824
val intent = Intent(this, TemplateActivity::class.java)
824-
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, fragmentTag)
825+
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, route.key)
825826
intent.putExtra(Params.USER_ID, userID)
826827
intent.putExtra(Params.INITIAL_OFFSET, offset)
827828
if (pickedDate != null) intent.putExtra(Params.TARGET_DATE, pickedDate)
@@ -831,7 +832,7 @@ class UserActivityV3 : BaseActivity<ActivityUserV3Binding>() {
831832

832833
private fun openImageDetail(imageUrl: String, saveName: String) {
833834
startActivity(Intent(mContext, TemplateActivity::class.java).apply {
834-
putExtra(TemplateActivity.EXTRA_FRAGMENT, "图片详情")
835+
putExtra(TemplateActivity.EXTRA_FRAGMENT, TemplateRoute.IMAGE_DETAIL.key)
835836
putExtra(Params.URL, imageUrl)
836837
putExtra(Params.TITLE, saveName)
837838
})

app/src/main/java/ceui/lisa/activities/UserV3WorkTabFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ class UserV3WorkTabFragment : Fragment(), UserIllustFirstPageListener, UserNovel
147147
filterBar.onTagClick = { name ->
148148
val intent = Intent(requireContext(), TemplateActivity::class.java)
149149
intent.putExtra(Params.USER_ID, userId)
150-
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, UserTagSearchSheet.routeOf(category))
150+
intent.putExtra(TemplateActivity.EXTRA_FRAGMENT, UserTagSearchSheet.routeOf(category).key)
151151
intent.putExtra(Params.KEY_WORD, name)
152152
startActivity(intent)
153153
}

0 commit comments

Comments
 (0)