Untitled
unknown
kotlin
4 years ago
21 kB
18
Indexable
package com.treniti.fishtools.fragment.mapper
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.ViewModelProvider
import com.google.gson.GsonBuilder
import com.treniti.fishtools.CastConverterDialog
import com.treniti.fishtools.R
import com.treniti.fishtools.activity.MapperActivity
import com.treniti.fishtools.entity.converter.ConverterEntity
import com.treniti.fishtools.entity.mapper.BottomFeature
import com.treniti.fishtools.entity.mapper.MapCellEntity
import com.treniti.fishtools.entity.mapper.MapEntity
import com.treniti.fishtools.viewmodel.MapViewModel
import kotlin.math.cos
class CreateMarkerCastStep3Fragment(
private val data: MutableList<MapCellEntity>,
private val lastRetrieve: Int,
private val converter: ConverterEntity,
private val direction: Int,
private val pole: String,
private val mapID: String
) : Fragment() {
private lateinit var lastRetrieveValTextView: TextView
private lateinit var countValTextView: TextView
private lateinit var depthValTextView: TextView
private lateinit var maxDepthValTextView: TextView
private lateinit var distanceValTextView: TextView
private lateinit var converterTextView: TextView
private var minDepth = 0.0
private var maxDepth = 0.0
private var totalRetrieve = 0
private lateinit var btnConverter: ImageView
private var currentDistance = -1
private var cDistance = -1
private lateinit var btnBack: ImageView
private lateinit var btnSave: LinearLayout
private lateinit var mapViewModel: MapViewModel
private var mainList: MutableList<MutableList<MapCellEntity>> = mutableListOf()
private lateinit var myMap: MapEntity
private var mCenter: Int = -1
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_create_marker_cast_step3, container, false)
initView(view)
data.removeLast()
converterTextView.text = converter.converterTitle
mapViewModel = ViewModelProvider(this).get(MapViewModel::class.java)
mapViewModel.getMap(mapID).observe(viewLifecycleOwner, { data ->
myMap = data
mCenter = myMap.currentDegree
getListFromJson()
})
for (item in data) {
if (item.converterCount.toInt() != -1) {
totalRetrieve += item.converterCount.toInt()
}
if (item.depthExactValue != null) {
if (minDepth == 0.0) {
minDepth = item.depthExactValue!!
}
if (maxDepth == 0.0) {
maxDepth = item.depthExactValue!!
}
if (item.depthExactValue!! < minDepth) {
minDepth = item.depthExactValue!!
}
if (item.depthExactValue!! > maxDepth) {
maxDepth = item.depthExactValue!!
}
}
}
totalRetrieve += lastRetrieve
currentDistance = ((converter.totalValue * totalRetrieve.toDouble()) / 100).toInt()
cDistance = ((converter.totalValue * totalRetrieve.toDouble()) / 100).toInt()
data[0].converterCount = totalRetrieve.toDouble()
data[0].distance = currentDistance
distanceValTextView.text =
"${((converter.totalValue * totalRetrieve.toDouble()) / 100).toInt()}${requireContext().getString(R.string.value_m)}"
depthValTextView.text = minDepth.toString()
maxDepthValTextView.text = maxDepth.toString()
lastRetrieveValTextView.text = lastRetrieve.toString()
countValTextView.text = data.size.toString()
btnConverter.setOnClickListener {
val ddialog = CastConverterDialog(
requireContext(), requireFragmentManager(), (context as MapperActivity),
converter, totalRetrieve.toDouble(), viewLifecycleOwner
)
ddialog.initDialog()
}
btnBack.setOnClickListener {
requireFragmentManager().popBackStack()
}
btnSave.setOnClickListener {
data.forEachIndexed { index, mapCellEntity ->
if (index != 0){
val d = ((converter.totalValue * mapCellEntity.converterCount) / 100).toInt()
cDistance -= d
mapCellEntity.distance = cDistance
}
}
for (marker in data) {
val distance = ((converter.totalValue * marker.converterCount) / 100).toInt()
var depth = 0.0
if (marker.depthExactValue != null){
depth = marker.depthExactValue!!
}
getDotPosition(marker.distance!!, depth, marker.bottomFeature)
}
requireFragmentManager().popBackStack(
"MapFragment",
FragmentManager.POP_BACK_STACK_INCLUSIVE
)
requireFragmentManager().popBackStack(
"CreateMarkerCastStep1Fragment",
FragmentManager.POP_BACK_STACK_INCLUSIVE
)
requireFragmentManager().popBackStack(
"CreateMarkerCastStep2Fragment",
FragmentManager.POP_BACK_STACK_INCLUSIVE
)
requireFragmentManager().popBackStack(
"CreateMarkerCastStep3Fragment",
FragmentManager.POP_BACK_STACK_INCLUSIVE
)
requireFragmentManager().beginTransaction()
.setCustomAnimations(
R.anim.slide_in,
R.anim.fade_out,
R.anim.fade_in,
R.anim.slide_out
)
.addToBackStack("MapFragment")
.replace(R.id.mapperFrameLayout, MapFragment(mapID)).commit()
}
return view
}
private fun getDotPosition(distance: Int, depth: Double, bottomFeature: BottomFeature?) {
val mapCenter = mCenter
var mapMin = mapCenter - 90
var mapMax = mapCenter + 90
if (mapMin < 0) {
mapMin += 360
}
if (mapMax > 360) {
mapMax -= 360
}
var newDotDegree = -1
if (direction < mapCenter) {
newDotDegree = mapCenter - direction
} else {
newDotDegree = (mapMax - mapCenter) - (mapMax - direction)
}
val a = cos(Math.toRadians(newDotDegree.toDouble()))
val positionVertical = distance * a
val r = 180 - (90 + newDotDegree)
val c = cos(Math.toRadians(r.toDouble()))
var positionHorizontal = 0.0
var count = -1
var position = -1
if (direction < mapCenter) {
count = mainList[0].size / 2
positionHorizontal = distance * c
position = (count - positionHorizontal).toInt()
} else {
count = mainList[0].size
positionHorizontal = distance * c
val aaa = count - positionHorizontal.toInt()
if (aaa > positionHorizontal){
position = aaa
} else {
position = positionHorizontal.toInt()
}
}
val data = addDepths(
position,
distance,
depth,
mainList,
positionVertical.toInt(),
bottomFeature
)
if (data != null) {
val gson = GsonBuilder()
.disableHtmlEscaping()
.create()
myMap.map = gson.toJson(data.asReversed())
}
mapViewModel.update(myMap)
}
private fun getListFromJson() {
mainList.clear()
val gson = GsonBuilder()
.disableHtmlEscaping()
.create()
val list = gson.fromJson(myMap.map!!, Array<Array<MapCellEntity>>::class.java)
val newList: MutableList<MutableList<MapCellEntity>> = mutableListOf()
for (item in list) {
val ii: MutableList<MapCellEntity> = mutableListOf()
for (itm in item) {
ii.add(itm)
}
newList.add(ii)
}
mainList.addAll(newList)
}
private fun addDepths(
dotPositionHorizontal: Int,
ddd: Int,
depth: Double,
data: MutableList<MutableList<MapCellEntity>>,
positionVertical: Int,
bottomFeature: BottomFeature?
): MutableList<MutableList<MapCellEntity>>? {
var distance = ddd
var countNewCellsVertical = 0
var countNewCellsHorizontal = 0
val countCellsVertical = data.size
val countCellsHorizontal = data[0].size
val needCells = (positionVertical + ((ddd / 100.0) * 10))
var needResizeHor = false
val ab = dotPositionHorizontal - ((ddd / 100.0) * 10)
val bc = (dotPositionHorizontal + ((ddd / 100.0) * 10))
if (ab < 0) {
needResizeHor = true
}
if (bc > countCellsHorizontal - 1) {
needResizeHor = true
}
Log.d("TestNeedCellsHor", ab.toString())
Log.d("TestNeedCellsHor", bc.toString())
if (needCells > countCellsVertical) {
countNewCellsVertical =
((positionVertical + (ddd / 100.0) * 10) - countCellsVertical).toInt()
}
Log.d("TestSizeMap", "NeedCells: $needCells")
Log.d("TestSizeMap", "ddd: $ddd")
Log.d("TestSizeMap", "PositionVertical: $positionVertical")
Log.d("TestSizeMap", "CountCellsVertical: $countCellsVertical")
Log.d("TestSizeMap", "CountNewCellsVertical: $countNewCellsVertical")
if (needResizeHor) {
if (dotPositionHorizontal - ((ddd / 100.0) * 10).toInt() < 0) {
val a = countCellsHorizontal - dotPositionHorizontal + ((ddd / 100.0) * 10).toInt()
countNewCellsHorizontal = a - countCellsHorizontal
}
if (dotPositionHorizontal + ((ddd / 100.0) * 10).toInt() > countCellsHorizontal - 1) {
val a = countCellsHorizontal + dotPositionHorizontal + ((ddd / 100.0) * 10).toInt()
countNewCellsHorizontal = a - countCellsHorizontal
}
}
Log.d("TestHorizontalSize", "CountNewCellsHorizontal: $countNewCellsHorizontal")
Log.d("TestHorizontalSize", "DotPositionHorizontal: $dotPositionHorizontal")
if (countNewCellsVertical != 0) {
for (i in 0..countNewCellsVertical) {
Log.d("TestSizeMap", "ArrayItterable: $i")
val dataList: MutableList<MapCellEntity> = mutableListOf()
for (ih in 0 until data[0].size) {
dataList.add(MapCellEntity(mutableListOf(), null, false, null, 0, "", null))
}
data.add(dataList)
}
}
if (countNewCellsHorizontal != 0) {
for (i in data) {
for (ih in 0 until countNewCellsHorizontal) {
i.add(0, MapCellEntity(mutableListOf(), null, false, null, 0, "", null))
i.add(MapCellEntity(mutableListOf(), null, false, null, 0, "", null))
}
}
}
Log.d("TestSizeMap", "DataNewSize: ${data.size}")
Log.d("TestSizeMap", "DataNewHorizontalSize: ${data[0].size}")
distance = positionVertical - 1
Log.d("adadgkglfd", distance.toString())
val reversedData = data.asReversed()
reversedData[distance][(dotPositionHorizontal + countNewCellsHorizontal)].bottomFeature =
bottomFeature
if (depth != 0.0) {
reversedData[distance][(dotPositionHorizontal + countNewCellsHorizontal)].isExactValue =
true
reversedData[distance][(dotPositionHorizontal + countNewCellsHorizontal)].depthExactValue =
depth
reversedData[distance][(dotPositionHorizontal + countNewCellsHorizontal)].direction =
direction
reversedData[distance][(dotPositionHorizontal + countNewCellsHorizontal)].distance = ddd
reversedData[distance][(dotPositionHorizontal + countNewCellsHorizontal)].pole = pole
reversedData[distance][(dotPositionHorizontal + countNewCellsHorizontal)].converter =
converter
reversedData[distance][(dotPositionHorizontal + countNewCellsHorizontal)].converterCount =
currentDistance.toDouble()
val childArray: MutableList<String> = mutableListOf()
val countOfCell = (ddd * 0.10).toInt()
if (dotPositionHorizontal - countOfCell > -1 || dotPositionHorizontal + countOfCell <= data[0].size || distance - countOfCell > -1 || distance + countOfCell <= data.size) {
if (ddd >= 30) {
val minPositionHorizontal =
(dotPositionHorizontal + countNewCellsHorizontal) - countOfCell
val maxPositionHorizontal =
dotPositionHorizontal + countOfCell + countNewCellsHorizontal
val minPositionVertical = distance - countOfCell
val maxPositionVertical = distance + countOfCell
Log.d("qwerty", minPositionHorizontal.toString())
Log.d("qwerty", maxPositionHorizontal.toString())
var currentPositionVertical = maxPositionVertical
var currentPositionHorizontal = maxPositionHorizontal
currentPositionVertical = positionVertical - 1
currentPositionHorizontal = minPositionHorizontal
while (currentPositionHorizontal < (dotPositionHorizontal + countNewCellsHorizontal) && currentPositionVertical < maxPositionVertical) {
var pos = currentPositionHorizontal
while (pos <= (dotPositionHorizontal + countNewCellsHorizontal)) {
reversedData[currentPositionVertical][pos].depth.add(depth)
var size = reversedData[currentPositionVertical][pos].depth.size
if (size > 1) {
Log.d("TestDot", "1")
}
childArray.add(reversedData[currentPositionVertical][pos].cellID)
pos++
}
currentPositionHorizontal++
currentPositionVertical++
}
currentPositionVertical = positionVertical - 1
currentPositionHorizontal = maxPositionHorizontal
while (currentPositionHorizontal > (dotPositionHorizontal + countNewCellsHorizontal) && currentPositionVertical < maxPositionVertical) {
var pos = currentPositionHorizontal
while (pos > (dotPositionHorizontal + countNewCellsHorizontal)) {
reversedData[currentPositionVertical][pos].depth.add(depth)
var size = reversedData[currentPositionVertical][pos].depth.size
if (size > 1) {
Log.d("TestDot", "2")
}
childArray.add(reversedData[currentPositionVertical][pos].cellID)
pos -= 1
}
currentPositionHorizontal -= 1
currentPositionVertical++
}
//wdas
currentPositionVertical = positionVertical - 1
currentPositionHorizontal = minPositionHorizontal
while (currentPositionHorizontal < (dotPositionHorizontal + countNewCellsHorizontal) && currentPositionVertical > minPositionVertical) {
var pos = currentPositionHorizontal
if (currentPositionVertical != positionVertical - 1) {
while (pos <= (dotPositionHorizontal + countNewCellsHorizontal)) {
reversedData[currentPositionVertical][pos].depth.add(depth)
var size = reversedData[currentPositionVertical][pos].depth.size
if (size > 1) {
Log.d("TestDot", "3")
}
childArray.add(reversedData[currentPositionVertical][pos].cellID)
pos++
}
}
currentPositionHorizontal++
currentPositionVertical -= 1
}
currentPositionVertical = positionVertical - 1
currentPositionHorizontal = maxPositionHorizontal
while (currentPositionHorizontal > (dotPositionHorizontal + countNewCellsHorizontal) && currentPositionVertical > minPositionVertical) {
var pos = currentPositionHorizontal
if (currentPositionVertical != positionVertical - 1) {
while (pos > (dotPositionHorizontal + countNewCellsHorizontal)) {
reversedData[currentPositionVertical][pos].depth.add(depth)
var size = reversedData[currentPositionVertical][pos].depth.size
if (size > 1) {
Log.d("TestDot", "4")
}
childArray.add(reversedData[currentPositionVertical][pos].cellID)
pos -= 1
}
}
currentPositionHorizontal -= 1
currentPositionVertical -= 1
}
} else {
val minPositionHorizontal =
(dotPositionHorizontal + countNewCellsHorizontal) - countOfCell
val maxPositionHorizontal =
dotPositionHorizontal + countOfCell + countNewCellsHorizontal
val minPositionVertical = distance - countOfCell
val maxPositionVertical = distance + countOfCell
var currentPositionVertical = maxPositionVertical
var currentPositionHorizontal = maxPositionHorizontal
currentPositionVertical = minPositionVertical
currentPositionHorizontal = minPositionHorizontal
while (currentPositionVertical <= maxPositionVertical) {
while (currentPositionHorizontal <= maxPositionHorizontal) {
reversedData[currentPositionVertical][currentPositionHorizontal].depth.add(
depth
)
childArray.add(reversedData[currentPositionVertical][currentPositionHorizontal].cellID)
currentPositionHorizontal++
}
currentPositionHorizontal = minPositionHorizontal
currentPositionVertical++
}
}
reversedData[distance][(dotPositionHorizontal + countNewCellsHorizontal)].childCells.clear()
reversedData[distance][(dotPositionHorizontal + countNewCellsHorizontal)].childCells.addAll(
childArray
)
return reversedData
} else {
Toast.makeText(requireContext(), "Err", Toast.LENGTH_SHORT).show()
return null
}
} else {
return reversedData
}
}
private fun initView(view: View) {
converterTextView = view.findViewById(R.id.converterTextView)
btnSave = view.findViewById(R.id.btnSave)
btnBack = view.findViewById(R.id.btnBack)
btnConverter = view.findViewById(R.id.btnConverter)
lastRetrieveValTextView = view.findViewById(R.id.lastRetrieveValTextView)
countValTextView = view.findViewById(R.id.countValTextView)
depthValTextView = view.findViewById(R.id.depthValTextView)
maxDepthValTextView = view.findViewById(R.id.maxDepthValTextView)
distanceValTextView = view.findViewById(R.id.distanceValTextView)
}
}Editor is loading...