main
huangwei 9 months ago
parent a77cba5456
commit 00a9e04425
  1. BIN
      app/libs/DialogXInterface.jar
  2. 7
      app/src/main/java/com/project/survey/App.java
  3. 215
      app/src/main/java/com/project/survey/dialog/CustomInputListDialog.java
  4. 82
      app/src/main/java/com/project/survey/ui/lofting/pointlofting/PointStakingActivity.java
  5. 171
      app/src/main/java/com/project/survey/ui/lofting/pointlofting/record/RecordDetailActivity.java
  6. 18
      app/src/main/java/com/project/survey/ui/lofting/pointlofting/record/RecordsActivity.java
  7. 29
      app/src/main/java/com/project/survey/ui/lofting/pointlofting/record/util/AbstractListUtils.java
  8. 32
      app/src/main/java/com/project/survey/ui/lofting/pointlofting/record/util/IRecordsUtils.java
  9. 149
      app/src/main/java/com/project/survey/ui/lofting/pointlofting/record/util/KnownPointRecordExporter.java
  10. 194
      app/src/main/java/com/project/survey/ui/lofting/pointlofting/record/util/PointStakeListUtils.java
  11. 7
      app/src/main/java/com/project/survey/ui/lofting/pointlofting/record/util/RecordDetailActivityRemarksUtils.java
  12. 4
      app/src/main/java/com/project/survey/ui/lofting/pointlofting/record/util/RecordsActivityClearUtils.java
  13. 6
      app/src/main/java/com/project/survey/ui/lofting/pointlofting/record/util/RecordsActivityExportUtils.java
  14. 4
      app/src/main/java/com/project/survey/ui/lofting/pointlofting/record/util/RecordsActivityFilterUtils.java
  15. 2
      app/src/main/java/com/project/survey/ui/lofting/pointlofting/record/util/RecordsActivityHeaders.java
  16. 24
      app/src/main/java/com/project/survey/ui/lofting/pointlofting/record/util/RecordsUtilsFactory.java
  17. 94
      app/src/main/java/com/project/survey/ui/lofting/pointlofting/record/util/RecordsViewModelKt.kt
  18. 49
      app/src/main/java/com/project/survey/util/ExportPathUtils.java
  19. 37
      app/src/main/java/com/project/survey/util/StoragePermissionUtils.java
  20. 4
      app/src/main/java/com/project/survey/util/SurveyUIUtils.java
  21. 65
      app/src/main/java/com/project/survey/util/Utils.java
  22. 12
      app/src/main/res/drawable/icon_sort_ascending.xml
  23. 31
      app/src/main/res/layout/activity_record_detail.xml
  24. 124
      app/src/main/res/layout/layout_edit_input_list_dialog.xml
  25. 27
      app/src/main/res/layout/spinner_dropdown_item_my_with_background.xml
  26. 20
      app/src/main/res/menu/menu_activity_records.xml
  27. 17
      app/src/main/res/menu/menu_record_detail.xml
  28. 26
      app/src/main/res/values/strings.xml

Binary file not shown.

@ -38,6 +38,13 @@ public class App extends Application {
*/
public float magneticDeclination = 0;
public int lastRecordBrowseType = 0;
/**
* 是否在记录界面显示当前工程全部数据
*/
public boolean isShowAllRecordInCurrentProject = true;
public boolean isLandscape() {
return false;
}

@ -0,0 +1,215 @@
package com.project.survey.dialog;
import android.app.Dialog;
import android.content.Context;
import android.text.InputType;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.bingce.ui.CleanableEditText;
import com.project.survey.R;
import com.project.survey.util.CommonUtils;
public class CustomInputListDialog extends Dialog {
public CustomInputListDialog(Context context, int themeResId) {
super(context, themeResId);
}
/* Builder */
public static class Builder {
private TextView tvTitle,btnCancel,btnConfirm;
private CleanableEditText editText01, editText02, editText03;
private View mLayout;
private View.OnClickListener mButtonCancelClickListener;
private setOnConfirmClickListener mButtonConfirmClickListener;
private int inputFormat;
public static int INPUT_TYPE_TEXT = 0;
public static int INPUT_TYPE_DECIMAL = 1;
public static int INPUT_TYPE_INTEGER = 2;
public static int INPUT_TYPE_PM_DECIMAL = 3;
public static int INPUT_TYPE_PM_INTEGER = 4;
private CustomInputListDialog mDialog;
public Builder(Context context) {
mDialog = new CustomInputListDialog(context, R.style.gif_dialog);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// 加载布局文件
mLayout = inflater.inflate(R.layout.layout_edit_input_list_dialog, null, false);
// 添加布局文件到 Dialog
mDialog.addContentView(mLayout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
tvTitle = mLayout.findViewById(R.id.tv_title);
editText01 = mLayout.findViewById(R.id.editText01);
editText02 = mLayout.findViewById(R.id.editText02);
editText03 = mLayout.findViewById(R.id.editText03);
btnCancel = mLayout.findViewById(R.id.tv_cancel);
btnConfirm = mLayout.findViewById(R.id.tv_confirm);
}
public Builder setInputFormat(int inputFormat){
this.inputFormat = inputFormat;
return this;
}
/**
* 设置 Dialog 标题
*/
public Builder setTitle(String title) {
tvTitle.setText(title);
tvTitle.setVisibility(View.VISIBLE);
return this;
}
/**
* 设置 默认值
* @param editTextContent
* @return
*/
public Builder setInputText01(String editTextContent) {
editText01.setText(editTextContent);
return this;
}
public Builder setInputText01(double editTextContent) {
editText01.setText(String.valueOf(editTextContent));
return this;
}
/**
* 设置 hint
*/
public Builder setInputHint01(String editHint) {
editText01.setHint(editHint);
return this;
}
/**
* 设置 默认值
* @param editTextContent
* @return
*/
public Builder setInputText02(String editTextContent) {
editText02.setText(editTextContent);
return this;
}
public Builder setInputText02(double editTextContent) {
editText02.setText(String.valueOf(editTextContent));
return this;
}
/**
* 设置 hint
*/
public Builder setInputHint02(String editHint) {
editText02.setHint(editHint);
return this;
}
/**
* 设置 默认值
* @param editTextContent
* @return
*/
public Builder setInputText03(String editTextContent) {
editText03.setText(editTextContent);
return this;
}
public Builder setInputText03(double editTextContent) {
editText03.setText(String.valueOf(editTextContent));
return this;
}
/**
* 设置 hint
*/
public Builder setInputHint03(String editHint) {
editText03.setHint(editHint);
return this;
}
/**
* 设置取消按钮文字和监听
*/
public Builder setButtonCancel(String text) {
btnCancel.setText(text);
return this;
}
public Builder setButtonCancel(View.OnClickListener listener) {
mButtonCancelClickListener = listener;
return this;
}
/**
* 设置确认按钮文字和监听
*/
public Builder setButtonConfirm(setOnConfirmClickListener listener) {
mButtonConfirmClickListener = listener;
return this;
}
public CustomInputListDialog create() {
switch (inputFormat){
case 1: //正小数限制
editText01.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
editText02.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
editText03.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
break;
case 2: //正整数限制
editText01.setInputType(InputType.TYPE_CLASS_NUMBER);
editText02.setInputType(InputType.TYPE_CLASS_NUMBER);
editText03.setInputType(InputType.TYPE_CLASS_NUMBER);
break;
case 3: //正负小数限制
editText01.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
editText02.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
editText03.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
break;
case 4: //正负整数限制
editText01.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_CLASS_NUMBER);
editText02.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_CLASS_NUMBER);
editText03.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_CLASS_NUMBER);
break;
}
btnCancel.setOnClickListener(view -> {
CommonUtils.hideSoftInput();
mDialog.dismiss();
if (mButtonCancelClickListener != null) {
mButtonCancelClickListener.onClick(view);
}
});
btnConfirm.setOnClickListener(view -> {
String inputText01 = editText01.getText().toString();
String inputText02 = editText02.getText().toString();
String inputText03 = editText03.getText().toString();
if (!TextUtils.isEmpty(inputText01) && !TextUtils.isEmpty(inputText02) && !TextUtils.isEmpty(inputText03)) {
CommonUtils.hideSoftInput();
mDialog.dismiss();
}
if (mButtonConfirmClickListener != null) {
mButtonConfirmClickListener.OnConfirmClick(inputText01, inputText02, inputText03);
}
});
mDialog.setContentView(mLayout);
mDialog.setCancelable(true);
mDialog.setCanceledOnTouchOutside(false);
return mDialog;
}
}
public interface setOnConfirmClickListener{
void OnConfirmClick(String editText01, String editText02, String editText03);
}
}

@ -11,6 +11,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.DashPathEffect;
import android.text.TextUtils;
import android.view.View;
import androidx.preference.PreferenceManager;
@ -49,7 +50,6 @@ import com.bingce.surveyor.util.DeviceConnectUtil;
import com.bingce.surveyor.util.PreferencesUtil;
import com.bingce.surveyor.util.SurveyLimitCheckUtils;
import com.bingce.surveyor.util.SurveyRemarksUtils;
import com.bingce.surveyor.util.SurveyUIUtils;
import com.bingce.surveyor.util.dialog.CustomDialog;
import com.bingce.surveyor.util.dialog.CustomRecycleDialog;
import com.bingce.totalstation.TotalStation;
@ -62,12 +62,19 @@ import com.bingce.utils.Util;
import com.project.survey.App;
import com.project.survey.R;
import com.project.survey.databinding.ActivityPointStakingBinding;
import com.project.survey.dialog.CustomInputListDialog;
import com.project.survey.dialog.CustomLineChartDialog;
import com.project.survey.model.ControlRecord;
import com.project.survey.ui.base.BaseSurveyNewActivity;
import com.project.survey.ui.instrument.setupstation.ControlPointsNewActivity;
import com.project.survey.ui.instrument.setupstation.CoordinatePointsLibraryActivity;
import com.project.survey.ui.instrument.setupstation.StakingNewJobActivity;
import com.project.survey.ui.lofting.pointlofting.record.RecordsActivity;
import com.project.survey.ui.lofting.pointlofting.record.util.RecordTypeConstants;
import com.project.survey.ui.pointmeasure.measure.util.SurveyToolBarClickListenerUtils;
import com.project.survey.util.CommonUtils;
import com.project.survey.util.DrawableUtils;
import com.project.survey.util.SurveyUIUtils;
import java.util.ArrayList;
import java.util.Date;
@ -83,6 +90,7 @@ import lecho.hellocharts.model.LineChartData;
import lecho.hellocharts.model.PointValue;
import lecho.hellocharts.renderer.LineChartRenderer;
/**
* 点放样 测量
*/
@ -376,9 +384,9 @@ public class PointStakingActivity extends BaseSurveyNewActivity {
return;
}
String content = getString(R.string.whether_staking_selected_point) + getString(R.string.colon) + stakingLibraryPointList.get(pointIndex).name + "\n"
+ "X" + getString(R.string.colon) + Util.formatDouble2Double(stakingLibraryPointList.get(pointIndex).x, ((App) Utils.getApp()).notNumber()) + " "
+ "Y" + getString(R.string.colon) + Util.formatDouble2Double(stakingLibraryPointList.get(pointIndex).y, ((App) Utils.getApp()).notNumber()) + "\n"
+ "Z" + getString(R.string.colon) + Util.formatDouble2Double(stakingLibraryPointList.get(pointIndex).h, ((App) Utils.getApp()).notNumber());
+ "X" + getString(R.string.colon) + Util.formatDouble2Double(stakingLibraryPointList.get(pointIndex).x, 6) + " "
+ "Y" + getString(R.string.colon) + Util.formatDouble2Double(stakingLibraryPointList.get(pointIndex).y, 6) + "\n"
+ "Z" + getString(R.string.colon) + Util.formatDouble2Double(stakingLibraryPointList.get(pointIndex).h, 6);
builder.setContent(content).setButtonConfirm(v -> {
targetStakePointRecord = stakingLibraryPointList.get(pointIndex);
updateUI();
@ -790,7 +798,7 @@ public class PointStakingActivity extends BaseSurveyNewActivity {
}
PointStakingLogic.Result result = pointStakingLogic.calculate(cachedRoad.roadEditor(),
new PointStakingLogic.Configs(((App) Utils.getApp()).notNumber(), moveType),
new PointStakingLogic.Configs(6, moveType),
new PointStakingLogic.Parameter(
new MeasuredPoint(currentCoordinate.getX(), currentCoordinate.getY(), currentCoordinate.getZ(), currentCoordinate.getName()),
new StakingPoint(targetStakePointRecord.name, -1, "", targetStakePointRecord.x, targetStakePointRecord.y, targetStakePointRecord.h),
@ -810,15 +818,15 @@ public class PointStakingActivity extends BaseSurveyNewActivity {
targetCompassHelper.updateTargetAzimuth(result.targetAzimuth);
distance = TextFactory.distanceFormatDouble2String(getString(R.string.distance) + getString(R.string.colon), PointUtils.getDistance2D(new BasePoint(targetStakePointRecord.x, targetStakePointRecord.y, targetStakePointRecord.h), new BasePoint(currentCoordinate.getX(), currentCoordinate.getY(), currentCoordinate.getZ())), ((App) Utils.getApp()).notNumber());
distance = TextFactory.distanceFormatDouble2String(getString(R.string.distance) + getString(R.string.colon), PointUtils.getDistance2D(new BasePoint(targetStakePointRecord.x, targetStakePointRecord.y, targetStakePointRecord.h), new BasePoint(currentCoordinate.getX(), currentCoordinate.getY(), currentCoordinate.getZ())), 6);
binding.tvDistance.setText(distance);
moveDigFill = currentCoordinate.getZ() > targetStakePointRecord.h
? TextFactory.distanceFormatDouble2String(getString(R.string.down_dig), currentCoordinate.getZ() - targetStakePointRecord.h, ((App) Utils.getApp()).notNumber())
: TextFactory.distanceFormatDouble2String(getString(R.string.up_fill), targetStakePointRecord.h - currentCoordinate.getZ(), ((App) Utils.getApp()).notNumber());
? TextFactory.distanceFormatDouble2String(getString(R.string.down_dig), currentCoordinate.getZ() - targetStakePointRecord.h, 6)
: TextFactory.distanceFormatDouble2String(getString(R.string.up_fill), targetStakePointRecord.h - currentCoordinate.getZ(), 6);
binding.tvDigFill.setText(currentCoordinate.getZ() > targetStakePointRecord.h
? TextFactory.distanceFormatDouble2String(getString(R.string.down_dig) + getString(R.string.colon), currentCoordinate.getZ() - targetStakePointRecord.h, ((App) Utils.getApp()).notNumber())
: TextFactory.distanceFormatDouble2String(getString(R.string.up_fill) + getString(R.string.colon), targetStakePointRecord.h - currentCoordinate.getZ(), ((App) Utils.getApp()).notNumber()));
? TextFactory.distanceFormatDouble2String(getString(R.string.down_dig) + getString(R.string.colon), currentCoordinate.getZ() - targetStakePointRecord.h, 6)
: TextFactory.distanceFormatDouble2String(getString(R.string.up_fill) + getString(R.string.colon), targetStakePointRecord.h - currentCoordinate.getZ(), 6));
if (Device.getInstance().deviceType == DeviceTypeEnum.DEVICE_TYPE_TS) {
switch (PreferencesUtil.getMoveMethodTypeTS()) {
@ -840,8 +848,8 @@ public class PointStakingActivity extends BaseSurveyNewActivity {
while (display_station_angle >= Math.PI * 2)
display_station_angle -= Math.PI * 2;
double measured_angle = CoordUtil.calcAzimuth(TsConfig.getInstance().getStation(), currentCoordinate);
binding.tvTopFive.setText(getString(R.string.station_angle) + getString(R.string.colon) + Util.radianToDmsString(display_station_angle, ((App) Utils.getApp()).angleNotNumber()));
binding.tvTopSix.setText(getString(R.string.station_angle_diff) + getString(R.string.colon) + Util.radianToDmsString(station_angle - measured_angle, ((App) Utils.getApp()).angleNotNumber(), false));
binding.tvTopFive.setText(getString(R.string.station_angle) + getString(R.string.colon) + Util.radianToDmsString(display_station_angle, 6));
binding.tvTopSix.setText(getString(R.string.station_angle_diff) + getString(R.string.colon) + Util.radianToDmsString(station_angle - measured_angle, 6, false));
} else {
switch (PreferencesUtil.getMoveMethodTypeRTK()) {
case 0:
@ -874,39 +882,39 @@ public class PointStakingActivity extends BaseSurveyNewActivity {
double foreBackMoveValue = moveDistance.getX();
moveBeforeAfter = foreBackMoveValue >= 0
? TextFactory.distanceFormatDouble2String(getString(R.string.to_before), Math.abs(foreBackMoveValue), ((App) Utils.getApp()).notNumber())
: TextFactory.distanceFormatDouble2String(getString(R.string.to_after), Math.abs(foreBackMoveValue), ((App) Utils.getApp()).notNumber());
? TextFactory.distanceFormatDouble2String(getString(R.string.to_before), Math.abs(foreBackMoveValue), 6)
: TextFactory.distanceFormatDouble2String(getString(R.string.to_after), Math.abs(foreBackMoveValue), 6);
binding.tvTopThree.setText(foreBackMoveValue >= 0
? TextFactory.distanceFormatDouble2String(getString(R.string.to_before) + getString(R.string.colon), Math.abs(foreBackMoveValue), ((App) Utils.getApp()).notNumber())
: TextFactory.distanceFormatDouble2String(getString(R.string.to_after) + getString(R.string.colon), Math.abs(foreBackMoveValue), ((App) Utils.getApp()).notNumber()));
? TextFactory.distanceFormatDouble2String(getString(R.string.to_before) + getString(R.string.colon), Math.abs(foreBackMoveValue), 6)
: TextFactory.distanceFormatDouble2String(getString(R.string.to_after) + getString(R.string.colon), Math.abs(foreBackMoveValue), 6));
double leftRightValue = moveDistance.getY();
moveLeftRight = leftRightValue >= 0
? TextFactory.distanceFormatDouble2String(getString(R.string.to_right), Math.abs(leftRightValue), ((App) Utils.getApp()).notNumber())
: TextFactory.distanceFormatDouble2String(getString(R.string.to_left), Math.abs(leftRightValue), ((App) Utils.getApp()).notNumber());
? TextFactory.distanceFormatDouble2String(getString(R.string.to_right), Math.abs(leftRightValue), 6)
: TextFactory.distanceFormatDouble2String(getString(R.string.to_left), Math.abs(leftRightValue), 6);
binding.tvTopFour.setText(leftRightValue >= 0
? TextFactory.distanceFormatDouble2String(getString(R.string.to_right) + getString(R.string.colon), Math.abs(leftRightValue), ((App) Utils.getApp()).notNumber())
: TextFactory.distanceFormatDouble2String(getString(R.string.to_left) + getString(R.string.colon), Math.abs(leftRightValue), ((App) Utils.getApp()).notNumber()));
? TextFactory.distanceFormatDouble2String(getString(R.string.to_right) + getString(R.string.colon), Math.abs(leftRightValue), 6)
: TextFactory.distanceFormatDouble2String(getString(R.string.to_left) + getString(R.string.colon), Math.abs(leftRightValue), 6));
}
private void moveWestEast() {
moveWestEast = currentCoordinate.getY() > targetStakePointRecord.y
? TextFactory.distanceFormatDouble2String(getString(R.string.to_west), currentCoordinate.getY() - targetStakePointRecord.y, ((App) Utils.getApp()).notNumber())
: TextFactory.distanceFormatDouble2String(getString(R.string.to_east), targetStakePointRecord.y - currentCoordinate.getY(), ((App) Utils.getApp()).notNumber());
? TextFactory.distanceFormatDouble2String(getString(R.string.to_west), currentCoordinate.getY() - targetStakePointRecord.y, 6)
: TextFactory.distanceFormatDouble2String(getString(R.string.to_east), targetStakePointRecord.y - currentCoordinate.getY(), 6);
moveSouthNorth = currentCoordinate.getX() > targetStakePointRecord.x
? TextFactory.distanceFormatDouble2String(getString(R.string.to_south), currentCoordinate.getX() - targetStakePointRecord.x, ((App) Utils.getApp()).notNumber())
: TextFactory.distanceFormatDouble2String(getString(R.string.to_north), targetStakePointRecord.x - currentCoordinate.getX(), ((App) Utils.getApp()).notNumber());
? TextFactory.distanceFormatDouble2String(getString(R.string.to_south), currentCoordinate.getX() - targetStakePointRecord.x,6)
: TextFactory.distanceFormatDouble2String(getString(R.string.to_north), targetStakePointRecord.x - currentCoordinate.getX(), 6);
binding.tvTopThree.setText(currentCoordinate.getY() > targetStakePointRecord.y
? TextFactory.distanceFormatDouble2String(getString(R.string.to_west) + getString(R.string.colon), currentCoordinate.getY() - targetStakePointRecord.y, ((App) Utils.getApp()).notNumber())
: TextFactory.distanceFormatDouble2String(getString(R.string.to_east) + getString(R.string.colon), targetStakePointRecord.y - currentCoordinate.getY(), ((App) Utils.getApp()).notNumber()));
? TextFactory.distanceFormatDouble2String(getString(R.string.to_west) + getString(R.string.colon), currentCoordinate.getY() - targetStakePointRecord.y, 6)
: TextFactory.distanceFormatDouble2String(getString(R.string.to_east) + getString(R.string.colon), targetStakePointRecord.y - currentCoordinate.getY(), 6));
binding.tvTopFour.setText(currentCoordinate.getX() > targetStakePointRecord.x
? TextFactory.distanceFormatDouble2String(getString(R.string.to_south) + getString(R.string.colon), currentCoordinate.getX() - targetStakePointRecord.x, ((App) Utils.getApp()).notNumber())
: TextFactory.distanceFormatDouble2String(getString(R.string.to_north) + getString(R.string.colon), targetStakePointRecord.x - currentCoordinate.getX(), ((App) Utils.getApp()).notNumber()));
? TextFactory.distanceFormatDouble2String(getString(R.string.to_south) + getString(R.string.colon), currentCoordinate.getX() - targetStakePointRecord.x, 6)
: TextFactory.distanceFormatDouble2String(getString(R.string.to_north) + getString(R.string.colon), targetStakePointRecord.x - currentCoordinate.getX(), 6));
}
/**
@ -920,13 +928,13 @@ public class PointStakingActivity extends BaseSurveyNewActivity {
private void updateBottomInfo(String stakingName, double x, double y, double z) {
if (!TextUtils.isEmpty(stakingName)) {
binding.tvStakingPointName.setText(getString(R.string.staking_point_name) + getString(R.string.colon) + stakingName);
binding.tvTargetX.setText(TextFactory.distanceFormatDouble2String("X" + getString(R.string.colon), x, ((App) Utils.getApp()).notNumber()));
binding.tvTargetY.setText(TextFactory.distanceFormatDouble2String("Y" + getString(R.string.colon), y, ((App) Utils.getApp()).notNumber()));
binding.tvTargetZ.setText(TextFactory.distanceFormatDouble2String("Z" + getString(R.string.colon), z, ((App) Utils.getApp()).notNumber()));
binding.tvTargetX.setText(TextFactory.distanceFormatDouble2String("X" + getString(R.string.colon), x, 6));
binding.tvTargetY.setText(TextFactory.distanceFormatDouble2String("Y" + getString(R.string.colon), y, 6));
binding.tvTargetZ.setText(TextFactory.distanceFormatDouble2String("Z" + getString(R.string.colon), z, 6));
} else {
binding.tvSurveyX.setText(TextFactory.distanceFormatDouble2String("X" + getString(R.string.colon), x, ((App) Utils.getApp()).notNumber()));
binding.tvSurveyY.setText(TextFactory.distanceFormatDouble2String("Y" + getString(R.string.colon), y, ((App) Utils.getApp()).notNumber()));
binding.tvSurveyZ.setText(TextFactory.distanceFormatDouble2String("Z" + getString(R.string.colon), z, ((App) Utils.getApp()).notNumber()));
binding.tvSurveyX.setText(TextFactory.distanceFormatDouble2String("X" + getString(R.string.colon), x, 6));
binding.tvSurveyY.setText(TextFactory.distanceFormatDouble2String("Y" + getString(R.string.colon), y, 6));
binding.tvSurveyZ.setText(TextFactory.distanceFormatDouble2String("Z" + getString(R.string.colon), z, 6));
}
}
@ -961,7 +969,7 @@ public class PointStakingActivity extends BaseSurveyNewActivity {
effectGuideLine.getValues().add(new PointValue(y, x));
effectGuideLine.getValues().add(new PointValue(targetStakePointRecord.y, targetStakePointRecord.x));
double distance2D = Util.formatDouble2Double(PointUtils.getDistance2D(new BasePoint(targetStakePointRecord.x, targetStakePointRecord.y), new BasePoint(x, y)), ((App) Utils.getApp()).notNumber());
double distance2D = Util.formatDouble2Double(PointUtils.getDistance2D(new BasePoint(targetStakePointRecord.x, targetStakePointRecord.y), new BasePoint(x, y)), 6);
double disTipsRange2D = Double.parseDouble(PreferencesUtil.getPointStakingTipsRangeLimit());
if (distance2D <= disTipsRange2D) {
@ -1033,8 +1041,8 @@ public class PointStakingActivity extends BaseSurveyNewActivity {
DeviceUtils.StationData stationData = DeviceUtils.stationData(
new BasePoint(targetStakePointRecord.x, targetStakePointRecord.y, targetStakePointRecord.h),
((App) Utils.getApp()).angleNotNumber(),
((App) Utils.getApp()).notNumber());
6,
6);
DeviceInfoData deviceInfoData = DeviceUtils.collectDeviceInfo();
PointStakeRecord pointStakeRecord = new PointStakeRecord(projectId, jobId, roadId,
targetStakePointRecord.id, moveBeforeAfter != null ? moveBeforeAfter.getString() : "", moveLeftRight != null ? moveLeftRight.getString() : "", moveWestEast != null ? moveWestEast.getString() : "", moveSouthNorth != null ? moveSouthNorth.getString() : "",

@ -0,0 +1,171 @@
package com.project.survey.ui.lofting.pointlofting.record;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import androidx.annotation.Nullable;
import com.bingce.activity.AutoLandscapeBingCeActivity;
import com.bingce.data.cache.CachedCurrentJob;
import com.bingce.data.cache.CachedCurrentProject;
import com.bingce.utils.IntentUtil;
import com.bingce.utils.StringUtil;
import com.bingce.utils.ThreadPoolUtil;
import com.bingce.utils.Util;
import com.project.survey.R;
import com.project.survey.databinding.ActivityRecordDetailBinding;
import com.project.survey.ui.lofting.pointlofting.record.util.IRecordsUtils;
import com.project.survey.ui.lofting.pointlofting.record.util.RecordDetailActivityRemarksUtils;
import com.project.survey.ui.lofting.pointlofting.record.util.RecordDetailData;
import com.project.survey.ui.lofting.pointlofting.record.util.RecordsUtilsFactory;
import java.util.Date;
import java.util.Map;
import blankj.utilcode.util.ToastUtils;
public class RecordDetailActivity extends AutoLandscapeBingCeActivity {
private RecordDetailData mCurrentData = null;
private ActivityRecordDetailBinding binding;
private final Map<Integer, IRecordsUtils> recordsUtilsMap = RecordsUtilsFactory.buildUtils(this, null);
@Override
protected void onBingCeCreate(@Nullable Bundle savedInstanceState) {
binding = ActivityRecordDetailBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);
if (getSupportActionBar() != null)
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
int mType = IntentUtil.intExtra(getIntent(), KEY_TYPE);
String recordId = IntentUtil.stringExtra(getIntent(), KEY_ID);
if (StringUtil.isEmpty(recordId)) {
ToastUtils.showShort(R.string.no_record);
finish();
return;
}
IRecordsUtils recordsUtils = recordsUtilsMap.get(mType);
ThreadPoolUtil.execute(() -> {
if (recordsUtils != null) {
RecordDetailData detailData = recordsUtils.findRecordDetailInWorkerThread(recordId);
setRecord(detailData);
}
});
//设置标题
if (recordsUtils != null) {
setTitle(getString(R.string.record_detail) + "-" + recordsUtils.name());
}
}
protected void setRecord(RecordDetailData results) {
if (results != null) {
mCurrentData = results;
} else {
ToastUtils.showShort(R.string.no_record);
return;
}
StringBuilder stringBuilder = new StringBuilder();
for (Map.Entry<String, String> entry : results.keyValueMap.entrySet()) {
stringBuilder.append(entry.getKey()).append(":").append(entry.getValue()).append("\n");
}
runOnUiThread(() -> {
if (results.deviceInfoData != null && results.deviceInfoData.tsStatusData != null) {
stringBuilder.append(getString(R.string.hr)).append(":").append(Util.formatDouble2StringDotAuto(results.deviceInfoData.tsStatusData.hr));
}
binding.activityRecordDetailTextview.setText(stringBuilder.toString());
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_record_detail, menu);
return true;
}
protected void nextRecord(int mType, Date date) {
if (mCurrentData == null) {
ToastUtils.showShort(R.string.no_record);
return;
}
ThreadPoolUtil.execute(() -> {
String projectId = CachedCurrentProject.currentProjectId();
String jobId = CachedCurrentJob.currentJobId(projectId);
IRecordsUtils recordsUtils = recordsUtilsMap.get(mType);
if (recordsUtils != null) {
RecordDetailData recordDetailData = recordsUtils.findOtherRecordDetailInWorkerThread(
projectId, jobId, date, true);
setRecord(recordDetailData);
}
});
}
protected void lastRecord(int mType, Date date) {
if (mCurrentData == null) {
ToastUtils.showShort(R.string.no_record);
return;
}
ThreadPoolUtil.execute(() -> {
String projectId = CachedCurrentProject.currentProjectId();
String jobId = CachedCurrentJob.currentJobId(projectId);
IRecordsUtils recordsUtils = recordsUtilsMap.get(mType);
if (recordsUtils != null) {
RecordDetailData recordDetailData = recordsUtils.findOtherRecordDetailInWorkerThread(
projectId, jobId, date, false);
setRecord(recordDetailData);
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int mType = IntentUtil.intExtra(getIntent(), KEY_TYPE);
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
case R.id.menu_record_detail_page_down: {
Date date = mCurrentData != null ? mCurrentData.date : null;
nextRecord(mType, date);
}
break;
case R.id.menu_record_detail_page_up: {
Date date = mCurrentData != null ? mCurrentData.date : null;
lastRecord(mType, date);
}
break;
case R.id.menu_record_detail_edit_remarks: {
if (mCurrentData != null) {
RecordDetailActivityRemarksUtils.changeRemarks(this, mCurrentData.remarks, remarks -> {
ThreadPoolUtil.execute(() -> {
IRecordsUtils recordsUtils = recordsUtilsMap.get(mType);
if (recordsUtils != null) {
mCurrentData = recordsUtils.updateRemarksInWorkerThread(mCurrentData.recordId, remarks);
//更新界面--主要是remarks
setRecord(mCurrentData);
}
});
});
}
}
break;
}
return super.onOptionsItemSelected(item);
}
protected static final String KEY_TYPE = "TYPE";
protected static final String KEY_ID = "recordId";
public static void start(Context context, int type, String recordId) {
Intent intent = startActivityIntent(context, RecordDetailActivity.class);
intent.putExtra(KEY_TYPE, type);
intent.putExtra(KEY_ID, recordId);
context.startActivity(intent);
}
}

@ -32,9 +32,17 @@ import com.bingce.utils.ThreadPoolUtil;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
import com.hjq.shape.view.ShapeTextView;
import com.project.survey.App;
import com.project.survey.R;
import com.project.survey.databinding.ActivityRecordsBinding;
import com.project.survey.ui.lofting.pointlofting.record.util.IRecordsUtils;
import com.project.survey.ui.lofting.pointlofting.record.util.RecordTypeConstants;
import com.project.survey.ui.lofting.pointlofting.record.util.RecordsActivityClearUtils;
import com.project.survey.ui.lofting.pointlofting.record.util.RecordsActivityExportUtils;
import com.project.survey.ui.lofting.pointlofting.record.util.RecordsActivityFilterUtils;
import com.project.survey.ui.lofting.pointlofting.record.util.RecordsActivityHeaders;
import com.project.survey.ui.lofting.pointlofting.record.util.RecordsUtilsFactory;
import com.project.survey.ui.lofting.pointlofting.record.util.RecordsViewModelKt;
import org.polaric.colorful.ColorfulActivity;
@ -42,6 +50,7 @@ import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import blankj.utilcode.util.ToastUtils;
@ -261,10 +270,10 @@ public class RecordsActivity extends ColorfulActivity {
case R.id.menu_record_export:
exportUtils.requestStoragePermission(this, exportSuccess());
break;
case R.id.menu_record_filter:
binding.spinner1.getSelectedItem().toString();
filterUtils.showFilterDialog(this::updateRecyclerView);
break;
// case R.id.menu_record_filter:
// binding.spinner1.getSelectedItem().toString();
// filterUtils.showFilterDialog(this::updateRecyclerView);
// break;
case R.id.menu_record_clear:
clearUtils.showClearDialog(() -> {
ProgressDialog mProgressDialog = new ProgressDialog(this);
@ -361,4 +370,5 @@ public class RecordsActivity extends ColorfulActivity {
public interface IExportSuccess {
void showExportSuccessDialog(File file);
}
}

@ -0,0 +1,29 @@
package com.project.survey.ui.lofting.pointlofting.record.util;
import android.content.Context;
import androidx.appcompat.app.AppCompatActivity;
import com.bingce.device.ui.dialog.DialogUtil;
import com.bingce.list.SwipeDeletePagingListLayoutHelper;
import com.bingce.utils.AppCompatActivityProviderUtils;
import com.bingce.utils.IProvider;
import com.bingce.utils.ThreadPoolUtil;
import com.project.survey.R;
abstract class AbstractListUtils extends AppCompatActivityProviderUtils implements IRecordsUtils {
AbstractListUtils(IProvider<AppCompatActivity> activityIProvider) {
super(activityIProvider);
}
protected void requestDelete(Context context, int index, String recordId, SwipeDeletePagingListLayoutHelper.IOnDeleteListener listener) {
DialogUtil.mNullCancelAlertDialog(context, null, R.string.confirm_delete, (dialogInterface, i) -> {
ThreadPoolUtil.execute(() -> {
deleteSingleRecordInWorkerThread(recordId);
});
listener.completeDelete(index);
});
}
}

@ -0,0 +1,32 @@
package com.project.survey.ui.lofting.pointlofting.record.util;
import androidx.recyclerview.widget.RecyclerView;
import com.bingce.data.base.user.UserConfig;
import com.project.survey.ui.lofting.pointlofting.record.RecordsActivity;
import java.util.Date;
public interface IRecordsUtils {
void update(RecyclerView recyclerView, boolean ascOrder,//asc升序 des,降序
UserConfig userConfig,
String currentProjectId, String currentJobId, String currentRoadId,
RecordsActivityFilterParameter parameter);
void clearInWorkerThread(RecordsActivityFilterParameter parameter, Runnable completeCallback);
void exportRecord2ExcelAsync(final String name, boolean ascOrder,//asc升序 des,降序
final RecordsActivityFilterParameter filterParameter,
final RecordsActivityHeaders headers, boolean isExportRtkStatus, boolean isExportHr,
final RecordsActivity.IExportSuccess exportSuccess);
void deleteSingleRecordInWorkerThread(String recordId);
String name();
RecordDetailData findRecordDetailInWorkerThread(String recordId);
RecordDetailData findOtherRecordDetailInWorkerThread(String projectId, String jobId, Date date, boolean nextOrLast);
RecordDetailData updateRemarksInWorkerThread(String recordId, String remarks);
}

@ -0,0 +1,149 @@
package com.project.survey.ui.lofting.pointlofting.record.util;
import android.app.ProgressDialog;
import android.content.Context;
import androidx.annotation.UiThread;
import com.bingce.data.DeviceInfoDataUtils;
import com.bingce.data.cache.CachedCurrentJob;
import com.bingce.data.cache.CachedCurrentProject;
import com.bingce.data.database.PointStakeDb;
import com.bingce.data.surveyor.surveydata.pointstake.PointStakeConstants;
import com.bingce.data.surveyor.surveydata.pointstake.PointStakeRecord;
import com.bingce.poi.excel.ExcelExportHelper;
import com.bingce.rtk.model.GnssPosition;
import com.bingce.utils.DateUtils;
import com.bingce.utils.FileUtil;
import com.bingce.utils.Util;
import com.project.survey.R;
import com.project.survey.util.ExportPathUtils;
import com.project.survey.util.Utils;
import com.techyourchance.threadposter.BackgroundThreadPoster;
import com.techyourchance.threadposter.UiThreadPoster;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import blankj.utilcode.util.ToastUtils;
public class KnownPointRecordExporter {
private final BackgroundThreadPoster mBackgroundThreadPoster = new BackgroundThreadPoster();
private final UiThreadPoster mUiThreadPoster = new UiThreadPoster();
private ProgressDialog mProgressDialog;
public KnownPointRecordExporter() {
}
@UiThread
public void exportKnownPointSetting2ExcelAsync(
final String name, boolean ascOrder,
String[] mHeaders61,
String[] mHeaders62,
String[] mHeaders63,
boolean isExportRtkStatus,
boolean isExportHr,
Context context,
RecordsActivityFilterParameter parameter,
ICallback callback) {
mProgressDialog = new ProgressDialog(context);
mProgressDialog.setMessage(context.getString(R.string.export_records));
mProgressDialog.show();
mBackgroundThreadPoster.post(() -> {
String projectId = CachedCurrentProject.currentProjectId();
String jobId = CachedCurrentJob.currentJobId(projectId);
List<PointStakeRecord> results = PointStakeDb.getInstance().rawQueryListData(
Utils.findRecordsListByRoadNameKRemarksDate(
PointStakeConstants.DB_NAME, projectId, jobId, ascOrder, parameter.road, parameter.k, parameter.remarks, parameter.start, parameter.end));
if (results == null || results.isEmpty()) {
ToastUtils.showShort(R.string.export_result_empty);
hideLoading(context, null, null);
return;
}
List<List<String>> exportResult = new ArrayList<>();
String[] headers = mHeaders61;
if (isExportRtkStatus) {
String[] temp = new String[headers.length + mHeaders62.length];
System.arraycopy(headers, 0, temp, 0, headers.length);
System.arraycopy(mHeaders62, 0, temp, headers.length, mHeaders62.length);
headers = temp;
}
if (isExportHr) {
String[] temp = new String[headers.length + mHeaders63.length];
System.arraycopy(headers, 0, temp, 0, headers.length);
System.arraycopy(mHeaders63, 0, temp, headers.length, mHeaders63.length);
headers = temp;
}
for (int i = 0; i < results.size(); i++) {
ArrayList<String> rowResult = new ArrayList<>();
rowResult.add(results.get(i).roadName);
rowResult.add(results.get(i).pointName);
rowResult.add(Util.formatDouble2StringDotAuto(results.get(i).designX));
rowResult.add(Util.formatDouble2StringDotAuto(results.get(i).designY));
rowResult.add(Util.formatDouble2StringDotAuto(results.get(i).designZ));
rowResult.add(Util.formatDouble2StringDotAuto(results.get(i).measuredX));
rowResult.add(Util.formatDouble2StringDotAuto(results.get(i).measuredY));
rowResult.add(Util.formatDouble2StringDotAuto(results.get(i).measuredZ));
rowResult.add(results.get(i).distance);
rowResult.add(results.get(i).moveUpDown);
rowResult.add(results.get(i).moveK);
rowResult.add(results.get(i).moveD);
rowResult.add(results.get(i).moveWestEast);
rowResult.add(results.get(i).moveNorthSouth);
rowResult.add(results.get(i).moveForeBack);
rowResult.add(results.get(i).moveLeftRight);
rowResult.add(results.get(i).remarks);
rowResult.add(DateUtils.toFull(results.get(i).createDate));
if (isExportRtkStatus) {
rowResult.add(DeviceInfoDataUtils.posTypeString(results.get(i).deviceInfoData, GnssPosition::posTypeString));
rowResult.add(DeviceInfoDataUtils.stationTypeString(results.get(i).deviceInfoData));
rowResult.add(DeviceInfoDataUtils.satelliteString(context, results.get(i).deviceInfoData));
rowResult.add(DeviceInfoDataUtils.hrmsString(results.get(i).deviceInfoData));
rowResult.add(DeviceInfoDataUtils.vrmsString(results.get(i).deviceInfoData));
rowResult.add(DeviceInfoDataUtils.diffAgeString(context, results.get(i).deviceInfoData));
rowResult.add(DeviceInfoDataUtils.electricityString(context, results.get(i).deviceInfoData));
}
if (isExportHr) {
rowResult.add(DeviceInfoDataUtils.hrString(results.get(i).deviceInfoData));
}
exportResult.add(rowResult);
}
if (!exportResult.isEmpty()) {
File exportFolder = new File(FileUtil.getSDPath(), context.getString(R.string.surveyor_exported_file)
+ "/" + context.getString(R.string.record) + "/" + context.getString(R.string.known_point_staking));
//过滤重名文件,如果有重名,添加后缀
String exportFileName = ExportPathUtils.filterDuplicateFileName(exportFolder, name, "xls");
new ExcelExportHelper().exportExcelForBigDataAndSave(headers, exportResult,
context.getString(R.string.known_point_staking),
ExcelExportHelper.MORE_SHEET_FLAG,
FileUtil.getSDPath() + "/" + context.getString(R.string.surveyor_exported_file)
+ "/" + context.getString(R.string.record) + "/" + context.getString(R.string.known_point_staking),
exportFileName);
hideLoading(context, exportFileName, callback);
} else {
ToastUtils.showShort(R.string.export_result_empty);
}
});
}
private void hideLoading(Context activity, String name, ICallback callback) {
mUiThreadPoster.post(() -> {
mProgressDialog.dismiss();
File path =
new File(FileUtil.getSDPath() + "/" + activity.getString(R.string.surveyor_exported_file)
+ "/" + activity.getString(R.string.record) + "/" + activity.getString(R.string.known_point_staking) + "/" + name + ".xls");
if (path.exists()) {
callback.onSuccess(path);
}
});
}
public interface ICallback {
void onSuccess(File file);
}
}

@ -0,0 +1,194 @@
package com.project.survey.ui.lofting.pointlofting.record.util;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.RecyclerView;
import com.bingce.data.base.user.UserConfig;
import com.bingce.data.cache.CachedCurrentJob;
import com.bingce.data.cache.CachedCurrentProject;
import com.bingce.data.database.DBQueryConstant;
import com.bingce.data.database.PointStakeDb;
import com.bingce.data.surveyor.surveydata.pointstake.PointStakeConstants;
import com.bingce.data.surveyor.surveydata.pointstake.PointStakeRecord;
import com.bingce.list.SwipeDeletePagingListLayoutHelper;
import com.bingce.utils.DateUtils;
import com.bingce.utils.FileUtil;
import com.bingce.utils.IProvider;
import com.bingce.utils.StringUtil;
import com.bingce.utils.Util;
import com.project.survey.R;
import com.project.survey.databinding.RecyclerviewItemRecordsBinding;
import com.project.survey.ui.lofting.pointlofting.record.RecordDetailActivity;
import com.project.survey.ui.lofting.pointlofting.record.RecordsActivity;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import com.project.survey.util.StoragePermissionUtils;
import com.project.survey.util.Utils;
class PointStakeListUtils extends AbstractListUtils {
private final DiffUtil.ItemCallback<PointStakeRecord> callback = new Utils.ItemCallback<>();
PointStakeListUtils(IProvider<AppCompatActivity> activityIProvider) {
super(activityIProvider);
}
@Override
public void update(RecyclerView recyclerView, boolean ascOrder,//asc升序 des,降序
UserConfig userConfig,
String currentProjectId, String currentJobId, String currentRoadId,
RecordsActivityFilterParameter parameter) {
String road = parameter.road;
String k = parameter.k;
String remarks = parameter.remarks;
Date start = parameter.start;
Date end = parameter.end;
SwipeDeletePagingListLayoutHelper.setup(activity(), activity(), recyclerView, callback,
() -> PointStakeDb.getInstance().rawQueryPagingSource(
Utils.findRecordsListByRoadNameKRemarksDate(
PointStakeConstants.DB_NAME, currentProjectId, currentJobId, ascOrder, road, k, remarks, start, end)),
new SwipeDeletePagingListLayoutHelper.IViewHolder0<PointStakeRecord, RecordItemVH>() {
@Override
public RecordItemVH newItemContentVH(@NonNull ViewGroup parent, int viewType) {
return new RecordItemVH(RecyclerviewItemRecordsBinding.inflate(getLayoutInflater()));
}
@Override
public void doBindContent(RecordItemVH viewHolder, PointStakeRecord record, int position) {
if (record == null) {
return;
}
String remarks = StringUtil.isEmpty(record.remarks) ? "" : record.remarks;
RecyclerViewItemData data = new RecyclerViewItemData(record.id,
record.pointName,
record.roadName,
Util.formatDouble2StringDotAuto(record.designX),
Util.formatDouble2StringDotAuto(record.designY),
Util.formatDouble2StringDotAuto(record.designZ),
getString(R.string.remarks) + ":" + (remarks.length() > 8 ? remarks.substring(0, 8) + "..." : remarks),
DateUtils.toFull(record.createDate));
viewHolder.doBinder(data);
}
@Override
public void onItemClicked(int index, PointStakeRecord instance) {
RecordDetailActivity.start(activity(), RecordTypeConstants.TYPE_POINT_STAKE, instance.id);
}
@Override
public void onDelete(int index, PointStakeRecord instance, SwipeDeletePagingListLayoutHelper.IOnDeleteListener listener) {
requestDelete(activity(), index, instance.id, listener);
}
});
}
@Override
public void clearInWorkerThread(RecordsActivityFilterParameter parameter, Runnable completeCallback) {
String projectId = CachedCurrentProject.currentProjectId();
String jobId = CachedCurrentJob.currentJobId(projectId);
List<PointStakeRecord> records = PointStakeDb.getInstance().rawQueryListData(
Utils.findRecordsListByRoadNameKRemarksDate(
PointStakeConstants.DB_NAME, projectId, jobId, false, parameter.road, parameter.k, parameter.remarks, parameter.start, parameter.end));
PointStakeDb.getInstance().delete(records);
// activity().runOnUiThread(mProgressDialog::dismiss);
if (completeCallback != null) {
completeCallback.run();
}
}
@Override
public void exportRecord2ExcelAsync(
String name, boolean ascOrder,
RecordsActivityFilterParameter filterParameter, RecordsActivityHeaders headers, boolean isExportRtkStatus, boolean isExportHr, RecordsActivity.IExportSuccess exportSuccess) {
StoragePermissionUtils.checkStoragePermission(context(), () -> {
KnownPointRecordExporter exporter = new KnownPointRecordExporter();
exporter.exportKnownPointSetting2ExcelAsync(name, ascOrder,
headers.mHeaders61,
headers.mHeaders62,
headers.mHeaders63,
isExportRtkStatus,
isExportHr,
context(),
filterParameter,
file -> {
FileUtil.scanFile(context(), file);
// showExportSuccessDialog(file);
exportSuccess.showExportSuccessDialog(file);
});
});
}
@Override
public void deleteSingleRecordInWorkerThread(String recordId) {
PointStakeDb.getInstance().deleteById(recordId);
}
@Override
public String name() {
return getString(R.string.known_point_staking);
}
@Override
public RecordDetailData findRecordDetailInWorkerThread(String recordId) {
PointStakeRecord results = PointStakeDb.getInstance()
.rawQueryData(DBQueryConstant.findById(PointStakeConstants.DB_NAME, recordId));
return convert(results);
}
@Override
public RecordDetailData findOtherRecordDetailInWorkerThread(String projectId, String jobId, Date date, boolean nextOrLast) {
PointStakeRecord results = PointStakeDb.getInstance()
.rawQueryData(Utils.findOtherRecord(PointStakeConstants.DB_NAME, projectId, jobId, date, nextOrLast));
return convert(results);
}
@Override
public RecordDetailData updateRemarksInWorkerThread(String recordId, String remarks) {
PointStakeRecord results = PointStakeDb.getInstance()
.rawQueryData(DBQueryConstant.findById(PointStakeConstants.DB_NAME, recordId));
if (results != null) {
results.remarks = remarks;
PointStakeDb.getInstance().save(results);
}
return convert(results);
}
private RecordDetailData convert(PointStakeRecord results) {
if (results == null) {
return null;
}
LinkedHashMap<String, String> map = new LinkedHashMap<>();
map.put(getString(R.string.road_name), results.roadName);
map.put(getString(R.string.point_name), results.pointName);
map.put(getString(R.string.design_x), Util.formatDouble2StringDotAuto(results.designX));
map.put(getString(R.string.design_y), Util.formatDouble2StringDotAuto(results.designY));
map.put(getString(R.string.design_z), Util.formatDouble2StringDotAuto(results.designZ));
map.put(getString(R.string.measured_x), Util.formatDouble2StringDotAuto(results.measuredX));
map.put(getString(R.string.measured_y), Util.formatDouble2StringDotAuto(results.measuredY));
map.put(getString(R.string.measured_z), Util.formatDouble2StringDotAuto(results.measuredZ));
map.put(getString(R.string.distance), results.distance);
map.put(getString(R.string.move_up_down), results.moveUpDown);
if (!StringUtil.isEmpty(results.moveK) || !StringUtil.isEmpty(results.moveD)) {
map.put(getString(R.string.move_k), results.moveK);
map.put(getString(R.string.move_d), results.moveD);
}
if (!StringUtil.isEmpty(results.moveWestEast) || !StringUtil.isEmpty(results.moveNorthSouth)) {
map.put(getString(R.string.move_west_east), results.moveWestEast);
map.put(getString(R.string.move_north_south), results.moveNorthSouth);
}
if (!StringUtil.isEmpty(results.moveForeBack) || !StringUtil.isEmpty(results.moveLeftRight)) {
map.put(getString(R.string.move_fore_back), results.moveForeBack);
map.put(getString(R.string.move_left_right), results.moveLeftRight);
}
map.put(getString(R.string.remarks), results.remarks);
map.put(getString(R.string.record_time), DateUtils.toFull(results.createDate));
return new RecordDetailData(results.id, map, results.deviceInfoData, results.createDate, results.remarks);
}
}

@ -5,14 +5,13 @@ import android.view.View;
import android.widget.EditText;
import com.afollestad.materialdialogs.MaterialDialog;
import com.bingce.utils.StringUtil;
import com.project.survey.R;
import com.project.survey.util.CommonUtils;
class RecordDetailActivityRemarksUtils {
static void changeRemarks(Context context, String remarks, IOnRemarksChanged remarksChanged) {
public class RecordDetailActivityRemarksUtils {
public static void changeRemarks(Context context, String remarks, IOnRemarksChanged remarksChanged) {
MaterialDialog dialog = new MaterialDialog.Builder(context)
.title(R.string.remarks)
.customView(R.layout.dialog_edit_remarks, false)
@ -48,7 +47,7 @@ class RecordDetailActivityRemarksUtils {
}
}
interface IOnRemarksChanged {
public interface IOnRemarksChanged {
void onChanged(String remarks);
}
}

@ -8,9 +8,9 @@ import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.internal.MDButton;
import com.bingce.utils.ContextProviderUtils;
import com.bingce.utils.IProvider;
import com.project.survey.R;
import blankj.utilcode.util.ToastUtils;
import cn.liuyanbing.surveyor.R;
public class RecordsActivityClearUtils extends ContextProviderUtils {
private MDButton mPositiveAction;
@ -22,7 +22,7 @@ public class RecordsActivityClearUtils extends ContextProviderUtils {
this.currentTypeFromSpinner = currentTypeFromSpinner;
}
void showClearDialog(Runnable clearCallback) {
public void showClearDialog(Runnable clearCallback) {
if (isCloceFunction()) {
ToastUtils.showShort("暂不支持");
return;

@ -14,14 +14,16 @@ import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.internal.MDButton;
import com.bingce.file.FileOperator;
import com.bingce.utils.ContextProviderUtils;
import com.bingce.utils.FileUtil;
import com.bingce.utils.IProvider;
import com.hjq.permissions.OnPermissionCallback;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
import com.project.survey.App;
import com.project.survey.BuildConfig;
import com.project.survey.R;
import com.project.survey.ui.lofting.pointlofting.record.RecordsActivity;
import com.rengwuxian.materialedittext.MaterialEditText;
import java.io.File;
@ -178,6 +180,6 @@ public class RecordsActivityExportUtils extends ContextProviderUtils {
}
public interface IExportCallback {
void onExport(String name, boolean isExportRtkStatus, boolean isExportHr,RecordsActivity.IExportSuccess exportSuccess);
void onExport(String name, boolean isExportRtkStatus, boolean isExportHr, RecordsActivity.IExportSuccess exportSuccess);
}
}

@ -17,6 +17,7 @@ import com.kongzue.dialogx.dialogs.BottomDialog;
import com.kongzue.dialogx.dialogs.BottomMenu;
import com.kongzue.dialogx.interfaces.OnBindView;
import com.kongzue.dialogx.interfaces.OnMenuItemClickListener;
import com.project.survey.App;
import com.project.survey.R;
import com.rengwuxian.materialedittext.MaterialEditText;
@ -168,9 +169,6 @@ public class RecordsActivityFilterUtils extends ContextProviderUtils {
met_roadname_keyword = v.findViewById(R.id.met_dialog_records_filter_roadname_keyword);
met_kilometer_keyword = v.findViewById(R.id.met_dialog_records_filter_kilometer_keyword);
met_remarks_keyword = v.findViewById(R.id.met_dialog_records_filter_remarks_keyword);
if (isWaterPipKeyword()) {
met_roadname_keyword.setHint(R.string.water_pipe_name_keyword);
}
met_roadname_keyword.setText(roadname_keyword);
met_kilometer_keyword.setText(kilometer_keyword);
met_remarks_keyword.setText(remarks_keyword);

@ -20,7 +20,7 @@ public class RecordsActivityHeaders extends ContextProviderUtils {
super(contextIProvider);
}
void initHeaders() {
public void initHeaders() {
initSideCommonHeaders();
initSideFreedomHeaders();
initKnowPointSettingOutHeaders();

@ -0,0 +1,24 @@
package com.project.survey.ui.lofting.pointlofting.record.util;
import androidx.appcompat.app.AppCompatActivity;
import java.util.LinkedHashMap;
import java.util.Map;
public class RecordsUtilsFactory {
public static Map<Integer, IRecordsUtils> buildUtils(AppCompatActivity appCompatActivity) {
return buildUtils(appCompatActivity, recordType -> RecordTypeConstants.TYPE_MEASURING_TAPE != recordType);
}
public static Map<Integer, IRecordsUtils> buildUtils(AppCompatActivity appCompatActivity, IFilter filter) {
return new LinkedHashMap<Integer, IRecordsUtils>() {{
if (filter == null || filter.isValidate(RecordTypeConstants.TYPE_POINT_STAKE)) {
put(RecordTypeConstants.TYPE_POINT_STAKE, new PointStakeListUtils(() -> appCompatActivity));
}
}};
}
public interface IFilter {
boolean isValidate(int recordType);
}
}

@ -0,0 +1,94 @@
package com.project.survey.ui.lofting.pointlofting.record.util
import androidx.activity.viewModels
import androidx.annotation.WorkerThread
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.bingce.data.base.user.UserConfig
import com.bingce.data.database.DBQueryConstant
import com.bingce.data.database.RoadDb
import com.bingce.data.surveyor.designdata.road.RoadConstants
import com.bingce.data.surveyor.designdata.road.RoadRecord
import com.bingce.http.measuringtape.tryLoadMeasuringTapeRecord
import com.bingce.data.sync.utils.loadCurrentJobId
import com.bingce.data.sync.utils.loadCurrentProjectId
import com.bingce.data.sync.utils.loadCurrentRoadId
import com.bingce.data.sync.utils.loadUserConfig
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class RecordsViewModelKt : ViewModel() {
fun loadRecordBaseInfo(callback: ILoadProjectJobRoadCallback) {
viewModelScope.launch(Dispatchers.IO) {
val data = loadRecordBaseData() ?: return@launch
val roadName = RoadDb.getInstance().rawQueryData(
DBQueryConstant.findById(RoadConstants.DB_NAME, data.roadId)
)?.name ?: return@launch
callback.onLoadedInWorkThread(data.projectId, data.jobId, data.roadId, roadName)
}
}
fun loadRecordBaseData(callback: ILoadProjectIdJobIdRoadRecordCallback) {
viewModelScope.launch(Dispatchers.IO) {
val data = loadRecordBaseData() ?: return@launch
val roadRecord = RoadDb.getInstance().rawQueryData(
DBQueryConstant.findById(RoadConstants.DB_NAME, data.roadId)
) ?: return@launch
callback.onLoadedInWorkThread(data.projectId, data.jobId, roadRecord)
}
}
@WorkerThread
fun loadRecordBaseData(): RecordBaseData? {
val userConfig = loadUserConfig()
val projectId = loadCurrentProjectId(true, userConfig) ?: return null
val jobId = loadCurrentJobId(projectId, true, userConfig) ?: return null
val roadId = loadCurrentRoadId(projectId, true, userConfig) ?: return null
return RecordBaseData(projectId, jobId, roadId)
}
fun loadMeasuringTapeRecord(userConfig: UserConfig?, roadId: String) {
viewModelScope.launch(Dispatchers.IO) {
tryLoadMeasuringTapeRecord(userConfig, roadId)
}
}
interface ILoadProjectJobRoadCallback {
@WorkerThread
fun onLoadedInWorkThread(
currentProjectId: String,
currentJobId: String,
currentRoadId: String,
currentRoadName: String
)
}
interface ILoadProjectIdJobIdRoadRecordCallback {
@WorkerThread
fun onLoadedInWorkThread(
currentProjectId: String,
currentJobId: String,
currentRoad: RoadRecord
)
}
data class RecordBaseData(
val projectId: String,
val jobId: String,
val roadId: String,
)
class HolderInFragment(fragment: Fragment) {
val viewModel: RecordsViewModelKt by fragment.viewModels()
}
class HolderInActivity(activity: AppCompatActivity) {
val viewModel: RecordsViewModelKt by activity.viewModels()
}
}

@ -0,0 +1,49 @@
package com.project.survey.util;
import android.content.Context;
import com.bingce.utils.FileUtil;
import com.project.survey.R;
import java.io.File;
public class ExportPathUtils {
public static File exportFolder(Context context, String folderName) {
File exportFolder = new File(FileUtil.getSDPath(), context.getString(R.string.surveyor_exported_file));
if (!exportFolder.exists() && !exportFolder.mkdirs()) {
return backupExportFolder(context, folderName);
}
File folder = new File(exportFolder, folderName);
if (!folder.exists() && !folder.mkdirs()) {
return backupExportFolder(context, folderName);
}
return folder;
}
private static File backupExportFolder(Context context, String folderName) {
File cachedFolder = new File(context.getExternalCacheDir(), folderName);
if (!cachedFolder.exists() && !cachedFolder.mkdirs()) {
return context.getExternalCacheDir();
}
return cachedFolder;
}
public static String filterDuplicateFileName(File folder, String fileName, String fileSuffix) {
if (folder == null || !folder.exists() || folder.isFile()) {
return fileName;
}
File file = new File(folder, fileName + "." + fileSuffix);
if (!file.exists() || file.isDirectory()) {
return fileName;
}
int index = 1;
while (true) {
file = new File(folder, fileName + "_" + index + "." + fileSuffix);
if (!file.exists() || file.isDirectory()) {
return fileName + "_" + index;
}
index++;
}
}
}

@ -0,0 +1,37 @@
package com.project.survey.util;
import android.content.Context;
import com.hjq.permissions.OnPermissionCallback;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
import java.util.List;
import blankj.utilcode.util.ToastUtils;
public class StoragePermissionUtils {
public static void checkStoragePermission(Context context, Runnable onGetPermissionCallback) {
XXPermissions.with(context)
.permission(Permission.MANAGE_EXTERNAL_STORAGE)
.request(new OnPermissionCallback() {
@Override
public void onGranted(List<String> permissions, boolean all) {
if (onGetPermissionCallback != null) {
onGetPermissionCallback.run();
}
}
@Override
public void onDenied(List<String> permissions, boolean never) {
if (never) {
ToastUtils.showShort("请手动授予文件读写权限");
// 如果是被永久拒绝就跳转到应用权限系统设置页面
XXPermissions.startPermissionActivity(context, permissions);
} else {
checkStoragePermission(context, onGetPermissionCallback);
}
}
});
}
}

@ -7,6 +7,8 @@ package com.project.survey.util;
import android.view.View;
import androidx.fragment.app.FragmentActivity;
import com.bingce.device.Device;
import com.bingce.device.enums.DeviceTypeEnum;
import com.bingce.rtk.gnss.Gnss;
@ -37,7 +39,7 @@ public class SurveyUIUtils {
return (int) (dpValue * scale + 0.5F);
}
public static void updatePoleHrHeightDraggingToolBarLayout(PointSurveyNewActivity activity, boolean isExpand, LayoutPoleHrHeightBinding layoutPoleHrHeightBinding,
public static void updatePoleHrHeightDraggingToolBarLayout(FragmentActivity activity, boolean isExpand, LayoutPoleHrHeightBinding layoutPoleHrHeightBinding,
LayoutDraggingButtonBinding layoutDraggingButtonBinding,
LayoutBaseSurveyStakingSettingBinding layoutBaseSurveyStakingSettingBinding,
boolean isJudgeIvSettingStatus, boolean isStakingPager, Object currentCoordinate) {

@ -0,0 +1,65 @@
package com.project.survey.util;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.DiffUtil;
import androidx.sqlite.db.SimpleSQLiteQuery;
import com.bingce.data.database.DBQueryConstant;
import com.bingce.data.surveyor.BCSurveyWithDeviceInfoRecord;
import com.project.survey.App;
import java.util.Date;
public class Utils {
static abstract class AbstractItemCallback<T> extends DiffUtil.ItemCallback<T> {
protected abstract String idOf(@NonNull T t);
@Override
final public boolean areItemsTheSame(@NonNull T oldItem, @NonNull T newItem) {
// return oldItem.id.equals(newItem.id);
return idOf(oldItem).equals(idOf(newItem));
}
@Override
final public boolean areContentsTheSame(@NonNull T oldItem, @NonNull T newItem) {
// return oldItem.id.equals(newItem.id);
return idOf(oldItem).equals(idOf(newItem));
}
}
public static class ItemCallback<T extends BCSurveyWithDeviceInfoRecord> extends AbstractItemCallback<T> {
@Override
protected String idOf(@NonNull T t) {
return t.id;
}
}
public static SimpleSQLiteQuery findRecordsListByRoadNameKRemarksDate(
String DB_NAME, String projectId, String jobId, boolean ascOrder,//asc升序 des,降序
String roadName, String k, String remarks, Date start, Date end) {
if (((App) blankj.utilcode.util.Utils.getApp()).isShowAllRecordInCurrentProject) {
return DBQueryConstant.findRecordsListByProjectRoadNameKRemarksDate(DB_NAME, projectId, ascOrder, roadName, k, remarks, start, end);
} else {
return DBQueryConstant.findRecordsListByJobRoadNameKRemarksDate(DB_NAME, jobId, ascOrder, roadName, k, remarks, start, end);
}
}
public static SimpleSQLiteQuery findRecordsListByRoadNameKRemarksDate(
String DB_NAME, String projectId, String jobId, boolean ascOrder,//asc升序 des,降序
String roadName, String k, String remarks, Date start, Date end, String tcsType) {
if (((App) blankj.utilcode.util.Utils.getApp()).isShowAllRecordInCurrentProject) {
return DBQueryConstant.findRecordsListByProjectRoadNameKRemarksDate(DB_NAME, projectId, ascOrder, roadName, k, remarks, start, end, tcsType);
} else {
return DBQueryConstant.findRecordsListByJobRoadNameKRemarksDate(DB_NAME, jobId, ascOrder, roadName, k, remarks, start, end, tcsType);
}
}
public static SimpleSQLiteQuery findOtherRecord(String DB_NAME, String projectId, String jobId, Date date, boolean nextOrLast) {
if (((App) blankj.utilcode.util.Utils.getApp()).isShowAllRecordInCurrentProject) {
return DBQueryConstant.findOtherRecordInProject(DB_NAME, projectId, date, nextOrLast);
} else {
return DBQueryConstant.findOtherRecordInJob(DB_NAME, jobId, date, nextOrLast);
}
}
}

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="800dp"
android:height="800dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:pathData="M463.08,207.19L432.92,237.36L384,188.44L384,426.67L341.33,426.67L341.33,188.44L292.42,237.36L262.25,207.19L362.67,106.67L463.08,207.19ZM170.67,170.67L64,170.67L64,213.33L170.67,213.33L170.67,170.67ZM213.33,277.33L64,277.33L64,320L213.33,320L213.33,277.33ZM64,426.67L256,426.67L256,384L64,384L64,426.67Z"
android:strokeWidth="1"
android:fillColor="#3333AA"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
</vector>

@ -0,0 +1,31 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:background="?colorPrimary"
android:minHeight="?android:attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:paddingStart="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingEnd="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin">
<TextView
android:id="@+id/activity_record_detail_textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/MyTextAppearanceTitle" />
</androidx.core.widget.NestedScrollView>
</LinearLayout>

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" >
<LinearLayout
android:layout_width="280dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/rectangle_radius_all_7_white_full">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:text="Title"
android:textSize="14sp"
android:textColor="@color/black"
android:textStyle="bold"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/color_EBEBEB">
<com.bingce.ui.CleanableEditText
android:id="@+id/editText01"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="30dp"
android:layout_marginBottom="10dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:drawableRight="@mipmap/icon_clear"
android:ellipsize="end"
android:gravity="center_vertical"
android:imeOptions="actionNext"
android:maxLines="1"
android:paddingLeft="10dp"
android:paddingRight="5dp"
android:singleLine="true"
android:textSize="@dimen/NormalTextSize"
android:textColor="@color/black"
android:textColorHint="@color/color_999999"
android:background="@drawable/rectangle_radius_all_7_white_full"/>
<com.bingce.ui.CleanableEditText
android:id="@+id/editText02"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginBottom="10dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:drawableRight="@mipmap/icon_clear"
android:ellipsize="end"
android:gravity="center_vertical"
android:imeOptions="actionNext"
android:maxLines="1"
android:paddingLeft="10dp"
android:paddingRight="5dp"
android:singleLine="true"
android:textSize="@dimen/NormalTextSize"
android:textColor="@color/black"
android:textColorHint="@color/color_999999"
android:background="@drawable/rectangle_radius_all_7_white_full"/>
<com.bingce.ui.CleanableEditText
android:id="@+id/editText03"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginBottom="30dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:drawableRight="@mipmap/icon_clear"
android:ellipsize="end"
android:gravity="center_vertical"
android:imeOptions="actionDone"
android:maxLines="1"
android:paddingLeft="10dp"
android:paddingRight="5dp"
android:singleLine="true"
android:textSize="@dimen/NormalTextSize"
android:textColor="@color/black"
android:textColorHint="@color/color_999999"
android:background="@drawable/rectangle_radius_all_7_white_full"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_cancel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/cancel"
android:textColor="@color/red"
android:gravity="center"
android:textStyle="bold"
android:textSize="@dimen/NormalTextSize" />
<TextView
android:id="@+id/tv_confirm"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/confirm"
android:gravity="center"
android:textColor="@color/color_575757"
android:textStyle="bold"
android:textSize="@dimen/NormalTextSize" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?><!--
/* //device/apps/common/assets/res/any/layout/simple_spinner_item.xml
**
** Copyright 2008, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License")
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="?colorPrimary"
android:ellipsize="marquee"
android:singleLine="true"
android:textColor="#ffffff" />

@ -0,0 +1,20 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- <item-->
<!-- android:id="@+id/menu_record_filter"-->
<!-- android:title="@string/filter"-->
<!-- app:showAsAction="ifRoom" />-->
<item
android:id="@+id/menu_record_export"
android:title="@string/export_points"
app:showAsAction="ifRoom" />
<item
android:id="@+id/menu_record_clear"
android:title="@string/clear_records"
app:showAsAction="never" />
<item
android:id="@+id/menu_record_sort"
android:title="@string/sort"
app:showAsAction="never" />
</menu>

@ -0,0 +1,17 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:mContext="com.bingce.surveyor.activity.project.records.RecordDetailActivity">
<item
android:id="@+id/menu_record_detail_page_up"
android:title="@string/page_up"
app:showAsAction="ifRoom" />
<item
android:id="@+id/menu_record_detail_page_down"
android:title="@string/page_down"
app:showAsAction="ifRoom" />
<item
android:id="@+id/menu_record_detail_edit_remarks"
android:title="@string/edit_remarks"
app:showAsAction="never" />
</menu>

@ -313,5 +313,31 @@
<string name="road_name_keyword">线路名关键词</string>
<string name="road_name_keyword_explain">线路名里包含的关键词</string>
<string name="kilometer_keyword">里程关键词</string>
<string name="not_choose_date">未选择日期</string>
<string name="confirm_delete_filter_records">确定删除所有当前筛选的记录?</string>
<string name="export_records">导出记录</string>
<string name="no_record">无记录</string>
<string name="record_detail">记录详情</string>
<string name="page_up">上一条</string>
<string name="page_down">下一条</string>
<string name="edit_remarks">修改备注</string>
<string name="known_point_staking">已知点放样</string><!--不能轻易改名,因为有个测量员导出文件里有个记录参数-->
<string name="record_default_display_one_week">记录默认显示7天内的,如需显示更多请点击右上角筛选</string>
<string name="clear_records">清空</string>
<string name="deleting">删除……</string>
<string name="disconnect_device_use_input_point">请先断开正在连接的设备,再使用自定义输入实测点功能</string>
<string name="input_current_point">输入实测点</string>
<string name="please_input_full_coordinate_parameters">请输入完整的坐标参数</string>
<string name="whether_staking_selected_point">是否放样所选点</string>
<string name="add_points_staking_point_first">请先添加或选择要放样的点</string>
<string name="staking_points_being_collected">放样点采集中</string>
<string name="is_current_recently_point">是当前最近点。</string>
<string name="the_first_staking_point_list">已经是第一个放样点。</string>
<string name="the_last_staking_point_list">已经是最后一个放样点。</string>
<string name="setting_point">放样点</string>
<string name="kilometer_keyword_explain">只需要输入K13,就可筛选出所以K13开头的记录,比如K13+345.6处的记录</string>
<string name="remarks_keyword">备注关键词</string>
<string name="remarks_keyword_explain">备注里包含关键词的所有记录都将被筛选</string>
<string name="sort">排序</string>
</resources>
Loading…
Cancel
Save