Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(Android):增加心跳丢失模拟功能. #1072

Merged
merged 1 commit into from
Sep 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Android/config.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ ext {
//0:发布到到本地localRepoURL仓库
//1:发布到滴滴内部仓库 一般不建议使用 如果需要发布到滴滴内网仓库需要将版本号改得比较大 假如版本号跟jcenter上的一致会由于缓存导致没法下载最新的jcenter的线上代码
//2:发布到maven_central远程仓库
archives_type: 0,
archives_type: 1,
//0:依赖dokit本地module运行
//1:依赖dokit远程aar运行
run_type : 0,
Expand All @@ -13,7 +13,7 @@ ext {
//是否使用本地仓库,需要使用绝对路径,仓库地址在 local.properties 中添加 LOCAL_REPOSITORY_URL
use_local : true,
group_id : 'io.github.didi.dokit',
version : '3.7.3'
version : '3.6.1.700'
]

android = [compileSdkVersion : 29,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,18 @@ public class BdMapRouteData {

List<com.baidu.mapapi.model.LatLng> mRandomDriftPoints = new ArrayList<>();
List<com.baidu.mapapi.model.LatLng> mRouteDriftPoints = new ArrayList<>();
List<com.baidu.mapapi.model.LatLng> mRouteLostLocPoints = new ArrayList<>();

private int mRandomDriftDistance;
private int mRouteDriftDistance;

public com.baidu.mapapi.model.LatLng mOriginRouteStartLostPoint;
public com.baidu.mapapi.model.LatLng mOriginRouteEndLostPoint;
public com.baidu.mapapi.model.LatLng mRandomDriftStartLostPoint;
public com.baidu.mapapi.model.LatLng mRandomDriftEndLostPoint;
public com.baidu.mapapi.model.LatLng mRouteDriftStartLostPoint;
public com.baidu.mapapi.model.LatLng mRouteDriftEndLostPoint;

public List<LatLng> getAllPoints() {
return mAllPoints;
}
Expand Down Expand Up @@ -73,6 +81,16 @@ public void setRouteDriftPoints(List<LatLng> routeDriftPoints) {
mRouteDriftPoints.addAll(routeDriftPoints);
}


public List<LatLng> getOriginRouteLostLocPoints() {
return mRouteLostLocPoints;
}

public void setOriginRouteLostLocPoints(List<LatLng> routeLostLocPoints) {
mRouteLostLocPoints.clear();
mRouteLostLocPoints.addAll(routeLostLocPoints);
}

public boolean isRouteDataFromBiz() {
return mRouteDataFromBiz;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,8 @@ public class GpsMockFragment extends BaseFragment implements View.OnClickListene
private SeekRangeBar mSeekBar;
private Group mGroupSelectPath;
private Group mGroupSelectAutoPath;
private CheckBox mCbDriftLostLoc;
private SeekRangeBar mDriftLostLocSeekBar;
private Button mBtnMockRoute2;
private ImageView mIvDownExpand;
private TextView mTvOriginDistance;
Expand Down Expand Up @@ -205,6 +207,8 @@ private void initView() {
mSeekBar = findViewById(R.id.seekbar_select_path);
mGroupSelectPath = findViewById(R.id.group_select_path);
mGroupSelectAutoPath = findViewById(R.id.group_select_auto_path);
mCbDriftLostLoc = findViewById(R.id.cb_toggle_route_lost_loc);
mDriftLostLocSeekBar = findViewById(R.id.seekbar_select_lost_path);
mBtnMockRoute2 = findViewById(R.id.btn_mock_route2);
mTvOriginDistance = findViewById(R.id.tv_real_distance);
mTvMockDistance = findViewById(R.id.tv_mock_distance);
Expand All @@ -228,6 +232,11 @@ private void initView() {
mCbToggleRouteDriftMock.setOnCheckedChangeListener(this);
mCbToggleRouteDriftMock.setChecked(GpsMockConfig.isRouteDriftMockOpen());

mCbDriftLostLoc.setOnCheckedChangeListener(this);
mCbDriftLostLoc.setChecked(GpsMockConfig.isRouteDriftMockLostLocOpen());
mDriftLostLocSeekBar.setProgressLow(GpsMockConfig.getLostLocSeekBarLow());
mDriftLostLocSeekBar.setProgressHigh(GpsMockConfig.getLostLocSeekBarHigh());

// 临时先屏蔽
// mCbToggleRouteDriftMock.setEnabled(false);
// mDriftSettingLayout.setVisibility(View.GONE);
Expand Down Expand Up @@ -397,7 +406,7 @@ private void drawRoute() {
if (GpsMockManager.getInstance().getBdMockDrivingRouteLine() != null) {
mBdMapView.setOnMarkerClickListener(mDrivingRouteOverlay);
mDrivingRouteOverlay.setBdMapRouteData(GpsMockManager.getInstance().getBdMockDrivingRouteLine());
mDrivingRouteOverlay.addToMap();
mDrivingRouteOverlay.addToMap(mCbDriftLostLoc.isChecked());
mDrivingRouteOverlay.zoomToSpan();

mTvOriginDistance.setText(String.valueOf(GpsMockManager.getInstance().getBdMockDrivingRouteLine().getTotalDistance()));
Expand All @@ -406,10 +415,10 @@ private void drawRoute() {
if (checkDriftToggle()) {
if (GpsMockManager.getInstance().getBdMockDrivingRouteLine() != null) {
if (mCurDriftTypeIndex == DriftType.DRIFT_TYPE_ROUTE.ordinal()) {
mDrivingRouteOverlay.addDriftRouteToMap(GpsMockManager.getInstance().getBdMockDrivingRouteLine().getRouteDriftPoints(), OverlayManager.COLOR_ROUTE_DRIFT);
mDrivingRouteOverlay.addDriftRouteToMap(GpsMockManager.getInstance().getBdMockDrivingRouteLine(), OverlayManager.COLOR_ROUTE_DRIFT, mCbDriftLostLoc.isChecked());
mTvMockDistance.setText(String.valueOf(GpsMockManager.getInstance().getBdMockDrivingRouteLine().getRouteDriftDistance()));
} else {
mDrivingRouteOverlay.addDriftRandomRouteToMap(GpsMockManager.getInstance().getBdMockDrivingRouteLine().getRandomDriftPoints(), OverlayManager.COLOR_ROUTE_DRIFT);
mDrivingRouteOverlay.addDriftRandomRouteToMap(GpsMockManager.getInstance().getBdMockDrivingRouteLine(), OverlayManager.COLOR_ROUTE_DRIFT, mCbDriftLostLoc.isChecked());
mTvMockDistance.setText(String.valueOf(GpsMockManager.getInstance().getBdMockDrivingRouteLine().getRandomDriftDistance()));
}
}
Expand Down Expand Up @@ -443,6 +452,8 @@ public void onClick(View v) {
GpsMockConfig.putRouteMockAccuracy(getInputDriftAccuracy());
GpsMockConfig.putSeekBarLow((int) mSeekBar.getProgressLow());
GpsMockConfig.putSeekBarHigh((int) mSeekBar.getProgressHigh());
GpsMockConfig.putLostLocSeekBarLow((int) mDriftLostLocSeekBar.getProgressLow());
GpsMockConfig.putLostLocSeekBarHigh((int) mDriftLostLocSeekBar.getProgressHigh());

if (GpsMockManager.getInstance().isMockingRoute()) {
mBtnMockRoute1.setText(R.string.btn_text_start_mock);
Expand Down Expand Up @@ -473,6 +484,9 @@ private void drawAndMockRoute() {
// 漂移路径模拟
// 计算偏移点(手动选择模式)
GpsMockManager.getInstance().calculateDriftRoute(getInputDriftAccuracy(), mSeekBar.getProgressLow(), mSeekBar.getProgressHigh());
if (mCbDriftLostLoc.isChecked()){
GpsMockManager.getInstance().calculateDriftRouteWithLocLost(mDriftLostLocSeekBar.getProgressLow(), mDriftLostLocSeekBar.getProgressHigh());
}
} else {
// 计算漂移点(智能模式)待补齐.

Expand All @@ -490,8 +504,15 @@ private void drawAndMockRoute() {
} else {
// 真实路径模拟
if (GpsMockManager.getInstance().getBdMockDrivingRouteLine() != null) {
// 开始模拟
GpsMockManager.getInstance().startMockRouteLine(GpsMockManager.getInstance().getBdMockDrivingRouteLine().getAllPoints(), getInputSpeed(), this);
if (mCbDriftLostLoc.isChecked()){
GpsMockManager.getInstance().calculateOriginRouteWithLocLost(mDriftLostLocSeekBar.getProgressLow(), mDriftLostLocSeekBar.getProgressHigh());
// 开始模拟
GpsMockManager.getInstance().startMockRouteLine(GpsMockManager.getInstance().getBdMockDrivingRouteLine().getOriginRouteLostLocPoints(), getInputSpeed(), this);
} else {
// 开始模拟
GpsMockManager.getInstance().startMockRouteLine(GpsMockManager.getInstance().getBdMockDrivingRouteLine().getAllPoints(), getInputSpeed(), this);
}

mBtnMockRoute1.setText(R.string.btn_text_stop_mock);
mBtnMockRoute2.setText(R.string.btn_text_stop_mock);
}
Expand All @@ -516,6 +537,9 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
} else if (buttonView.getId() == R.id.cb_toggle_route_drift_mock) {
onRouteDriftMockCbChange(isChecked);
LogHelper.d(TAG, "cb_toggle_route_drift_mock onCheckedChanged: " + " " + isChecked);
} else if (buttonView.getId() == R.id.cb_toggle_route_lost_loc){
onLostLocMockCbChange(isChecked);
LogHelper.d(TAG, "cb_toggle_route_lost_loc onCheckedChanged: " + " " + isChecked);
}
}

Expand Down Expand Up @@ -627,6 +651,10 @@ private void onRouteDriftMockCbChange(boolean isChecked) {
drawRoute();
}

private void onLostLocMockCbChange(boolean isChecked){
GpsMockConfig.putRouteDriftMockLostLocOpen(isChecked);
}

private float getInputSpeed() {
float speed = 60f;
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ public void performMock(LatLng latLng) {
public void startMockRouteLine(List<com.baidu.mapapi.model.LatLng> points, double speed, RouteMockThread.RouteMockStatusCallback statusCallback) {
if (isMockingRoute()) return;

if (isMockingRoute() && mRouteMockThread.isSuspend()){
if (isMockingRoute() && mRouteMockThread.isSuspend()) {
suspendRouteMock(false);
return;
}
Expand All @@ -189,37 +189,101 @@ public void startMockRouteLine(List<com.baidu.mapapi.model.LatLng> points, doubl
}
}

public void setStatusCallback(RouteMockThread.RouteMockStatusCallback statusCallback){
if (mRouteMockThread != null){
public void setStatusCallback(RouteMockThread.RouteMockStatusCallback statusCallback) {
if (mRouteMockThread != null) {
mRouteMockThread.setRouteMockStatusCallback(statusCallback);
}
}

public void removeStatusCallback(){
if (mRouteMockThread != null){
public void removeStatusCallback() {
if (mRouteMockThread != null) {
mRouteMockThread.clearRouteMockStatusCallback();
}
}

/**
* 停止模拟.
*/
public void interruptRouteMockThread(){
if (GpsMockManager.getInstance().isMockingRoute()){
public void interruptRouteMockThread() {
if (GpsMockManager.getInstance().isMockingRoute()) {
mRouteMockThread.interrupt();
}
}

/**
*
* @param suspend true: 暂停模拟; false:继续模拟
*/
public void suspendRouteMock(boolean suspend){
if (isMockingRoute()){
public void suspendRouteMock(boolean suspend) {
if (isMockingRoute()) {
mRouteMockThread.notifyThread(suspend);
}
}

public void calculateOriginRouteWithLocLost(double progressLow, double progressHigh) {
BdMapRouteData bdMapRouteData = GpsMockManager.getInstance().getBdMockDrivingRouteLine();
if (bdMapRouteData == null) return;
List<com.baidu.mapapi.model.LatLng> originRoutePoints = bdMapRouteData.getAllPoints();
int totalPointsSize = originRoutePoints.size();
if (totalPointsSize < 2) return;

int startIndex = Math.round((totalPointsSize / 100.0f) * (int) progressLow);
int endIndex = Math.round((totalPointsSize / 100.0f) * (int) progressHigh);
if (endIndex <= startIndex) return;
int startLostIndex = startIndex > 0 ? (startIndex - 1) : 0;
if (endIndex > totalPointsSize) {
endIndex = totalPointsSize - 1;
}

startIndex = startIndex <= 0 ? 1 : startIndex;
endIndex = endIndex == totalPointsSize ? (endIndex - 1) : endIndex;
com.baidu.mapapi.model.LatLng originRouteStartLostPoint = originRoutePoints.get(startLostIndex);
com.baidu.mapapi.model.LatLng originRouteEndLostPoint = originRoutePoints.get(endIndex);
bdMapRouteData.mOriginRouteStartLostPoint = originRouteStartLostPoint;
bdMapRouteData.mOriginRouteEndLostPoint = originRouteEndLostPoint;

List<com.baidu.mapapi.model.LatLng> tempLostLocOriginRoutePoints = new ArrayList<>();
tempLostLocOriginRoutePoints.addAll(originRoutePoints.subList(0, startIndex));
tempLostLocOriginRoutePoints.addAll(originRoutePoints.subList(endIndex, totalPointsSize));
bdMapRouteData.setOriginRouteLostLocPoints(tempLostLocOriginRoutePoints);
}

public void calculateDriftRouteWithLocLost(double progressLow, double progressHigh) {
BdMapRouteData bdMapRouteData = GpsMockManager.getInstance().getBdMockDrivingRouteLine();
if (bdMapRouteData == null) return;
List<com.baidu.mapapi.model.LatLng> randomDriftPoints = bdMapRouteData.getRandomDriftPoints();
List<com.baidu.mapapi.model.LatLng> routeDriftPoints = bdMapRouteData.getRouteDriftPoints();
int totalPointsSize = randomDriftPoints.size();
if (totalPointsSize < 2) return;
int startIndex = Math.round((totalPointsSize / 100.0f) * (int) progressLow);
int endIndex = Math.round((totalPointsSize / 100.0f) * (int) progressHigh);
if (endIndex <= startIndex) return;
int startLostIndex = startIndex > 0 ? (startIndex - 1) : 0;
if (endIndex > totalPointsSize) {
endIndex = totalPointsSize - 1;
}

startIndex = startIndex <= 0 ? 1 : startIndex;
endIndex = endIndex == totalPointsSize ? (endIndex - 1) : endIndex;

com.baidu.mapapi.model.LatLng randomDriftStartLostPoint = randomDriftPoints.get(startLostIndex);
com.baidu.mapapi.model.LatLng randomDriftEndLostPoint = randomDriftPoints.get(endIndex);
bdMapRouteData.mRandomDriftStartLostPoint = randomDriftStartLostPoint;
bdMapRouteData.mRandomDriftEndLostPoint = randomDriftEndLostPoint;
com.baidu.mapapi.model.LatLng routeDriftStartLostPoint = routeDriftPoints.get(startLostIndex);
com.baidu.mapapi.model.LatLng routeDriftEndLostPoint = routeDriftPoints.get(endIndex);
bdMapRouteData.mRouteDriftStartLostPoint = routeDriftStartLostPoint;
bdMapRouteData.mRouteDriftEndLostPoint = routeDriftEndLostPoint;

List<com.baidu.mapapi.model.LatLng> tempLostLocRandomDriftPoints = new ArrayList<>();
tempLostLocRandomDriftPoints.addAll(randomDriftPoints.subList(0, startIndex));
tempLostLocRandomDriftPoints.addAll(randomDriftPoints.subList(endIndex, totalPointsSize));
bdMapRouteData.setRandomDriftPoints(tempLostLocRandomDriftPoints);
List<com.baidu.mapapi.model.LatLng> tempLostLocRouteDriftPoints = new ArrayList<>();
tempLostLocRouteDriftPoints.addAll(routeDriftPoints.subList(0, startIndex));
tempLostLocRouteDriftPoints.addAll(routeDriftPoints.subList(endIndex, totalPointsSize));
bdMapRouteData.setRouteDriftPoints(tempLostLocRouteDriftPoints);
}

public void calculateDriftRoute(double radius, double progressLow, double progressHigh) {
Double orientLatDiffer = null;
BdMapRouteData bdMapRouteData = GpsMockManager.getInstance().getBdMockDrivingRouteLine();
Expand Down Expand Up @@ -257,7 +321,7 @@ public void calculateDriftRoute(double radius, double progressLow, double progre
double[] randomLatLng = Utils.getRandomLatLng(point.latitude, point.longitude, radius, rangeAround);
com.baidu.mapapi.model.LatLng randomPoint = new com.baidu.mapapi.model.LatLng(randomLatLng[0], randomLatLng[1]);
randomDriftPoints.add(randomPoint);
}else {
} else {
randomDriftPoints.add(point);
}

Expand All @@ -275,13 +339,13 @@ public void calculateDriftRoute(double radius, double progressLow, double progre
List<com.baidu.mapapi.model.LatLng> end = allPoints.subList(endIndex, totalPointsSize);
randomDriftPoints.addAll(randomDriftPoints.size(), end);
randomDriftPoints.addAll(0, start);
int randomDriftDistance = (int)Math.round(Utils.getRouteDistance(randomDriftPoints));
int randomDriftDistance = (int) Math.round(Utils.getRouteDistance(randomDriftPoints));
bdMapRouteData.setRandomDriftPoints(randomDriftPoints);
bdMapRouteData.setRandomDriftDistance(randomDriftDistance);

routeDriftPoints.addAll(routeDriftPoints.size(), end);
routeDriftPoints.addAll(0, start);
int routeDriftDistance = (int)Math.round(Utils.getRouteDistance(routeDriftPoints));
int routeDriftDistance = (int) Math.round(Utils.getRouteDistance(routeDriftPoints));
bdMapRouteData.setRouteDriftPoints(routeDriftPoints);
bdMapRouteData.setRouteDriftDistance(routeDriftDistance);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
public class DrivingRouteOverlay extends OverlayManager {

private DrivingRouteLine mRouteLine = null;
private BdMapRouteData mBdMapRouteData;
boolean focus = false;

/**
Expand Down
Loading