Skip to content

Commit 7d430cd

Browse files
committed
It support use ActivityRouter directly, not Router. It support to setFalgs to Route
1 parent d692fd9 commit 7d430cd

11 files changed

Lines changed: 105 additions & 35 deletions

File tree

.idea/encodings.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/gradle.xml

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

router/src/main/java/cn/campusapp/router/RouterManager.java

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import android.content.Context;
44
import android.support.annotation.Nullable;
55

6-
import java.lang.reflect.Constructor;
76
import java.util.ArrayList;
87
import java.util.LinkedList;
98
import java.util.List;
@@ -28,21 +27,6 @@ public class RouterManager {
2827

2928
//注意这是个list是有顺序的,所以排在前面的优先级会比较高
3029
static List<IRouter> mRouters = new LinkedList<>();
31-
static ActivityRouter mActivityRouter = new ActivityRouter(); //Activity
32-
static BrowserRouter mBrowserRouter = new BrowserRouter(); //浏览器
33-
34-
35-
static {
36-
try {
37-
Constructor<?> constructor = Class.forName("cn.campusapp.router.router.AnnotatedRouterTableInitializer").getConstructor();
38-
IActivityRouteTableInitializer initializer = (IActivityRouteTableInitializer) constructor.newInstance();
39-
mActivityRouter.initActivityRouterTable(initializer);
40-
41-
} catch (Exception e) {
42-
//do nothing
43-
}
44-
}
45-
4630

4731
private RouterManager(){}
4832

@@ -70,30 +54,33 @@ public synchronized void addRouter(IRouter router){
7054
}
7155

7256
public synchronized void initBrowserRouter(Context context){
73-
mBrowserRouter.init(context);
74-
addRouter(mBrowserRouter);
57+
BrowserRouter browserRouter = BrowserRouter.getInstance();
58+
browserRouter.init(context);
59+
addRouter(browserRouter);
7560
}
7661

7762

7863
public synchronized void initActivityRouter(Context context){
79-
mActivityRouter.init(context);
80-
addRouter(mActivityRouter);
64+
ActivityRouter activityRouter = ActivityRouter.getInstance();
65+
activityRouter.init(context);
66+
addRouter(activityRouter);
8167
}
8268

8369
public synchronized void initActivityRouter(Context context, String ... schemes){
8470
initActivityRouter(context, null, schemes);
8571
}
8672

8773
public synchronized void initActivityRouter(Context context, IActivityRouteTableInitializer initializer, String ... schemes){
74+
ActivityRouter router = ActivityRouter.getInstance();
8875
if(initializer == null) {
89-
mActivityRouter.init(context);
76+
router.init(context);
9077
} else {
91-
mActivityRouter.init(context, initializer);
78+
router.init(context, initializer);
9279
}
9380
if(schemes != null && schemes.length > 0){
94-
mActivityRouter.setMatchSchemes(schemes);
81+
router.setMatchSchemes(schemes);
9582
}
96-
addRouter(mActivityRouter);
83+
addRouter(router);
9784
}
9885

9986
public List<IRouter> getRouters(){

router/src/main/java/cn/campusapp/router/route/ActivityRoute.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public class ActivityRoute extends BaseRoute {
2727
private WeakReference<Fragment> mSupportFRef; //if you want to use fragment.startActivityForResutl
2828
private int mRequestCode = 0; // request code to start activity for result
2929
private WeakReference<android.app.Fragment> mFRef; //if you want to use android.app.fragment to startActivityForResult, you should set this
30+
private int mFlags = 0;
3031

3132
private ActivityRoute(IRouter router, String url){
3233
super(router, url);
@@ -90,6 +91,10 @@ public ActivityRoute setAnimation(Activity activity, int inAnimation, int outAni
9091
return this;
9192
}
9293

94+
public int getFlags(){
95+
return mFlags;
96+
}
97+
9398

9499
/**
95100
* 设置打开页面的方式为startActivity,这也是默认的打开方式
@@ -166,6 +171,11 @@ public ActivityRoute withParams(String key, long value){
166171
return this;
167172
}
168173

174+
public ActivityRoute withFlags(int flags){
175+
mFlags = flags;
176+
return this;
177+
}
178+
169179

170180
public static class Builder{
171181
String mUrl;
@@ -178,6 +188,7 @@ public static class Builder{
178188
private Fragment mSupportFra; //if you want to use fragment.startActivityForResutl
179189
private int mRequestCode = 0; // request code to start activity for result
180190
private android.app.Fragment mFra; //if you want to use android.app.fragment to startActivityForResult, you should set this
191+
int mFlags = 0;
181192

182193

183194
public Builder(IRouter router){
@@ -260,6 +271,11 @@ public Builder withOpenMethodStartForResult(android.app.Fragment fragment, int r
260271
return this;
261272
}
262273

274+
public Builder withFlags(int flags){
275+
mFlags = flags;
276+
return this;
277+
}
278+
263279
/**
264280
*
265281
* @param extra
@@ -302,6 +318,7 @@ public ActivityRoute build(){
302318
route.withOpenMethodStartForResult(mFra, mRequestCode);
303319
}
304320
route.setExtras(mBundle);
321+
route.withFlags(mFlags);
305322
return route;
306323
}
307324
}

router/src/main/java/cn/campusapp/router/router/ActivityRouter.java

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import org.apache.commons.collections4.queue.CircularFifoQueue;
1313

14+
import java.lang.reflect.Constructor;
1415
import java.util.ArrayList;
1516
import java.util.Arrays;
1617
import java.util.HashMap;
@@ -37,26 +38,36 @@
3738
*/
3839
public class ActivityRouter extends BaseRouter {
3940
private static final String TAG = "Router";
40-
static ActivityRouter mSharedActivityRouter = new ActivityRouter();
4141
private static List<String> MATCH_SCHEMES = new ArrayList<>();
4242
private static final String DEFAULT_SCHEME = "activity";
4343
private static final int HISTORY_CACHE_SIZE = 20;
4444

45+
static ActivityRouter mActivityRouter = new ActivityRouter(); //Activity
46+
4547
public static final String KEY_URL = "key_and_activity_router_url";
4648

4749
static {
4850
CAN_OPEN_ROUTE = ActivityRoute.class;
4951
MATCH_SCHEMES.add(DEFAULT_SCHEME);
52+
53+
try {
54+
Constructor<?> constructor = Class.forName("cn.campusapp.router.router.AnnotatedRouterTableInitializer").getConstructor();
55+
IActivityRouteTableInitializer initializer = (IActivityRouteTableInitializer) constructor.newInstance();
56+
mActivityRouter.initActivityRouterTable(initializer);
57+
58+
} catch (Exception e) {
59+
//do nothing
60+
}
5061
}
5162

5263
Context mBaseContext;
5364
Map<String, Class<? extends Activity>> mRouteTable = new HashMap<>();
5465
CircularFifoQueue<HistoryItem> mHistoryCaches = new CircularFifoQueue<>(HISTORY_CACHE_SIZE);
5566

56-
public static ActivityRouter getSharedRouter() {
57-
return mSharedActivityRouter;
58-
}
5967

68+
public static ActivityRouter getInstance(){
69+
return mActivityRouter;
70+
}
6071

6172
public void init(Context appContext, IActivityRouteTableInitializer initializer) {
6273
mBaseContext = appContext;
@@ -91,7 +102,7 @@ public void initActivityRouterTable(IActivityRouteTableInitializer initializer)
91102

92103

93104
@Override
94-
public IRoute getRoute(String url) {
105+
public ActivityRoute getRoute(String url) {
95106
return new ActivityRoute.Builder(this)
96107
.setUrl(url)
97108
.build();
@@ -216,9 +227,10 @@ protected void open(ActivityRoute route, Context context) throws RouteNotFoundEx
216227
throw new RouteNotFoundException(route.getUrl());
217228
}
218229
if (context == null) {
219-
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
230+
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | route.getFlags());
220231
mBaseContext.startActivity(intent);
221232
} else {
233+
intent.setFlags(route.getFlags());
222234
context.startActivity(intent);
223235
}
224236

@@ -235,6 +247,7 @@ protected void openForResult(ActivityRoute route, Activity activity, int request
235247
if (intent == null) {
236248
throw new RouteNotFoundException(route.getUrl());
237249
}
250+
intent.setFlags(route.getFlags());
238251
if (route.getInAnimation() != -1 && route.getOutAnimation() != -1 && route.getActivity() != null) {
239252
route.getActivity().overridePendingTransition(route.getInAnimation(), route.getOutAnimation());
240253
}
@@ -248,6 +261,7 @@ protected void openForResult(ActivityRoute route, Fragment fragment, int request
248261
if (intent == null) {
249262
throw new RouteNotFoundException(route.getUrl());
250263
}
264+
intent.setFlags(route.getFlags());
251265
if (route.getInAnimation() != -1 && route.getOutAnimation() != -1 && route.getActivity() != null) {
252266
route.getActivity().overridePendingTransition(route.getInAnimation(), route.getOutAnimation());
253267
}
@@ -261,6 +275,7 @@ protected void openForResult(ActivityRoute route, android.app.Fragment fragment,
261275
if (intent == null) {
262276
throw new RouteNotFoundException(route.getUrl());
263277
}
278+
intent.setFlags(route.getFlags());
264279
if (route.getInAnimation() != -1 && route.getOutAnimation() != -1 && route.getActivity() != null) {
265280
route.getActivity().overridePendingTransition(route.getInAnimation(), route.getOutAnimation());
266281
}
@@ -436,5 +451,5 @@ public static String getKeyUrl(){
436451
public Queue<HistoryItem> getRouteHistories(){
437452
return mHistoryCaches;
438453
}
439-
454+
440455
}

router/src/main/java/cn/campusapp/router/router/BrowserRouter.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,18 @@ public class BrowserRouter extends BaseRouter {
2020

2121
private Context mBaseContext;
2222

23+
static BrowserRouter mBrowserRouter = new BrowserRouter(); //浏览器
24+
25+
2326
static {
2427
SCHEMES_CAN_OPEN.add("https");
2528
SCHEMES_CAN_OPEN.add("http");
2629
}
2730

31+
public static BrowserRouter getInstance(){
32+
return mBrowserRouter;
33+
}
34+
2835
public void init(Context context){
2936
mBaseContext = context;
3037
}
@@ -55,7 +62,7 @@ protected boolean open(Context context, IRoute route){
5562
}
5663

5764
@Override
58-
public IRoute getRoute(String url) {
65+
public BrowserRoute getRoute(String url) {
5966
return new BrowserRoute.Builder(this)
6067
.setUrl(url)
6168
.build();

router/src/main/java/cn/campusapp/router/router/IRouter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,7 @@ public interface IRouter {
5555
Class<? extends IRoute> getCanOpenRoute();
5656

5757

58+
59+
60+
5861
}

sample/src/main/java/cn/campusapp/router/sample/MainActivity.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@
1111
import java.util.Queue;
1212

1313
import cn.campusapp.router.Router;
14+
import cn.campusapp.router.annotation.RouterMap;
1415
import cn.campusapp.router.route.ActivityRoute;
1516
import cn.campusapp.router.router.HistoryItem;
1617
import timber.log.Timber;
17-
18+
@RouterMap("activity://main")
1819
public class MainActivity extends Activity {
1920

2021

@@ -53,7 +54,7 @@ protected void onCreate(Bundle savedInstanceState) {
5354
btn1.setOnClickListener(new View.OnClickListener() {
5455
@Override
5556
public void onClick(View v) {
56-
openSecondActivity();
57+
openSecondActivity();
5758
}
5859
});
5960

sample/src/main/java/cn/campusapp/router/sample/ThirdActivity.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
11
package cn.campusapp.router.sample;
22

33
import android.app.Activity;
4+
import android.content.Intent;
45
import android.os.Bundle;
6+
import android.view.View;
7+
import android.widget.Button;
58
import android.widget.TextView;
69

710
import java.text.SimpleDateFormat;
811
import java.util.Date;
912

1013
import cn.campusapp.router.annotation.RouterMap;
14+
import cn.campusapp.router.router.ActivityRouter;
1115

1216

1317
@RouterMap({"activity2://third", "activity://third2"})
1418
public class ThirdActivity extends Activity {
1519

1620
TextView vTimeTv;
21+
Button vBtn;
1722

1823
@Override
1924
protected void onCreate(Bundle savedInstanceState) {
@@ -22,5 +27,17 @@ protected void onCreate(Bundle savedInstanceState) {
2227
vTimeTv = (TextView) findViewById(R.id.time);
2328
Date date = (Date) getIntent().getSerializableExtra("date");
2429
vTimeTv.setText(new SimpleDateFormat("HH:mm").format(date));
30+
vBtn = (Button) findViewById(R.id.set_flags_btn);
31+
vBtn.setOnClickListener(new View.OnClickListener() {
32+
@Override
33+
public void onClick(View v) {
34+
ActivityRouter
35+
.getInstance()
36+
.getRoute("activity://main")
37+
.withOpenMethodStart(ThirdActivity.this)
38+
.withFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK)
39+
.open();
40+
}
41+
});
2542
}
2643
}

0 commit comments

Comments
 (0)