Skip to content

Commit 34ec6c3

Browse files
authored
Merge pull request didi#1029 from didi/fix_dokit_android
fix(android):fix dokit-plugin and gps mock status callback
2 parents 1d8ee67 + b2efdf2 commit 34ec6c3

File tree

9 files changed

+50
-11
lines changed

9 files changed

+50
-11
lines changed

Android/buildSrc/src/main/kotlin/com/didichuxing/doraemonkit/plugin/DoKitExtUtil.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ object DoKitExtUtil {
2424

2525
var HAS_DOKIT_TCP_HOOK_DJ = false
2626

27+
var DOKIT_GPS_MOCK_INCLUDE = false
28+
2729
/**
2830
* 三方库版本信息
2931
*/

Android/buildSrc/src/main/kotlin/com/didichuxing/doraemonkit/plugin/classtransformer/CommClassTransformer.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class CommClassTransformer : AbsClassTransformer() {
6767
}
6868

6969
//gps字节码操作
70-
if (DoKitExtUtil.commExt.gpsSwitch) {
70+
if (DoKitExtUtil.commExt.gpsSwitch && DoKitExtUtil.DOKIT_GPS_MOCK_INCLUDE) {
7171
//系统 gpsStatus hook
7272
klass.methods.forEach { method ->
7373
method.instructions?.iterator()?.asIterable()

Android/buildSrc/src/main/kotlin/com/didichuxing/doraemonkit/plugin/processor/DoKitPluginConfigProcessor.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ class DoKitPluginConfigProcessor(val project: Project) : VariantProcessor {
6464
if (thirdLibInfo.variant.contains("dokitx-tcp-hook-dj")) {
6565
DoKitExtUtil.HAS_DOKIT_TCP_HOOK_DJ = true
6666
}
67+
68+
if (thirdLibInfo.variant.contains("dokitx-gps-mock") || thirdLibInfo.variant.contains("dokit-gps-mock")){
69+
DoKitExtUtil.DOKIT_GPS_MOCK_INCLUDE = true;
70+
}
6771
// "thirdLibInfo.variant===>${thirdLibInfo.variant}".println()
6872
DoKitExtUtil.THIRD_LIB_INFOS.add(thirdLibInfo)
6973
} else if (variants.size == 4) {
@@ -77,6 +81,11 @@ class DoKitPluginConfigProcessor(val project: Project) : VariantProcessor {
7781
if (thirdLibInfo.variant.contains("dokitx-tcp-hook-dj")) {
7882
DoKitExtUtil.HAS_DOKIT_TCP_HOOK_DJ = true
7983
}
84+
85+
if (thirdLibInfo.variant.contains("dokitx-gps-mock") || thirdLibInfo.variant.contains("dokit-gps-mock")){
86+
DoKitExtUtil.DOKIT_GPS_MOCK_INCLUDE = true;
87+
}
88+
8089
// "thirdLibInfo.variant===>${thirdLibInfo.variant}".println()
8190
DoKitExtUtil.THIRD_LIB_INFOS.add(thirdLibInfo)
8291
}

Android/dokit-gps-mock/src/main/java/com/didichuxing/doraemonkit/gps_mock/gpsmock/GpsMockFragment.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282

8383
public class GpsMockFragment extends BaseFragment implements View.OnClickListener, PositionSelectRecyclerAdapter.IPositionItemSelectedCallback
8484
, CompoundButton.OnCheckedChangeListener, MotionLayout.TransitionListener, BaiduMap.OnMapStatusChangeListener, OnGetGeoCoderResultListener
85-
, OnGetRoutePlanResultListener {
85+
, OnGetRoutePlanResultListener, RouteMockThread.RouteMockStatusCallback {
8686
private static final String TAG = "GpsMockFragment";
8787

8888
private HomeTitleBar mTitleBar;
@@ -470,9 +470,9 @@ private void drawAndMockRoute() {
470470
}
471471
if (GpsMockManager.getInstance().getBdMockDrivingRouteLine() != null) {
472472
if (mCurDriftTypeIndex == DriftType.DRIFT_TYPE_ROUTE.ordinal()) {
473-
GpsMockManager.getInstance().startMockRouteLine(GpsMockManager.getInstance().getBdMockDrivingRouteLine().getRouteDriftPoints(), getInputSpeed());
473+
GpsMockManager.getInstance().startMockRouteLine(GpsMockManager.getInstance().getBdMockDrivingRouteLine().getRouteDriftPoints(), getInputSpeed(), this);
474474
} else {
475-
GpsMockManager.getInstance().startMockRouteLine(GpsMockManager.getInstance().getBdMockDrivingRouteLine().getRandomDriftPoints(), getInputSpeed());
475+
GpsMockManager.getInstance().startMockRouteLine(GpsMockManager.getInstance().getBdMockDrivingRouteLine().getRandomDriftPoints(), getInputSpeed(), this);
476476
}
477477

478478
mBtnMockRoute1.setText(R.string.btn_text_stop_mock);
@@ -482,14 +482,20 @@ private void drawAndMockRoute() {
482482
// 真实路径模拟
483483
if (GpsMockManager.getInstance().getBdMockDrivingRouteLine() != null) {
484484
// 开始模拟
485-
GpsMockManager.getInstance().startMockRouteLine(GpsMockManager.getInstance().getBdMockDrivingRouteLine().getAllPoints(), getInputSpeed());
485+
GpsMockManager.getInstance().startMockRouteLine(GpsMockManager.getInstance().getBdMockDrivingRouteLine().getAllPoints(), getInputSpeed(), this);
486486
mBtnMockRoute1.setText(R.string.btn_text_stop_mock);
487487
mBtnMockRoute2.setText(R.string.btn_text_stop_mock);
488488
}
489489
}
490490
drawRoute();
491491
}
492492

493+
@Override
494+
public void onRouteMockFinish() {
495+
mBtnMockRoute1.setText(R.string.btn_text_start_mock);
496+
mBtnMockRoute2.setText(R.string.btn_text_start_mock);
497+
}
498+
493499
@Override
494500
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
495501
if (buttonView.getId() == R.id.cb_toggle_pos_mock) {

Android/dokit-gps-mock/src/main/java/com/didichuxing/doraemonkit/gps_mock/gpsmock/GpsMockManager.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ public void performMock(LatLng latLng) {
169169
GpsMockConfig.saveMockLocation(new LatLng(latLng.latitude, latLng.longitude));
170170
}
171171

172-
public void startMockRouteLine(List<com.baidu.mapapi.model.LatLng> points, double speed) {
172+
public void startMockRouteLine(List<com.baidu.mapapi.model.LatLng> points, double speed, RouteMockThread.RouteMockStatusCallback statusCallback) {
173173
if (isMockingRoute()) return;
174174

175175
if (isMockingRoute() && mRouteMockThread.isSuspend()){
@@ -184,6 +184,7 @@ public void startMockRouteLine(List<com.baidu.mapapi.model.LatLng> points, doubl
184184
mRouteMockThread = new RouteMockThread();
185185
mRouteMockThread.setIntervalTime(mIntervalTime);
186186
mRouteMockThread.setPoints(points);
187+
mRouteMockThread.setRouteMockStatusCallback(statusCallback);
187188
mRouteMockThread.start();
188189
}
189190
}

Android/dokit-gps-mock/src/main/java/com/didichuxing/doraemonkit/gps_mock/gpsmock/RouteMockThread.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.didichuxing.doraemonkit.gps_mock.gpsmock;
22

3-
import android.util.Log;
4-
53
import com.baidu.mapapi.model.LatLng;
64
import com.didichuxing.doraemonkit.util.LogHelper;
75
import com.didichuxing.doraemonkit.util.ThreadUtils;
@@ -21,6 +19,7 @@ public class RouteMockThread extends Thread {
2119
List<com.baidu.mapapi.model.LatLng> mPoints = new ArrayList<>();
2220
// 坐标点移动间隔时间
2321
private long mIntervalTime;
22+
private RouteMockStatusCallback mRouteMockStatusCallback;
2423

2524
@Override
2625
public void run() {
@@ -58,6 +57,9 @@ private void reset() {
5857
mIndex = 0;
5958
mIsMocking = false;
6059
ToastUtils.showShort("轨迹模拟已结束");
60+
if (mRouteMockStatusCallback != null) {
61+
ThreadUtils.runOnUiThread(() -> mRouteMockStatusCallback.onRouteMockFinish());
62+
}
6163
}
6264

6365
/**
@@ -94,11 +96,19 @@ public void setPoints(List<LatLng> points) {
9496
mPoints.addAll(points);
9597
}
9698

99+
public void setIntervalTime(long intervalTime) {
100+
mIntervalTime = intervalTime;
101+
}
102+
97103
public long getIntervalTime() {
98104
return mIntervalTime;
99105
}
100106

101-
public void setIntervalTime(long intervalTime) {
102-
mIntervalTime = intervalTime;
107+
public void setRouteMockStatusCallback(RouteMockStatusCallback routeMockStatusCallback) {
108+
mRouteMockStatusCallback = routeMockStatusCallback;
109+
}
110+
111+
public interface RouteMockStatusCallback{
112+
void onRouteMockFinish();
103113
}
104114
}

Android/dokit-plugin/src/main/kotlin/com/didichuxing/doraemonkit/plugin/DoKitExtUtil.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ object DoKitExtUtil {
2424

2525
var HAS_DOKIT_TCP_HOOK_DJ = false
2626

27+
var DOKIT_GPS_MOCK_INCLUDE = false
28+
2729
/**
2830
* 三方库版本信息
2931
*/

Android/dokit-plugin/src/main/kotlin/com/didichuxing/doraemonkit/plugin/classtransformer/CommClassTransformer.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class CommClassTransformer : AbsClassTransformer() {
6767
}
6868

6969
//gps字节码操作
70-
if (DoKitExtUtil.commExt.gpsSwitch) {
70+
if (DoKitExtUtil.commExt.gpsSwitch && DoKitExtUtil.DOKIT_GPS_MOCK_INCLUDE) {
7171
//系统 gpsStatus hook
7272
klass.methods.forEach { method ->
7373
method.instructions?.iterator()?.asIterable()

Android/dokit-plugin/src/main/kotlin/com/didichuxing/doraemonkit/plugin/processor/DoKitPluginConfigProcessor.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ class DoKitPluginConfigProcessor(val project: Project) : VariantProcessor {
6464
if (thirdLibInfo.variant.contains("dokitx-tcp-hook-dj")) {
6565
DoKitExtUtil.HAS_DOKIT_TCP_HOOK_DJ = true
6666
}
67+
68+
if (thirdLibInfo.variant.contains("dokitx-gps-mock") || thirdLibInfo.variant.contains("dokit-gps-mock")){
69+
DoKitExtUtil.DOKIT_GPS_MOCK_INCLUDE = true;
70+
}
6771
// "thirdLibInfo.variant===>${thirdLibInfo.variant}".println()
6872
DoKitExtUtil.THIRD_LIB_INFOS.add(thirdLibInfo)
6973
} else if (variants.size == 4) {
@@ -77,6 +81,11 @@ class DoKitPluginConfigProcessor(val project: Project) : VariantProcessor {
7781
if (thirdLibInfo.variant.contains("dokitx-tcp-hook-dj")) {
7882
DoKitExtUtil.HAS_DOKIT_TCP_HOOK_DJ = true
7983
}
84+
85+
if (thirdLibInfo.variant.contains("dokitx-gps-mock") || thirdLibInfo.variant.contains("dokit-gps-mock")){
86+
DoKitExtUtil.DOKIT_GPS_MOCK_INCLUDE = true;
87+
}
88+
8089
// "thirdLibInfo.variant===>${thirdLibInfo.variant}".println()
8190
DoKitExtUtil.THIRD_LIB_INFOS.add(thirdLibInfo)
8291
}

0 commit comments

Comments
 (0)