| | |
| | | ContextCompat.getColor(context, this) |
| | | |
| | | //Drawable资源id转Drawable |
| | | fun Int.drawableIdToColorValue(context: Context): Drawable? = |
| | | fun Int.drawableIdToDrawable(context: Context): Drawable? = |
| | | ContextCompat.getDrawable(context, this) |
| | | |
| | | //扩展函数 显示统计数量 |
| | |
| | | import com.xw.yunwei.MyApp |
| | | import com.xw.yunwei.R |
| | | import com.xw.yunwei.model.AppVersionModel |
| | | import com.xw.yunwei.model.SwitchTabTask |
| | | import com.xw.yunwei.net.UserRepository |
| | | import org.greenrobot.eventbus.EventBus |
| | | import org.koin.core.component.inject |
| | | |
| | | class MainVM(application: Application) : BaseViewModel(application) { |
| | |
| | | val onClick = View.OnClickListener { |
| | | when (it.id) { |
| | | R.id.navWork -> changeSelectFragmentIndex(0) |
| | | R.id.navTask -> changeSelectFragmentIndex(1) |
| | | R.id.navTask -> { |
| | | changeSelectFragmentIndex(1) |
| | | EventBus.getDefault().post(SwitchTabTask(1)) |
| | | } |
| | | R.id.navMine -> changeSelectFragmentIndex(2) |
| | | } |
| | | } |
| | |
| | | import com.xw.yunwei.net.CommonRepository |
| | | import com.xw.yunwei.net.TaskRepository |
| | | import com.xw.yunwei.ui.MainActivity |
| | | import kotlinx.coroutines.delay |
| | | import okhttp3.MediaType.Companion.toMediaType |
| | | import okhttp3.MultipartBody |
| | | import okhttp3.RequestBody.Companion.asRequestBody |
| | |
| | | map["disposalImage"] = "${adapters[2].data.map { it.url }}" |
| | | map["taskTypeId"] = getSelectType() |
| | | taskRepository.handleVehicleAccident(map) |
| | | ToastUtilCommon.showSuc("提交成功,事故已归档") |
| | | |
| | | runOnMainThread { ToastUtilCommon.showSuc("提交成功,事故已归档") } |
| | | delay(500) |
| | | startActivity(MainActivity::class.java) |
| | | } |
| | | } |
| | |
| | | } else { |
| | | CommonDialog.showTipsDialog( |
| | | this, |
| | | "是否保存当前事故数据", |
| | | "保存当前已填写内容,更换车辆后将不用重新填写,是否保存?", |
| | | "不保存", |
| | | "保存", |
| | | leftBlock = { |
| | |
| | | import com.xw.yunwei.databinding.DialogCarFilterBinding |
| | | import com.xw.yunwei.extension.colorIdToColorValue |
| | | import com.xw.yunwei.extension.dpToPx |
| | | import com.xw.yunwei.extension.drawableIdToColorValue |
| | | import com.xw.yunwei.extension.drawableIdToDrawable |
| | | import com.xw.yunwei.model.CarModel |
| | | import com.xw.yunwei.model.FinishPage |
| | | import com.xw.yunwei.ui.task.create.CreateTaskActivity |
| | |
| | | binding.filter.setCompoundDrawables( |
| | | null, |
| | | null, |
| | | (if (viewModel.hadFilter()) R.drawable.svg_filter2 else R.drawable.svg_filter).drawableIdToColorValue( |
| | | (if (viewModel.hadFilter()) R.drawable.svg_filter2 else R.drawable.svg_filter).drawableIdToDrawable( |
| | | this |
| | | )?.apply { |
| | | setBounds( |
| | |
| | | if (split.size == 3) { |
| | | calendar.apply { |
| | | set(Calendar.YEAR, split[0].toInt()) |
| | | set(Calendar.MONTH, split[1].toInt()) |
| | | set(Calendar.MONTH, split[1].toInt() - 1) |
| | | set(Calendar.DAY_OF_MONTH, split[2].toInt()) |
| | | }.also { |
| | | holder.setText( |
| | |
| | | checkCould() |
| | | } |
| | | checkTrunkStatus(info.id.toString()) { |
| | | carInfo.postValue(info.copy(hadTrunkOpened = it.toString())) |
| | | hadTrunkOpened.postValue(it == 1) |
| | | } |
| | | } |
| | | } |
| | |
| | | import com.xw.yunwei.databinding.DialogCarFilterBinding |
| | | import com.xw.yunwei.extension.colorIdToColorValue |
| | | import com.xw.yunwei.extension.dpToPx |
| | | import com.xw.yunwei.extension.drawableIdToColorValue |
| | | import com.xw.yunwei.extension.drawableIdToDrawable |
| | | import com.xw.yunwei.extension.hideKeyboardAndClearFocus |
| | | import com.xw.yunwei.model.CarModel |
| | | import com.xw.yunwei.ui.work.AMapFragment |
| | |
| | | binding.filter.setCompoundDrawables( |
| | | null, |
| | | null, |
| | | (if (viewModel.hadFilter()) R.drawable.svg_filter2 else R.drawable.svg_filter).drawableIdToColorValue( |
| | | (if (viewModel.hadFilter()) R.drawable.svg_filter2 else R.drawable.svg_filter).drawableIdToDrawable( |
| | | this |
| | | )?.apply { |
| | | setBounds( |
| | |
| | | } |
| | | adapter.setOnItemChildClickListener { adapter, view, i -> |
| | | if (viewModel.pointsList.value!![i].hadCheckIn()) { |
| | | viewModel.showCheckInSuccessDialog(this, viewModel.pointsList.value!![i]) |
| | | //viewModel.showCheckInSuccessDialog(this, viewModel.pointsList.value!![i]) |
| | | startActivity(CruiseCheckInOperationActivity::class.java, |
| | | CruiseCheckInOperationActivity.getParams(viewModel.id,viewModel.pointsList.value!![i],false)) |
| | | return@setOnItemChildClickListener |
| | | } |
| | | viewModel.routePlanning(i) |
| | |
| | | import androidx.core.os.bundleOf |
| | | import androidx.core.view.isVisible |
| | | import com.amap.api.maps.AMap |
| | | import com.amap.api.maps.AMapUtils |
| | | import com.amap.api.maps.CameraUpdateFactory |
| | | import com.amap.api.maps.model.BitmapDescriptorFactory |
| | | import com.amap.api.maps.model.CameraPosition |
| | | import com.amap.api.maps.model.CircleOptions |
| | | import com.amap.api.maps.model.LatLng |
| | | import com.amap.api.maps.model.MarkerOptions |
| | | import com.amap.api.maps.model.Polyline |
| | | import com.amap.api.maps.model.PolylineOptions |
| | | import com.amap.api.navi.AMapNavi |
| | | import com.amap.api.navi.AMapNaviIndependentRouteListener |
| | | import com.amap.api.navi.AMapNaviListener |
| | |
| | | |
| | | //路线OverLay |
| | | var routeOverLay: RouteOverLay? = null |
| | | |
| | | //起点/终点回拉线 |
| | | private val leaderLines = mutableListOf<Polyline>() |
| | | |
| | | //上次计算路线起点定位 |
| | | var lastCalculateRouteStartLocation: AMapNaviLocation? = null |
| | |
| | | } |
| | | addToMap() |
| | | } |
| | | drawLeaderLines(path) |
| | | } |
| | | |
| | | //绘制起点/终点的回拉线(人到路线起点、路线终点到建筑内终点) |
| | | private fun drawLeaderLines(naviPath: AMapNaviPath) { |
| | | binding.amapView.map?.also { aMap -> |
| | | leaderLines.forEach { it.remove() } |
| | | leaderLines.clear() |
| | | |
| | | val coordList = naviPath.coordList ?: return |
| | | if (coordList.isEmpty()) return |
| | | val routeStart = LatLng(coordList.first().latitude, coordList.first().longitude) |
| | | val routeEnd = LatLng(coordList.last().latitude, coordList.last().longitude) |
| | | val lineColor = getResColor(com.xw.common.R.color.gray_6) |
| | | |
| | | viewModel.startPoint?.coordinate?.also { startLatLng -> |
| | | if (AMapUtils.calculateLineDistance(startLatLng, routeStart) > 5) { |
| | | aMap.addPolyline( |
| | | PolylineOptions() |
| | | .add(startLatLng, routeStart) |
| | | .width(13f) |
| | | .color(lineColor) |
| | | .setDottedLine(true) |
| | | )?.also { leaderLines.add(it) } |
| | | } |
| | | } |
| | | |
| | | viewModel.getEndPoint()?.coordinate?.also { endLatLng -> |
| | | if (AMapUtils.calculateLineDistance(routeEnd, endLatLng) > 5) { |
| | | aMap.addPolyline( |
| | | PolylineOptions() |
| | | .add(routeEnd, endLatLng) |
| | | .width(13f) |
| | | .color(lineColor) |
| | | .setDottedLine(true) |
| | | )?.also { leaderLines.add(it) } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | //初始化marker |
| | |
| | | |
| | | import android.os.Bundle |
| | | import android.view.View |
| | | import androidx.constraintlayout.widget.ConstraintLayout |
| | | import androidx.core.content.ContextCompat |
| | | import androidx.core.graphics.drawable.toDrawable |
| | | import androidx.core.os.bundleOf |
| | | import androidx.core.widget.addTextChangedListener |
| | | import androidx.recyclerview.widget.GridLayoutManager |
| | |
| | | import com.xw.yunwei.constants.Key |
| | | import com.xw.yunwei.databinding.ActivityCruiseCheckInOperationBinding |
| | | import com.xw.yunwei.extension.dpToPx |
| | | import com.xw.yunwei.extension.drawableIdToColorValue |
| | | import com.xw.yunwei.extension.drawableIdToDrawable |
| | | import com.xw.yunwei.model.CheckInMissionPointInfo |
| | | import com.xw.yunwei.ui.work.checkInMission.viewmodel.CruiseCheckInOperationViewModel |
| | | import com.xw.yunwei.ui.work.site.adapter.PictureOperationAdapter |
| | |
| | | } |
| | | ) |
| | | binding.tvLabel2.setCompoundDrawables( |
| | | if (viewModel.working.value != true) com.xw.common.R.drawable.svg_must.drawableIdToColorValue( |
| | | (if (viewModel.working.value != true) com.xw.common.R.drawable.svg_must.drawableIdToDrawable( |
| | | this |
| | | )?.apply { |
| | | ) else com.xw.common.R.color.color_transparent.drawableIdToDrawable(this))?.apply { |
| | | setBounds( |
| | | 0, |
| | | 0, |
| | | 8.dpToPx(this@CruiseCheckInOperationActivity), |
| | | 15.dpToPx(this@CruiseCheckInOperationActivity) |
| | | ) |
| | | } else null, |
| | | }, |
| | | null, |
| | | null, |
| | | null |
| | | ) |
| | | binding.flInput.layoutParams = |
| | | (binding.flInput.layoutParams as ConstraintLayout.LayoutParams).apply { |
| | | marginStart = |
| | | (if (viewModel.working.value == false) 28 else 20).dpToPx(this@CruiseCheckInOperationActivity) |
| | | marginEnd = |
| | | (if (viewModel.working.value == false) 28 else 20).dpToPx(this@CruiseCheckInOperationActivity) |
| | | } |
| | | } |
| | | |
| | | override fun setObservable() { |
| | |
| | | import androidx.core.os.bundleOf |
| | | import com.amap.api.location.AMapLocation |
| | | import com.amap.api.maps.AMap |
| | | import com.amap.api.maps.AMapUtils |
| | | import com.amap.api.maps.CameraUpdateFactory |
| | | import com.amap.api.maps.model.BitmapDescriptorFactory |
| | | import com.amap.api.maps.model.LatLng |
| | | import com.amap.api.maps.model.MarkerOptions |
| | | import com.amap.api.maps.model.Polyline |
| | | import com.amap.api.maps.model.PolylineOptions |
| | | import com.amap.api.navi.AMapNavi |
| | | import com.amap.api.navi.enums.TransportType |
| | | import com.amap.api.navi.enums.TravelStrategy |
| | | import com.amap.api.navi.model.AMapCalcRouteResult |
| | | import com.amap.api.navi.model.AMapNaviPath |
| | | import com.amap.api.navi.model.AMapTravelInfo |
| | | import com.amap.api.navi.model.NaviPoi |
| | | import com.amap.api.navi.model.RouteOverlayOptions |
| | |
| | | |
| | | //路线OverLay |
| | | var routeOverLay: RouteOverLay? = null |
| | | |
| | | //起点/终点回拉线 |
| | | private val leaderLines = mutableListOf<Polyline>() |
| | | |
| | | override fun getBindingVariable() = BR.viewModel |
| | | override fun onCreate(savedInstanceState: Bundle?) { |
| | |
| | | } |
| | | runOnUiThread { |
| | | routeOverLay?.zoomToSpan() |
| | | drawLeaderLines(naviPath) |
| | | initMarker() |
| | | } |
| | | } |
| | | } |
| | | |
| | | //绘制起点/终点的回拉线(人到路线起点、路线终点到建筑内终点) |
| | | private fun drawLeaderLines(naviPath: AMapNaviPath) { |
| | | binding.mapView.map?.also { aMap -> |
| | | leaderLines.forEach { it.remove() } |
| | | leaderLines.clear() |
| | | |
| | | val coordList = naviPath.coordList ?: return |
| | | if (coordList.isEmpty()) return |
| | | val routeStart = LatLng(coordList.first().latitude, coordList.first().longitude) |
| | | val routeEnd = LatLng(coordList.last().latitude, coordList.last().longitude) |
| | | val lineColor = ContextCompat.getColor(this, com.xw.common.R.color.gray_6) |
| | | |
| | | viewModel.startPoint?.coordinate?.also { startLatLng -> |
| | | if (AMapUtils.calculateLineDistance(startLatLng, routeStart) > 5) { |
| | | aMap.addPolyline( |
| | | PolylineOptions() |
| | | .add(startLatLng, routeStart) |
| | | .width(13f) |
| | | .color(lineColor) |
| | | .setDottedLine(true) |
| | | )?.also { leaderLines.add(it) } |
| | | } |
| | | } |
| | | |
| | | viewModel.getRoutePlanningEndPoint()?.coordinate?.also { endLatLng -> |
| | | if (AMapUtils.calculateLineDistance(routeEnd, endLatLng) > 5) { |
| | | aMap.addPolyline( |
| | | PolylineOptions() |
| | | .add(routeEnd, endLatLng) |
| | | .width(13f) |
| | | .color(lineColor) |
| | | .setDottedLine(true) |
| | | )?.also { leaderLines.add(it) } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | //初始化marker |
| | | private fun initMarker() { |
| | | binding.mapView.map?.also { |
| | |
| | | import android.view.animation.DecelerateInterpolator |
| | | import android.widget.LinearLayout |
| | | import androidx.core.view.isVisible |
| | | import androidx.core.view.updatePadding |
| | | import androidx.databinding.DataBindingUtil |
| | | import androidx.recyclerview.widget.LinearLayoutManager |
| | | import com.afollestad.materialdialogs.MaterialDialog |
| | |
| | | import com.xw.yunwei.databinding.DialogSiteFilterBinding |
| | | import com.xw.yunwei.extension.colorIdToColorValue |
| | | import com.xw.yunwei.extension.dpToPx |
| | | import com.xw.yunwei.extension.drawableIdToColorValue |
| | | import com.xw.yunwei.extension.drawableIdToDrawable |
| | | import com.xw.yunwei.extension.hideKeyboardAndClearFocus |
| | | import com.xw.yunwei.model.SiteModel |
| | | import com.xw.yunwei.ui.work.AMapFragment |
| | |
| | | binding.filter.setCompoundDrawables( |
| | | null, |
| | | null, |
| | | (if (viewModel.hadFilter()) R.drawable.svg_filter2 else R.drawable.svg_filter).drawableIdToColorValue( |
| | | (if (viewModel.hadFilter()) R.drawable.svg_filter2 else R.drawable.svg_filter).drawableIdToDrawable( |
| | | this |
| | | )?.apply { |
| | | setBounds( |
| | |
| | | GlideEngine.createGlideEngine().load( |
| | | imageView, |
| | | item, |
| | | 0, 0, |
| | | com.xw.common.R.mipmap.icon_default5, com.xw.common.R.mipmap.icon_default5, |
| | | 4f |
| | | ) |
| | | } |
| | |
| | | android:id="@+id/tv_label3" |
| | | android:layout_width="wrap_content" |
| | | android:layout_height="wrap_content" |
| | | android:layout_marginStart="@dimen/dp_20" |
| | | android:layout_marginStart="@dimen/dp_28" |
| | | android:layout_marginTop="@dimen/dp_20" |
| | | android:text="现场照片" |
| | | android:textColor="@color/gray_9" |
| | |
| | | android:id="@+id/rv_list" |
| | | android:layout_width="0dp" |
| | | android:layout_height="wrap_content" |
| | | android:layout_marginHorizontal="@dimen/dp_17" |
| | | android:layout_marginHorizontal="@dimen/dp_25" |
| | | android:layout_marginTop="@dimen/dp_9" |
| | | app:layout_constraintEnd_toEndOf="parent" |
| | | app:layout_constraintStart_toStartOf="parent" |
| | |
| | | singleTipsDialogMap[context] = dialog |
| | | dialog.show() |
| | | dialog.window?.setGravity(Gravity.CENTER) |
| | | dialog.window?.setWindowAnimations(R.style.AnimLeft) |
| | | // dialog.window?.setWindowAnimations(R.style.AnimLeft) |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | dialog.show() |
| | | dialog.window?.setGravity(Gravity.CENTER) |
| | | dialog.window?.setWindowAnimations(R.style.AnimLeft) |
| | | // dialog.window?.setWindowAnimations(R.style.AnimLeft) |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | dialog.show() |
| | | dialog.window?.setGravity(Gravity.CENTER) |
| | | dialog.window?.setWindowAnimations(R.style.AnimLeft) |
| | | // dialog.window?.setWindowAnimations(R.style.AnimLeft) |
| | | } |
| | | } |
| | | |
| | |
| | | var url: String = "", |
| | | var localPath: String = "", |
| | | var type: String = "", // video ic_notice audio |
| | | var placeholder: Int = R.mipmap.icon_default5, |
| | | var error: Int = R.mipmap.icon_default5, |
| | | ){ |
| | | override fun toString(): String { |
| | | return "FileSelectBean(url='$url', localPath='$localPath', type='$type')" |
| | |
| | | val url = item.localPath |
| | | Glide.with(imageView.context) |
| | | .load(if (url.startsWith("content://")) Uri.parse(url) else url) |
| | | .placeholder(R.mipmap.icon_default).error(R.mipmap.icon_default) |
| | | .placeholder(item.placeholder).error(it.error) |
| | | .format(DecodeFormat.PREFER_RGB_565).into(imageView) |
| | | } |
| | | |
| | | item.url.isNotEmpty() -> { |
| | | Glide.with(imageView.context).load(item.url) |
| | | .placeholder(R.mipmap.icon_default).error(R.mipmap.icon_default) |
| | | .placeholder(item.placeholder).error(it.error) |
| | | .format(DecodeFormat.PREFER_RGB_565).into(imageView) |
| | | } |
| | | |
| | |
| | | <?xml version="1.0" encoding="utf-8"?> |
| | | <shape xmlns:android="http://schemas.android.com/apk/res/android"> |
| | | <corners android:radius="8dp" /> |
| | | <solid android:color="#000000" /> |
| | | <solid android:color="#b8000000" /> |
| | | </shape> |