Skip to content

Commit 3e58e9f

Browse files
CPPAliendongqing
authored and
dongqing
committed
增加对parcelable接口的支持 issue #40
1 parent 2f39508 commit 3e58e9f

File tree

6 files changed

+178
-23
lines changed

6 files changed

+178
-23
lines changed

activityrouter/src/main/java/com/github/mzule/activityrouter/router/Routers.java

Lines changed: 56 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package com.github.mzule.activityrouter.router;
22

3-
import java.util.ArrayList;
4-
import java.util.Collections;
5-
import java.util.Comparator;
6-
import java.util.List;
7-
83
import android.app.Activity;
94
import android.content.Context;
105
import android.content.Intent;
116
import android.net.Uri;
7+
import android.os.Bundle;
8+
9+
import java.util.ArrayList;
10+
import java.util.Collections;
11+
import java.util.Comparator;
12+
import java.util.List;
1213

1314
/**
1415
* Created by CaoDongping on 4/6/16.
@@ -43,38 +44,70 @@ public int compare(Mapping lhs, Mapping rhs) {
4344
}
4445

4546
public static boolean open(Context context, String url) {
46-
return open(context, Uri.parse(url));
47+
return open(context, Uri.parse(url), null, getGlobalCallback(context));
48+
}
49+
50+
public static boolean open(Context context, String url, Bundle bundle) {
51+
return open(context, Uri.parse(url), bundle, getGlobalCallback(context));
4752
}
4853

4954
public static boolean open(Context context, String url, RouterCallback callback) {
50-
return open(context, Uri.parse(url), callback);
55+
return open(context, Uri.parse(url), null, callback);
56+
}
57+
58+
public static boolean open(Context context, String url, Bundle bundle, RouterCallback callback) {
59+
return open(context, Uri.parse(url), bundle, callback);
5160
}
5261

5362
public static boolean open(Context context, Uri uri) {
54-
return open(context, uri, getGlobalCallback(context));
63+
return open(context, uri, null, getGlobalCallback(context));
64+
}
65+
66+
public static boolean open(Context context, Uri uri, Bundle bundle) {
67+
return open(context, uri, bundle, getGlobalCallback(context));
5568
}
5669

5770
public static boolean open(Context context, Uri uri, RouterCallback callback) {
58-
return open(context, uri, -1, callback);
71+
return open(context, uri, null, callback);
72+
}
73+
74+
public static boolean open(Context context, Uri uri, Bundle bundle, RouterCallback callback) {
75+
return open(context, uri, bundle, -1, callback);
5976
}
6077

61-
public static boolean openForResult(Activity activity, String url, int requestCode) {
62-
return openForResult(activity, Uri.parse(url), requestCode);
78+
public static boolean openForResult(Context context, String url, int requestCode) {
79+
return openForResult(context, Uri.parse(url), null, requestCode, getGlobalCallback(context));
6380
}
6481

65-
public static boolean openForResult(Activity activity, String url, int requestCode, RouterCallback callback) {
66-
return openForResult(activity, Uri.parse(url), requestCode, callback);
82+
public static boolean openForResult(Context context, String url, Bundle bundle, int requestCode) {
83+
return openForResult(context, Uri.parse(url), bundle, requestCode, getGlobalCallback(context));
6784
}
6885

69-
public static boolean openForResult(Activity activity, Uri uri, int requestCode) {
70-
return openForResult(activity, uri, requestCode, getGlobalCallback(activity));
86+
public static boolean openForResult(Context context, String url, int requestCode, RouterCallback callback) {
87+
return openForResult(context, Uri.parse(url), null, requestCode, callback);
7188
}
7289

73-
public static boolean openForResult(Activity activity, Uri uri, int requestCode, RouterCallback callback) {
74-
return open(activity, uri, requestCode, callback);
90+
public static boolean openForResult(Context context, String url, Bundle bundle, int requestCode, RouterCallback callback) {
91+
return openForResult(context, Uri.parse(url), bundle, requestCode, callback);
7592
}
7693

77-
private static boolean open(Context context, Uri uri, int requestCode, RouterCallback callback) {
94+
public static boolean openForResult(Context context, Uri uri, int requestCode) {
95+
return openForResult(context, uri, null, requestCode, getGlobalCallback(context));
96+
}
97+
98+
public static boolean openForResult(Context context, Uri uri, Bundle bundle, int requestCode) {
99+
return openForResult(context, uri, bundle, requestCode, getGlobalCallback(context));
100+
}
101+
102+
public static boolean openForResult(Context context, Uri uri, int requestCode, RouterCallback callback) {
103+
return openForResult(context, uri, null, requestCode, callback);
104+
}
105+
106+
public static boolean openForResult(Context context, Uri uri, Bundle bundle, int requestCode, RouterCallback callback) {
107+
return open(context, uri, bundle, requestCode, callback);
108+
}
109+
110+
private static boolean open(Context context, Uri uri, Bundle bundle, int requestCode, RouterCallback callback) {
78111
boolean success = false;
79112
if (callback != null) {
80113
if (callback.beforeOpen(context, uri)) {
@@ -83,7 +116,7 @@ private static boolean open(Context context, Uri uri, int requestCode, RouterCal
83116
}
84117

85118
try {
86-
success = doOpen(context, uri, requestCode);
119+
success = doOpen(context, uri, bundle, requestCode);
87120
} catch (Throwable e) {
88121
e.printStackTrace();
89122
if (callback != null) {
@@ -119,7 +152,7 @@ public static Intent resolve(Context context, Uri uri) {
119152
return null;
120153
}
121154

122-
private static boolean doOpen(Context context, Uri uri, int requestCode) {
155+
private static boolean doOpen(Context context, Uri uri, Bundle bundle, int requestCode) {
123156
initIfNeed();
124157
Path path = Path.create(uri);
125158
for (Mapping mapping : mappings) {
@@ -131,6 +164,9 @@ private static boolean doOpen(Context context, Uri uri, int requestCode) {
131164
Intent intent = new Intent(context, mapping.getActivity());
132165
intent.putExtras(mapping.parseExtras(uri));
133166
intent.putExtra(KEY_RAW_URL, uri.toString());
167+
if (bundle != null) {
168+
intent.putExtras(bundle);
169+
}
134170
if (!(context instanceof Activity)) {
135171
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
136172
}

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
android:scheme="mzule" />
5757
</intent-filter>
5858
</activity>
59+
<activity android:name=".PojoActivity"/>
5960
</application>
6061

6162
</manifest>

app/src/main/java/com/github/mzule/activityrouter/LaunchActivity.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.github.mzule.activityrouter;
22

3-
import com.github.mzule.activityrouter.router.Routers;
4-
53
import android.app.Activity;
64
import android.content.Intent;
75
import android.os.Bundle;
@@ -11,6 +9,8 @@
119
import android.widget.TextView;
1210
import android.widget.Toast;
1311

12+
import com.github.mzule.activityrouter.router.Routers;
13+
1414
/**
1515
* Created by CaoDongping on 4/7/16.
1616
*/
@@ -35,11 +35,22 @@ public void onClick(View v) {
3535
*/
3636
// app内打开页面可以使用Routers.open(Context, Uri)
3737
// Routers.open(LaunchActivity.this, Uri.parse(((TextView) view).getText().toString()), ((RouterCallbackProvider) getApplication()).provideRouterCallback());
38-
Routers.openForResult(LaunchActivity.this, ((TextView) view).getText().toString(), Constant.REQUEST_CODE_DEMO);
38+
Routers.openForResult(LaunchActivity.this,
39+
((TextView) view).getText().toString(),
40+
Constant.REQUEST_CODE_DEMO);
3941
}
4042
});
4143
}
4244
}
45+
final TextView pojoText = (TextView)findViewById(R.id.pojo);
46+
pojoText.setOnClickListener(new View.OnClickListener() {
47+
@Override
48+
public void onClick(final View view) {
49+
Bundle bundle = new Bundle();
50+
bundle.putParcelable("POJO", new PojoData("CPPAlien", 5));
51+
Routers.open(LaunchActivity.this, pojoText.getText().toString(), bundle);
52+
}
53+
});
4354
}
4455

4556
@Override
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.github.mzule.activityrouter;
2+
3+
import android.app.Activity;
4+
import android.os.Bundle;
5+
import android.support.annotation.Nullable;
6+
import android.widget.TextView;
7+
8+
import com.github.mzule.activityrouter.annotation.Router;
9+
10+
import java.util.Set;
11+
12+
/**
13+
* @author CPPAlien
14+
*/
15+
@Router("test/parcelable")
16+
public class PojoActivity extends Activity {
17+
@Override
18+
protected void onCreate(@Nullable final Bundle savedInstanceState) {
19+
super.onCreate(savedInstanceState);
20+
21+
Bundle extras = getIntent().getExtras();
22+
if (extras != null) {
23+
Set<String> keys = extras.keySet();
24+
25+
TextView textView = new TextView(this);
26+
int padding = getResources().getDimensionPixelSize(R.dimen.activity_horizontal_margin);
27+
textView.setPadding(padding, padding, padding, padding);
28+
textView.setText(getClass().getSimpleName());
29+
textView.append("\n\n");
30+
31+
for (String key : keys) {
32+
textView.append(key + "=>");
33+
Object v = extras.get(key);
34+
if (v != null) {
35+
textView.append(v + "=>" + v.getClass().getSimpleName());
36+
} else {
37+
textView.append("null");
38+
}
39+
textView.append("\n\n");
40+
}
41+
PojoData pojoData = getIntent().getParcelableExtra("POJO");
42+
pojoData.getName();
43+
textView.append("\n\nPoJoData");
44+
textView.append("\nname = " + pojoData.getName());
45+
textView.append("\nage = " + pojoData.getAge());
46+
47+
setContentView(textView);
48+
}
49+
}
50+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.github.mzule.activityrouter;
2+
3+
import android.os.Parcel;
4+
import android.os.Parcelable;
5+
6+
/**
7+
* @author CPPAlien
8+
*/
9+
public class PojoData implements Parcelable {
10+
String name;
11+
int age;
12+
13+
public PojoData(final String name, final int age) {
14+
this.name = name;
15+
this.age = age;
16+
}
17+
18+
protected PojoData(Parcel in) {
19+
name = in.readString();
20+
age = in.readInt();
21+
}
22+
23+
public static final Creator<PojoData> CREATOR = new Creator<PojoData>() {
24+
@Override
25+
public PojoData createFromParcel(Parcel in) {
26+
return new PojoData(in);
27+
}
28+
29+
@Override
30+
public PojoData[] newArray(int size) {
31+
return new PojoData[size];
32+
}
33+
};
34+
35+
public String getName() {
36+
return name;
37+
}
38+
39+
public int getAge() {
40+
return age;
41+
}
42+
43+
@Override
44+
public int describeContents() {
45+
return 0;
46+
}
47+
48+
@Override
49+
public void writeToParcel(final Parcel parcel, final int i) {
50+
parcel.writeString(name);
51+
parcel.writeInt(age);
52+
}
53+
}

app/src/main/res/layout/activity_launch.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,8 @@
6464
<TextView
6565
style="@style/Menu"
6666
android:text="router://upload"/>
67+
<TextView
68+
android:id="@+id/pojo"
69+
style="@style/Menu"
70+
android:text="router://test/parcelable"/>
6771
</LinearLayout>

0 commit comments

Comments
 (0)