Commit aab700e44337866bf26e754a0fc0fbe3d9f30ac7

Authored by 杨帅
1 parent e8e32e1c

1 实现重新上传功能模块

2 完成全部成绩详情页
Showing 24 changed files with 985 additions and 86 deletions
moudle_pedometer/src/main/AndroidManifest.xml
... ... @@ -128,7 +128,7 @@
128 128 <activity
129 129 android:name="com.cnlive.moudle.pedometer.ui.activity.RunRaceDetailActivity"
130 130 android:launchMode="singleTask"
131   - android:process=":step" />
  131 + />
132 132 <activity
133 133 android:name="com.cnlive.moudle.pedometer.ui.activity.RunningFinishActivity"
134 134 android:launchMode="singleTask"
... ... @@ -136,7 +136,11 @@
136 136 <activity
137 137 android:name="com.cnlive.moudle.pedometer.ui.activity.UploadFailDetailActivity"
138 138 android:launchMode="singleTask"
139   - android:process=":step" />
  139 + />
  140 + <!--全部成绩详情页-->
  141 + <activity
  142 + android:name="com.cnlive.moudle.pedometer.ui.activity.ALLScoreDetailActivity"
  143 + android:launchMode="singleTask" />
140 144 <!--************************************************路径工具**********************************************-->
141 145 <service
142 146 android:name="com.cnlive.moudle.collectionTrace.service.CollKeepLiveService"
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/activity/CollRunningFinishActivity.java
... ... @@ -39,7 +39,7 @@ public class CollRunningFinishActivity extends QMUIFragmentActivity {
39 39 }
40 40  
41 41 private void addFragment(RunningFinishBean runningFinishBean) {
42   - QMUIFragment fragment = CollRunningFinishFragment.instance(runningFinishBean);
  42 + QMUIFragment fragment =RunningFinishFragment.instance(runningFinishBean);
43 43 getSupportFragmentManager().beginTransaction()
44 44 .add(getContextViewId(), fragment, fragment.getClass().getSimpleName())
45 45 .addToBackStack(fragment.getClass().getSimpleName())
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/presenter/ALLScoreDetailFragmentPresenter.java 0 → 100644
  1 +package com.cnlive.moudle.pedometer.frame.presenter;
  2 +
  3 +import com.cnlive.moudle.pedometer.frame.view.ALLScoreDetailFragmentView;
  4 +import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter;
  5 +
  6 +public class ALLScoreDetailFragmentPresenter extends MvpBasePresenter<ALLScoreDetailFragmentView> {
  7 +}
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/presenter/LineUpAgainPresenter.java
1 1 package com.cnlive.moudle.pedometer.frame.presenter;
2 2  
  3 +import android.app.Activity;
  4 +import android.os.Handler;
  5 +import android.text.TextUtils;
  6 +import android.util.Log;
  7 +import android.widget.Toast;
  8 +
  9 +import com.baidu.mapapi.model.LatLng;
  10 +import com.baidu.trace.LBSTraceClient;
  11 +import com.baidu.trace.model.SortType;
  12 +import com.cnlive.libs.base.logic.Logic;
  13 +import com.cnlive.libs.base.logic.callback.DataCallback;
  14 +import com.cnlive.libs.base.logic.callback.FailureCallback;
  15 +import com.cnlive.libs.base.logic.callback.SuccessCallback;
  16 +import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
3 17 import com.cnlive.moudle.pedometer.frame.view.LineUpAgainView;
  18 +import com.cnlive.moudle.pedometer.model.Constant;
  19 +import com.cnlive.moudle.pedometer.net.ApiServiceRunLin;
  20 +import com.cnlive.moudle.pedometer.net.SubscriptionRequest;
  21 +import com.cnlive.moudle.pedometer.net.bean.BaseInfo;
  22 +import com.cnlive.moudle.pedometer.sql.entity.FailedEntity;
  23 +import com.cnlive.moudle.pedometer.ui.activity.LineUpAgainActivity;
  24 +import com.cnlive.moudle.pedometer.ui.widget.SelectDialog;
  25 +import com.cnlive.moudle.pedometer.utils.GsonUtil;
  26 +import com.cnlive.moudle.pedometer.utils.MyMapUtil;
  27 +import com.cnlive.moudle.pedometer.utils.QMUITipDialogUtil;
  28 +import com.cnlive.moudle.pedometer.utils.StepUtil;
  29 +import com.example.moudle_pedometer.R;
4 30 import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter;
5 31  
  32 +import java.util.HashMap;
  33 +import java.util.List;
  34 +import java.util.Map;
  35 +
  36 +import io.reactivex.disposables.Disposable;
  37 +
6 38 /**
7 39 * Created by hanyayun 019/06/20.
8 40 */
9 41 public class LineUpAgainPresenter extends MvpBasePresenter<LineUpAgainView> {
  42 + private LBSTraceClient mClient = null;
  43 + private List<LatLng> importPoints;
  44 + private SelectDialog uploadFailDialog;
  45 + private SelectDialog failTraceDialog;
  46 +
  47 + /**
  48 + * 查询当前用户历史轨迹(用于重新上传按钮)
  49 + */
  50 + public void queryHistoryTraceNoMap(Activity context, FailedEntity failedEntity,onResultListener onResultListener) {
  51 + QMUITipDialogUtil.loadingDialog(context, "正在获取轨迹信息,请稍后", false);
  52 + //查询当前用户的历史轨迹
  53 + long startTime = failedEntity.getUserStartTime();
  54 + //获取当前的时间戳(秒)
  55 + long endTime = failedEntity.getUserEndTime();
  56 + //获取当前的实体名称
  57 + String entityName = CommonInfo.getUserId(context);
  58 + //打的重要点
  59 + importPoints = null;
  60 + if (!TextUtils.isEmpty(failedEntity.getImportPoint())) {
  61 + importPoints = GsonUtil.jsonToList(failedEntity.getImportPoint(), LatLng.class);
  62 + }
  63 + if (mClient == null) {
  64 + mClient = new LBSTraceClient(context);
  65 + }
  66 + MyMapUtil.queryHistoryTrace(context, mClient, entityName, startTime, endTime, new MyMapUtil.CallBack() {
  67 + @Override
  68 + public void success(List<LatLng> resultPoints) {
  69 + if (resultPoints != null) {
  70 + if (getView() != null) {
  71 + QMUITipDialogUtil.dismessDialog();
  72 + if (importPoints != null) {
  73 + //判断是否完成
  74 + boolean isFinish = MyMapUtil.checkIsFinishTrace(importPoints, resultPoints, Constant.PASS_RATE);
  75 + if (isFinish) {
  76 + Toast.makeText(context, "完成", Toast.LENGTH_LONG).show();
  77 + failedEntity.setIsFinish("1");
  78 + } else {
  79 + Toast.makeText(context, "没有完成", Toast.LENGTH_LONG).show();
  80 + failedEntity.setIsFinish("0");
  81 + }
  82 + saveRouteData(context, failedEntity,onResultListener);
  83 + }
  84 + }
  85 + }
  86 + //查询失败
  87 + else {
  88 + QMUITipDialogUtil.dismessDialog();
  89 + if (failTraceDialog == null) {
  90 + failTraceDialog = new SelectDialog(context, "获取轨迹失败,是否重试?", "重试", new SelectDialog.DialogInterface() {
  91 + @Override
  92 + public void onClick(SelectDialog dialog) {
  93 + dialog.dismiss();
  94 + queryHistoryTraceNoMap(context, failedEntity,onResultListener);
  95 + }
  96 + }, "取消", new SelectDialog.DialogInterface() {
  97 + @Override
  98 + public void onClick(SelectDialog dialog) {
  99 + dialog.dismiss();
  100 +
  101 + }
  102 + });
  103 + failTraceDialog.setCanceledOnTouchOutside(false);
  104 + failTraceDialog.setCancelable(false);
  105 + if (!failTraceDialog.isShowing()) {
  106 + failTraceDialog.show();
  107 + }
  108 +
  109 + } else {
  110 + if (!failTraceDialog.isShowing()) {
  111 + failTraceDialog.show();
  112 + }
  113 + }
  114 + }
  115 + }
  116 + });
  117 +
  118 + }
  119 +
  120 + /**
  121 + * 上传数据
  122 + *
  123 + * @param context
  124 + * @param failedEntity
  125 + */
  126 + public void saveRouteData(Activity context, FailedEntity failedEntity,onResultListener onResultListener) {
  127 + QMUITipDialogUtil.loadingDialog(context, "正在上传数据", false);
  128 + // 赛事id
  129 + String eventId = failedEntity.getStreetId();
  130 + //用户ID
  131 + String sid = CommonInfo.getUserId(context);
  132 + //用时
  133 + String employTime = failedEntity.getTime();
  134 + //路线全程里数
  135 + String mileage = "";
  136 + if ("--".equals(failedEntity.getDistance())) {
  137 + mileage = "0";
  138 + } else {
  139 + mileage = failedEntity.getDistance();
  140 + }
  141 + //配速
  142 + String pace = "";
  143 + if ("--".equals(failedEntity.getSpeed())) {
  144 + pace = "0";
  145 + } else {
  146 + pace = failedEntity.getSpeed();
  147 + }
  148 + // 路线图
  149 + String roadmap = "";
  150 + //经纬度
  151 + String latLongitude = "";
  152 + // 开始时间
  153 + String startTime = failedEntity.getUserStartTime() + "";
  154 + //结束时间
  155 + String endTime = failedEntity.getUserEndTime() + "";
  156 + //暂停时间
  157 + String pauseTime = "";
  158 + String isPause = "0";//1暂停
  159 + if (failedEntity.getIsPause()) {
  160 + pauseTime = failedEntity.getUserPauseTime() + "";
  161 + isPause = "1";
  162 + }
  163 + //继续时间
  164 + String continueTime = "";
  165 + //是否完成
  166 + String completeStatus = failedEntity.getIsFinish();
  167 +
  168 + //设置请求参数
  169 + Map<String, String> paramsMap = new HashMap<>();
  170 + paramsMap.put("eventId", eventId);
  171 + paramsMap.put("sid", sid);
  172 + paramsMap.put("employTime", employTime);
  173 + paramsMap.put("mileage", mileage);
  174 + paramsMap.put("pace", pace);
  175 + paramsMap.put("latLongitude", latLongitude);
  176 + paramsMap.put("roadmap", roadmap);
  177 + paramsMap.put("startTime", startTime);
  178 + paramsMap.put("endTime", endTime);
  179 + paramsMap.put("pauseTime", pauseTime);
  180 + paramsMap.put("continueTime", continueTime);
  181 + paramsMap.put("isPause", isPause);
  182 + paramsMap.put("completeStatus", completeStatus);
  183 +
  184 +
  185 + Logic.create(paramsMap).action(new Logic.Action<Map<String, String>, BaseInfo>() {
  186 + @Override
  187 + public Disposable action(Map<String, String> stringStringMap, DataCallback<BaseInfo> dataCallback) {
  188 + return SubscriptionRequest.service(ApiServiceRunLin.class, api -> api.saveRouteData(stringStringMap)).subscribe(context, dataCallback);
  189 + }
  190 + }).<BaseInfo>event()
  191 + .setFailureCallback(new FailureCallback() {
  192 + @Override
  193 + public void onFailure(int code, String message) {
  194 + if (getView() == null) {
  195 + return;
  196 + }
  197 + if (onResultListener!=null){
  198 + onResultListener.onFailed(message);
  199 + }
  200 + Log.e("saveRouteData", "onFailure: " + message);
  201 + QMUITipDialogUtil.dismessDialog();
  202 + if (uploadFailDialog == null) {
  203 + uploadFailDialog = new SelectDialog(context, "上传数据失败,是否重试?", "重试", new SelectDialog.DialogInterface() {
  204 + @Override
  205 + public void onClick(SelectDialog dialog) {
  206 + dialog.dismiss();
  207 + saveRouteData(context, failedEntity,onResultListener);
  208 + }
  209 + }, "取消", new SelectDialog.DialogInterface() {
  210 + @Override
  211 + public void onClick(SelectDialog dialog) {
  212 + dialog.dismiss();
  213 + }
  214 + });
  215 + uploadFailDialog.setCanceledOnTouchOutside(false);
  216 + uploadFailDialog.setCancelable(false);
  217 + if (!uploadFailDialog.isShowing()) {
  218 + uploadFailDialog.show();
  219 + }
  220 + } else {
  221 + if (!uploadFailDialog.isShowing()) {
  222 + uploadFailDialog.show();
  223 + }
  224 + }
  225 + }
  226 + }).setSuccessCallback(new SuccessCallback<BaseInfo>() {
  227 + @Override
  228 + public void onSuccess(BaseInfo baseInfo) {
  229 + if (getView() == null) {
  230 + return;
  231 + }
  232 +
  233 + QMUITipDialogUtil.dismessDialog();
  234 + QMUITipDialogUtil.successDialog(context, "上传成功", 1);
  235 + //删除暂存数据
  236 + FailedEntity entity = StepUtil.getTempSaveFailData(context, CommonInfo.getUserId(context), failedEntity.getUserStartTime());
  237 + if (entity != null) {
  238 + //删除
  239 + StepUtil.deleteTempSaveFailData(context, entity);
  240 + }
  241 + if (onResultListener!=null){
  242 + onResultListener.onSuccess();
  243 + }
  244 + }
  245 + }).start();
  246 + }
  247 +
  248 + public interface onResultListener {
  249 + void onSuccess();
  250 +
  251 + void onFailed(String tip);
  252 + }
10 253 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/presenter/RunningFinishFragmetPresenter.java
... ... @@ -105,7 +105,8 @@ public class RunningFinishFragmetPresenter extends MvpBasePresenter&lt;RunningFinis
105 105 String continueTime = "";
106 106 //是否完成
107 107 String completeStatus = runningFinishBean.getIsFinish();
108   -
  108 + //设置步数
  109 + String step = runningFinishBean.getStep();
109 110 //设置请求参数
110 111 Map<String, String> paramsMap = new HashMap<>();
111 112 paramsMap.put("eventId", eventId);
... ... @@ -121,6 +122,8 @@ public class RunningFinishFragmetPresenter extends MvpBasePresenter&lt;RunningFinis
121 122 paramsMap.put("continueTime", continueTime);
122 123 paramsMap.put("isPause", isPause);
123 124 paramsMap.put("completeStatus", completeStatus);
  125 + paramsMap.put("step", step);
  126 +
124 127  
125 128  
126 129 Logic.create(paramsMap).action(new Logic.Action<Map<String, String>, BaseInfo>() {
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/presenter/RunningMapFragmentPresenter.java
... ... @@ -370,7 +370,7 @@ public class RunningMapFragmentPresenter extends MvpBasePresenter&lt;RunningMapFrag
370 370 Toast.makeText(context, "没有完成", Toast.LENGTH_LONG).show();
371 371  
372 372 }
373   - MyMapUtil.drawHistoryTrack(context, getView().baiduMap, resultPoints, SortType.asc, R.color.red, R.drawable.icon_start, R.drawable.icon_end);
  373 + MyMapUtil.drawRealTimeTrack(context, getView().baiduMap, resultPoints, SortType.asc, R.color.red, R.drawable.icon_start);
374 374 }
375 375 }
376 376 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/presenter/UploadFailDetailFragmentPresenter.java
1 1 package com.cnlive.moudle.pedometer.frame.presenter;
2 2  
  3 +import android.app.Activity;
  4 +import android.os.Handler;
  5 +import android.text.TextUtils;
  6 +import android.util.Log;
  7 +import android.widget.Toast;
  8 +
  9 +import com.baidu.mapapi.model.LatLng;
  10 +import com.baidu.trace.LBSTraceClient;
  11 +import com.baidu.trace.model.SortType;
  12 +import com.cnlive.libs.base.logic.Logic;
  13 +import com.cnlive.libs.base.logic.callback.DataCallback;
  14 +import com.cnlive.libs.base.logic.callback.FailureCallback;
  15 +import com.cnlive.libs.base.logic.callback.SuccessCallback;
  16 +import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
3 17 import com.cnlive.moudle.pedometer.frame.view.UploadFailDetailFragmentView;
  18 +import com.cnlive.moudle.pedometer.model.Constant;
  19 +import com.cnlive.moudle.pedometer.model.RunningFinishBean;
  20 +import com.cnlive.moudle.pedometer.net.ApiServiceRunLin;
  21 +import com.cnlive.moudle.pedometer.net.SubscriptionRequest;
  22 +import com.cnlive.moudle.pedometer.net.bean.BaseInfo;
  23 +import com.cnlive.moudle.pedometer.sql.entity.FailedEntity;
  24 +import com.cnlive.moudle.pedometer.sql.entity.UserStepEntity;
  25 +import com.cnlive.moudle.pedometer.ui.activity.LineUpAgainActivity;
  26 +import com.cnlive.moudle.pedometer.ui.widget.SelectDialog;
  27 +import com.cnlive.moudle.pedometer.utils.GsonUtil;
  28 +import com.cnlive.moudle.pedometer.utils.MyMapUtil;
  29 +import com.cnlive.moudle.pedometer.utils.QMUITipDialogUtil;
  30 +import com.cnlive.moudle.pedometer.utils.StepUtil;
  31 +import com.example.moudle_pedometer.R;
4 32 import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter;
5 33  
  34 +import java.util.HashMap;
  35 +import java.util.List;
  36 +import java.util.Map;
  37 +
  38 +import io.reactivex.disposables.Disposable;
  39 +
6 40 public class UploadFailDetailFragmentPresenter extends MvpBasePresenter<UploadFailDetailFragmentView> {
  41 + private LBSTraceClient mClient = null;
  42 + private List<LatLng> importPoints;
  43 + private SelectDialog uploadFailDialog;
  44 + private SelectDialog failTraceDialog;
  45 +
  46 + /**
  47 + * 查询当前用户历史轨迹
  48 + */
  49 + public void queryHistoryTrace(Activity context, FailedEntity failedEntity) {
  50 + QMUITipDialogUtil.loadingDialog(context, "正在获取轨迹信息,请稍后", false);
  51 + //查询当前用户的历史轨迹
  52 + long startTime = failedEntity.getUserStartTime();
  53 + //获取当前的时间戳(秒)
  54 + long endTime = failedEntity.getUserEndTime();
  55 + //获取当前的实体名称
  56 + String entityName = CommonInfo.getUserId(context);
  57 + //打的重要点
  58 + importPoints = null;
  59 + if (!TextUtils.isEmpty(failedEntity.getImportPoint())) {
  60 + importPoints = GsonUtil.jsonToList(failedEntity.getImportPoint(), LatLng.class);
  61 + }
  62 + if (mClient == null) {
  63 + mClient = new LBSTraceClient(context);
  64 + }
  65 + MyMapUtil.queryHistoryTrace(context, mClient, entityName, startTime, endTime, new MyMapUtil.CallBack() {
  66 + @Override
  67 + public void success(List<LatLng> resultPoints) {
  68 + if (resultPoints != null) {
  69 + if (getView() != null) {
  70 + QMUITipDialogUtil.dismessDialog();
  71 + getView().updateStartBtnState(true);
  72 + if (importPoints != null) {
  73 + //判断是否完成
  74 + boolean isFinish = MyMapUtil.checkIsFinishTrace(importPoints, resultPoints, Constant.PASS_RATE);
  75 + if (isFinish) {
  76 + Toast.makeText(context, "完成", Toast.LENGTH_LONG).show();
  77 + failedEntity.setIsFinish("1");
  78 + if (getView() != null) {
  79 + getView().updateIsFinish("1");
  80 + }
  81 + } else {
  82 + Toast.makeText(context, "没有完成", Toast.LENGTH_LONG).show();
  83 + failedEntity.setIsFinish("0");
  84 + if (getView() != null) {
  85 + getView().updateIsFinish("0");
  86 + }
  87 + }
  88 + if (resultPoints.size() > 1) {
  89 + MyMapUtil.drawHistoryTrack(context, getView().baiduMap, resultPoints, SortType.asc, R.color.red, R.drawable.icon_start, R.drawable.icon_end);
  90 + //设置地图自动缩放
  91 + MyMapUtil.setMapAutoZoom(getView().baiduMap, resultPoints, -2f);
  92 + }
  93 +
  94 + }
  95 + }
  96 + }
  97 + //查询失败
  98 + else {
  99 + if (getView() == null) {
  100 + return;
  101 + }
  102 + getView().updateStartBtnState(false);
  103 + QMUITipDialogUtil.dismessDialog();
  104 +
  105 + if (failTraceDialog == null) {
  106 + failTraceDialog = new SelectDialog(context, "获取轨迹失败,是否重试?", "重试", new SelectDialog.DialogInterface() {
  107 + @Override
  108 + public void onClick(SelectDialog dialog) {
  109 + dialog.dismiss();
  110 + queryHistoryTrace(context, failedEntity);
  111 + }
  112 + }, "取消", new SelectDialog.DialogInterface() {
  113 + @Override
  114 + public void onClick(SelectDialog dialog) {
  115 + dialog.dismiss();
  116 +
  117 + }
  118 + });
  119 + failTraceDialog.setCanceledOnTouchOutside(false);
  120 + failTraceDialog.setCancelable(false);
  121 + if (!failTraceDialog.isShowing()) {
  122 + failTraceDialog.show();
  123 + }
  124 +
  125 + } else {
  126 + if (!failTraceDialog.isShowing()) {
  127 + failTraceDialog.show();
  128 + }
  129 + }
  130 + }
  131 + }
  132 + });
  133 +
  134 + }
  135 +
  136 + /**
  137 + * 上传数据
  138 + *
  139 + * @param context
  140 + * @param failedEntity
  141 + */
  142 + public void saveRouteData(Activity context, FailedEntity failedEntity) {
  143 + QMUITipDialogUtil.loadingDialog(context, "正在上传数据", false);
  144 + // 赛事id
  145 + String eventId = failedEntity.getStreetId();
  146 + //用户ID
  147 + String sid = CommonInfo.getUserId(context);
  148 + //用时
  149 + String employTime = failedEntity.getTime();
  150 + //路线全程里数
  151 + String mileage = "";
  152 + if ("--".equals(failedEntity.getDistance())) {
  153 + mileage = "0";
  154 + } else {
  155 + mileage = failedEntity.getDistance();
  156 + }
  157 + //配速
  158 + String pace = "";
  159 + if ("--".equals(failedEntity.getSpeed())) {
  160 + pace = "0";
  161 + } else {
  162 + pace = failedEntity.getSpeed();
  163 + }
  164 + // 路线图
  165 + String roadmap = "";
  166 + //经纬度
  167 + String latLongitude = "";
  168 + // 开始时间
  169 + String startTime = failedEntity.getUserStartTime() + "";
  170 + //结束时间
  171 + String endTime = failedEntity.getUserEndTime() + "";
  172 + //暂停时间
  173 + String pauseTime = "";
  174 + String isPause = "0";//1暂停
  175 + if (failedEntity.getIsPause()) {
  176 + pauseTime = failedEntity.getUserPauseTime() + "";
  177 + isPause = "1";
  178 + }
  179 + //继续时间
  180 + String continueTime = "";
  181 + //是否完成
  182 + String completeStatus = failedEntity.getIsFinish();
  183 + //设置步数
  184 + String step = failedEntity.getStep();
  185 + //设置请求参数
  186 + Map<String, String> paramsMap = new HashMap<>();
  187 + paramsMap.put("eventId", eventId);
  188 + paramsMap.put("sid", sid);
  189 + paramsMap.put("employTime", employTime);
  190 + paramsMap.put("mileage", mileage);
  191 + paramsMap.put("pace", pace);
  192 + paramsMap.put("latLongitude", latLongitude);
  193 + paramsMap.put("roadmap", roadmap);
  194 + paramsMap.put("startTime", startTime);
  195 + paramsMap.put("endTime", endTime);
  196 + paramsMap.put("pauseTime", pauseTime);
  197 + paramsMap.put("continueTime", continueTime);
  198 + paramsMap.put("isPause", isPause);
  199 + paramsMap.put("completeStatus", completeStatus);
  200 + paramsMap.put("step", step);
  201 +
  202 + Logic.create(paramsMap).action(new Logic.Action<Map<String, String>, BaseInfo>() {
  203 + @Override
  204 + public Disposable action(Map<String, String> stringStringMap, DataCallback<BaseInfo> dataCallback) {
  205 + return SubscriptionRequest.service(ApiServiceRunLin.class, api -> api.saveRouteData(stringStringMap)).subscribe(context, dataCallback);
  206 + }
  207 + }).<BaseInfo>event()
  208 + .setFailureCallback(new FailureCallback() {
  209 + @Override
  210 + public void onFailure(int code, String message) {
  211 + if (getView() == null) {
  212 + return;
  213 + }
  214 + Log.e("saveRouteData", "onFailure: " + message);
  215 + QMUITipDialogUtil.dismessDialog();
  216 + if (uploadFailDialog == null) {
  217 + uploadFailDialog = new SelectDialog(context, "上传数据失败,是否重试?", "重试", new SelectDialog.DialogInterface() {
  218 + @Override
  219 + public void onClick(SelectDialog dialog) {
  220 + dialog.dismiss();
  221 + saveRouteData(context, failedEntity);
  222 + }
  223 + }, "取消", new SelectDialog.DialogInterface() {
  224 + @Override
  225 + public void onClick(SelectDialog dialog) {
  226 + dialog.dismiss();
  227 +
  228 + }
  229 + });
  230 + uploadFailDialog.setCanceledOnTouchOutside(false);
  231 + uploadFailDialog.setCancelable(false);
  232 + if (!uploadFailDialog.isShowing()) {
  233 + uploadFailDialog.show();
  234 + }
  235 + } else {
  236 + if (!uploadFailDialog.isShowing()) {
  237 + uploadFailDialog.show();
  238 + }
  239 + }
  240 + }
  241 + }).setSuccessCallback(new SuccessCallback<BaseInfo>() {
  242 + @Override
  243 + public void onSuccess(BaseInfo baseInfo) {
  244 + if (getView() == null) {
  245 + return;
  246 + }
  247 + QMUITipDialogUtil.dismessDialog();
  248 + QMUITipDialogUtil.successDialog(context, "上传成功", 1);
  249 + //删除暂存数据
  250 + FailedEntity entity = StepUtil.getTempSaveFailData(context, CommonInfo.getUserId(context), failedEntity.getUserStartTime());
  251 + if (entity != null) {
  252 + //删除
  253 + StepUtil.deleteTempSaveFailData(context, entity);
  254 + //结束
  255 + new Handler().postDelayed(new Runnable() {
  256 + @Override
  257 + public void run() {
  258 + if (context != null) {
  259 + context.finish();
  260 + }
  261 + }
  262 + }, 1000);
  263 + }
  264 + }
  265 + }).start();
  266 + }
7 267 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/ALLScoreDetailFragmentView.java 0 → 100644
  1 +package com.cnlive.moudle.pedometer.frame.view;
  2 +
  3 +import android.content.Context;
  4 +import android.text.TextUtils;
  5 +import android.view.View;
  6 +
  7 +import com.cnlive.moudle.pedometer.model.RunningFinishBean;
  8 +import com.cnlive.moudle.pedometer.ui.fragment.ALLScoreDetailFragment;
  9 +import com.cnlive.moudle.pedometer.utils.TimeUtil;
  10 +import com.hannesdorfmann.mosby3.mvp.MvpView;
  11 +
  12 +/**
  13 + * 全部成绩详情页
  14 + *
  15 + * @author ShinnyYang
  16 + */
  17 +public class ALLScoreDetailFragmentView implements MvpView {
  18 + private ALLScoreDetailFragment fragment;
  19 + private RunningFinishBean runningFinishBean;
  20 +
  21 + public ALLScoreDetailFragmentView(ALLScoreDetailFragment fragment) {
  22 + this.fragment = fragment;
  23 + }
  24 +
  25 + public Context getContext() {
  26 + return fragment == null ? null : fragment.getActivity();
  27 + }
  28 +
  29 + public void initView(RunningFinishBean runningFinishBean) {
  30 + this.runningFinishBean = runningFinishBean;
  31 + //隐藏开始按钮
  32 + fragment.binding.rlScrollViewStartBtn.setVisibility(View.GONE);
  33 + //设置标题
  34 + fragment.binding.includeFinishUserInfo.tvStreetName.setText(runningFinishBean.getStreetTitle());
  35 + //设置距离
  36 + fragment.binding.includeFinishUserInfo.tvDistance.setText(runningFinishBean.getRunDistance());
  37 + //设置配速
  38 + fragment.binding.includeFinishUserInfo.tvSpeed.setText(runningFinishBean.getSpeed());
  39 + if (!TextUtils.isEmpty(runningFinishBean.getEmployTime())) {
  40 + //设置用时
  41 + fragment.binding.includeFinishUserInfo.tvTimer.setText(TimeUtil.stampToChronometer(Long.parseLong(runningFinishBean.getEmployTime())));
  42 + }
  43 +
  44 + //设置日期
  45 +
  46 + }
  47 +}
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/LineUpAgainView.java
... ... @@ -4,6 +4,7 @@ import android.support.v7.widget.LinearLayoutManager;
4 4 import android.view.View;
5 5  
6 6 import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
  7 +import com.cnlive.moudle.pedometer.frame.presenter.LineUpAgainPresenter;
7 8 import com.cnlive.moudle.pedometer.sql.entity.FailedEntity;
8 9 import com.cnlive.moudle.pedometer.ui.activity.UploadFailDetailActivity;
9 10 import com.cnlive.moudle.pedometer.ui.adapter.LineUpAgainAdapter;
... ... @@ -50,5 +51,38 @@ public class LineUpAgainView implements MvpView {
50 51 UploadFailDetailActivity.startActivity(fragment.getActivity(), bean);
51 52 }
52 53 });
  54 + //设置重新上传按钮点击事件
  55 + againAdapter.setOnRestartUploadClickListener(new LineUpAgainAdapter.OnRestartUploadClickListener() {
  56 + @Override
  57 + public void onRestartUploadClickListener(FailedEntity failedEntity) {
  58 + if (fragment.getActivity() == null || fragment.getPresenter() == null) {
  59 + return;
  60 + }
  61 + fragment.getPresenter().queryHistoryTraceNoMap(fragment.getActivity(), failedEntity, new LineUpAgainPresenter.onResultListener() {
  62 + @Override
  63 + public void onSuccess() {
  64 + //刷新列表
  65 + List<FailedEntity> failedEntities = StepUtil.getFailListData(fragment.getActivity(), CommonInfo.getUserId(fragment.getActivity()));
  66 + if (failedEntities == null || failedEntities.size() < 1) {
  67 + fragment.binding.llNoFailTip.setVisibility(View.VISIBLE);
  68 + } else {
  69 + uploadList(failedEntities);
  70 + }
  71 + }
  72 +
  73 + @Override
  74 + public void onFailed(String tip) {
  75 +
  76 + }
  77 + });
  78 + }
  79 + });
  80 + }
  81 +
  82 + public void uploadList(List<FailedEntity> failedEntities) {
  83 + //更新数据
  84 + if (againAdapter != null) {
  85 + againAdapter.uploadData(failedEntities);
  86 + }
53 87 }
54 88 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RaceRecorView.java
... ... @@ -10,6 +10,7 @@ import com.cnlive.moudle.pedometer.model.RunningFinishBean;
10 10 import com.cnlive.moudle.pedometer.net.bean.BaseInfo;
11 11 import com.cnlive.moudle.pedometer.net.bean.EventRouteRecordBeanVoListBean;
12 12 import com.cnlive.moudle.pedometer.net.bean.RaceRecordInfo;
  13 +import com.cnlive.moudle.pedometer.ui.activity.ALLScoreDetailActivity;
13 14 import com.cnlive.moudle.pedometer.ui.activity.ShareRecordActivity;
14 15 import com.cnlive.moudle.pedometer.ui.adapter.RaceRecordAdapter;
15 16 import com.cnlive.moudle.pedometer.ui.fragment.RaceRecorFragment;
... ... @@ -40,7 +41,7 @@ public class RaceRecorView implements MvpView {
40 41 .create();
41 42 }
42 43  
43   - public void initView(){
  44 + public void initView() {
44 45 fragment.binding.topbar.addLeftImageButton(R.drawable.top_back_black, R.id.fragment_back).setOnClickListener(v -> {
45 46 fragment.getActivity().finish();
46 47 });
... ... @@ -49,58 +50,74 @@ public class RaceRecorView implements MvpView {
49 50 fragment.binding.refreshLayout.setRefreshFooter(new ClassicsFooter(fragment.getActivity()));
50 51 }
51 52  
52   - public void setData(BaseInfo<RaceRecordInfo> raceRecordInfoBaseInfo){
  53 + public void setData(BaseInfo<RaceRecordInfo> raceRecordInfoBaseInfo) {
53 54 hideLoading();
54 55 fragment.binding.ryRecord.setVisibility(View.VISIBLE);
55 56 fragment.binding.txAll.setVisibility(View.VISIBLE);
56   - if(raceRecordInfoBaseInfo.getData().getBestResult() == null){
  57 + if (raceRecordInfoBaseInfo.getData().getBestResult() == null) {
57 58 showEmpty();
58 59 return;
59 60 }
60 61  
61   - if(fragment.currentPage == 1){
  62 + if (fragment.currentPage == 1) {
62 63 list.clear();
63 64 list.addAll(raceRecordInfoBaseInfo.getData().getEventRouteRecordBeanVoList());
64   - if(adapter == null){
65   - RaceRecordInfo.BestResultBean bestResultBean = raceRecordInfoBaseInfo.getData().getBestResult();
  65 + if (adapter == null) {
  66 + RaceRecordInfo.BestResultBean bestResultBean = raceRecordInfoBaseInfo.getData().getBestResult();
66 67 fragment.binding.kilometerNum.setText(bestResultBean.getMileage());
67 68 fragment.binding.stepNum.setText(bestResultBean.getStep());
68 69 fragment.binding.kilometerTime.setText(bestResultBean.getEmployTime());
69 70 fragment.binding.kilometerSpeed.setText(bestResultBean.getPace());
70 71 fragment.binding.recordRecy.setLayoutManager(new LinearLayoutManager(fragment.getActivity()));
71   - adapter = new RaceRecordAdapter(list,fragment.getActivity());
  72 + adapter = new RaceRecordAdapter(list, fragment.getActivity());
72 73 fragment.binding.recordRecy.setAdapter(adapter);
73 74 adapter.setOnClickListener(new RaceRecordAdapter.OnClickListener() {
74 75 @Override
75 76 public void onClickListener(EventRouteRecordBeanVoListBean bean, int position) {
76   - CollRunningFinishActivity.startActivity(fragment.getActivity(),new RunningFinishBean());
  77 + if (null != bean) {
  78 + //设置数据
  79 + RunningFinishBean runningFinishBean = new RunningFinishBean();
  80 + //设置赛事标题
  81 + runningFinishBean.setStreetTitle(bean.getEventTitle());
  82 + //设置步数
  83 + runningFinishBean.setStep(bean.getStep());
  84 + //设置距离
  85 + runningFinishBean.setRunDistance(bean.getMileage());
  86 + //设置配速
  87 + runningFinishBean.setSpeed(bean.getPace());
  88 + //设置用书
  89 + runningFinishBean.setEmployTime(bean.getEmployTime());
  90 + //设置起点
  91 + ALLScoreDetailActivity.startActivity(fragment.getActivity(), runningFinishBean);
  92 +
  93 + }
77 94 }
78 95 });
79 96 fragment.binding.topbar.addRightImageButton(R.drawable.share_img, R.id.fragment_more)
80 97 .setOnClickListener(v -> {
81 98 //分享
82   - ShareRecordActivity.newInstance(fragment.getActivity(),fragment.raceTitle,bestResultBean.getMileage(),bestResultBean.getStep(),
83   - bestResultBean.getEmployTime(),bestResultBean.getPace());
  99 + ShareRecordActivity.newInstance(fragment.getActivity(), fragment.raceTitle, bestResultBean.getMileage(), bestResultBean.getStep(),
  100 + bestResultBean.getEmployTime(), bestResultBean.getPace());
84 101 });
85 102  
86   - }else {
  103 + } else {
87 104 adapter.notifyDataSetChanged();
88 105 }
89 106 }
90 107  
91   - if(list.size() != 0){
  108 + if (list.size() != 0) {
92 109 fragment.binding.emptyNet.setVisibility(View.GONE);
93 110 fragment.binding.refreshLayout.setVisibility(View.VISIBLE);
94   - }else {
  111 + } else {
95 112 showEmpty();
96 113 }
97 114  
98   - if(raceRecordInfoBaseInfo.getData().getEventRouteRecordBeanVoList().size() < fragment.pageSize){
  115 + if (raceRecordInfoBaseInfo.getData().getEventRouteRecordBeanVoList().size() < fragment.pageSize) {
99 116 fragment.binding.refreshLayout.setEnableLoadMore(false);
100   - }else {
  117 + } else {
101 118 fragment.binding.refreshLayout.setEnableLoadMore(true);
102 119 }
103   - if(fragment.currentPage > 1){
  120 + if (fragment.currentPage > 1) {
104 121 list.addAll(raceRecordInfoBaseInfo.getData().getEventRouteRecordBeanVoList());
105 122 adapter.notifyDataSetChanged();
106 123 }
... ... @@ -108,7 +125,7 @@ public class RaceRecorView implements MvpView {
108 125 fragment.binding.refreshLayout.finishLoadMore();
109 126 }
110 127  
111   - public void showEmpty(){
  128 + public void showEmpty() {
112 129 fragment.binding.refreshLayout.setVisibility(View.GONE);
113 130 fragment.binding.emptyNet.setVisibility(View.VISIBLE);
114 131 fragment.binding.kilometerNum.setText("0.00");
... ... @@ -118,7 +135,7 @@ public class RaceRecorView implements MvpView {
118 135 fragment.binding.emptyNet.show("你还没有该线路的成绩", "", R.drawable.bmcg_has);
119 136 }
120 137  
121   - public void showError(String msg){
  138 + public void showError(String msg) {
122 139 fragment.binding.refreshLayout.finishRefresh();
123 140 fragment.binding.refreshLayout.finishLoadMore();
124 141 if (list.size() == 0) {
... ... @@ -132,7 +149,7 @@ public class RaceRecorView implements MvpView {
132 149 @Override
133 150 public void onClick(View v) {
134 151 fragment.currentPage = 1;
135   - fragment.getPresenter().getData(fragment.getActivity(), CommonInfo.getStreetId(fragment.getActivity()),CommonInfo.getUserId(fragment.getActivity()),fragment.currentPage,fragment.pageSize);
  152 + fragment.getPresenter().getData(fragment.getActivity(), CommonInfo.getStreetId(fragment.getActivity()), CommonInfo.getUserId(fragment.getActivity()), fragment.currentPage, fragment.pageSize);
136 153 }
137 154 });
138 155 fragment.binding.emptyNet.setLoadingShowing(false);
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RunMainFragmentView.java
... ... @@ -122,7 +122,6 @@ public class RunMainFragmentView implements MvpView {
122 122 * 初始化相关视图
123 123 */
124 124 public void initView(RunRaceDetailInfo runRaceDetailInfo) {
125   - Log.e(TAG, "initView: +时间" + SystemClock.elapsedRealtime());
126 125 uid = CommonInfo.getUserId(getContext());
127 126 userStepEntity = StepUtil.getUserStepData(getContext(), uid);
128 127 //设置数据
... ... @@ -138,9 +137,14 @@ public class RunMainFragmentView implements MvpView {
138 137 StepUtil.setQueryTraceTime(getContext(), CommonInfo.getUserId(getContext()), startTime, endTime, runRaceDetailInfo.getEntityName());
139 138 }
140 139 //设置重要点
141   - if (TextUtils.isEmpty(userStepEntity.getImportPoint())){
142   - StepUtil.setImportPoints(getContext(),CommonInfo.getUserId(getContext()),runRaceDetailInfo.getLatLongitude());
143   - }
  140 + if (TextUtils.isEmpty(userStepEntity.getImportPoint())) {
  141 + StepUtil.setImportPoints(getContext(), CommonInfo.getUserId(getContext()), runRaceDetailInfo.getLatLongitude());
  142 + }
  143 + //设置开始时间和赛事id
  144 + if (TextUtils.isEmpty(userStepEntity.getStreetId())) {
  145 + StepUtil.setStepStartData(getContext(), uid, TimeUtil.getNowTimeStamp(), CommonInfo.getStreetId(getContext()));
  146 + }
  147 +
144 148 }
145 149 initLocationClient();
146 150 fragment.binding.llRunMainRoot.setVisibility(View.GONE);
... ... @@ -370,7 +374,7 @@ public class RunMainFragmentView implements MvpView {
370 374 runningFinishBean.setSpeed(fragment.binding.tvSpeed.getText().toString());
371 375 runningFinishBean.setStep(fragment.binding.tvStepCount.getText().toString());
372 376 runningFinishBean.setTime(fragment.binding.chronometer.getText().toString());
373   - runningFinishBean.setDate(TimeUtil.getStampToTime(userStepEntity.getFinishTimeStamp()*1000,"yyyy/MM/dd HH:mm"));
  377 + runningFinishBean.setDate(TimeUtil.getStampToTime(userStepEntity.getFinishTimeStamp() * 1000, "yyyy/MM/dd HH:mm"));
374 378 runningFinishBean.setStreetTitle(userStepEntity.getStreetTitle());
375 379 //设置用时
376 380 runningFinishBean.setEmployTime(employTime);
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/UploadFailDetailFragmentView.java
... ... @@ -4,16 +4,24 @@ import android.content.Context;
4 4 import android.text.TextUtils;
5 5 import android.view.View;
6 6  
  7 +import com.baidu.mapapi.map.BaiduMap;
  8 +import com.baidu.mapapi.map.MapView;
  9 +import com.baidu.mapapi.map.UiSettings;
7 10 import com.bumptech.glide.Glide;
  11 +import com.cnlive.libs.base.util.ToastUtil;
8 12 import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
9 13 import com.cnlive.moudle.pedometer.sql.entity.FailedEntity;
10 14 import com.cnlive.moudle.pedometer.ui.fragment.UploadFailDetailFragment;
11 15 import com.cnlive.moudle.pedometer.utils.TimeUtil;
  16 +import com.example.moudle_pedometer.R;
12 17 import com.hannesdorfmann.mosby3.mvp.MvpView;
13 18  
14 19 public class UploadFailDetailFragmentView implements MvpView {
15 20 private UploadFailDetailFragment fragment;
16 21 private FailedEntity failedEntity;
  22 + public BaiduMap baiduMap;
  23 + private MapView mMapView;
  24 + private UiSettings mUiSettings;
17 25  
18 26 public UploadFailDetailFragmentView(UploadFailDetailFragment fragment) {
19 27 this.fragment = fragment;
... ... @@ -88,8 +96,72 @@ public class UploadFailDetailFragmentView implements MvpView {
88 96 fragment.binding.rlScrollViewStartBtn.setOnClickListener(new View.OnClickListener() {
89 97 @Override
90 98 public void onClick(View view) {
  99 + if (fragment.getActivity() == null || fragment.getPresenter() == null || failedEntity == null) {
  100 + return;
  101 + }
  102 + if (fragment.binding.rlScrollViewStartBtn.getTag() != null) {
  103 + if ("1".equals(fragment.binding.rlScrollViewStartBtn.getTag().toString())) {
  104 + fragment.getPresenter().saveRouteData(fragment.getActivity(), failedEntity);
  105 + } else {
  106 + if (fragment.getPresenter() == null || failedEntity == null) {
  107 + return;
  108 + }
  109 + fragment.getPresenter().queryHistoryTrace(fragment.getActivity(), failedEntity);
  110 + }
  111 + }
91 112  
92 113 }
93 114 });
94 115 }
  116 +
  117 + public void initMap() {
  118 + this.mMapView = fragment.binding.mapView;
  119 + if (baiduMap == null) {
  120 + baiduMap = mMapView.getMap();
  121 + }
  122 + if (mUiSettings == null) {
  123 + mUiSettings = baiduMap.getUiSettings();
  124 + }
  125 + //启动所有手势
  126 + mUiSettings.setAllGesturesEnabled(true);
  127 + //通过设置enable为true或false 选择是否显示缩放按钮
  128 + mMapView.showZoomControls(false);
  129 + mUiSettings.setEnlargeCenterWithDoubleClickEnable(true);
  130 + //隐藏自带的指南针,改用自定义指南针 杨帅
  131 + mUiSettings.setCompassEnabled(false);
  132 + }
  133 +
  134 + /**
  135 + * 更新路线是否完成
  136 + *
  137 + * @param state
  138 + */
  139 + public void updateIsFinish(String state) {
  140 + if (getContext() == null || TextUtils.isEmpty(state)) {
  141 + return;
  142 + }
  143 + if ("1".equals(state)) {
  144 + fragment.binding.includeFinishRunRoute.tvFinishState.setText("路线完成");
  145 + fragment.binding.includeFinishRunRoute.tvFinishState.setTextColor(getContext().getResources().getColor(R.color.green_round));
  146 + } else if ("0".equals(state)) {
  147 + fragment.binding.includeFinishRunRoute.tvFinishState.setText("路线未完成");
  148 + fragment.binding.includeFinishRunRoute.tvFinishState.setTextColor(getContext().getResources().getColor(R.color.red));
  149 + }
  150 + }
  151 +
  152 + /**
  153 + * 更新开始按钮状态
  154 + *
  155 + * @param isQuerySuccess
  156 + */
  157 + public void updateStartBtnState(boolean isQuerySuccess) {
  158 + if (fragment.getActivity() == null) {
  159 + return;
  160 + }
  161 + if (!isQuerySuccess) {
  162 + fragment.binding.rlScrollViewStartBtn.setTag("0");
  163 + } else {
  164 + fragment.binding.rlScrollViewStartBtn.setTag("1");
  165 + }
  166 + }
95 167 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/service/StepService.java
... ... @@ -250,19 +250,7 @@ public class StepService extends Service implements SensorEventListener {
250 250 CommonInfo.setIsFirstStepSendTraceTip(getApplicationContext(), false);
251 251 EventBus.getDefault().post(new MessageEvent(Constant.START_TRACE_GATHER_SUCCESS, ""));
252 252 }
253   - //设置用户开始时间以及赛事ID
254   - UserStepEntity userStepEntity = StepUtil.getUserStepData(getApplicationContext(), CommonInfo.getUserId(getApplicationContext()));
255   - if (userStepEntity == null) {
256   - StepUtil.setStepStartData(getApplicationContext(), userId, TimeUtil.getNowTimeStamp(), CommonInfo.getStreetId(getApplicationContext()));
257   - //设置从服务器获取的时间(后续查询历史轨迹的时间,要从数据库中获取,因为涉及到现有运动恢复问题)
258   - int fenceId = CommonInfo.getFenceId(getApplicationContext());
259   - Log.e(TAG, "onStartTraceCallback: 保存的围栏id" + fenceId);
260   - //设置围栏id
261   - StepUtil.setFenceId(getApplicationContext(), CommonInfo.getUserId(getApplicationContext()), fenceId);
262   - //清空临时保存的时间
263   - CommonInfo.setFenceId(getApplicationContext(), -1);
264 253  
265   - }
266 254 //开始设置围栏报警
267 255 startQueryFence();
268 256  
... ... @@ -515,7 +503,14 @@ public class StepService extends Service implements SensorEventListener {
515 503 if (!EventBus.getDefault().isRegistered(this)) {
516 504 EventBus.getDefault().register(this);
517 505 }
518   -
  506 + //设置围栏ID
  507 + UserStepEntity userStepEntity = StepUtil.getUserStepData(getApplicationContext(), CommonInfo.getUserId(getApplicationContext()));
  508 + if (userStepEntity == null) {
  509 + int fenceId = CommonInfo.getFenceId(getApplicationContext());
  510 + Log.e(TAG, "onStartTraceCallback: 保存的围栏id" + fenceId);
  511 + //设置围栏id
  512 + StepUtil.setFenceId(getApplicationContext(), CommonInfo.getUserId(getApplicationContext()), fenceId);
  513 + }
519 514 entityName = userId;
520 515 initTodayData(userId);
521 516 initTrace();
... ... @@ -627,14 +622,17 @@ public class StepService extends Service implements SensorEventListener {
627 622 handler.removeCallbacks(speedRunnable);
628 623 }
629 624 // Log.e("杀死", "MyTestService");
630   - lastStep=0;
  625 + lastStep = 0;
631 626 hasStepCount = 0;
632 627 hasRecord = false;
633 628 CURRENT_STEP = 0;
634 629 previousStepCount = 0;
635   - sensorManager = null;
  630 + if (sensorManager != null) {
  631 + sensorManager.unregisterListener(StepService.this);
  632 + sensorManager = null;
  633 + }
636 634 stepSensorType = -1;
637   - time=null;
  635 + time = null;
638 636 }
639 637  
640 638 //接收事件
... ... @@ -1017,7 +1015,7 @@ public class StepService extends Service implements SensorEventListener {
1017 1015 if (stepSensorType == Sensor.TYPE_STEP_COUNTER) {
1018 1016 //获取当前传感器返回的临时步数
1019 1017 int tempStep = (int) event.values[0];
1020   - Log.e(TAG, "onSensorChanged: 第一次,tempStep:" + tempStep + "lastStep:" + lastStep + ",previousStepCount" + previousStepCount + ",CURRENT_STEP" + CURRENT_STEP);
  1018 +// Log.e(TAG, "onSensorChanged: 第一次,tempStep:" + tempStep + "lastStep:" + lastStep + ",previousStepCount" + previousStepCount + ",CURRENT_STEP" + CURRENT_STEP);
1021 1019 //首次如果没有获取手机系统中已有的步数则获取一次系统中APP还未开始记步的步数
1022 1020 if (!hasRecord) {
1023 1021 hasRecord = true;
... ... @@ -1026,26 +1024,26 @@ public class StepService extends Service implements SensorEventListener {
1026 1024 } else {
1027 1025 if (tempStep > lastStep) {
1028 1026 //获取APP打开到现在的总步数=本次系统回调的总步数-APP打开之前已有的步数
1029   - Log.e(TAG, "tempStep: " + tempStep + ",hasStepCount:" + hasStepCount);
  1027 +// Log.e(TAG, "tempStep: " + tempStep + ",hasStepCount:" + hasStepCount);
1030 1028 int thisStepCount = tempStep - hasStepCount;
1031   - Log.e(TAG, "onSensorChanged: thisStepCount" + thisStepCount);
  1029 +// Log.e(TAG, "onSensorChanged: thisStepCount" + thisStepCount);
1032 1030 //本次有效步数=(APP打开后所记录的总步数-上一次APP打开后所记录的总步数)
1033 1031 int thisStep = thisStepCount - previousStepCount;
1034 1032 //记录最后一次APP打开到现在的总步数
1035 1033 previousStepCount = thisStepCount;
1036   - Log.e(TAG, "本次有效步数: thisStep" + thisStep + ",previousStepCount:" + previousStepCount);
  1034 +// Log.e(TAG, "本次有效步数: thisStep" + thisStep + ",previousStepCount:" + previousStepCount);
1037 1035 //当用户点击暂停了
1038 1036 if (pauseFlag) {
1039 1037 thisStep = 0;
1040   - Log.e(TAG, "修改: thisStepCount" + thisStep);
  1038 +// Log.e(TAG, "修改: thisStepCount" + thisStep);
1041 1039 }
1042   - Log.e(TAG, "onSensorChanged: CURRENT_STEP" + CURRENT_STEP);
  1040 +// Log.e(TAG, "onSensorChanged: CURRENT_STEP" + CURRENT_STEP);
1043 1041 if (CURRENT_STEP < 0) {
1044 1042 CURRENT_STEP = -CURRENT_STEP;
1045 1043 }
1046 1044 //总步数=现有的步数+本次有效步数
1047 1045 CURRENT_STEP += (thisStep);
1048   - Log.e(TAG, "onSensorChanged: 加了以后" + CURRENT_STEP);
  1046 +// Log.e(TAG, "onSensorChanged: 加了以后" + CURRENT_STEP);
1049 1047 lastStep = tempStep;
1050 1048 }
1051 1049 }
... ... @@ -1103,9 +1101,11 @@ public class StepService extends Service implements SensorEventListener {
1103 1101 @Override
1104 1102 public void onFinish() {
1105 1103 // 如果计时器正常结束,则开始计步
1106   - time.cancel();
1107   - save();
1108   - startTimeCount();
  1104 + if (null != time) {
  1105 + time.cancel();
  1106 + save();
  1107 + startTimeCount();
  1108 + }
1109 1109 }
1110 1110  
1111 1111 @Override
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/activity/ALLScoreDetailActivity.java 0 → 100644
  1 +package com.cnlive.moudle.pedometer.ui.activity;
  2 +
  3 +import android.app.Activity;
  4 +import android.content.Intent;
  5 +import android.os.Bundle;
  6 +
  7 +import com.cnlive.libs.base.ui.QMUIFragment;
  8 +import com.cnlive.libs.base.ui.QMUIFragmentActivity;
  9 +import com.cnlive.moudle.pedometer.model.RunningFinishBean;
  10 +import com.cnlive.moudle.pedometer.ui.fragment.ALLScoreDetailFragment;
  11 +import com.example.moudle_pedometer.R;
  12 +
  13 +/**
  14 + * 全部成绩详情
  15 + *
  16 + * @author ShinnyYang
  17 + */
  18 +public class ALLScoreDetailActivity extends QMUIFragmentActivity {
  19 + @Override
  20 + protected int getContextViewId() {
  21 + return R.id.fragment_all_score_detail;
  22 + }
  23 +
  24 + @Override
  25 + protected void onCreate(Bundle savedInstanceState) {
  26 + super.onCreate(savedInstanceState);
  27 + RunningFinishBean runningFinishBean = (RunningFinishBean) getIntent().getExtras().getSerializable("runningFinishBean");
  28 + if (runningFinishBean != null) {
  29 + addFragment(ALLScoreDetailFragment.newInstance(runningFinishBean));
  30 + }
  31 + }
  32 +
  33 + public static void startActivity(Activity activity, RunningFinishBean runningFinishBean) {
  34 + Intent intent = new Intent(activity, ALLScoreDetailActivity.class);
  35 + intent.putExtra("runningFinishBean", runningFinishBean);
  36 + activity.startActivity(intent);
  37 + }
  38 +
  39 + private void addFragment(QMUIFragment fragment) {
  40 + getSupportFragmentManager().beginTransaction()
  41 + .add(getContextViewId(), fragment, fragment.getClass().getSimpleName())
  42 + .addToBackStack(fragment.getClass().getSimpleName())
  43 + .commit();
  44 + }
  45 +
  46 +}
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/adapter/LineUpAgainAdapter.java
... ... @@ -28,6 +28,11 @@ public class LineUpAgainAdapter extends RecyclerView.Adapter&lt;LineUpAgainAdapter.
28 28 private List<FailedEntity> list;
29 29 private Context context;
30 30 private OnClickListener onClickListener;
  31 + private OnRestartUploadClickListener onRestartUploadClickListener;
  32 +
  33 + public void setOnRestartUploadClickListener(OnRestartUploadClickListener onRestartUploadClickListener) {
  34 + this.onRestartUploadClickListener = onRestartUploadClickListener;
  35 + }
31 36  
32 37 public void setOnClickListener(OnClickListener onClickListener) {
33 38 this.onClickListener = onClickListener;
... ... @@ -38,6 +43,11 @@ public class LineUpAgainAdapter extends RecyclerView.Adapter&lt;LineUpAgainAdapter.
38 43 this.context = context;
39 44 }
40 45  
  46 + public void uploadData(List<FailedEntity> failedEntities) {
  47 + this.list = failedEntities;
  48 + notifyDataSetChanged();
  49 + }
  50 +
41 51 @NonNull
42 52 @Override
43 53 public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
... ... @@ -51,11 +61,14 @@ public class LineUpAgainAdapter extends RecyclerView.Adapter&lt;LineUpAgainAdapter.
51 61 if (onClickListener != null) {
52 62 myHolder.ry_re.setOnClickListener(v -> onClickListener.onClickListener(list.get(i), i));
53 63 }
  64 + if (onRestartUploadClickListener != null) {
  65 + myHolder.again_up.setOnClickListener(v -> onRestartUploadClickListener.onRestartUploadClickListener(list.get(i)));
  66 + }
54 67 //设置视图数据
55 68 if (myHolder != null) {
56 69 //设置数据创建时间
57   - myHolder.up_day.setText(TimeUtil.getStampToTime(list.get(i).getCreatTimeStamp()*1000, "MM月dd日"));
58   - myHolder.up_record_time.setText(TimeUtil.getStampToTime(list.get(i).getCreatTimeStamp()*1000, " HH:mm"));
  70 + myHolder.up_day.setText(TimeUtil.getStampToTime(list.get(i).getCreatTimeStamp() * 1000, "MM月dd日"));
  71 + myHolder.up_record_time.setText(TimeUtil.getStampToTime(list.get(i).getCreatTimeStamp() * 1000, " HH:mm"));
59 72 //设置赛道标题
60 73 myHolder.up_item_title.setText(list.get(i).getStreetTitle());
61 74 //设置公里
... ... @@ -107,4 +120,8 @@ public class LineUpAgainAdapter extends RecyclerView.Adapter&lt;LineUpAgainAdapter.
107 120 public interface OnClickListener {
108 121 void onClickListener(FailedEntity bean, int position);
109 122 }
  123 +
  124 + public interface OnRestartUploadClickListener {
  125 + void onRestartUploadClickListener(FailedEntity failedEntity);
  126 + }
110 127 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/adapter/RaceRecordAdapter.java
... ... @@ -4,6 +4,7 @@ package com.cnlive.moudle.pedometer.ui.adapter;
4 4 import android.content.Context;
5 5 import android.support.annotation.NonNull;
6 6 import android.support.v7.widget.RecyclerView;
  7 +import android.text.TextUtils;
7 8 import android.view.LayoutInflater;
8 9 import android.view.View;
9 10 import android.view.ViewGroup;
... ... @@ -42,21 +43,25 @@ public class RaceRecordAdapter extends RecyclerView.Adapter&lt;RaceRecordAdapter.My
42 43 @NonNull
43 44 @Override
44 45 public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
45   - View view = LayoutInflater.from(context).inflate(R.layout.item_race_record,viewGroup,false);
  46 + View view = LayoutInflater.from(context).inflate(R.layout.item_race_record, viewGroup, false);
46 47 return new MyHolder(view);
47 48 }
48 49  
49 50 @Override
50 51 public void onBindViewHolder(@NonNull MyHolder myHolder, int i) {
51   - myHolder.record_time_day.setText(TimeUtil.getStampToTime(list.get(i).getCreateTime(),"MM月dd日"));
52   - myHolder.record_time.setText(TimeUtil.getStampToTime(list.get(i).getCreateTime(),"HH:mm"));
  52 + myHolder.record_time_day.setText(TimeUtil.getStampToTime(list.get(i).getCreateTime(), "MM月dd日"));
  53 + myHolder.record_time.setText(TimeUtil.getStampToTime(list.get(i).getCreateTime(), "HH:mm"));
53 54 myHolder.item_title.setText(list.get(i).getEventTitle());
54 55 myHolder.record_kli.setText(list.get(i).getMileage());
55   - myHolder.record_minit.setText(list.get(i).getEmployTime());
  56 + //设置时间
  57 + if (!TextUtils.isEmpty(list.get(i).getEmployTime())) {
  58 + myHolder.record_minit.setText(TimeUtil.stampToChronometer(Long.parseLong(list.get(i).getEmployTime())));
  59 + }
56 60 myHolder.record_speed.setText(list.get(i).getPace());
57 61 myHolder.record_step.setText(list.get(i).getStep());
58 62 Glide.with(context).load(list.get(i).getRoadmap()).into(myHolder.item_img);
59   - if(onClickListener != null) myHolder.ry_re.setOnClickListener(v -> onClickListener.onClickListener(list.get(i),i));
  63 + if (onClickListener != null)
  64 + myHolder.ry_re.setOnClickListener(v -> onClickListener.onClickListener(list.get(i), i));
60 65 }
61 66  
62 67 @Override
... ... @@ -64,7 +69,7 @@ public class RaceRecordAdapter extends RecyclerView.Adapter&lt;RaceRecordAdapter.My
64 69 return list.size();
65 70 }
66 71  
67   - class MyHolder extends RecyclerView.ViewHolder{
  72 + class MyHolder extends RecyclerView.ViewHolder {
68 73  
69 74 TextView record_time_day;
70 75 TextView record_time;
... ... @@ -91,7 +96,7 @@ public class RaceRecordAdapter extends RecyclerView.Adapter&lt;RaceRecordAdapter.My
91 96 }
92 97  
93 98  
94   - public interface OnClickListener{
  99 + public interface OnClickListener {
95 100 void onClickListener(EventRouteRecordBeanVoListBean bean, int position);
96 101 }
97 102 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/fragment/ALLScoreDetailFragment.java 0 → 100644
  1 +package com.cnlive.moudle.pedometer.ui.fragment;
  2 +
  3 +import android.os.Bundle;
  4 +import android.support.annotation.Nullable;
  5 +import android.view.View;
  6 +
  7 +import com.cnlive.libs.base.ui.QMUIFragment;
  8 +import com.cnlive.libs.base.util.StatusBarUtil2;
  9 +import com.cnlive.moudle.pedometer.frame.presenter.ALLScoreDetailFragmentPresenter;
  10 +import com.cnlive.moudle.pedometer.frame.view.ALLScoreDetailFragmentView;
  11 +import com.cnlive.moudle.pedometer.model.RunningFinishBean;
  12 +import com.example.moudle_pedometer.R;
  13 +import com.example.moudle_pedometer.databinding.FragmentFinishRunMapBinding;
  14 +
  15 +public class ALLScoreDetailFragment extends QMUIFragment<ALLScoreDetailFragmentView, ALLScoreDetailFragmentPresenter, FragmentFinishRunMapBinding> {
  16 + private RunningFinishBean runningFinishBean;
  17 +
  18 + public static ALLScoreDetailFragment newInstance(RunningFinishBean runningFinishBean) {
  19 + Bundle bundle = new Bundle();
  20 + bundle.putSerializable("runningFinishBean", runningFinishBean);
  21 + ALLScoreDetailFragment fragment = new ALLScoreDetailFragment();
  22 + fragment.setArguments(bundle);
  23 + return fragment;
  24 + }
  25 +
  26 + @Override
  27 + protected int getToolbarId() {
  28 + return 0;
  29 + }
  30 +
  31 + @Override
  32 + public String getTitle() {
  33 + return null;
  34 + }
  35 +
  36 + @Override
  37 + protected int getLayoutId() {
  38 + return R.layout.fragment_finish_run_map;
  39 + }
  40 +
  41 + @Override
  42 + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
  43 + super.onViewCreated(view, savedInstanceState);
  44 + StatusBarUtil2.setColor(getActivity(), getResources().getColor(R.color.run_main_bg), 0);
  45 +
  46 + if (getArguments() != null) {
  47 + runningFinishBean = (RunningFinishBean) getArguments().getSerializable("runningFinishBean");
  48 + if (runningFinishBean != null) {
  49 + if (getMvpView() != null) {
  50 + getMvpView().initView(runningFinishBean);
  51 + }
  52 + }
  53 + }
  54 + }
  55 +}
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/fragment/LineUpAgainFragment.java
... ... @@ -4,6 +4,7 @@ package com.cnlive.moudle.pedometer.ui.fragment;
4 4 import android.os.Bundle;
5 5 import android.support.annotation.NonNull;
6 6 import android.support.annotation.Nullable;
  7 +import android.util.Log;
7 8 import android.view.View;
8 9  
9 10 import com.cnlive.libs.base.frame.fragment.MvpBindingFragment;
... ... @@ -21,7 +22,7 @@ import java.util.List;
21 22 * Created by hanyayun 019/06/20.
22 23 */
23 24 public class LineUpAgainFragment extends MvpBindingFragment<LineUpAgainView, LineUpAgainPresenter, Object, FragmentLineUpAgainBinding> {
24   -
  25 + private final String TAG = "LineUpAgainFragment";
25 26  
26 27 public LineUpAgainFragment() {
27 28 // Required empty public constructor
... ... @@ -37,10 +38,9 @@ public class LineUpAgainFragment extends MvpBindingFragment&lt;LineUpAgainView, Lin
37 38 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
38 39 super.onViewCreated(view, savedInstanceState);
39 40 List<FailedEntity> failedEntities = StepUtil.getFailListData(getActivity(), CommonInfo.getUserId(getActivity()));
40   -
41 41 if (getMvpView() != null) {
42 42 getMvpView().initView();
43   - if (failedEntities == null||failedEntities.size()<1) {
  43 + if (failedEntities == null || failedEntities.size() < 1) {
44 44 binding.llNoFailTip.setVisibility(View.VISIBLE);
45 45 } else {
46 46 getMvpView().setData(failedEntities);
... ... @@ -49,4 +49,18 @@ public class LineUpAgainFragment extends MvpBindingFragment&lt;LineUpAgainView, Lin
49 49 binding.refreshLayout.setEnableLoadMore(false);
50 50 binding.refreshLayout.setEnableRefresh(false);
51 51 }
  52 +
  53 + @Override
  54 + public void onResume() {
  55 + super.onResume();
  56 + Log.e(TAG, "onResume: ");
  57 + List<FailedEntity> failedEntities = StepUtil.getFailListData(getActivity(), CommonInfo.getUserId(getActivity()));
  58 + if (getMvpView() != null) {
  59 + if (failedEntities == null || failedEntities.size() < 1) {
  60 + binding.llNoFailTip.setVisibility(View.VISIBLE);
  61 + } else {
  62 + getMvpView().uploadList(failedEntities);
  63 + }
  64 + }
  65 + }
52 66 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/fragment/UploadFailDetailFragment.java
... ... @@ -54,7 +54,9 @@ public class UploadFailDetailFragment extends QMUIFragment&lt;UploadFailDetailFragm
54 54 failedEntity = (FailedEntity) getArguments().getSerializable("failedEntity");
55 55 if (failedEntity != null) {
56 56 if (getMvpView() != null) {
  57 + getMvpView().initMap();
57 58 getMvpView().initView(failedEntity);
  59 + getPresenter().queryHistoryTrace(getActivity(),failedEntity);
58 60 }
59 61 }
60 62 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/MyMapUtil.java
... ... @@ -270,7 +270,7 @@ public class MyMapUtil {
270 270 */
271 271 public static Overlay drawHistoryTrack(Context context, BaiduMap baiduMap, List<LatLng> points, SortType sortType, int lineColor, int startIconRes, int endIconRes) {
272 272 // 绘制新覆盖物前,清空之前的覆盖物
273   - if (points == null || points.size() == 0) {
  273 + if (points == null || points.size() == 0 || lineColor == 0 || startIconRes == 0 || endIconRes == 0) {
274 274 return null;
275 275 }
276 276 //只有一个点
... ... @@ -327,6 +327,54 @@ public class MyMapUtil {
327 327 }
328 328  
329 329 /**
  330 + * 绘制实时轨迹
  331 + */
  332 + public static Overlay drawRealTimeTrack(Context context, BaiduMap baiduMap, List<LatLng> points, SortType sortType, int lineColor, int startIconRes) {
  333 + // 绘制新覆盖物前,清空之前的覆盖物
  334 + if (points == null || points.size() == 0 || lineColor == 0 || startIconRes == 0) {
  335 + return null;
  336 + }
  337 + //只有一个点
  338 + if (points.size() == 1) {
  339 + if (startIconRes != 0) {
  340 + Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 24, 30);
  341 + OverlayOptions startOptions = new MarkerOptions().position(points.get(0)).icon(BitmapDescriptorFactory.fromBitmap(pointBitmap));
  342 +// .zIndex(9).draggable(true);
  343 + return baiduMap.addOverlay(startOptions);
  344 + } else {
  345 + return null;
  346 + }
  347 + }
  348 +
  349 + LatLng startPoint;
  350 + LatLng endPoint;
  351 + if (sortType == SortType.asc) {
  352 + startPoint = points.get(0);
  353 + endPoint = points.get(points.size() - 1);
  354 + } else {
  355 + startPoint = points.get(points.size() - 1);
  356 + endPoint = points.get(0);
  357 + }
  358 +
  359 + // 添加起点图标
  360 + Bitmap startPointBitmap = null;
  361 + OverlayOptions startOptions = null;
  362 + if (startIconRes != 0) {
  363 + startPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 24, 30);
  364 + startOptions = new MarkerOptions().perspective(false).animateType(MarkerOptions.MarkerAnimateType.grow)
  365 + .position(startPoint).icon(BitmapDescriptorFactory.fromBitmap(startPointBitmap));
  366 + }
  367 +
  368 + // 添加路线(轨迹)
  369 + OverlayOptions polylineOptions = new PolylineOptions().width(10)
  370 + .color(context.getResources().getColor(lineColor)).points(points);
  371 + if (startOptions != null) {
  372 + baiduMap.addOverlay(startOptions);
  373 + }
  374 + return baiduMap.addOverlay(polylineOptions);
  375 + }
  376 +
  377 + /**
330 378 * 绘制服务器传过来的轨迹
331 379 */
332 380 public static List<Overlay> drawServerLineTrack(Context context, BaiduMap baiduMap, List<LatLng> points, SortType sortType, int lineColor, int startIconRes, int endIconRes) {
... ... @@ -520,10 +568,18 @@ public class MyMapUtil {
520 568  
521 569 for (LatLng latLng : points) {
522 570 tempLatLng = latLng;
523   - if (tempLatLng.longitude > maxLng) maxLng = tempLatLng.longitude;
524   - if (tempLatLng.longitude < minLng) minLng = tempLatLng.longitude;
525   - if (tempLatLng.latitude > maxLat) maxLat = tempLatLng.latitude;
526   - if (tempLatLng.latitude < minLat) minLat = tempLatLng.latitude;
  571 + if (tempLatLng.longitude > maxLng) {
  572 + maxLng = tempLatLng.longitude;
  573 + }
  574 + if (tempLatLng.longitude < minLng) {
  575 + minLng = tempLatLng.longitude;
  576 + }
  577 + if (tempLatLng.latitude > maxLat) {
  578 + maxLat = tempLatLng.latitude;
  579 + }
  580 + if (tempLatLng.latitude < minLat) {
  581 + minLat = tempLatLng.latitude;
  582 + }
527 583 }
528 584  
529 585 double[] zooms = {50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 25000, 50000, 100000, 200000, 500000, 1000000, 2000000};//级别18到3。
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/StepUtil.java
... ... @@ -124,6 +124,12 @@ public class StepUtil {
124 124 UserStepEntity entity = getUserStepData(context, uid);
125 125 entity.setFenceId(fenceId);
126 126 updateStepData(context, entity);
  127 + } else {
  128 + DbCore.init(context, dbName);
  129 + UserStepEntity userStepEntity = new UserStepEntity();
  130 + userStepEntity.setUserId(uid);
  131 + userStepEntity.setFenceId(fenceId);
  132 + DbCore.getDaoSession().getUserStepEntityDao().insert(userStepEntity);
127 133 }
128 134 }
129 135  
... ...
moudle_pedometer/src/main/res/layout/fragment_finish_run_map.xml
... ... @@ -127,6 +127,8 @@
127 127 android:id="@+id/loading"
128 128 android:layout_width="20dp"
129 129 android:layout_height="20dp"
  130 + android:clickable="false"
  131 + android:focusableInTouchMode="false"
130 132 app:indicatorColor="@color/white"
131 133 app:indicatorName="BallSpinFadeLoaderIndicator" />
132 134  
... ... @@ -136,6 +138,8 @@
136 138 android:layout_height="wrap_content"
137 139 android:layout_centerInParent="true"
138 140 android:layout_marginLeft="5dp"
  141 + android:clickable="false"
  142 + android:focusableInTouchMode="false"
139 143 android:tag="0"
140 144 android:text="保存中"
141 145 android:textColor="@color/white"
... ...
moudle_pedometer/src/main/res/layout/item_race_record.xml
... ... @@ -4,6 +4,7 @@
4 4 <data>
5 5  
6 6 </data>
  7 +
7 8 <RelativeLayout
8 9 android:id="@+id/ry_re"
9 10 android:layout_width="match_parent"
... ... @@ -14,19 +15,19 @@
14 15 android:id="@+id/record_time_day"
15 16 android:layout_width="wrap_content"
16 17 android:layout_height="wrap_content"
  18 + android:text="--"
17 19 android:textColor="#333333"
18   - android:textSize="14sp"
19   - android:text="5月1日" />
  20 + android:textSize="14sp" />
20 21  
21 22 <TextView
22 23 android:id="@+id/record_time"
23 24 android:layout_width="wrap_content"
24 25 android:layout_height="wrap_content"
25   - android:layout_toRightOf="@id/record_time_day"
26 26 android:layout_marginLeft="15dp"
  27 + android:layout_toRightOf="@id/record_time_day"
  28 + android:text="--"
27 29 android:textColor="#999999"
28   - android:textSize="14sp"
29   - android:text="15:30" />
  30 + android:textSize="14sp" />
30 31  
31 32 <LinearLayout
32 33 android:layout_width="match_parent"
... ... @@ -53,31 +54,31 @@
53 54 android:layout_width="wrap_content"
54 55 android:layout_height="wrap_content"
55 56 android:singleLine="true"
56   - android:textSize="12sp"
57   - android:textColor="#333333"/>
  57 + android:textColor="#333333"
  58 + android:textSize="12sp" />
58 59  
59 60 <LinearLayout
60 61 android:layout_width="wrap_content"
61 62 android:layout_height="wrap_content"
62 63 android:layout_centerVertical="true"
63 64 android:orientation="horizontal">
  65 +
64 66 <TextView
65 67 android:id="@+id/kilometer_num"
66 68 android:layout_width="wrap_content"
67 69 android:layout_height="wrap_content"
68   - android:textColor="#333333"
69   - android:textSize="30sp"
70 70 android:layout_centerVertical="true"
71   - />
  71 + android:textColor="#333333"
  72 + android:textSize="30sp" />
72 73  
73 74 <TextView
74 75 android:layout_width="wrap_content"
75 76 android:layout_height="wrap_content"
76 77 android:layout_centerVertical="true"
  78 + android:layout_marginLeft="5dp"
77 79 android:text="@string/kilometer"
78 80 android:textColor="#333333"
79   - android:textSize="12sp"
80   - android:layout_marginLeft="5dp"/>
  81 + android:textSize="12sp" />
81 82 </LinearLayout>
82 83  
83 84  
... ... @@ -119,7 +120,7 @@
119 120 <View
120 121 android:layout_width="match_parent"
121 122 android:layout_height="1dp"
122   - android:background="@color/line"
123   - android:layout_alignParentBottom="true"/>
  123 + android:layout_alignParentBottom="true"
  124 + android:background="@color/line" />
124 125 </RelativeLayout>
125 126 </layout>
... ...
moudle_pedometer/src/main/res/values/ids.xml
... ... @@ -10,5 +10,7 @@
10 10 <item name="fragment_start_collect_trace" type="id" />
11 11 <!--上传失败-->
12 12 <item name="fragment_upload_fail" type="id" />
  13 + <!--全部成绩详情页-->
  14 + <item name="fragment_all_score_detail" type="id" />
13 15  
14 16 </resources>
... ...