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