diff --git a/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt index f4e49bd..ae7c91b 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt @@ -60,10 +60,13 @@ holder.deviceNumView.text = String.format("管理设备数:${rowsBean.deviceCount}") //绑定事件 - if (listener != null) { - holder.itemView.setOnClickListener { - listener!!.onClicked(position) - } + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + holder.itemView.setOnLongClickListener { + listener?.onLongClicked(position) + true } } @@ -77,6 +80,8 @@ interface OnItemClickListener { fun onClicked(position: Int) + + fun onLongClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt index f4e49bd..ae7c91b 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt @@ -60,10 +60,13 @@ holder.deviceNumView.text = String.format("管理设备数:${rowsBean.deviceCount}") //绑定事件 - if (listener != null) { - holder.itemView.setOnClickListener { - listener!!.onClicked(position) - } + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + holder.itemView.setOnLongClickListener { + listener?.onLongClicked(position) + true } } @@ -77,6 +80,8 @@ interface OnItemClickListener { fun onClicked(position: Int) + + fun onLongClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index c41379a..76fe75b 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -1,28 +1,29 @@ package com.casic.smarttube.fragment -import android.view.View import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager import com.casic.smarttube.R import com.casic.smarttube.adapter.OverviewGroupListAdapter import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.view.GroupDeviceActivity import com.casic.smarttube.vm.ProjectGroupViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.widget.dialog.AlertInputDialog import kotlinx.android.synthetic.main.fragment_overview.* -import kotlinx.android.synthetic.main.include_base_title.* import kotlinx.android.synthetic.main.include_empty_view.* class OverviewFragment : KotlinBaseFragment() { private lateinit var groupViewModel: ProjectGroupViewModel + private var dataBeans: MutableList = ArrayList() private lateinit var groupListAdapter: OverviewGroupListAdapter + private var clickedPosition = 0 override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - leftBackView.visibility = View.GONE titleView.text = "概览" } @@ -36,6 +37,11 @@ } override fun initEvent() { + rightOptionView.setOnClickListener { + groupViewModel.obtainProGroupList() + "刷新数据中,请稍后".show(requireContext()) + } + groupViewModel.groupModel.observe(this, { if (it.code == 200) { if (it.data.size == 0) { @@ -44,8 +50,10 @@ } } else { emptyView!!.hide() + dataBeans.clear() + dataBeans = it.data + groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data) - groupRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) groupRecyclerView!!.adapter = groupListAdapter groupListAdapter.setOnItemClickListener(object : OverviewGroupListAdapter.OnItemClickListener { @@ -53,9 +61,43 @@ // 根据groupId查询组下设备 requireContext().navigatePageTo(it.data[position].groupId) } + + override fun onLongClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertInputDialog.Builder() + .setContext(requireContext()) + .setTitle("提示") + .setHintMessage("请输入新的项目名") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertInputDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick(value: String) { + groupViewModel.changeGroupId( + it.data[position].groupId, value + ) + } + }) + .build().show() + } }) } } }) + + groupViewModel.changeGroupResult.observe(this, { + if (it.code == 200) { + dataBeans.removeAt(clickedPosition) + groupListAdapter.notifyItemRemoved(clickedPosition) + groupListAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt index f4e49bd..ae7c91b 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt @@ -60,10 +60,13 @@ holder.deviceNumView.text = String.format("管理设备数:${rowsBean.deviceCount}") //绑定事件 - if (listener != null) { - holder.itemView.setOnClickListener { - listener!!.onClicked(position) - } + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + holder.itemView.setOnLongClickListener { + listener?.onLongClicked(position) + true } } @@ -77,6 +80,8 @@ interface OnItemClickListener { fun onClicked(position: Int) + + fun onLongClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index c41379a..76fe75b 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -1,28 +1,29 @@ package com.casic.smarttube.fragment -import android.view.View import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager import com.casic.smarttube.R import com.casic.smarttube.adapter.OverviewGroupListAdapter import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.view.GroupDeviceActivity import com.casic.smarttube.vm.ProjectGroupViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.widget.dialog.AlertInputDialog import kotlinx.android.synthetic.main.fragment_overview.* -import kotlinx.android.synthetic.main.include_base_title.* import kotlinx.android.synthetic.main.include_empty_view.* class OverviewFragment : KotlinBaseFragment() { private lateinit var groupViewModel: ProjectGroupViewModel + private var dataBeans: MutableList = ArrayList() private lateinit var groupListAdapter: OverviewGroupListAdapter + private var clickedPosition = 0 override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - leftBackView.visibility = View.GONE titleView.text = "概览" } @@ -36,6 +37,11 @@ } override fun initEvent() { + rightOptionView.setOnClickListener { + groupViewModel.obtainProGroupList() + "刷新数据中,请稍后".show(requireContext()) + } + groupViewModel.groupModel.observe(this, { if (it.code == 200) { if (it.data.size == 0) { @@ -44,8 +50,10 @@ } } else { emptyView!!.hide() + dataBeans.clear() + dataBeans = it.data + groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data) - groupRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) groupRecyclerView!!.adapter = groupListAdapter groupListAdapter.setOnItemClickListener(object : OverviewGroupListAdapter.OnItemClickListener { @@ -53,9 +61,43 @@ // 根据groupId查询组下设备 requireContext().navigatePageTo(it.data[position].groupId) } + + override fun onLongClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertInputDialog.Builder() + .setContext(requireContext()) + .setTitle("提示") + .setHintMessage("请输入新的项目名") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertInputDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick(value: String) { + groupViewModel.changeGroupId( + it.data[position].groupId, value + ) + } + }) + .build().show() + } }) } } }) + + groupViewModel.changeGroupResult.observe(this, { + if (it.code == 200) { + dataBeans.removeAt(clickedPosition) + groupListAdapter.notifyItemRemoved(clickedPosition) + groupListAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 29587e3..c0343d8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -201,4 +201,14 @@ suspend fun obtainGroupList( @Header("token") token: String ): String + + /** + * 修改项目编号 + */ + @GET("/tube/group/edit") + suspend fun changeGroupId( + @Header("token") token: String, + @Query("oldGroupName") oldGroupId: String, + @Query("newGroupName") newGroupId: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt index f4e49bd..ae7c91b 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt @@ -60,10 +60,13 @@ holder.deviceNumView.text = String.format("管理设备数:${rowsBean.deviceCount}") //绑定事件 - if (listener != null) { - holder.itemView.setOnClickListener { - listener!!.onClicked(position) - } + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + holder.itemView.setOnLongClickListener { + listener?.onLongClicked(position) + true } } @@ -77,6 +80,8 @@ interface OnItemClickListener { fun onClicked(position: Int) + + fun onLongClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index c41379a..76fe75b 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -1,28 +1,29 @@ package com.casic.smarttube.fragment -import android.view.View import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager import com.casic.smarttube.R import com.casic.smarttube.adapter.OverviewGroupListAdapter import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.view.GroupDeviceActivity import com.casic.smarttube.vm.ProjectGroupViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.widget.dialog.AlertInputDialog import kotlinx.android.synthetic.main.fragment_overview.* -import kotlinx.android.synthetic.main.include_base_title.* import kotlinx.android.synthetic.main.include_empty_view.* class OverviewFragment : KotlinBaseFragment() { private lateinit var groupViewModel: ProjectGroupViewModel + private var dataBeans: MutableList = ArrayList() private lateinit var groupListAdapter: OverviewGroupListAdapter + private var clickedPosition = 0 override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - leftBackView.visibility = View.GONE titleView.text = "概览" } @@ -36,6 +37,11 @@ } override fun initEvent() { + rightOptionView.setOnClickListener { + groupViewModel.obtainProGroupList() + "刷新数据中,请稍后".show(requireContext()) + } + groupViewModel.groupModel.observe(this, { if (it.code == 200) { if (it.data.size == 0) { @@ -44,8 +50,10 @@ } } else { emptyView!!.hide() + dataBeans.clear() + dataBeans = it.data + groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data) - groupRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) groupRecyclerView!!.adapter = groupListAdapter groupListAdapter.setOnItemClickListener(object : OverviewGroupListAdapter.OnItemClickListener { @@ -53,9 +61,43 @@ // 根据groupId查询组下设备 requireContext().navigatePageTo(it.data[position].groupId) } + + override fun onLongClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertInputDialog.Builder() + .setContext(requireContext()) + .setTitle("提示") + .setHintMessage("请输入新的项目名") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertInputDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick(value: String) { + groupViewModel.changeGroupId( + it.data[position].groupId, value + ) + } + }) + .build().show() + } }) } } }) + + groupViewModel.changeGroupResult.observe(this, { + if (it.code == 200) { + dataBeans.removeAt(clickedPosition) + groupListAdapter.notifyItemRemoved(clickedPosition) + groupListAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 29587e3..c0343d8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -201,4 +201,14 @@ suspend fun obtainGroupList( @Header("token") token: String ): String + + /** + * 修改项目编号 + */ + @GET("/tube/group/edit") + suspend fun changeGroupId( + @Header("token") token: String, + @Query("oldGroupName") oldGroupId: String, + @Query("newGroupName") newGroupId: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 6b60224..4814a1f 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -197,4 +197,11 @@ suspend fun obtainGroupList(): String { return api.obtainGroupList(AuthenticationHelper.token!!) } + + /** + * 修改项目编号 + */ + suspend fun changeGroupId(oldGroupId: String, newGroupId: String): String { + return api.changeGroupId(AuthenticationHelper.token!!, oldGroupId, newGroupId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt index f4e49bd..ae7c91b 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt @@ -60,10 +60,13 @@ holder.deviceNumView.text = String.format("管理设备数:${rowsBean.deviceCount}") //绑定事件 - if (listener != null) { - holder.itemView.setOnClickListener { - listener!!.onClicked(position) - } + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + holder.itemView.setOnLongClickListener { + listener?.onLongClicked(position) + true } } @@ -77,6 +80,8 @@ interface OnItemClickListener { fun onClicked(position: Int) + + fun onLongClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index c41379a..76fe75b 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -1,28 +1,29 @@ package com.casic.smarttube.fragment -import android.view.View import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager import com.casic.smarttube.R import com.casic.smarttube.adapter.OverviewGroupListAdapter import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.view.GroupDeviceActivity import com.casic.smarttube.vm.ProjectGroupViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.widget.dialog.AlertInputDialog import kotlinx.android.synthetic.main.fragment_overview.* -import kotlinx.android.synthetic.main.include_base_title.* import kotlinx.android.synthetic.main.include_empty_view.* class OverviewFragment : KotlinBaseFragment() { private lateinit var groupViewModel: ProjectGroupViewModel + private var dataBeans: MutableList = ArrayList() private lateinit var groupListAdapter: OverviewGroupListAdapter + private var clickedPosition = 0 override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - leftBackView.visibility = View.GONE titleView.text = "概览" } @@ -36,6 +37,11 @@ } override fun initEvent() { + rightOptionView.setOnClickListener { + groupViewModel.obtainProGroupList() + "刷新数据中,请稍后".show(requireContext()) + } + groupViewModel.groupModel.observe(this, { if (it.code == 200) { if (it.data.size == 0) { @@ -44,8 +50,10 @@ } } else { emptyView!!.hide() + dataBeans.clear() + dataBeans = it.data + groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data) - groupRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) groupRecyclerView!!.adapter = groupListAdapter groupListAdapter.setOnItemClickListener(object : OverviewGroupListAdapter.OnItemClickListener { @@ -53,9 +61,43 @@ // 根据groupId查询组下设备 requireContext().navigatePageTo(it.data[position].groupId) } + + override fun onLongClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertInputDialog.Builder() + .setContext(requireContext()) + .setTitle("提示") + .setHintMessage("请输入新的项目名") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertInputDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick(value: String) { + groupViewModel.changeGroupId( + it.data[position].groupId, value + ) + } + }) + .build().show() + } }) } } }) + + groupViewModel.changeGroupResult.observe(this, { + if (it.code == 200) { + dataBeans.removeAt(clickedPosition) + groupListAdapter.notifyItemRemoved(clickedPosition) + groupListAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 29587e3..c0343d8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -201,4 +201,14 @@ suspend fun obtainGroupList( @Header("token") token: String ): String + + /** + * 修改项目编号 + */ + @GET("/tube/group/edit") + suspend fun changeGroupId( + @Header("token") token: String, + @Query("oldGroupName") oldGroupId: String, + @Query("newGroupName") newGroupId: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 6b60224..4814a1f 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -197,4 +197,11 @@ suspend fun obtainGroupList(): String { return api.obtainGroupList(AuthenticationHelper.token!!) } + + /** + * 修改项目编号 + */ + suspend fun changeGroupId(oldGroupId: String, newGroupId: String): String { + return api.changeGroupId(AuthenticationHelper.token!!, oldGroupId, newGroupId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt index 7f92187..df95ab5 100644 --- a/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt +++ b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt @@ -4,10 +4,7 @@ import com.casic.smarttube.base.BaseApplication import com.casic.smarttube.extensions.separateResponseCode import com.casic.smarttube.extensions.toErrorMessage -import com.casic.smarttube.model.DeviceListModel -import com.casic.smarttube.model.GroupDeviceModel -import com.casic.smarttube.model.GroupListModel -import com.casic.smarttube.model.ProjectGroupModel +import com.casic.smarttube.model.* import com.casic.smarttube.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -23,6 +20,7 @@ val groupDeviceModel = MutableLiveData() val deviceListModel = MutableLiveData() val groupListModel = MutableLiveData() + val changeGroupResult = MutableLiveData() fun obtainProGroupList() = launch({ val response = RetrofitServiceManager.obtainProGroupList() @@ -85,4 +83,18 @@ }, { it.printStackTrace() }) + + fun changeGroupId(oldGroupId: String, newGroupId: String) = launch({ + val response = RetrofitServiceManager.changeGroupId(oldGroupId, newGroupId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + changeGroupResult.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt index f4e49bd..ae7c91b 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt @@ -60,10 +60,13 @@ holder.deviceNumView.text = String.format("管理设备数:${rowsBean.deviceCount}") //绑定事件 - if (listener != null) { - holder.itemView.setOnClickListener { - listener!!.onClicked(position) - } + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + holder.itemView.setOnLongClickListener { + listener?.onLongClicked(position) + true } } @@ -77,6 +80,8 @@ interface OnItemClickListener { fun onClicked(position: Int) + + fun onLongClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index c41379a..76fe75b 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -1,28 +1,29 @@ package com.casic.smarttube.fragment -import android.view.View import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager import com.casic.smarttube.R import com.casic.smarttube.adapter.OverviewGroupListAdapter import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.view.GroupDeviceActivity import com.casic.smarttube.vm.ProjectGroupViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.widget.dialog.AlertInputDialog import kotlinx.android.synthetic.main.fragment_overview.* -import kotlinx.android.synthetic.main.include_base_title.* import kotlinx.android.synthetic.main.include_empty_view.* class OverviewFragment : KotlinBaseFragment() { private lateinit var groupViewModel: ProjectGroupViewModel + private var dataBeans: MutableList = ArrayList() private lateinit var groupListAdapter: OverviewGroupListAdapter + private var clickedPosition = 0 override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - leftBackView.visibility = View.GONE titleView.text = "概览" } @@ -36,6 +37,11 @@ } override fun initEvent() { + rightOptionView.setOnClickListener { + groupViewModel.obtainProGroupList() + "刷新数据中,请稍后".show(requireContext()) + } + groupViewModel.groupModel.observe(this, { if (it.code == 200) { if (it.data.size == 0) { @@ -44,8 +50,10 @@ } } else { emptyView!!.hide() + dataBeans.clear() + dataBeans = it.data + groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data) - groupRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) groupRecyclerView!!.adapter = groupListAdapter groupListAdapter.setOnItemClickListener(object : OverviewGroupListAdapter.OnItemClickListener { @@ -53,9 +61,43 @@ // 根据groupId查询组下设备 requireContext().navigatePageTo(it.data[position].groupId) } + + override fun onLongClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertInputDialog.Builder() + .setContext(requireContext()) + .setTitle("提示") + .setHintMessage("请输入新的项目名") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertInputDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick(value: String) { + groupViewModel.changeGroupId( + it.data[position].groupId, value + ) + } + }) + .build().show() + } }) } } }) + + groupViewModel.changeGroupResult.observe(this, { + if (it.code == 200) { + dataBeans.removeAt(clickedPosition) + groupListAdapter.notifyItemRemoved(clickedPosition) + groupListAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 29587e3..c0343d8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -201,4 +201,14 @@ suspend fun obtainGroupList( @Header("token") token: String ): String + + /** + * 修改项目编号 + */ + @GET("/tube/group/edit") + suspend fun changeGroupId( + @Header("token") token: String, + @Query("oldGroupName") oldGroupId: String, + @Query("newGroupName") newGroupId: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 6b60224..4814a1f 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -197,4 +197,11 @@ suspend fun obtainGroupList(): String { return api.obtainGroupList(AuthenticationHelper.token!!) } + + /** + * 修改项目编号 + */ + suspend fun changeGroupId(oldGroupId: String, newGroupId: String): String { + return api.changeGroupId(AuthenticationHelper.token!!, oldGroupId, newGroupId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt index 7f92187..df95ab5 100644 --- a/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt +++ b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt @@ -4,10 +4,7 @@ import com.casic.smarttube.base.BaseApplication import com.casic.smarttube.extensions.separateResponseCode import com.casic.smarttube.extensions.toErrorMessage -import com.casic.smarttube.model.DeviceListModel -import com.casic.smarttube.model.GroupDeviceModel -import com.casic.smarttube.model.GroupListModel -import com.casic.smarttube.model.ProjectGroupModel +import com.casic.smarttube.model.* import com.casic.smarttube.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -23,6 +20,7 @@ val groupDeviceModel = MutableLiveData() val deviceListModel = MutableLiveData() val groupListModel = MutableLiveData() + val changeGroupResult = MutableLiveData() fun obtainProGroupList() = launch({ val response = RetrofitServiceManager.obtainProGroupList() @@ -85,4 +83,18 @@ }, { it.printStackTrace() }) + + fun changeGroupId(oldGroupId: String, newGroupId: String) = launch({ + val response = RetrofitServiceManager.changeGroupId(oldGroupId, newGroupId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + changeGroupResult.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_refresh_white.xml b/app/src/main/res/drawable/ic_refresh_white.xml new file mode 100644 index 0000000..b1cb46e --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh_white.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt index f4e49bd..ae7c91b 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/OverviewGroupListAdapter.kt @@ -60,10 +60,13 @@ holder.deviceNumView.text = String.format("管理设备数:${rowsBean.deviceCount}") //绑定事件 - if (listener != null) { - holder.itemView.setOnClickListener { - listener!!.onClicked(position) - } + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + holder.itemView.setOnLongClickListener { + listener?.onLongClicked(position) + true } } @@ -77,6 +80,8 @@ interface OnItemClickListener { fun onClicked(position: Int) + + fun onLongClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index c41379a..76fe75b 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -1,28 +1,29 @@ package com.casic.smarttube.fragment -import android.view.View import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager import com.casic.smarttube.R import com.casic.smarttube.adapter.OverviewGroupListAdapter import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.view.GroupDeviceActivity import com.casic.smarttube.vm.ProjectGroupViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.widget.dialog.AlertInputDialog import kotlinx.android.synthetic.main.fragment_overview.* -import kotlinx.android.synthetic.main.include_base_title.* import kotlinx.android.synthetic.main.include_empty_view.* class OverviewFragment : KotlinBaseFragment() { private lateinit var groupViewModel: ProjectGroupViewModel + private var dataBeans: MutableList = ArrayList() private lateinit var groupListAdapter: OverviewGroupListAdapter + private var clickedPosition = 0 override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - leftBackView.visibility = View.GONE titleView.text = "概览" } @@ -36,6 +37,11 @@ } override fun initEvent() { + rightOptionView.setOnClickListener { + groupViewModel.obtainProGroupList() + "刷新数据中,请稍后".show(requireContext()) + } + groupViewModel.groupModel.observe(this, { if (it.code == 200) { if (it.data.size == 0) { @@ -44,8 +50,10 @@ } } else { emptyView!!.hide() + dataBeans.clear() + dataBeans = it.data + groupListAdapter = OverviewGroupListAdapter(requireContext(), it.data) - groupRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) groupRecyclerView!!.adapter = groupListAdapter groupListAdapter.setOnItemClickListener(object : OverviewGroupListAdapter.OnItemClickListener { @@ -53,9 +61,43 @@ // 根据groupId查询组下设备 requireContext().navigatePageTo(it.data[position].groupId) } + + override fun onLongClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertInputDialog.Builder() + .setContext(requireContext()) + .setTitle("提示") + .setHintMessage("请输入新的项目名") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertInputDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick(value: String) { + groupViewModel.changeGroupId( + it.data[position].groupId, value + ) + } + }) + .build().show() + } }) } } }) + + groupViewModel.changeGroupResult.observe(this, { + if (it.code == 200) { + dataBeans.removeAt(clickedPosition) + groupListAdapter.notifyItemRemoved(clickedPosition) + groupListAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 29587e3..c0343d8 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -201,4 +201,14 @@ suspend fun obtainGroupList( @Header("token") token: String ): String + + /** + * 修改项目编号 + */ + @GET("/tube/group/edit") + suspend fun changeGroupId( + @Header("token") token: String, + @Query("oldGroupName") oldGroupId: String, + @Query("newGroupName") newGroupId: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 6b60224..4814a1f 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -197,4 +197,11 @@ suspend fun obtainGroupList(): String { return api.obtainGroupList(AuthenticationHelper.token!!) } + + /** + * 修改项目编号 + */ + suspend fun changeGroupId(oldGroupId: String, newGroupId: String): String { + return api.changeGroupId(AuthenticationHelper.token!!, oldGroupId, newGroupId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt index 7f92187..df95ab5 100644 --- a/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt +++ b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt @@ -4,10 +4,7 @@ import com.casic.smarttube.base.BaseApplication import com.casic.smarttube.extensions.separateResponseCode import com.casic.smarttube.extensions.toErrorMessage -import com.casic.smarttube.model.DeviceListModel -import com.casic.smarttube.model.GroupDeviceModel -import com.casic.smarttube.model.GroupListModel -import com.casic.smarttube.model.ProjectGroupModel +import com.casic.smarttube.model.* import com.casic.smarttube.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -23,6 +20,7 @@ val groupDeviceModel = MutableLiveData() val deviceListModel = MutableLiveData() val groupListModel = MutableLiveData() + val changeGroupResult = MutableLiveData() fun obtainProGroupList() = launch({ val response = RetrofitServiceManager.obtainProGroupList() @@ -85,4 +83,18 @@ }, { it.printStackTrace() }) + + fun changeGroupId(oldGroupId: String, newGroupId: String) = launch({ + val response = RetrofitServiceManager.changeGroupId(oldGroupId, newGroupId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + changeGroupResult.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_refresh_white.xml b/app/src/main/res/drawable/ic_refresh_white.xml new file mode 100644 index 0000000..b1cb46e --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh_white.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/fragment_overview.xml b/app/src/main/res/layout/fragment_overview.xml index dff09fd..2a2f696 100644 --- a/app/src/main/res/layout/fragment_overview.xml +++ b/app/src/main/res/layout/fragment_overview.xml @@ -1,11 +1,34 @@ - + + + + + + + android:layout_marginTop="@dimen/dp_5" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> \ No newline at end of file