diff --git a/activityrouter/build.gradle b/activityrouter/build.gradle
index 1ab6971..ca537db 100644
--- a/activityrouter/build.gradle
+++ b/activityrouter/build.gradle
@@ -1,39 +1,13 @@
apply plugin: 'com.android.library'
-
-sourceCompatibility = 1.7
-targetCompatibility = 1.7
-
-ext {
- bintrayRepo = 'maven'
- bintrayName = 'activity-router'
-
- publishedGroupId = 'com.github.mzule.activityrouter'
- libraryName = 'ActivityRouter'
- artifact = 'activityrouter'
-
- libraryDescription = 'Router activities'
-
- siteUrl = 'https://github.com/mzule/ActivityRouter/'
- gitUrl = 'https://github.com/mzule/ActivityRouter.git'
-
- libraryVersion = '1.2.2'
-
- developerId = 'mzule'
- developerName = 'Cao Dongping'
- developerEmail = 'mzule4j@gmail.com'
-
- licenseName = 'The Apache Software License, Version 2.0'
- licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
- allLicenses = ["Apache-2.0"]
-}
+apply plugin: 'com.novoda.bintray-release'
android {
- compileSdkVersion 23
- buildToolsVersion "23.0.2"
+ compileSdkVersion 26
+ buildToolsVersion "26.0.2"
defaultConfig {
- minSdkVersion 7
- targetSdkVersion 23
+ minSdkVersion 15
+ targetSdkVersion 26
versionCode 1
versionName "1.0"
}
@@ -47,9 +21,15 @@ android {
dependencies {
provided project(':stub')
- compile 'com.github.mzule.activityrouter:annotation:1.1.5'
+ compile 'com.qunhe.android:annotation:1.0.1'
}
-apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle'
-apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'
+publish {
+ userOrg = 'qunhe'
+ groupId = 'com.qunhe.android'
+ artifactId = 'activityrouter'
+ publishVersion = '1.0.2'
+ desc = 'This is the libs package of ActivityRouter'
+ website = 'https://github.com/CPPAlien/ActivityRouter'
+}
diff --git a/activityrouter/src/main/java/com/github/mzule/activityrouter/router/Mapping.java b/activityrouter/src/main/java/com/github/mzule/activityrouter/router/Mapping.java
index 0fe84ad..80c9bbb 100644
--- a/activityrouter/src/main/java/com/github/mzule/activityrouter/router/Mapping.java
+++ b/activityrouter/src/main/java/com/github/mzule/activityrouter/router/Mapping.java
@@ -1,11 +1,11 @@
package com.github.mzule.activityrouter.router;
-import java.util.Set;
-
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
+import java.util.Set;
+
/**
* Created by CaoDongping on 4/6/16.
*/
@@ -83,7 +83,13 @@ public Bundle parseExtras(Uri uri) {
Bundle bundle = new Bundle();
// path segments // ignore scheme
Path p = formatPath.next();
+
Path y = Path.create(uri).next();
+ // parseExtras means jump uri and target uri is matched, jump uri may longer than target
+ // we should match from last
+ for (int i = 0; i < y.length() - p.length(); i++) {
+ y = y.next();
+ }
while (p != null) {
if (p.isArgument()) {
put(bundle, p.argument(), y.value());
diff --git a/activityrouter/src/main/java/com/github/mzule/activityrouter/router/Routers.java b/activityrouter/src/main/java/com/github/mzule/activityrouter/router/Routers.java
index 114e409..74e729c 100644
--- a/activityrouter/src/main/java/com/github/mzule/activityrouter/router/Routers.java
+++ b/activityrouter/src/main/java/com/github/mzule/activityrouter/router/Routers.java
@@ -1,14 +1,15 @@
package com.github.mzule.activityrouter.router;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
+import android.os.Bundle;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
/**
* Created by CaoDongping on 4/6/16.
@@ -43,38 +44,70 @@ public int compare(Mapping lhs, Mapping rhs) {
}
public static boolean open(Context context, String url) {
- return open(context, Uri.parse(url));
+ return open(context, Uri.parse(url), null, getGlobalCallback(context));
+ }
+
+ public static boolean open(Context context, String url, Bundle bundle) {
+ return open(context, Uri.parse(url), bundle, getGlobalCallback(context));
}
public static boolean open(Context context, String url, RouterCallback callback) {
- return open(context, Uri.parse(url), callback);
+ return open(context, Uri.parse(url), null, callback);
+ }
+
+ public static boolean open(Context context, String url, Bundle bundle, RouterCallback callback) {
+ return open(context, Uri.parse(url), bundle, callback);
}
public static boolean open(Context context, Uri uri) {
- return open(context, uri, getGlobalCallback(context));
+ return open(context, uri, null, getGlobalCallback(context));
+ }
+
+ public static boolean open(Context context, Uri uri, Bundle bundle) {
+ return open(context, uri, bundle, getGlobalCallback(context));
}
public static boolean open(Context context, Uri uri, RouterCallback callback) {
- return open(context, uri, -1, callback);
+ return open(context, uri, null, callback);
+ }
+
+ public static boolean open(Context context, Uri uri, Bundle bundle, RouterCallback callback) {
+ return open(context, uri, bundle, -1, callback);
}
- public static boolean openForResult(Activity activity, String url, int requestCode) {
- return openForResult(activity, Uri.parse(url), requestCode);
+ public static boolean openForResult(Context context, String url, int requestCode) {
+ return openForResult(context, Uri.parse(url), null, requestCode, getGlobalCallback(context));
}
- public static boolean openForResult(Activity activity, String url, int requestCode, RouterCallback callback) {
- return openForResult(activity, Uri.parse(url), requestCode, callback);
+ public static boolean openForResult(Context context, String url, Bundle bundle, int requestCode) {
+ return openForResult(context, Uri.parse(url), bundle, requestCode, getGlobalCallback(context));
}
- public static boolean openForResult(Activity activity, Uri uri, int requestCode) {
- return openForResult(activity, uri, requestCode, getGlobalCallback(activity));
+ public static boolean openForResult(Context context, String url, int requestCode, RouterCallback callback) {
+ return openForResult(context, Uri.parse(url), null, requestCode, callback);
}
- public static boolean openForResult(Activity activity, Uri uri, int requestCode, RouterCallback callback) {
- return open(activity, uri, requestCode, callback);
+ public static boolean openForResult(Context context, String url, Bundle bundle, int requestCode, RouterCallback callback) {
+ return openForResult(context, Uri.parse(url), bundle, requestCode, callback);
}
- private static boolean open(Context context, Uri uri, int requestCode, RouterCallback callback) {
+ public static boolean openForResult(Context context, Uri uri, int requestCode) {
+ return openForResult(context, uri, null, requestCode, getGlobalCallback(context));
+ }
+
+ public static boolean openForResult(Context context, Uri uri, Bundle bundle, int requestCode) {
+ return openForResult(context, uri, bundle, requestCode, getGlobalCallback(context));
+ }
+
+ public static boolean openForResult(Context context, Uri uri, int requestCode, RouterCallback callback) {
+ return openForResult(context, uri, null, requestCode, callback);
+ }
+
+ public static boolean openForResult(Context context, Uri uri, Bundle bundle, int requestCode, RouterCallback callback) {
+ return open(context, uri, bundle, requestCode, callback);
+ }
+
+ private static boolean open(Context context, Uri uri, Bundle bundle, int requestCode, RouterCallback callback) {
boolean success = false;
if (callback != null) {
if (callback.beforeOpen(context, uri)) {
@@ -83,7 +116,7 @@ private static boolean open(Context context, Uri uri, int requestCode, RouterCal
}
try {
- success = doOpen(context, uri, requestCode);
+ success = doOpen(context, uri, bundle, requestCode);
} catch (Throwable e) {
e.printStackTrace();
if (callback != null) {
@@ -119,7 +152,7 @@ public static Intent resolve(Context context, Uri uri) {
return null;
}
- private static boolean doOpen(Context context, Uri uri, int requestCode) {
+ private static boolean doOpen(Context context, Uri uri, Bundle bundle, int requestCode) {
initIfNeed();
Path path = Path.create(uri);
for (Mapping mapping : mappings) {
@@ -131,6 +164,9 @@ private static boolean doOpen(Context context, Uri uri, int requestCode) {
Intent intent = new Intent(context, mapping.getActivity());
intent.putExtras(mapping.parseExtras(uri));
intent.putExtra(KEY_RAW_URL, uri.toString());
+ if (bundle != null) {
+ intent.putExtras(bundle);
+ }
if (!(context instanceof Activity)) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
diff --git a/annotation/build.gradle b/annotation/build.gradle
index ab1b7b8..9caaf71 100644
--- a/annotation/build.gradle
+++ b/annotation/build.gradle
@@ -1,35 +1,18 @@
apply plugin: 'java'
+apply plugin: 'com.novoda.bintray-release'
-sourceCompatibility = 1.7
-targetCompatibility = 1.7
-
-ext {
- bintrayRepo = 'maven'
- bintrayName = 'activity-router-annotation'
-
- publishedGroupId = 'com.github.mzule.activityrouter'
- libraryName = 'Annotation'
- artifact = 'annotation'
-
- libraryDescription = 'Router activities'
-
- siteUrl = 'https://github.com/mzule/ActivityRouter/'
- gitUrl = 'https://github.com/mzule/ActivityRouter.git'
-
- libraryVersion = '1.1.5'
-
- developerId = 'mzule'
- developerName = 'Cao Dongping'
- developerEmail = 'mzule4j@gmail.com'
-
- licenseName = 'The Apache Software License, Version 2.0'
- licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
- allLicenses = ["Apache-2.0"]
-}
+targetCompatibility = '1.7'
+sourceCompatibility = '1.7'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
-apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle'
-apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'
+publish {
+ userOrg = 'qunhe'
+ groupId = 'com.qunhe.android'
+ artifactId = 'annotation'
+ publishVersion = '1.0.1'
+ desc = 'This is the libs package of ActivityRouter'
+ website = 'https://github.com/CPPAlien/ActivityRouter'
+}
diff --git a/app/build.gradle b/app/build.gradle
index 725d235..4642448 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,16 +1,13 @@
apply plugin: 'com.android.application'
-sourceCompatibility = 1.7
-targetCompatibility = 1.7
-
android {
- compileSdkVersion 23
- buildToolsVersion "23.0.2"
+ compileSdkVersion 26
+ buildToolsVersion "26.0.2"
defaultConfig {
applicationId "com.github.mzule.activityrouter"
minSdkVersion 15
- targetSdkVersion 23
+ targetSdkVersion 26
versionCode 1
versionName "1.0"
}
@@ -29,7 +26,7 @@ android {
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
- compile 'com.android.support:appcompat-v7:23.2.1'
+ compile 'com.android.support:appcompat-v7:26.1.0'
compile project(':app_module')
annotationProcessor project(':compiler')
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c6a24d5..96afeef 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -56,6 +56,7 @@
android:scheme="mzule" />
+
diff --git a/app/src/main/java/com/github/mzule/activityrouter/LaunchActivity.java b/app/src/main/java/com/github/mzule/activityrouter/LaunchActivity.java
index 6dc8d4d..8ee76c5 100644
--- a/app/src/main/java/com/github/mzule/activityrouter/LaunchActivity.java
+++ b/app/src/main/java/com/github/mzule/activityrouter/LaunchActivity.java
@@ -1,7 +1,5 @@
package com.github.mzule.activityrouter;
-import com.github.mzule.activityrouter.router.Routers;
-
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
@@ -11,6 +9,8 @@
import android.widget.TextView;
import android.widget.Toast;
+import com.github.mzule.activityrouter.router.Routers;
+
/**
* Created by CaoDongping on 4/7/16.
*/
@@ -35,11 +35,22 @@ public void onClick(View v) {
*/
// app内打开页面可以使用Routers.open(Context, Uri)
// Routers.open(LaunchActivity.this, Uri.parse(((TextView) view).getText().toString()), ((RouterCallbackProvider) getApplication()).provideRouterCallback());
- Routers.openForResult(LaunchActivity.this, ((TextView) view).getText().toString(), Constant.REQUEST_CODE_DEMO);
+ Routers.openForResult(LaunchActivity.this,
+ ((TextView) view).getText().toString(),
+ Constant.REQUEST_CODE_DEMO);
}
});
}
}
+ final TextView pojoText = (TextView)findViewById(R.id.pojo);
+ pojoText.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(final View view) {
+ Bundle bundle = new Bundle();
+ bundle.putParcelable("POJO", new PojoData("CPPAlien", 5));
+ Routers.open(LaunchActivity.this, pojoText.getText().toString(), bundle);
+ }
+ });
}
@Override
diff --git a/app/src/main/java/com/github/mzule/activityrouter/PojoActivity.java b/app/src/main/java/com/github/mzule/activityrouter/PojoActivity.java
new file mode 100644
index 0000000..4815e15
--- /dev/null
+++ b/app/src/main/java/com/github/mzule/activityrouter/PojoActivity.java
@@ -0,0 +1,50 @@
+package com.github.mzule.activityrouter;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.widget.TextView;
+
+import com.github.mzule.activityrouter.annotation.Router;
+
+import java.util.Set;
+
+/**
+ * @author CPPAlien
+ */
+@Router("test/parcelable")
+public class PojoActivity extends Activity {
+ @Override
+ protected void onCreate(@Nullable final Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ Bundle extras = getIntent().getExtras();
+ if (extras != null) {
+ Set keys = extras.keySet();
+
+ TextView textView = new TextView(this);
+ int padding = getResources().getDimensionPixelSize(R.dimen.activity_horizontal_margin);
+ textView.setPadding(padding, padding, padding, padding);
+ textView.setText(getClass().getSimpleName());
+ textView.append("\n\n");
+
+ for (String key : keys) {
+ textView.append(key + "=>");
+ Object v = extras.get(key);
+ if (v != null) {
+ textView.append(v + "=>" + v.getClass().getSimpleName());
+ } else {
+ textView.append("null");
+ }
+ textView.append("\n\n");
+ }
+ PojoData pojoData = getIntent().getParcelableExtra("POJO");
+ pojoData.getName();
+ textView.append("\n\nPoJoData");
+ textView.append("\nname = " + pojoData.getName());
+ textView.append("\nage = " + pojoData.getAge());
+
+ setContentView(textView);
+ }
+ }
+}
diff --git a/app/src/main/java/com/github/mzule/activityrouter/PojoData.java b/app/src/main/java/com/github/mzule/activityrouter/PojoData.java
new file mode 100644
index 0000000..c972e59
--- /dev/null
+++ b/app/src/main/java/com/github/mzule/activityrouter/PojoData.java
@@ -0,0 +1,53 @@
+package com.github.mzule.activityrouter;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * @author CPPAlien
+ */
+public class PojoData implements Parcelable {
+ String name;
+ int age;
+
+ public PojoData(final String name, final int age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ protected PojoData(Parcel in) {
+ name = in.readString();
+ age = in.readInt();
+ }
+
+ public static final Creator CREATOR = new Creator() {
+ @Override
+ public PojoData createFromParcel(Parcel in) {
+ return new PojoData(in);
+ }
+
+ @Override
+ public PojoData[] newArray(int size) {
+ return new PojoData[size];
+ }
+ };
+
+ public String getName() {
+ return name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(final Parcel parcel, final int i) {
+ parcel.writeString(name);
+ parcel.writeInt(age);
+ }
+}
diff --git a/app/src/main/res/layout/activity_launch.xml b/app/src/main/res/layout/activity_launch.xml
index a1e75e0..aa02c3b 100644
--- a/app/src/main/res/layout/activity_launch.xml
+++ b/app/src/main/res/layout/activity_launch.xml
@@ -64,4 +64,8 @@
+
diff --git a/build.gradle b/build.gradle
index 03aec8e..c90a642 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,8 +6,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
- classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
- classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
+ classpath 'com.novoda:bintray-release:0.4.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
@@ -17,6 +16,12 @@ buildscript {
allprojects {
repositories {
jcenter()
+ maven {
+ url "https://maven.google.com"
+ }
+ maven {
+ url "https://dl.bintray.com/qunhe/maven"
+ }
}
}
diff --git a/compiler/build.gradle b/compiler/build.gradle
index 2e9ed2d..63fda63 100644
--- a/compiler/build.gradle
+++ b/compiler/build.gradle
@@ -1,38 +1,20 @@
apply plugin: 'java'
+apply plugin: 'com.novoda.bintray-release'
-sourceCompatibility = 1.7
-targetCompatibility = 1.7
-
-ext {
- bintrayRepo = 'maven'
- bintrayName = 'activity-router-compiler'
-
- publishedGroupId = 'com.github.mzule.activityrouter'
- libraryName = 'Compiler'
- artifact = 'compiler'
-
- libraryDescription = 'Router activities'
-
- siteUrl = 'https://github.com/mzule/ActivityRouter/'
- gitUrl = 'https://github.com/mzule/ActivityRouter.git'
-
- libraryVersion = '1.1.7'
-
- developerId = 'mzule'
- developerName = 'Cao Dongping'
- developerEmail = 'mzule4j@gmail.com'
-
- licenseName = 'The Apache Software License, Version 2.0'
- licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
- allLicenses = ["Apache-2.0"]
-}
+targetCompatibility = '1.7'
+sourceCompatibility = '1.7'
dependencies {
compile 'com.squareup:javapoet:1.8.0'
compile 'com.google.auto.service:auto-service:1.0-rc3'
- compile 'com.github.mzule.activityrouter:annotation:1.1.5'
+ compile 'com.qunhe.android:annotation:1.0.1'
}
-apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle'
-apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'
-
+publish {
+ userOrg = 'qunhe'
+ groupId = 'com.qunhe.android'
+ artifactId = 'compiler'
+ publishVersion = '1.0.2'
+ desc = 'This is the libs package of ActivityRouter'
+ website = 'https://github.com/CPPAlien/ActivityRouter'
+}
\ No newline at end of file
diff --git a/stub/build.gradle b/stub/build.gradle
index c152b19..9a54c3e 100644
--- a/stub/build.gradle
+++ b/stub/build.gradle
@@ -1,5 +1,8 @@
apply plugin: 'java'
+sourceCompatibility = '1.7'
+targetCompatibility = '1.7'
+
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
\ No newline at end of file