Skip to content

Commit

Permalink
Add IActivityHandler to handle custom launch activities.
Browse files Browse the repository at this point in the history
  • Loading branch information
EastWoodYang committed Apr 18, 2019
1 parent b675e11 commit 2c21d26
Show file tree
Hide file tree
Showing 10 changed files with 90 additions and 23 deletions.
14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,17 @@ AnnoAdapter is now available on JCentral.
})
...

**Start Activity handler**

new Router.Builder()
.activityHandler(new IActivityHandler() {
@Override
public void startActivity(Context context, Intent intent, int requestCode, IActivityTransition activityTransition, OnRouterResult routerResult) {

}
})
...

### Define Route Api

use `@RouterScheme`, `@RouterHost`, `@Path` and `@Param` to define a route url.
Expand Down Expand Up @@ -268,6 +279,9 @@ e.g.
Router.create(LoginRouterApi.class).jumpToLogin("0123456789", onActivityResult);


**#more detail see demo.**



## License

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.eastwood.common.router;
package com.eastwood.demo.router;

import android.app.Activity;
import android.app.Fragment;
Expand Down
27 changes: 27 additions & 0 deletions app/src/main/java/com/eastwood/demo/router/App.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
package com.eastwood.demo.router;

import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

import com.eastwood.common.router.IActivityHandler;
import com.eastwood.common.router.IActivityTransition;
import com.eastwood.common.router.IExceptionHandler;
import com.eastwood.common.router.OnRouterResult;
import com.eastwood.common.router.Router;
import com.eastwood.common.router.IRouterUrlFilter;
import com.eastwood.demo.router.api.IRouterAApi;
Expand Down Expand Up @@ -32,6 +38,27 @@ public String filter(String url) {
public void handler(String url, Exception e) {
Toast.makeText(App.this, url + ": " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
})
.activityHandler(new IActivityHandler() {
@Override
public void startActivity(Context context, Intent intent, int requestCode, IActivityTransition activityTransition, OnRouterResult routerResult) {
if (context instanceof Activity) {
Activity activity = (Activity) context;
if (routerResult instanceof OnActivityResult) {
ActivityResultUtil.startForResult(activity, intent, requestCode, (OnActivityResult) routerResult);
} else {
activity.startActivityForResult(intent, requestCode);
}

if (activityTransition != null) {
activity.overridePendingTransition(activityTransition.enterAnim(), activityTransition.exitAnim());
}
} else {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
if (routerResult != null) routerResult.onSuccess();
}
});
Router.init(builder);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.eastwood.common.router;
package com.eastwood.demo.router;

import android.content.Intent;

import com.eastwood.common.router.OnRouterResult;

public interface OnActivityResult extends OnRouterResult {

void onActivityResult(int requestCode, int resultCode, Intent data);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import com.eastwood.common.router.annotation.RouterHost;
import com.eastwood.common.router.annotation.RouterScheme;
import com.eastwood.common.router.annotation.Strict;
import com.eastwood.common.router.OnActivityResult;
import com.eastwood.demo.router.OnActivityResult;
import com.eastwood.demo.router.RouterAActivity;
import com.eastwood.demo.router.TempActivity;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import com.eastwood.common.router.Router;
import com.eastwood.common.router.RouterInfo;
import com.eastwood.common.router.OnActivityResult;
import com.eastwood.demo.router.OnActivityResult;
import com.eastwood.common.router.IRouterTask;
import com.eastwood.common.router.OnTaskResult;

Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
classpath 'com.android.tools.build:gradle:3.3.0'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.eastwood.common.router;

import android.content.Context;
import android.content.Intent;

public interface IActivityHandler {

void startActivity(Context context, Intent intent, int requestCode, IActivityTransition activityTransition, OnRouterResult routerResult);

}
48 changes: 31 additions & 17 deletions router/src/main/java/com/eastwood/common/router/Router.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ public class Router {
private SparseArray<ISchemeHandler> schemeHandlerMap;
protected SparseArray<Class> routerIndexMap;

private IActivityHandler activityHandler;

private static Router routerInstance;

private static WeakReference<Activity> sCurrentActivity;
Expand All @@ -46,9 +48,10 @@ protected static Router getRouterInstance() {

public static void init(Builder builder) {
Router router = getRouterInstance();
router.application = builder.application;
router.exceptionHandler = builder.exceptionHandler;
router.routerUrlFilter = builder.routerUrlFilter;
router.application = builder.application;
router.activityHandler = builder.activityHandler;

router.schemeHandlerMap = new SparseArray<>();
router.routerIndexMap = new SparseArray<>();
Expand Down Expand Up @@ -110,7 +113,7 @@ public static void addRouterIndex(Class<?> routerIndexClass) {
}

int key = url.toLowerCase().hashCode();
if(router.routerIndexMap.get(key) == null) {
if (router.routerIndexMap.get(key) == null) {
router.routerIndexMap.put(key, routerIndexClass);
} else {
RuntimeException exception = new RuntimeException("router url [" + url + "] is already exist.");
Expand Down Expand Up @@ -269,7 +272,7 @@ private static void startRouter(Context context, InnerRouterInfo routerInfo, OnR
}
}

private static void applyRouter(Context context, InnerRouterInfo routerInfo, OnRouterResult routerResult) throws Exception {
private static void applyRouter(Context context, InnerRouterInfo routerInfo, OnRouterResult routerResult) throws Exception {

Intent intent = new Intent();
intent.setComponent(new ComponentName(context, routerInfo.activity));
Expand All @@ -284,25 +287,30 @@ private static void applyRouter(Context context, InnerRouterInfo routerInfo, OnR
}
ParamHelper.putIntent(bundle, routerInfo);
intent.putExtras(bundle);
if (context instanceof Activity) {
Activity activity = (Activity) context;
if (routerResult instanceof OnActivityResult) {
ActivityResultUtil.startForResult(activity, intent, routerInfo.requestCode, (OnActivityResult) routerResult);
} else {
activity.startActivityForResult(intent, routerInfo.requestCode);
}

Router router = getRouterInstance();
if (router.activityHandler != null) {
IActivityTransition activityTransition = null;
if (routerInfo.transition != null) {
IActivityTransition routerTransition = Utils.inflectClass(routerInfo.transition);
if (routerTransition != null) {
activity.overridePendingTransition(routerTransition.enterAnim(), routerTransition.exitAnim());
}
activityTransition = Utils.inflectClass(routerInfo.transition);
}
router.activityHandler.startActivity(context, intent, routerInfo.requestCode, activityTransition, routerResult);
} else {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
if (context instanceof Activity) {
Activity activity = (Activity) context;
activity.startActivityForResult(intent, routerInfo.requestCode);
if (routerInfo.transition != null) {
IActivityTransition routerTransition = Utils.inflectClass(routerInfo.transition);
if (routerTransition != null) {
activity.overridePendingTransition(routerTransition.enterAnim(), routerTransition.exitAnim());
}
}
} else {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
if (routerResult != null) routerResult.onSuccess();
}
if (routerResult != null) routerResult.onSuccess();
}

private static Context getActivityContextPossibly() {
Expand All @@ -327,6 +335,7 @@ public static class Builder {
Application application;
IExceptionHandler exceptionHandler;
IRouterUrlFilter routerUrlFilter;
IActivityHandler activityHandler;

public Builder application(Application application) {
this.application = application;
Expand All @@ -343,6 +352,11 @@ public Builder routerUrlFilter(IRouterUrlFilter routerUrlFilter) {
return this;
}

public Builder activityHandler(IActivityHandler activityHandler) {
this.activityHandler = activityHandler;
return this;
}

public void init() {
Router.init(this);
}
Expand Down

0 comments on commit 2c21d26

Please sign in to comment.