Skip to content

Commit e648c74

Browse files
committed
1. Fixing issue in multi-process 2. Adding filter for network emit source.
1 parent 94803bc commit e648c74

File tree

9 files changed

+119
-4
lines changed

9 files changed

+119
-4
lines changed

app/src/main/AndroidManifest.xml

+3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
android:theme="@style/AppTheme.Translucent" />
2929
<activity android:name=".ui.PicturesActivity" />
3030
<activity android:name=".ui.StackViewActivity" />
31+
32+
<service android:name=".RemoteService"
33+
android:process=":second"/>
3134
</application>
3235

3336
</manifest>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package tech.linjiang.android.pandora;
2+
3+
import android.app.Service;
4+
import android.content.Context;
5+
import android.content.Intent;
6+
import android.os.IBinder;
7+
import android.util.Log;
8+
9+
import java.io.IOException;
10+
import java.net.HttpURLConnection;
11+
import java.net.MalformedURLException;
12+
import java.net.URL;
13+
14+
import retrofit2.Call;
15+
import retrofit2.Callback;
16+
import retrofit2.Response;
17+
import tech.linjiang.android.pandora.net.ApiService;
18+
import tech.linjiang.android.pandora.utils.ThreadPool;
19+
import tech.linjiang.pandora.Pandora;
20+
21+
/**
22+
* This service is used to test the behaviors of Pandora in multiple processes
23+
*/
24+
public class RemoteService extends Service {
25+
26+
public static void start(Context context) {
27+
Intent intent = new Intent(context, RemoteService.class);
28+
context.startService(intent);
29+
}
30+
private static final String TAG = "ProcessService";
31+
32+
@Override
33+
public IBinder onBind(Intent intent) {
34+
return null;
35+
}
36+
37+
@Override
38+
public void onCreate() {
39+
super.onCreate();
40+
Log.d(TAG, "onCreate: ");
41+
Pandora.get().open();
42+
}
43+
44+
@Override
45+
public int onStartCommand(Intent intent, int flags, int startId) {
46+
Log.d(TAG, "onStartCommand: ");
47+
ThreadPool.post(() -> {
48+
try {
49+
URL url = new URL("https://www.v2ex.com/api/topics/latest.json");
50+
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
51+
conn.getInputStream();
52+
} catch (MalformedURLException e) {
53+
e.printStackTrace();
54+
} catch (IOException e) {
55+
e.printStackTrace();
56+
}
57+
});
58+
ApiService.HttpbinApi api = ApiService.getInstance();
59+
Callback<Void> cb = new Callback<Void>() {
60+
@Override
61+
public void onResponse(Call call, Response response) {
62+
}
63+
64+
@Override
65+
public void onFailure(Call call, Throwable t) {
66+
t.printStackTrace();
67+
}
68+
};
69+
api.get().enqueue(cb);
70+
return super.onStartCommand(intent, flags, startId);
71+
}
72+
}

pandora-core/src/main/java/tech/linjiang/pandora/Pandora.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public boolean onCreate() {
3939
private void init(Application app) {
4040
Utils.init(app);
4141
funcController = new FuncController(app);
42-
sensorDetector = new SensorDetector(this);
42+
sensorDetector = new SensorDetector(notHostProcess ? null : this);
4343
interceptor = new OkHttpInterceptor();
4444
databases = new Databases();
4545
sharedPref = new SharedPref();
@@ -49,9 +49,16 @@ private void init(Application app) {
4949
}
5050

5151
public static Pandora get() {
52+
if (INSTANCE == null) {
53+
// Not the host process
54+
Pandora pandora = new Pandora();
55+
pandora.notHostProcess = true;
56+
pandora.onCreate();
57+
}
5258
return INSTANCE;
5359
}
5460

61+
private boolean notHostProcess;
5562
private OkHttpInterceptor interceptor;
5663
private Databases databases;
5764
private SharedPref sharedPref;
@@ -98,6 +105,9 @@ public void addFunction(IFunc func) {
98105
* Open the panel.
99106
*/
100107
public void open() {
108+
if (notHostProcess) {
109+
return;
110+
}
101111
funcController.open();
102112
}
103113

pandora-core/src/main/java/tech/linjiang/pandora/network/OkHttpInterceptor.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ public class OkHttpInterceptor implements Interceptor {
3636
public static final long MAX_SIZE_BODY = 1024 * 1024 * 2;
3737

3838
public OkHttpInterceptor() {
39-
OkUrlFactory.init();
39+
if (Config.getNETWORK_URL_CONNECTION()) {
40+
OkUrlFactory.init();
41+
}
4042
}
4143

4244
private NetStateListener listener;

pandora-core/src/main/java/tech/linjiang/pandora/ui/fragment/ConfigFragment.java

+5
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@ public void onItemClick(int position, BaseItem item) {
7474
}
7575
launch(EditFragment.class, bundle, CODE1);
7676
break;
77+
case Config.Type.NETWORK_URLCONNECTION:
78+
Config.setNETWORK_URL_CONNECTION(!Config.getNETWORK_URL_CONNECTION());
79+
Utils.toast(R.string.pd_relaunch_request);
80+
break;
7781
case Config.Type.SANDBOX_DPM:
7882
Config.setSANDBOX_DPM(!Config.getSANDBOX_DPM());
7983
break;
@@ -97,6 +101,7 @@ private void refreshData() {
97101
data.add(new NameArrowItem("delay for each request(ms)", "" + Config.getNETWORK_DELAY_REQ()).setTag(Config.Type.NETWORK_DELAY_REQ));
98102
data.add(new NameArrowItem("delay for each response(ms)", "" + Config.getNETWORK_DELAY_RES()).setTag(Config.Type.NETWORK_DELAY_RES));
99103
data.add(new NameArrowItem("the maximum number of first loads", "" + Config.getNETWORK_PAGE_SIZE()).setTag(Config.Type.NETWORK_PAGE_SIZE));
104+
data.add(new CheckBoxItem("Show urlConnection request", Config.getNETWORK_URL_CONNECTION()).setTag(Config.Type.NETWORK_URLCONNECTION));
100105

101106
data.add(new TitleItem(ViewKnife.getString(R.string.pd_name_sandbox)));
102107
data.add(new CheckBoxItem("show device-protect-mode file\n(only for api>=24)", Config.getSANDBOX_DPM()).setTag(Config.Type.SANDBOX_DPM));

pandora-core/src/main/java/tech/linjiang/pandora/util/Config.java

+15
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class Config {
2323
private static final String KEY_NETWORK_DELAY_RES = "key_network_delay_res";
2424
private static final String KEY_SANDBOX_DPM = "key_sandbox_dpm";
2525
private static final String KEY_NETWORK_PAGE_SIZE = "key_network_page_size";
26+
private static final String KEY_NETWORK_URLCONNECTION = "key_network_urlconnection";
2627
private static final String KEY_UI_ACTIVITY_GRAVITY = "key_ui_activity_gravity";
2728
private static final String KEY_UI_GRID_INTERVAL = "key_ui_grid_interval";
2829
private static final String KEY_UI_IGNORE_SYS_LAYER = "key_ui_ignore_sys_layer";
@@ -35,6 +36,7 @@ public class Config {
3536
private static final long DEF_KEY_NETWORK_DELAY_RES = 0;
3637
private static final boolean DEF_KEY_SANDBOX_DPM = false;
3738
private static final int DEF_KEY_NETWORK_PAGE_SIZE = 512;
39+
private static final boolean DEF_KEY_NETWORK_URLCONNECTION = true;
3840
private static final int DEF_UI_ACTIVITY_GRAVITY = Gravity.START | Gravity.BOTTOM;
3941
private static final int DEF_UI_GRID_INTERVAL = 5;
4042
private static final boolean DEF_UI_IGNORE_SYS_LAYER = false;
@@ -170,6 +172,17 @@ public static void setNETWORK_PAGE_SIZE(int value) {
170172

171173
//
172174

175+
public static boolean getNETWORK_URL_CONNECTION() {
176+
return getSp().getBoolean(KEY_NETWORK_URLCONNECTION, DEF_KEY_NETWORK_URLCONNECTION);
177+
}
178+
public static void setNETWORK_URL_CONNECTION(boolean value) {
179+
getSp().edit()
180+
.putBoolean(KEY_NETWORK_URLCONNECTION, value)
181+
.apply();
182+
}
183+
184+
//
185+
173186
public static boolean getUI_IGNORE_SYS_LAYER() {
174187
return getSp().getBoolean(KEY_UI_IGNORE_SYS_LAYER, DEF_UI_IGNORE_SYS_LAYER);
175188
}
@@ -190,6 +203,7 @@ public static void setUI_IGNORE_SYS_LAYER(Boolean value) {
190203
Type.NETWORK_DELAY_REQ,
191204
Type.NETWORK_DELAY_RES,
192205
Type.NETWORK_PAGE_SIZE,
206+
Type.NETWORK_URLCONNECTION,
193207
Type.SANDBOX_DPM,
194208
Type.UI_ACTIVITY_GRAVITY,
195209
Type.UI_GRID_INTERVAL,
@@ -207,6 +221,7 @@ public static void setUI_IGNORE_SYS_LAYER(Boolean value) {
207221
int NETWORK_DELAY_REQ = 0x20;
208222
int NETWORK_DELAY_RES = 0x21;
209223
int NETWORK_PAGE_SIZE = 0x22;
224+
int NETWORK_URLCONNECTION = 0x23;
210225

211226
int SANDBOX_DPM = 0x30;
212227

pandora-core/src/main/java/tech/linjiang/pandora/util/SensorDetector.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@ public class SensorDetector implements SensorEventListener {
1717
private Callback callback;
1818

1919
public SensorDetector(Callback callback) {
20-
register();
21-
this.callback = callback;
20+
if (callback != null) {
21+
register();
22+
this.callback = callback;
23+
}
2224
}
2325

2426
@Override

pandora-core/src/main/res/values-zh/strings.xml

+3
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,7 @@
5757
<string name="pd_name_reset">重置</string>
5858
<string name="pd_name_turn_on">打开</string>
5959
<string name="pd_name_threshold">摇晃系数</string>
60+
<string name="pd_name_previous">上一个</string>
61+
<string name="pd_name_next">下一个</string>
62+
<string name="pd_relaunch_request">设置成功,重启应用后生效</string>
6063
</resources>

pandora-core/src/main/res/values/strings.xml

+3
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,7 @@
5656
<string name="pd_name_reset">reset</string>
5757
<string name="pd_name_turn_on">turn on</string>
5858
<string name="pd_name_threshold">threshold</string>
59+
<string name="pd_name_previous">previous</string>
60+
<string name="pd_name_next">next</string>
61+
<string name="pd_relaunch_request">success, please restart app</string>
5962
</resources>

0 commit comments

Comments
 (0)