SpaceDetailActivity.kt 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. package com.sybotan.android.demo.activities
  2. import android.content.Context
  3. import android.content.Intent
  4. import android.graphics.Color
  5. import android.os.Bundle
  6. import android.text.TextUtils
  7. import android.util.Log
  8. import android.widget.ImageView
  9. import android.widget.TextView
  10. import androidx.core.widget.NestedScrollView
  11. import androidx.recyclerview.widget.LinearLayoutManager
  12. import androidx.recyclerview.widget.RecyclerView
  13. import com.bumptech.glide.Glide
  14. import com.sybotan.android.demo.R
  15. import com.sybotan.android.demo.adapter.StaticInfoAdapter
  16. import cn.sagacloud.android.cadengine.types.Photos
  17. import cn.sagacloud.android.cadengine.types.TunableSpace
  18. import com.framework.mvvm.model.db.entity.task.Infos
  19. import com.google.gson.Gson
  20. import com.google.gson.reflect.TypeToken
  21. import com.sybotan.android.demo.retrofit.Constant
  22. import com.sybotan.android.demo.tools.LocalDataOperation
  23. import com.sybotan.android.demo.tools.PictureUtils
  24. import com.sybotan.android.demo.tools.ToastUtils
  25. import com.sybotan.android.demo.tools.UploadImage
  26. import com.sybotan.android.demo.viewmodel.SpaceDetailVM
  27. import com.yuyh.library.imgsel.ImageLoader
  28. import com.yuyh.library.imgsel.ImgSelConfig
  29. import io.reactivex.ObservableEmitter
  30. import org.json.JSONException
  31. import org.json.JSONObject
  32. import java.io.File
  33. import java.util.HashMap
  34. /**
  35. * Created by lihao.
  36. * Date: 2021/9/27
  37. */
  38. class SpaceDetailActivity : BaseActivity() {
  39. private lateinit var info: Infos
  40. /** 建筑Id */
  41. private lateinit var buildingId: String
  42. /** 楼层Id */
  43. private lateinit var floorId: String
  44. /** 项目Id */
  45. private lateinit var projectId: String
  46. private lateinit var spaceId: String
  47. private lateinit var space: TunableSpace
  48. val beans: ArrayList<Photos> = ArrayList()
  49. //选择图片
  50. private val REQUEST_CODE_PIC = 0X102
  51. /** viewModel */
  52. lateinit var spaceVM: SpaceDetailVM
  53. var list = ArrayList<Infos>()
  54. // 自定义图片加载器
  55. private val loader =
  56. ImageLoader { context: Context?, path: String?, imageView: ImageView? ->
  57. Glide.with(
  58. context
  59. ).load(path).into(imageView)
  60. }
  61. private lateinit var recycler: RecyclerView
  62. private lateinit var root: NestedScrollView
  63. private lateinit var btnSubmit: TextView
  64. override fun onCreate(savedInstanceState: Bundle?) {
  65. super.onCreate(savedInstanceState)
  66. setContentView(R.layout.activity_space_detail)
  67. initView()
  68. initData()
  69. return
  70. } // Function onCreate()
  71. private lateinit var staticInfoAdapter: StaticInfoAdapter
  72. private fun initData() {
  73. staticInfoAdapter.setOnAddPic {
  74. addPic()
  75. this.info = it
  76. }
  77. recycler.adapter = staticInfoAdapter
  78. spaceVM = SpaceDetailVM(this.application, { name, params ->
  79. when (name) {
  80. SpaceDetailVM.SPACE_INFO -> {
  81. list.addAll(params as ArrayList<Infos>)
  82. staticInfoAdapter.notifyDataSetChanged()
  83. }
  84. SpaceDetailVM.SPACE_INFOS -> {
  85. if (params != null) {
  86. staticInfoAdapter.hashMap = params as HashMap<String, Any>?
  87. if (staticInfoAdapter.hashMap != null && staticInfoAdapter.hashMap.get("Photos") != null) {
  88. val infoList = Gson().fromJson<List<Photos>>(
  89. staticInfoAdapter.hashMap.get("Photos").toString(),
  90. object : TypeToken<List<Photos?>?>() {}.type
  91. )
  92. beans.addAll(infoList)
  93. }
  94. }
  95. }
  96. }
  97. }, this, buildingId, floorId, projectId)
  98. spaceVM.getInfosConfig(spaceId)
  99. }
  100. private fun initView() {
  101. val floor = intent.getBundleExtra("floor")!!
  102. buildingId = floor.getString("buildingId")!!
  103. floorId = floor.getString("floorId")!!
  104. projectId = floor.getString("projectId")!!
  105. spaceId = floor.getString("spaceId")!!
  106. space = floor.getParcelable("space")!!
  107. recycler = findViewById(R.id.recycler)
  108. root = findViewById(R.id.root)
  109. btnSubmit = findViewById(R.id.btnSubmit)
  110. recycler.layoutManager = LinearLayoutManager(this)
  111. staticInfoAdapter = StaticInfoAdapter(this, list)
  112. btnSubmit.setOnClickListener {
  113. spaceVM.refreshObject(space, staticInfoAdapter.hashMap)
  114. }
  115. findViewById<ImageView>(R.id.back).setOnClickListener { finish() }
  116. }
  117. private fun addPic() {
  118. val config: ImgSelConfig = ImgSelConfig.Builder(this, loader) // 是否多选
  119. .multiSelect(true) // 是否记住上次选中记录, 仅当multiSelect为true的时候配置,默认为true
  120. .rememberSelected(false) // 确定按钮文字颜色
  121. .btnTextColor(Color.WHITE) // 使用沉浸式状态栏
  122. .statusBarColor(resources.getColor(R.color.blue_2E3679)) // 返回图标ResId
  123. .backResId(R.mipmap.back_gray).title("选择图片").titleColor(Color.WHITE).titleBgColor(
  124. resources.getColor(R.color.blue_2E3679)
  125. ) // .allImagesText("All Images")
  126. .needCrop(false).cropSize(1, 1, 200, 200) // 第一个是否显示相机
  127. .needCamera(true) // 最大选择图片数量
  128. .build()
  129. //选择图片activity
  130. //选择图片activity
  131. Repair_ImgSelActivity.startActivity(this, config, REQUEST_CODE_PIC)
  132. }
  133. override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
  134. super.onActivityResult(requestCode, resultCode, data)
  135. if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_PIC) {
  136. if (data != null) {
  137. val pathList: List<String>? =
  138. data.getStringArrayListExtra(Repair_ImgSelActivity.INTENT_RESULT)
  139. doPicDatas(pathList)
  140. }
  141. }
  142. }
  143. private fun doPicDatas(pathList: List<String>?) {
  144. LocalDataOperation.getInstance().dealLocalData<Photos>(this) { name, params ->
  145. when (name) {
  146. LocalDataOperation.SHOW_DIALOG_IN_MAIN -> ToastUtils.showMyToast("图片上传中")
  147. LocalDataOperation.DEAL_IO_DATA -> {
  148. val emitter =
  149. params as ObservableEmitter<String>
  150. for (s in pathList!!) {
  151. Log.e("已选择图片的路径为-----", s!!)
  152. val path: String =
  153. PictureUtils.compressImage(s, getOfflineImagePath(), 100)
  154. val picFile = File(path)
  155. if (picFile.exists()) {
  156. val key = picFile.name
  157. if (isHaveInternet()) {
  158. val url: String = Constant.ServerImgIPUp + key
  159. val str = UploadImage.uploadFiles(picFile, url)
  160. if (!TextUtils.isEmpty(str)) {
  161. var resultString: String? = null
  162. try {
  163. val `object` = JSONObject(str)
  164. resultString = `object`.getString("Result")
  165. } catch (e: JSONException) {
  166. e.printStackTrace()
  167. }
  168. if ("success" == resultString) {
  169. val photos =
  170. Photos()
  171. photos.itemType = 0
  172. photos.path = path
  173. photos.key = key
  174. beans.add(photos)
  175. }
  176. }
  177. } else {
  178. val photos =
  179. Photos()
  180. photos.itemType = 0
  181. photos.path = path
  182. photos.key = key
  183. beans.add(photos)
  184. }
  185. }
  186. }
  187. emitter.onNext("")
  188. }
  189. LocalDataOperation.DEAL_DATA_NEXT -> {
  190. ToastUtils.showMyToast("图片上传完毕")
  191. staticInfoAdapter.hashMap.put("Photos", Gson().toJson(beans))
  192. staticInfoAdapter.valueList.clear()
  193. staticInfoAdapter.notifyDataSetChanged()
  194. }
  195. LocalDataOperation.DEAL_DATA_ERROR -> {
  196. ToastUtils.showMyToast("图片上传失败")
  197. staticInfoAdapter.hashMap.put("Photos", Gson().toJson(beans))
  198. staticInfoAdapter.valueList.clear()
  199. staticInfoAdapter.notifyDataSetChanged()
  200. }
  201. else -> {
  202. }
  203. }
  204. }
  205. }
  206. }