diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 09491e2..14c79cf 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -179,6 +179,10 @@ android:name=".activity.user.InputEmailActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:exported="true" /> + { public static final String TAG = PointListFragment.class.getName(); - private PointRecordAdapter adapter; + private final static String KEY_TYPE = "___KEY___"; + + // private PointRecordAdapter adapter; + private PointListAdapter adapter; @NonNull private final ImportPointsUtil importPointsUtil; - public PointListFragment() { - importPointsUtil = new ImportPointsUtil(this); + /** + * 去未知点列表 + * + * @param projectId + * @param context + */ + public static void go2UnknownPointList(String projectId, String projectType, Context context) { + Bundle bundle = new Bundle(); + bundle.putString(KEY_TYPE, PointRecord.TYPE_UNKNOWN_POINT); + bundle.putString(BundleConstants.KEY_PROJECT_ID, projectId); + bundle.putString(BundleConstants.KEY_PROJECT_TYPE, projectType); + FragmentContainerActivity.start(context, TAG, R.string.project_unknown_points, bundle); } - @Override - protected void refreshRecyclerView(RecyclerView recyclerView) { - if (getArguments() == null) { - return; - } - String pointType = getArguments().getString(KEY_TYPE, PointRecord.TYPE_GLOBAL_POINT); - String projectId = getArguments().getString(BundleConstants.KEY_PROJECT_ID); - SurveyorDatabaseFactory - .instance - .getPointDataSource() - .getLiveDataListByProject(projectId, pointType) - .observe(getViewLifecycleOwner(), pointRecords -> updateData(pointRecords, recyclerView)); + /** + * 去已知点列表 + * + * @param projectId + * @param context + */ + public static void go2KnownPointList(String projectId, String projectType, Context context) { + Bundle bundle = new Bundle(); + bundle.putString(KEY_TYPE, PointRecord.TYPE_KNOWN_POINT); + bundle.putString(BundleConstants.KEY_PROJECT_ID, projectId); + bundle.putString(BundleConstants.KEY_PROJECT_TYPE, projectType); + FragmentContainerActivity.start(context, TAG, R.string.project_known_points, bundle); } - private void updateData(List pointRecords, RecyclerView recyclerView) { + /** + * 去全局控制点 + * + * @param context + */ + public static void go2GlobalPointList(Context context) { + Bundle bundle = new Bundle(); + bundle.putString(KEY_TYPE, PointRecord.TYPE_GLOBAL_POINT); + bundle.putString(BundleConstants.KEY_PROJECT_ID, PointRecord.GLOBAL_CONTROL_POINT_PROJECT_ID); + FragmentContainerActivity.start(context, TAG, R.string.global_control_point, bundle); + } + + public static PointListFragment newInstance(Bundle bundle) { + PointListFragment fragment = new PointListFragment(); + fragment.setArguments(bundle); + return fragment; + } + + public PointListFragment() { + importPointsUtil = new ImportPointsUtil(this); + } + + /** + * 更新点列表 + * + * @param pointRecords + */ + private void updateData(List pointRecords) { //排序 Collections.sort(pointRecords, (o1, o2) -> { if (o1.getCreateDate().before(o2.getCreateDate())) { @@ -65,15 +120,8 @@ public class PointListFragment extends AbstractRecyclerViewFragment { } return 0; }); - if (adapter == null) { - if (getActivity() == null) { - return; - } - adapter = new PointRecordAdapter(pointRecords, getActivity()); - recyclerView.setAdapter(adapter); - } else { - adapter.updateData(pointRecords); - } + + adapter.refreshData(pointRecords); } @Override @@ -85,90 +133,147 @@ public class PointListFragment extends AbstractRecyclerViewFragment { @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); - if (getArguments() != null) { - String projectId = getArguments().getString(BundleConstants.KEY_PROJECT_ID); - String pointType = getArguments().getString(KEY_TYPE, PointRecord.TYPE_GLOBAL_POINT); - if (id == R.id.menu_item_import) { - //导入 - importPointsUtil.showImportDialog(projectId, pointType); - } else if (id == R.id.menu_item_clear) { - //清空 - TipsFragment.cancelAbleTips(getChildFragmentManager(), - getViewLifecycleOwner(), - getContext(), - getClearPointHint(pointType), - 4, - () -> clearPoints(projectId, pointType)); - } else if (R.id.menu_item_add == id) { - //新建点 - PointFragment.start(getChildFragmentManager(), - projectId, - pointType); - } + if (getArguments() == null) { + return super.onOptionsItemSelected(item); + } + String pointType = getPonitType(); + String projectId = getProjectId(); + if (id == R.id.menu_item_import) { + //导入点 + importPoints(pointType, projectId); + } else if (id == R.id.menu_item_clear) { + //清空点 + clearPoints(pointType, projectId); } return super.onOptionsItemSelected(item); } - private String getClearPointHint(String pointType) { - //getString(R.string.tips_ready_2_clear_all_known_point), - String s = ""; - if (PointRecord.TYPE_KNOWN_POINT.equals(pointType)) { - s = Tools.getString(R.string.clear_point_list_hint, Tools.getString(R.string.control_point)); - } else if (PointRecord.TYPE_UNKNOWN_POINT.equals(pointType)) { - s = Tools.getString(R.string.clear_point_list_hint, Tools.getString(R.string.unknown_point)); - } else if (PointRecord.TYPE_GLOBAL_POINT.equals(pointType)) { - s = Tools.getString(R.string.clear_point_list_hint, Tools.getString(R.string.global_control_point)); - } - return s; + private String getPonitType() { + return requireArguments().getString(KEY_TYPE, PointRecord.TYPE_GLOBAL_POINT); } - private void clearPoints(String projectId, String pointType) { - ThreadPoolUtil.execute(() -> PointUtil.clearPointRecord(projectId, pointType)); + private String getProjectId() { + return requireArguments().getString(BundleConstants.KEY_PROJECT_ID); } - private final static String KEY_TYPE = "___KEY___"; + private String getProjectType() { + return requireArguments().getString(BundleConstants.KEY_PROJECT_TYPE); + } /** - * 去未知点列表 - * - * @param projectId - * @param context + * 创建点 */ - public static void go2UnknownPointList(String projectId, Context context) { - Bundle bundle = new Bundle(); - bundle.putString(KEY_TYPE, PointRecord.TYPE_UNKNOWN_POINT); - bundle.putString(BundleConstants.KEY_PROJECT_ID, projectId); - FragmentContainerActivity.start(context, TAG, R.string.project_unknown_points, bundle); + private void createPoints(String pointType, String projectId, String projectType) { + goCreateEditPointActvity(projectId, projectType, pointType, null); + } + + private void goCreateEditPointActvity(String projectId, String projectType, String pointType, PointRecord bean) { + CreateEditPointActvity.launch(requireContext(), projectId, projectType, + pointType, bean); } /** - * 去已知点列表 - * - * @param projectId - * @param context + * 清空点 */ - public static void go2KnownPointList(String projectId, Context context) { - Bundle bundle = new Bundle(); - bundle.putString(KEY_TYPE, PointRecord.TYPE_KNOWN_POINT); - bundle.putString(BundleConstants.KEY_PROJECT_ID, projectId); - FragmentContainerActivity.start(context, TAG, R.string.project_known_points, bundle); + private void clearPoints(String pointType, String projectId) { + DialogUtil.showConfirmCountDownDialog(getChildFragmentManager(), getViewLifecycleOwner(), + getString(R.string.tips_ready_2_clear_all_known_point), + Tools.getString(R.string.confirm), () -> SurveyorDatabaseFactory + .instance + .getPointDataSource() + .clearByProjectId(projectId, pointType)); } /** - * 去全局控制点 - * - * @param context + * 导入点 */ - public static void go2GlobalPointList(Context context) { - Bundle bundle = new Bundle(); - bundle.putString(KEY_TYPE, PointRecord.TYPE_GLOBAL_POINT); - bundle.putString(BundleConstants.KEY_PROJECT_ID, PointRecord.GLOBAL_CONTROL_POINT_PROJECT_ID); - FragmentContainerActivity.start(context, TAG, R.string.global_control_point, bundle); + private void importPoints(String pointType, String projectId) { + importPointsUtil.showImportDialog(projectId, pointType); } - public static PointListFragment newInstance(Bundle bundle) { - PointListFragment fragment = new PointListFragment(); - fragment.setArguments(bundle); - return fragment; + @Override + protected NewFragmentPointListBinding getViewBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) { + return NewFragmentPointListBinding.inflate(inflater, container, false); + } + + @Override + protected void initView() { + setHasOptionsMenu(true); + initAapter(); + initListener(); + } + + private void initListener() { + mBinding.tvNewPoint.setOnClickListener((v) -> { + //新建点 + if (getArguments() == null) { + return; + } + createPoints(getPonitType(), getProjectId(), getProjectType()); + }); + } + + private void initAapter() { + mBinding.ilSwipeList.swipeRecyclerView.addItemDecoration(new DefaultItemDecoration(Tools.getColor(R.color.transparent), 1, 1)); + mBinding.ilSwipeList.swipeRecyclerView.setSwipeMenuCreator(new SwipeMenuEditDelete(requireContext())); + mBinding.ilSwipeList.swipeRecyclerView.setOnItemMenuClickListener((menuBridge, adapterPosition) -> { + menuBridge.closeMenu(); + dealMenuClick(menuBridge.getPosition(), adapter.getBean(adapterPosition)); + }); + adapter = new PointListAdapter(requireContext()); + adapter.setProjectType(getProjectType()); + mBinding.ilSwipeList.swipeRecyclerView.setAdapter(adapter); + } + + /** + * @param menuPostion 编辑或删除的position + * @param bean 数据模型 + */ + private void dealMenuClick(int menuPostion, PointRecord bean) { + if (SwipeMenuEditDelete.isEditMenu(menuPostion)) { + startEdit(bean); + } else if (SwipeMenuEditDelete.isDeleteMenu(menuPostion)) { + startDelete(bean); + } + } + + private void startDelete(PointRecord bean) { + SurveyorDatabaseFactory + .instance + .getPointDataSource() + .delete(bean); + } + + private void startEdit(PointRecord bean) { + goCreateEditPointActvity(getProjectId(), getProjectType(), getPonitType(), bean); + } + + + @Override + protected void initData() { + if (getArguments() == null) { + return; + } + String pointType = getArguments().getString(KEY_TYPE, PointRecord.TYPE_GLOBAL_POINT); + String projectId = getArguments().getString(BundleConstants.KEY_PROJECT_ID); + + String projectType = getProjectType(); + ThreadPoolUtil.execute(() -> { + //是否是平面坐标 + boolean isPlatCoordinate = true; + if (ProjectType.isHeightTraverse(projectType)) { + isPlatCoordinate = false; + } + adapter.setIsPlatCoordinate(isPlatCoordinate); + getData(projectId, pointType); + }); + } + + private void getData(String projectId, String pointType) { + ThreadPoolUtil.executeInMain(() -> SurveyorDatabaseFactory + .instance + .getPointDataSource() + .getLiveDataListByProject(projectId, pointType) + .observe(getViewLifecycleOwner(), this::updateData)); } } diff --git a/app/src/main/java/com/bingce/controlnetwork/fragment/projectdetail/ProjectDetailFragment.kt b/app/src/main/java/com/bingce/controlnetwork/fragment/projectdetail/ProjectDetailFragment.kt index f06cc88..622aeea 100644 --- a/app/src/main/java/com/bingce/controlnetwork/fragment/projectdetail/ProjectDetailFragment.kt +++ b/app/src/main/java/com/bingce/controlnetwork/fragment/projectdetail/ProjectDetailFragment.kt @@ -127,6 +127,7 @@ abstract class ProjectDetailFragment : BaseFragment() { mBinding.unknownPointList.setOnClickListener { view -> PointListFragment.go2UnknownPointList( projectId, + projectType, context ) } @@ -136,6 +137,7 @@ abstract class ProjectDetailFragment : BaseFragment() { mBinding.knownPointList.setOnClickListener { view -> PointListFragment.go2KnownPointList( projectId, + projectType, context ) } diff --git a/app/src/main/java/com/bingce/controlnetwork/func/level/fragment/ProjectDetailLevelFragment.java b/app/src/main/java/com/bingce/controlnetwork/func/level/fragment/ProjectDetailLevelFragment.java index 58c5eeb..2bf7064 100644 --- a/app/src/main/java/com/bingce/controlnetwork/func/level/fragment/ProjectDetailLevelFragment.java +++ b/app/src/main/java/com/bingce/controlnetwork/func/level/fragment/ProjectDetailLevelFragment.java @@ -97,13 +97,13 @@ public class ProjectDetailLevelFragment extends BaseFragment { private void initUnKnownPoint(View unknown) { ViewUtil.setOnClick(unknown, - v -> PointListFragment.go2UnknownPointList(projectId, getContext())); + v -> PointListFragment.go2UnknownPointList(projectId, projectType, getContext())); } private void initKnownPoint(View known) { ViewUtil.setOnClick( known, - v -> PointListFragment.go2KnownPointList(projectId, getContext())); + v -> PointListFragment.go2KnownPointList(projectId, projectType, getContext())); } @Override diff --git a/app/src/main/java/com/bingce/controlnetwork/newui/adapter/PointListAdapter.java b/app/src/main/java/com/bingce/controlnetwork/newui/adapter/PointListAdapter.java new file mode 100644 index 0000000..43f738f --- /dev/null +++ b/app/src/main/java/com/bingce/controlnetwork/newui/adapter/PointListAdapter.java @@ -0,0 +1,61 @@ +package com.bingce.controlnetwork.newui.adapter; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; + +import com.bingce.controlapphelper.datasource.database.ProjectTypeValue; +import com.bingce.controlapphelper.datasource.database.point.PointRecord; +import com.bingce.controlnetwork.databinding.NewItemPointListBinding; +import com.bingce.controlnetwork.newui.viewholder.PointListViewHolder; + + +public class PointListAdapter extends BaseAdapterNew { + + private boolean isPlatCoordinate; + private String projectType; + + public PointListAdapter(Context context) { + super(context); + } + + @NonNull + @Override + public PointListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new PointListViewHolder(NewItemPointListBinding.inflate(getInflater(), parent, false)); + } + + @Override + protected void onBindViewHolderDo(PointListViewHolder holder, int position) { + PointRecord pointRecordTj = mDataList.get(position); + //num就是name 因为从天津拷贝过来的 + holder.mBinding.tvPointNum.setText(pointRecordTj.getName()); +// holder.mBinding.tvPointName.setText(""); + + if (ProjectTypeValue.LEVEL.equals(projectType)) { + holder.mBinding.tvX.setVisibility(View.GONE); + holder.mBinding.tvY.setVisibility(View.GONE); + holder.mBinding.tvZ.setText("高程:" + pointRecordTj.getZ()); + } else { + if (isPlatCoordinate) { + holder.mBinding.tvX.setText("X:" + pointRecordTj.getX()); + holder.mBinding.tvY.setText("Y:" + pointRecordTj.getY()); + holder.mBinding.tvZ.setText("Z:" + pointRecordTj.getZ()); + } else { + holder.mBinding.tvX.setText("经度:" + pointRecordTj.getLongitude()); + holder.mBinding.tvY.setText("纬度:" + pointRecordTj.getLatitude()); + holder.mBinding.tvZ.setText("高程:" + pointRecordTj.getZ()); + } + } + } + + public void setIsPlatCoordinate(boolean isPlatCoordinate) { + this.isPlatCoordinate = isPlatCoordinate; + } + + public void setProjectType(String projectType) { + this.projectType = projectType; + } +} diff --git a/app/src/main/java/com/bingce/controlnetwork/newui/createeditpoint/CreateEditPointActvity.kt b/app/src/main/java/com/bingce/controlnetwork/newui/createeditpoint/CreateEditPointActvity.kt new file mode 100644 index 0000000..5f35373 --- /dev/null +++ b/app/src/main/java/com/bingce/controlnetwork/newui/createeditpoint/CreateEditPointActvity.kt @@ -0,0 +1,365 @@ +package com.bingce.controlnetwork.newui.createeditpoint + +import android.content.Context +import android.content.Intent +import android.text.TextUtils +import android.view.View +import androidx.annotation.StringRes +import androidx.annotation.WorkerThread +import androidx.lifecycle.lifecycleScope +import blankj.utilcode.util.ToastUtils +import com.bingce.controlapphelper.datasource.database.ProjectTypeValue +import com.bingce.controlapphelper.datasource.database.SurveyorDatabaseFactory +import com.bingce.controlapphelper.datasource.database.point.PointRecord +import com.bingce.controlapphelper.model.BundleConstants +import com.bingce.controlnetwork.R +import com.bingce.controlnetwork.databinding.ActivityNewUiCreateEditPointBinding +import com.bingce.controlnetwork.fragment.TipsFragment +import com.bingce.controlnetwork.newui.base.BaseBindingActivity +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext + +/** + * 新建或编辑点 + */ +class CreateEditPointActvity : BaseBindingActivity() { + + private var editPoint: PointRecord? = null + + private var isKnown = false + + companion object { + const val KEY_POINT_TYPE = "KEY_POINT_TYPE" + const val KEY_EDIT_POINT = "KEY_EDIT_POINT" + + @JvmStatic + fun launch( + context: Context, + projectId: String, + projectType: String, + pointType: String, + eidtPoint: PointRecord? = null + ) { + context.startActivity(Intent(context, CreateEditPointActvity::class.java).apply { + putExtra(BundleConstants.KEY_PROJECT_ID, projectId) + putExtra(BundleConstants.KEY_PROJECT_TYPE, projectType) + putExtra(KEY_POINT_TYPE, pointType) + putExtra(KEY_EDIT_POINT, eidtPoint) + }) + } + } + + override fun getBinding(): ActivityNewUiCreateEditPointBinding { + return ActivityNewUiCreateEditPointBinding.inflate(layoutInflater) + } + + override fun initView() { + mBinding.ilPointNum.tvTitle.setText(R.string.point_name) + mBinding.ilPointNum.editText.setHint(R.string.please_enter_roll_call_optional) + + setBaseUi() + initListener() + } + + private fun initIntentData() { + val pointType = getPointType() + isKnown = + PointRecord.TYPE_KNOWN_POINT == pointType || PointRecord.TYPE_GLOBAL_POINT == pointType + editPoint = getEditPoint() + } + + private fun initListener() { + mBinding.tvSaveContinue.setOnClickListener { + startSaveContinue() + } + mBinding.tvSaveQuit.setOnClickListener { + startSaveQuite() + } + } + + private fun startSaveQuite() { + checkSave { + if (editPoint == null) { + saveRecordForCreate { + finish() + } + } else { + saveRecordForEdit(editPoint!!) { + finish() + } + } + } + } + + private fun startSaveContinue() { + checkSave { + saveRecordForCreate() + clearContent() + val nextPointNum = getNextPointNum() + mBinding.ilPointNum.editText.setText(nextPointNum) + } + } + + private fun checkSave(success: () -> Unit) { + val pointNum = getPointNumber() + if (TextUtils.isEmpty(pointNum)) { + ToastUtils.showShort(R.string.please_enter_point_number) + return + } + + if (isKnown) { + if (mBinding.ilPointX.root.visibility == View.VISIBLE) { + val x = getX() + if (TextUtils.isEmpty(x)) { + val hint = R.string.please_input_x +// val hint = +// if (isPlatCood) R.string.please_input_x else R.string.please_input_longitude + ToastUtils.showShort(hint) + return + } + } + if (mBinding.ilPointY.root.visibility == View.VISIBLE) { + val y = getY() + if (TextUtils.isEmpty(y)) { + val hint = R.string.please_input_y +// val hint = +// if (isPlatCood) R.string.please_input_y else R.string.please_input_latitude + ToastUtils.showShort(hint) + return + } + } + val z = getZ() + if (TextUtils.isEmpty(z)) { + val hint=R.string.please_enter_elevation +// val hint = if (isLevelProject()) { +// R.string.please_enter_elevation +// } else { +// if (isPlatCood) R.string.please_input_z else R.string.please_enter_elevation +// } + ToastUtils.showShort(hint) + return + } + } + + if (isNewCreatePoint()) { + checkSameNamePoint(pointNum) { + success() + } + return + } + success() + } + + private fun checkSameNamePoint(pointNum: String, success: () -> Unit) { + lifecycleScope.launch { + val pointRecord = withContext(Dispatchers.IO) { + val pointDataSource = SurveyorDatabaseFactory.instance.getPointDataSource() + pointDataSource.findByNameSync(pointNum, getProjectId()) + } + + if (pointRecord != null) { + //点名重复,提示 + TipsFragment.tipsOnly( + supportFragmentManager, + this@CreateEditPointActvity, + this@CreateEditPointActvity, + "同一项目下点号不能重复,请修改后重试操作。" + ) + return@launch + } + success() + } + } + + /** + * 设置平面还是大地坐标 + */ + private fun setBaseUi() { + if (!isNewCreatePoint()) { + mBinding.tvSaveContinue.visibility = View.GONE + } + + if (isLevelProject()) { + mBinding.ilPointX.root.visibility = View.GONE + mBinding.ilPointY.root.visibility = View.GONE + + setBaseTitleHint( + R.string.x_coord, + R.string.y_coord, + R.string.elevation, + R.string.please_input_x, + R.string.please_input_y, + R.string.please_enter_elevation + ) + } else { + setBaseTitleHint( + R.string.x_coord, R.string.y_coord, R.string.z_coord, + R.string.please_input_x, R.string.please_input_y, R.string.please_input_z + ) +// setBaseTitleHint( +// R.string.longitude, +// R.string.latitude, +// R.string.elevation, +// R.string.please_input_longitude, +// R.string.please_input_latitude, +// R.string.please_enter_elevation +// ) + } + + setEditData() + } + + private fun setBaseTitleHint( + @StringRes xCoord: Int, yCoord: Int, zCoord: Int, + pleaseInputX: Int, pleaseInputY: Int, @StringRes pleaseInputZ: Int + ) { + mBinding.ilPointX.tvTitle.setText(xCoord) + mBinding.ilPointY.tvTitle.setText(yCoord) + mBinding.ilPointZ.tvTitle.setText(zCoord) + mBinding.ilPointX.editText.setHint(pleaseInputX) + mBinding.ilPointY.editText.setHint(pleaseInputY) + mBinding.ilPointZ.editText.setHint(pleaseInputZ) + } + + private fun setEditData() { + editPoint?.let { + mBinding.ilPointNum.editText.setText(it.getName()) + + setCoordData(it.getX(), it.getY(), it.getZ()) +// setCoordData(it.getLongitude(), it.getLatitude(), it.getZ()) + } + } + + private fun setCoordData(x: Double, y: Double, z: Double) { + mBinding.ilPointX.editText.setText(x.toString()) + mBinding.ilPointY.editText.setText(y.toString()) + mBinding.ilPointZ.editText.setText(z.toString()) + } + + override fun initData() { + + + } + + override fun initToolBar() { + initIntentData() + val title = if (editPoint == null) R.string.new_point else R.string.edit_point + setToolbarTitle(title) + super.initToolBar() + } + + private fun getProjectId() = intent.getStringExtra(BundleConstants.KEY_PROJECT_ID)!! + private fun getProjectType() = intent.getStringExtra(BundleConstants.KEY_PROJECT_TYPE)!! + + private fun getPointType() = intent.getStringExtra(KEY_POINT_TYPE)!! + + private fun getEditPoint() = + intent.getParcelableExtra(KEY_EDIT_POINT) + + private fun isNewCreatePoint() = editPoint == null + + private fun getPointNumber() = mBinding.ilPointNum.editText.text.toString().trim() + private fun getX() = mBinding.ilPointX.editText.text.toString().trim() + private fun getY() = mBinding.ilPointY.editText.text.toString().trim() + private fun getZ() = mBinding.ilPointZ.editText.text.toString().trim() + + private fun getXDouble(): Double { + return xToDouble(getX()) + } + + private fun getYDouble(): Double { + return xToDouble(getY()) + } + + private fun getZDouble(): Double { + return xToDouble(getZ()) + } + + private fun xToDouble(value: String): Double { + return if (TextUtils.isEmpty(value)) { + 0.0 + } else { + value.toDouble() + } + } + + private fun clearContent() { + mBinding.ilPointX.editText.setText("") + mBinding.ilPointY.editText.setText("") + mBinding.ilPointZ.editText.setText("") + mBinding.ilPointX.editText.requestFocus() + } + + private fun getNextPointNum(): String { + val pointNumber = getPointNumber() + val index = getIndexForTianjin(pointNumber) + val word = getWordForTianjin(pointNumber) + return "${word}${index + 1}" + } + + private fun getIndexForTianjin(pointName: String): Int { + val pre = "\\D*" + val data = pointName.replace(pre.toRegex(), "") + return try { + data.toInt() + } catch (e: NumberFormatException) { + 0 + } + } + + private fun getWordForTianjin(pointName: String): String { + val pre = "\\d*" + return pointName.replace(pre.toRegex(), "") + } + + private fun saveRecordForEdit(pointRecord: PointRecord, success: () -> Unit) { + lifecycleScope.launch(Dispatchers.IO) { + pointRecord.setX(getXDouble()) + pointRecord.setY(getYDouble()) + pointRecord.setZ(getZDouble()) + pointRecord.setName(getPointNumber()) + pointRecord.setCode("") + pointRecord.setRemarks("") + SurveyorDatabaseFactory.instance + .getPointDataSource() + .saveSync(pointRecord) + success() + } + } + + private fun saveRecordForCreate(success: (() -> Unit)? = null) { + lifecycleScope.launch(Dispatchers.IO) { + val pointRecord = createPointRecord( + getProjectId(), getPointType(), getPointNumber(), "", + getXDouble(), getYDouble(), getZDouble(), "", -1, + ) + SurveyorDatabaseFactory.instance + .getPointDataSource() + .save(pointRecord) + success?.invoke() + } + } + + @WorkerThread + private fun createPointRecord( + projectId: String, + pointType: String, + name: String, + code: String, + x: Double, + y: Double, + z: Double, + remarks: String, + orderIndex: Int, + ): PointRecord { + return PointRecord.point( + projectId, pointType, name, code, + x, y, z, remarks, + orderIndex.toLong() + ) + } + + private fun isLevelProject() = ProjectTypeValue.LEVEL == getProjectType() + +} \ No newline at end of file diff --git a/app/src/main/java/com/bingce/controlnetwork/newui/viewholder/PointListViewHolder.java b/app/src/main/java/com/bingce/controlnetwork/newui/viewholder/PointListViewHolder.java new file mode 100644 index 0000000..9e44d5e --- /dev/null +++ b/app/src/main/java/com/bingce/controlnetwork/newui/viewholder/PointListViewHolder.java @@ -0,0 +1,15 @@ +package com.bingce.controlnetwork.newui.viewholder; + +import androidx.recyclerview.widget.RecyclerView; + +import com.bingce.controlnetwork.databinding.NewItemPointListBinding; + + +public class PointListViewHolder extends RecyclerView.ViewHolder { + public final NewItemPointListBinding mBinding; + + public PointListViewHolder(NewItemPointListBinding binding) { + super(binding.getRoot()); + mBinding = binding; + } +} diff --git a/app/src/main/res/layout/activity_new_ui_create_edit_point.xml b/app/src/main/res/layout/activity_new_ui_create_edit_point.xml new file mode 100644 index 0000000..b6b0171 --- /dev/null +++ b/app/src/main/res/layout/activity_new_ui_create_edit_point.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/new_fragment_point_list.xml b/app/src/main/res/layout/new_fragment_point_list.xml new file mode 100644 index 0000000..b44cead --- /dev/null +++ b/app/src/main/res/layout/new_fragment_point_list.xml @@ -0,0 +1,34 @@ + + + + + + + +