Skip to content

Commit da3da59

Browse files
committed
添加路由Tag工具,支持更多对Tag的操作
1 parent f4dea68 commit da3da59

File tree

8 files changed

+138
-111
lines changed

8 files changed

+138
-111
lines changed

GoRouter-Api/src/main/java/com/wyjson/router/model/CardMeta.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
import com.wyjson.router.enums.ParamType;
99
import com.wyjson.router.enums.RouteType;
1010
import com.wyjson.router.exception.RouterException;
11+
import com.wyjson.router.utils.RouteTagUtils;
1112
import com.wyjson.router.utils.TextUtils;
1213

14+
import java.util.ArrayList;
1315
import java.util.HashMap;
1416
import java.util.Map;
1517

@@ -238,6 +240,30 @@ private CardMeta put(String key, String name, ParamType type, boolean required)
238240
return this;
239241
}
240242

243+
public boolean isTagExist(int item) {
244+
return RouteTagUtils.isExist(tag, item);
245+
}
246+
247+
public int getTagExistCount() {
248+
return RouteTagUtils.getExistCount(tag);
249+
}
250+
251+
public int addTag(int item) {
252+
return tag = RouteTagUtils.addItem(tag, item);
253+
}
254+
255+
public int deleteTag(int item) {
256+
return tag = RouteTagUtils.deleteItem(tag, item);
257+
}
258+
259+
public int getTagNegation() {
260+
return RouteTagUtils.getNegation(tag);
261+
}
262+
263+
public ArrayList<Integer> getTagExistList(int... itemList) {
264+
return RouteTagUtils.getExistList(tag, itemList);
265+
}
266+
241267
@NonNull
242268
public String toString() {
243269
if (!GoRouter.isDebug()) {
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package com.wyjson.router.utils;
2+
3+
import java.util.ArrayList;
4+
5+
/**
6+
* 单个int有4字节,可以配置31个开关,范围从1到1 << 30
7+
*/
8+
public class RouteTagUtils {
9+
10+
/**
11+
* 是否存在
12+
*
13+
* @param v
14+
* @param item
15+
* @return
16+
*/
17+
public static boolean isExist(int v, int item) {
18+
return (v & item) > 0;
19+
}
20+
21+
/**
22+
* 存在多少个
23+
*
24+
* @param v
25+
* @return
26+
*/
27+
public static int getExistCount(int v) {
28+
return Integer.bitCount(v);
29+
}
30+
31+
/**
32+
* 添加
33+
*
34+
* @param v
35+
* @param item
36+
* @return
37+
*/
38+
public static int addItem(int v, int item) {
39+
return v | item;
40+
}
41+
42+
/**
43+
* 删除
44+
*
45+
* @param v
46+
* @param item
47+
* @return
48+
*/
49+
public static int deleteItem(int v, int item) {
50+
return v & ~item;
51+
}
52+
53+
/**
54+
* 取反
55+
*
56+
* @param v
57+
* @return
58+
*/
59+
public static int getNegation(int v) {
60+
return ~v;
61+
}
62+
63+
/**
64+
* 获取所有存在的
65+
*
66+
* @param v
67+
* @param itemList
68+
* @return
69+
*/
70+
public static ArrayList<Integer> getExistList(int v, int... itemList) {
71+
ArrayList<Integer> list = new ArrayList<>();
72+
for (int item : itemList) {
73+
if (isExist(v, item))
74+
list.add(item);
75+
}
76+
return list;
77+
}
78+
79+
}

README.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -370,9 +370,16 @@ public class DegradeServiceImpl implements IDegradeService {
370370

371371
```java
372372
// 我们经常需要在目标页面中配置一些属性,比方说"是否需要登陆"之类的
373-
// 可以通过@Route注解的tag属性进行扩展,这个属性是一个 int值,换句话说,单个int有4字节,可以配置31个开关
374-
// 剩下的可以自行发挥,通过字节操作可以标识31个开关,通过开关标记目标页面的一些属性,在拦截器中可以拿到这个标记进行业务逻辑判断
373+
// 可以注通过@Route解的tag属性进行扩展,这个属性是一个int值,换句话说,单个int有4字节,可以配置31个开关
375374
@Route(path = "/user/info/activity", tag = LOGIN | AUTHENTICATION)
375+
376+
// 在拦截器里通过Card对象拿到这个标记进行业务逻辑判断或处理
377+
card.isTagExist(LOGIN); // 判断是否存在登录标识
378+
card.getTagExistCount(); // tag存在多少个开关
379+
card.addTag(LOGIN); // 追加登录标识
380+
card.deleteTag(LOGIN); // 删除登录标识
381+
card.getTagNegation(); // 取反
382+
ArrayList<Integer> tagList = card.getTagExistList(LOGIN, AUTHENTICATION, SAFETY); // 获取全部存在的标识
376383
```
377384

378385
tag使用示例[UserInfoActivity.java](https://github.com/wyjsonGo/GoRouter/blob/master/module_user/src/main/java/com/wyjson/module_user/activity/UserInfoActivity.java)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.wyjson.module_common.route;
2+
3+
/**
4+
* 单个int有4字节,可以配置31个开关,范围从1到1 << 30
5+
*/
6+
public interface RouteTag {
7+
8+
int LOGIN = 1;
9+
int AUTHENTICATION = 1 << 1;
10+
int SAFETY = 1 << 2;
11+
12+
}

module_common/src/main/java/com/wyjson/module_common/route/utils/RouteTagUtils.java

Lines changed: 0 additions & 98 deletions
This file was deleted.

module_user/src/main/java/com/wyjson/module_user/activity/UserInfoActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.wyjson.module_user.activity;
22

3-
import static com.wyjson.module_common.route.utils.RouteTagUtils.AUTHENTICATION;
4-
import static com.wyjson.module_common.route.utils.RouteTagUtils.LOGIN;
3+
import static com.wyjson.module_common.route.RouteTag.AUTHENTICATION;
4+
import static com.wyjson.module_common.route.RouteTag.LOGIN;
55

66
import android.os.Bundle;
77

module_user/src/main/java/com/wyjson/module_user/route/interceptor/AuthenticationInterceptor.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package com.wyjson.module_user.route.interceptor;
22

3-
import static com.wyjson.module_common.route.utils.RouteTagUtils.TagEnum.AUTHENTICATION;
3+
import static com.wyjson.module_common.route.RouteTag.AUTHENTICATION;
44

5-
import com.wyjson.module_common.route.utils.RouteTagUtils;
65
import com.wyjson.router.annotation.Interceptor;
7-
import com.wyjson.router.model.Card;
8-
import com.wyjson.router.exception.RouterException;
96
import com.wyjson.router.callback.InterceptorCallback;
7+
import com.wyjson.router.exception.RouterException;
108
import com.wyjson.router.interfaces.IInterceptor;
9+
import com.wyjson.router.model.Card;
1110

1211
@Interceptor(ordinal = 100, remark = "身份验证拦截器")
1312
public class AuthenticationInterceptor implements IInterceptor {
@@ -19,7 +18,7 @@ public void init() {
1918

2019
@Override
2120
public void process(Card card, InterceptorCallback callback) {
22-
if (RouteTagUtils.TagEnum.isExist(card.getTag(), AUTHENTICATION)) {
21+
if (card.isTagExist(AUTHENTICATION)) {
2322
if (false) {// 判断用户是否身份验证了
2423
callback.onInterrupt(card, new RouterException("未身份认证,拦截!"));
2524
return;

module_user/src/main/java/com/wyjson/module_user/route/interceptor/SignInInterceptor.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package com.wyjson.module_user.route.interceptor;
22

3+
import static com.wyjson.module_common.route.RouteTag.LOGIN;
4+
35
import android.os.Handler;
46
import android.os.Looper;
57

68
import androidx.appcompat.app.AlertDialog;
79

8-
import com.wyjson.module_common.route.utils.RouteTagUtils;
910
import com.wyjson.router.annotation.Interceptor;
1011
import com.wyjson.router.callback.InterceptorCallback;
1112
import com.wyjson.router.exception.RouterException;
@@ -16,15 +17,16 @@
1617
@Interceptor(ordinal = 1, remark = "登录拦截器")
1718
public class SignInInterceptor implements IInterceptor {
1819

20+
private final Handler handler = new Handler(Looper.getMainLooper());
21+
1922
@Override
2023
public void init() {
21-
2224
}
2325

2426
@Override
2527
public void process(Card card, InterceptorCallback callback) {
26-
if (RouteTagUtils.TagEnum.isExist(card.getTag(), RouteTagUtils.TagEnum.LOGIN)) {
27-
new Handler(Looper.getMainLooper()).post(new Runnable() {
28+
if (card.isTagExist(LOGIN)) {
29+
handler.post(new Runnable() {
2830
@Override
2931
public void run() {
3032
new AlertDialog.Builder(card.getContext())

0 commit comments

Comments
 (0)