diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 6f79ec1..e177fed 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -58,12 +58,11 @@ .into(holder.imageView) holder.deviceModelView.text = rowsModel.name holder.deviceUsedTimeView.text = String.format( - "已使用${rowsModel.time.toString().diffDate()}天" + "已使用${rowsModel.time.toString().diffDate(false)}天" ) holder.rootView.setOnClickListener { clickListener?.onItemClick(position) } - // 长按监听 holder.moreOperateButton.setOnClickListener { clickListener?.onButtonClick(position) } diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 6f79ec1..e177fed 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -58,12 +58,11 @@ .into(holder.imageView) holder.deviceModelView.text = rowsModel.name holder.deviceUsedTimeView.text = String.format( - "已使用${rowsModel.time.toString().diffDate()}天" + "已使用${rowsModel.time.toString().diffDate(false)}天" ) holder.rootView.setOnClickListener { clickListener?.onItemClick(position) } - // 长按监听 holder.moreOperateButton.setOnClickListener { clickListener?.onButtonClick(position) } diff --git a/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt new file mode 100644 index 0000000..f2a34ce --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt @@ -0,0 +1,77 @@ +package com.casic.br.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.casic.br.model.OtherDeviceModel +import com.casic.br.utils.LocaleConstant + +/** + * 汉威报警器Adapter + * */ +class OtherDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_other_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val rowsModel = dataRows[position] + holder.deviceNameView.text = rowsModel.deviceName + Glide.with(context) + .load(LocaleConstant.HW_JT_KBZ1) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + holder.deviceModelView.text = rowsModel.productCode + holder.deviceUsedTimeView.text = String.format( + "已使用${rowsModel.createTime.toString().diffDate(true)}天" + ) + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + + override fun getItemCount(): Int = dataRows.size + + private var clickListener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) + } + + fun setOnItemClickListener(clickListener: OnItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) + val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) + val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 6f79ec1..e177fed 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -58,12 +58,11 @@ .into(holder.imageView) holder.deviceModelView.text = rowsModel.name holder.deviceUsedTimeView.text = String.format( - "已使用${rowsModel.time.toString().diffDate()}天" + "已使用${rowsModel.time.toString().diffDate(false)}天" ) holder.rootView.setOnClickListener { clickListener?.onItemClick(position) } - // 长按监听 holder.moreOperateButton.setOnClickListener { clickListener?.onButtonClick(position) } diff --git a/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt new file mode 100644 index 0000000..f2a34ce --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt @@ -0,0 +1,77 @@ +package com.casic.br.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.casic.br.model.OtherDeviceModel +import com.casic.br.utils.LocaleConstant + +/** + * 汉威报警器Adapter + * */ +class OtherDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_other_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val rowsModel = dataRows[position] + holder.deviceNameView.text = rowsModel.deviceName + Glide.with(context) + .load(LocaleConstant.HW_JT_KBZ1) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + holder.deviceModelView.text = rowsModel.productCode + holder.deviceUsedTimeView.text = String.format( + "已使用${rowsModel.createTime.toString().diffDate(true)}天" + ) + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + + override fun getItemCount(): Int = dataRows.size + + private var clickListener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) + } + + fun setOnItemClickListener(clickListener: OnItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) + val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) + val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index d38507a..c035c7b 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -16,6 +16,7 @@ import top.zibin.luban.OnCompressListener import java.io.File import java.text.ParseException +import java.text.SimpleDateFormat import java.util.* import kotlin.math.abs @@ -56,17 +57,22 @@ /** * 时间差-天 * */ -fun String.diffDate(): Int { +fun String.diffDate(needFormat: Boolean): Int { if (this.isBlank()) { return 0 } - try { - val diff = abs(System.currentTimeMillis() - this.toLong() * 1000L) - return (diff / (86400000)).toInt() - } catch (e: ParseException) { - e.printStackTrace() - } - return 0 + val diff = if (needFormat) { + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this)!! + abs(System.currentTimeMillis() - date.time) + } else { + try { + abs(System.currentTimeMillis() - this.toLong() * 1000L) + } catch (e: ParseException) { + e.printStackTrace() + } + } as Long + return (diff / (86400000)).toInt() } fun String.separateResponseCode(): Int { diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 6f79ec1..e177fed 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -58,12 +58,11 @@ .into(holder.imageView) holder.deviceModelView.text = rowsModel.name holder.deviceUsedTimeView.text = String.format( - "已使用${rowsModel.time.toString().diffDate()}天" + "已使用${rowsModel.time.toString().diffDate(false)}天" ) holder.rootView.setOnClickListener { clickListener?.onItemClick(position) } - // 长按监听 holder.moreOperateButton.setOnClickListener { clickListener?.onButtonClick(position) } diff --git a/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt new file mode 100644 index 0000000..f2a34ce --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt @@ -0,0 +1,77 @@ +package com.casic.br.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.casic.br.model.OtherDeviceModel +import com.casic.br.utils.LocaleConstant + +/** + * 汉威报警器Adapter + * */ +class OtherDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_other_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val rowsModel = dataRows[position] + holder.deviceNameView.text = rowsModel.deviceName + Glide.with(context) + .load(LocaleConstant.HW_JT_KBZ1) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + holder.deviceModelView.text = rowsModel.productCode + holder.deviceUsedTimeView.text = String.format( + "已使用${rowsModel.createTime.toString().diffDate(true)}天" + ) + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + + override fun getItemCount(): Int = dataRows.size + + private var clickListener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) + } + + fun setOnItemClickListener(clickListener: OnItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) + val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) + val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index d38507a..c035c7b 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -16,6 +16,7 @@ import top.zibin.luban.OnCompressListener import java.io.File import java.text.ParseException +import java.text.SimpleDateFormat import java.util.* import kotlin.math.abs @@ -56,17 +57,22 @@ /** * 时间差-天 * */ -fun String.diffDate(): Int { +fun String.diffDate(needFormat: Boolean): Int { if (this.isBlank()) { return 0 } - try { - val diff = abs(System.currentTimeMillis() - this.toLong() * 1000L) - return (diff / (86400000)).toInt() - } catch (e: ParseException) { - e.printStackTrace() - } - return 0 + val diff = if (needFormat) { + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this)!! + abs(System.currentTimeMillis() - date.time) + } else { + try { + abs(System.currentTimeMillis() - this.toLong() * 1000L) + } catch (e: ParseException) { + e.printStackTrace() + } + } as Long + return (diff / (86400000)).toInt() } fun String.separateResponseCode(): Int { diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt index 98971ce..c9f9257 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -4,16 +4,20 @@ import android.graphics.Typeface import android.os.Handler import android.util.Log +import androidx.lifecycle.ViewModelProvider import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.adapter.OtherDeviceAdapter import com.casic.br.adapter.RecommendAdapter import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.selectCategory +import com.casic.br.model.OtherDeviceModel import com.casic.br.model.RecommendModel import com.casic.br.utils.DeserializeModel import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity import com.casic.br.view.device.* +import com.casic.br.vm.DeviceViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -33,7 +37,10 @@ private val kTag = "DevicePageFragment" private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private lateinit var otherDeviceAdapter: OtherDeviceAdapter + private lateinit var deviceViewModel: DeviceViewModel private var dataBeans: MutableList = ArrayList() + private var dataModes: MutableList = ArrayList() private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -46,6 +53,23 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.listModel.observe(this, { + if (it.code == 200) { + val deviceBeans = it.data?.rows!! + when { + isRefresh -> { + dataModes.clear() + dataModes = deviceBeans + isRefresh = false + } + else -> { + dataModes = deviceBeans + } + } + weakReferenceHandler.sendEmptyMessage(2022112301) + } + }) //TODO 热门推荐 val imageArray = arrayOf( @@ -81,6 +105,7 @@ override fun onResume() { super.onResume() + isRefresh = true TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId()) .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { @@ -102,6 +127,7 @@ Log.d(kTag, "onError: $errorMsg") } }) + deviceViewModel.obtainOtherDeviceListByPage() } private val callback = Handler.Callback { @@ -194,6 +220,13 @@ } }) } + } else if (it.what == 2022112301) { + if (isRefresh) { + otherDeviceAdapter.notifyDataSetChanged() + } else { + otherDeviceAdapter = OtherDeviceAdapter(requireContext(), dataModes) + otherDeviceRecyclerView.adapter = otherDeviceAdapter + } } true } diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 6f79ec1..e177fed 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -58,12 +58,11 @@ .into(holder.imageView) holder.deviceModelView.text = rowsModel.name holder.deviceUsedTimeView.text = String.format( - "已使用${rowsModel.time.toString().diffDate()}天" + "已使用${rowsModel.time.toString().diffDate(false)}天" ) holder.rootView.setOnClickListener { clickListener?.onItemClick(position) } - // 长按监听 holder.moreOperateButton.setOnClickListener { clickListener?.onButtonClick(position) } diff --git a/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt new file mode 100644 index 0000000..f2a34ce --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt @@ -0,0 +1,77 @@ +package com.casic.br.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.casic.br.model.OtherDeviceModel +import com.casic.br.utils.LocaleConstant + +/** + * 汉威报警器Adapter + * */ +class OtherDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_other_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val rowsModel = dataRows[position] + holder.deviceNameView.text = rowsModel.deviceName + Glide.with(context) + .load(LocaleConstant.HW_JT_KBZ1) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + holder.deviceModelView.text = rowsModel.productCode + holder.deviceUsedTimeView.text = String.format( + "已使用${rowsModel.createTime.toString().diffDate(true)}天" + ) + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + + override fun getItemCount(): Int = dataRows.size + + private var clickListener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) + } + + fun setOnItemClickListener(clickListener: OnItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) + val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) + val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index d38507a..c035c7b 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -16,6 +16,7 @@ import top.zibin.luban.OnCompressListener import java.io.File import java.text.ParseException +import java.text.SimpleDateFormat import java.util.* import kotlin.math.abs @@ -56,17 +57,22 @@ /** * 时间差-天 * */ -fun String.diffDate(): Int { +fun String.diffDate(needFormat: Boolean): Int { if (this.isBlank()) { return 0 } - try { - val diff = abs(System.currentTimeMillis() - this.toLong() * 1000L) - return (diff / (86400000)).toInt() - } catch (e: ParseException) { - e.printStackTrace() - } - return 0 + val diff = if (needFormat) { + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this)!! + abs(System.currentTimeMillis() - date.time) + } else { + try { + abs(System.currentTimeMillis() - this.toLong() * 1000L) + } catch (e: ParseException) { + e.printStackTrace() + } + } as Long + return (diff / (86400000)).toInt() } fun String.separateResponseCode(): Int { diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt index 98971ce..c9f9257 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -4,16 +4,20 @@ import android.graphics.Typeface import android.os.Handler import android.util.Log +import androidx.lifecycle.ViewModelProvider import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.adapter.OtherDeviceAdapter import com.casic.br.adapter.RecommendAdapter import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.selectCategory +import com.casic.br.model.OtherDeviceModel import com.casic.br.model.RecommendModel import com.casic.br.utils.DeserializeModel import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity import com.casic.br.view.device.* +import com.casic.br.vm.DeviceViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -33,7 +37,10 @@ private val kTag = "DevicePageFragment" private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private lateinit var otherDeviceAdapter: OtherDeviceAdapter + private lateinit var deviceViewModel: DeviceViewModel private var dataBeans: MutableList = ArrayList() + private var dataModes: MutableList = ArrayList() private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -46,6 +53,23 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.listModel.observe(this, { + if (it.code == 200) { + val deviceBeans = it.data?.rows!! + when { + isRefresh -> { + dataModes.clear() + dataModes = deviceBeans + isRefresh = false + } + else -> { + dataModes = deviceBeans + } + } + weakReferenceHandler.sendEmptyMessage(2022112301) + } + }) //TODO 热门推荐 val imageArray = arrayOf( @@ -81,6 +105,7 @@ override fun onResume() { super.onResume() + isRefresh = true TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId()) .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { @@ -102,6 +127,7 @@ Log.d(kTag, "onError: $errorMsg") } }) + deviceViewModel.obtainOtherDeviceListByPage() } private val callback = Handler.Callback { @@ -194,6 +220,13 @@ } }) } + } else if (it.what == 2022112301) { + if (isRefresh) { + otherDeviceAdapter.notifyDataSetChanged() + } else { + otherDeviceAdapter = OtherDeviceAdapter(requireContext(), dataModes) + otherDeviceRecyclerView.adapter = otherDeviceAdapter + } } true } diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt index 1ec1301..6e82149 100644 --- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt @@ -87,7 +87,8 @@ } 2022092903 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 6f79ec1..e177fed 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -58,12 +58,11 @@ .into(holder.imageView) holder.deviceModelView.text = rowsModel.name holder.deviceUsedTimeView.text = String.format( - "已使用${rowsModel.time.toString().diffDate()}天" + "已使用${rowsModel.time.toString().diffDate(false)}天" ) holder.rootView.setOnClickListener { clickListener?.onItemClick(position) } - // 长按监听 holder.moreOperateButton.setOnClickListener { clickListener?.onButtonClick(position) } diff --git a/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt new file mode 100644 index 0000000..f2a34ce --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt @@ -0,0 +1,77 @@ +package com.casic.br.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.casic.br.model.OtherDeviceModel +import com.casic.br.utils.LocaleConstant + +/** + * 汉威报警器Adapter + * */ +class OtherDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_other_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val rowsModel = dataRows[position] + holder.deviceNameView.text = rowsModel.deviceName + Glide.with(context) + .load(LocaleConstant.HW_JT_KBZ1) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + holder.deviceModelView.text = rowsModel.productCode + holder.deviceUsedTimeView.text = String.format( + "已使用${rowsModel.createTime.toString().diffDate(true)}天" + ) + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + + override fun getItemCount(): Int = dataRows.size + + private var clickListener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) + } + + fun setOnItemClickListener(clickListener: OnItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) + val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) + val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index d38507a..c035c7b 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -16,6 +16,7 @@ import top.zibin.luban.OnCompressListener import java.io.File import java.text.ParseException +import java.text.SimpleDateFormat import java.util.* import kotlin.math.abs @@ -56,17 +57,22 @@ /** * 时间差-天 * */ -fun String.diffDate(): Int { +fun String.diffDate(needFormat: Boolean): Int { if (this.isBlank()) { return 0 } - try { - val diff = abs(System.currentTimeMillis() - this.toLong() * 1000L) - return (diff / (86400000)).toInt() - } catch (e: ParseException) { - e.printStackTrace() - } - return 0 + val diff = if (needFormat) { + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this)!! + abs(System.currentTimeMillis() - date.time) + } else { + try { + abs(System.currentTimeMillis() - this.toLong() * 1000L) + } catch (e: ParseException) { + e.printStackTrace() + } + } as Long + return (diff / (86400000)).toInt() } fun String.separateResponseCode(): Int { diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt index 98971ce..c9f9257 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -4,16 +4,20 @@ import android.graphics.Typeface import android.os.Handler import android.util.Log +import androidx.lifecycle.ViewModelProvider import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.adapter.OtherDeviceAdapter import com.casic.br.adapter.RecommendAdapter import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.selectCategory +import com.casic.br.model.OtherDeviceModel import com.casic.br.model.RecommendModel import com.casic.br.utils.DeserializeModel import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity import com.casic.br.view.device.* +import com.casic.br.vm.DeviceViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -33,7 +37,10 @@ private val kTag = "DevicePageFragment" private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private lateinit var otherDeviceAdapter: OtherDeviceAdapter + private lateinit var deviceViewModel: DeviceViewModel private var dataBeans: MutableList = ArrayList() + private var dataModes: MutableList = ArrayList() private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -46,6 +53,23 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.listModel.observe(this, { + if (it.code == 200) { + val deviceBeans = it.data?.rows!! + when { + isRefresh -> { + dataModes.clear() + dataModes = deviceBeans + isRefresh = false + } + else -> { + dataModes = deviceBeans + } + } + weakReferenceHandler.sendEmptyMessage(2022112301) + } + }) //TODO 热门推荐 val imageArray = arrayOf( @@ -81,6 +105,7 @@ override fun onResume() { super.onResume() + isRefresh = true TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId()) .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { @@ -102,6 +127,7 @@ Log.d(kTag, "onError: $errorMsg") } }) + deviceViewModel.obtainOtherDeviceListByPage() } private val callback = Handler.Callback { @@ -194,6 +220,13 @@ } }) } + } else if (it.what == 2022112301) { + if (isRefresh) { + otherDeviceAdapter.notifyDataSetChanged() + } else { + otherDeviceAdapter = OtherDeviceAdapter(requireContext(), dataModes) + otherDeviceRecyclerView.adapter = otherDeviceAdapter + } } true } diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt index 1ec1301..6e82149 100644 --- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt @@ -87,7 +87,8 @@ } 2022092903 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt index 4b983f3..9de1a56 100644 --- a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt @@ -125,7 +125,8 @@ } 2022092803 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 6f79ec1..e177fed 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -58,12 +58,11 @@ .into(holder.imageView) holder.deviceModelView.text = rowsModel.name holder.deviceUsedTimeView.text = String.format( - "已使用${rowsModel.time.toString().diffDate()}天" + "已使用${rowsModel.time.toString().diffDate(false)}天" ) holder.rootView.setOnClickListener { clickListener?.onItemClick(position) } - // 长按监听 holder.moreOperateButton.setOnClickListener { clickListener?.onButtonClick(position) } diff --git a/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt new file mode 100644 index 0000000..f2a34ce --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt @@ -0,0 +1,77 @@ +package com.casic.br.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.casic.br.model.OtherDeviceModel +import com.casic.br.utils.LocaleConstant + +/** + * 汉威报警器Adapter + * */ +class OtherDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_other_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val rowsModel = dataRows[position] + holder.deviceNameView.text = rowsModel.deviceName + Glide.with(context) + .load(LocaleConstant.HW_JT_KBZ1) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + holder.deviceModelView.text = rowsModel.productCode + holder.deviceUsedTimeView.text = String.format( + "已使用${rowsModel.createTime.toString().diffDate(true)}天" + ) + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + + override fun getItemCount(): Int = dataRows.size + + private var clickListener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) + } + + fun setOnItemClickListener(clickListener: OnItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) + val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) + val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index d38507a..c035c7b 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -16,6 +16,7 @@ import top.zibin.luban.OnCompressListener import java.io.File import java.text.ParseException +import java.text.SimpleDateFormat import java.util.* import kotlin.math.abs @@ -56,17 +57,22 @@ /** * 时间差-天 * */ -fun String.diffDate(): Int { +fun String.diffDate(needFormat: Boolean): Int { if (this.isBlank()) { return 0 } - try { - val diff = abs(System.currentTimeMillis() - this.toLong() * 1000L) - return (diff / (86400000)).toInt() - } catch (e: ParseException) { - e.printStackTrace() - } - return 0 + val diff = if (needFormat) { + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this)!! + abs(System.currentTimeMillis() - date.time) + } else { + try { + abs(System.currentTimeMillis() - this.toLong() * 1000L) + } catch (e: ParseException) { + e.printStackTrace() + } + } as Long + return (diff / (86400000)).toInt() } fun String.separateResponseCode(): Int { diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt index 98971ce..c9f9257 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -4,16 +4,20 @@ import android.graphics.Typeface import android.os.Handler import android.util.Log +import androidx.lifecycle.ViewModelProvider import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.adapter.OtherDeviceAdapter import com.casic.br.adapter.RecommendAdapter import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.selectCategory +import com.casic.br.model.OtherDeviceModel import com.casic.br.model.RecommendModel import com.casic.br.utils.DeserializeModel import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity import com.casic.br.view.device.* +import com.casic.br.vm.DeviceViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -33,7 +37,10 @@ private val kTag = "DevicePageFragment" private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private lateinit var otherDeviceAdapter: OtherDeviceAdapter + private lateinit var deviceViewModel: DeviceViewModel private var dataBeans: MutableList = ArrayList() + private var dataModes: MutableList = ArrayList() private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -46,6 +53,23 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.listModel.observe(this, { + if (it.code == 200) { + val deviceBeans = it.data?.rows!! + when { + isRefresh -> { + dataModes.clear() + dataModes = deviceBeans + isRefresh = false + } + else -> { + dataModes = deviceBeans + } + } + weakReferenceHandler.sendEmptyMessage(2022112301) + } + }) //TODO 热门推荐 val imageArray = arrayOf( @@ -81,6 +105,7 @@ override fun onResume() { super.onResume() + isRefresh = true TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId()) .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { @@ -102,6 +127,7 @@ Log.d(kTag, "onError: $errorMsg") } }) + deviceViewModel.obtainOtherDeviceListByPage() } private val callback = Handler.Callback { @@ -194,6 +220,13 @@ } }) } + } else if (it.what == 2022112301) { + if (isRefresh) { + otherDeviceAdapter.notifyDataSetChanged() + } else { + otherDeviceAdapter = OtherDeviceAdapter(requireContext(), dataModes) + otherDeviceRecyclerView.adapter = otherDeviceAdapter + } } true } diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt index 1ec1301..6e82149 100644 --- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt @@ -87,7 +87,8 @@ } 2022092903 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt index 4b983f3..9de1a56 100644 --- a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt @@ -125,7 +125,8 @@ } 2022092803 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt index 0598a38..a0be055 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt @@ -151,7 +151,8 @@ } 2022092303 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 6f79ec1..e177fed 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -58,12 +58,11 @@ .into(holder.imageView) holder.deviceModelView.text = rowsModel.name holder.deviceUsedTimeView.text = String.format( - "已使用${rowsModel.time.toString().diffDate()}天" + "已使用${rowsModel.time.toString().diffDate(false)}天" ) holder.rootView.setOnClickListener { clickListener?.onItemClick(position) } - // 长按监听 holder.moreOperateButton.setOnClickListener { clickListener?.onButtonClick(position) } diff --git a/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt new file mode 100644 index 0000000..f2a34ce --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt @@ -0,0 +1,77 @@ +package com.casic.br.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.casic.br.model.OtherDeviceModel +import com.casic.br.utils.LocaleConstant + +/** + * 汉威报警器Adapter + * */ +class OtherDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_other_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val rowsModel = dataRows[position] + holder.deviceNameView.text = rowsModel.deviceName + Glide.with(context) + .load(LocaleConstant.HW_JT_KBZ1) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + holder.deviceModelView.text = rowsModel.productCode + holder.deviceUsedTimeView.text = String.format( + "已使用${rowsModel.createTime.toString().diffDate(true)}天" + ) + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + + override fun getItemCount(): Int = dataRows.size + + private var clickListener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) + } + + fun setOnItemClickListener(clickListener: OnItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) + val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) + val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index d38507a..c035c7b 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -16,6 +16,7 @@ import top.zibin.luban.OnCompressListener import java.io.File import java.text.ParseException +import java.text.SimpleDateFormat import java.util.* import kotlin.math.abs @@ -56,17 +57,22 @@ /** * 时间差-天 * */ -fun String.diffDate(): Int { +fun String.diffDate(needFormat: Boolean): Int { if (this.isBlank()) { return 0 } - try { - val diff = abs(System.currentTimeMillis() - this.toLong() * 1000L) - return (diff / (86400000)).toInt() - } catch (e: ParseException) { - e.printStackTrace() - } - return 0 + val diff = if (needFormat) { + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this)!! + abs(System.currentTimeMillis() - date.time) + } else { + try { + abs(System.currentTimeMillis() - this.toLong() * 1000L) + } catch (e: ParseException) { + e.printStackTrace() + } + } as Long + return (diff / (86400000)).toInt() } fun String.separateResponseCode(): Int { diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt index 98971ce..c9f9257 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -4,16 +4,20 @@ import android.graphics.Typeface import android.os.Handler import android.util.Log +import androidx.lifecycle.ViewModelProvider import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.adapter.OtherDeviceAdapter import com.casic.br.adapter.RecommendAdapter import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.selectCategory +import com.casic.br.model.OtherDeviceModel import com.casic.br.model.RecommendModel import com.casic.br.utils.DeserializeModel import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity import com.casic.br.view.device.* +import com.casic.br.vm.DeviceViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -33,7 +37,10 @@ private val kTag = "DevicePageFragment" private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private lateinit var otherDeviceAdapter: OtherDeviceAdapter + private lateinit var deviceViewModel: DeviceViewModel private var dataBeans: MutableList = ArrayList() + private var dataModes: MutableList = ArrayList() private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -46,6 +53,23 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.listModel.observe(this, { + if (it.code == 200) { + val deviceBeans = it.data?.rows!! + when { + isRefresh -> { + dataModes.clear() + dataModes = deviceBeans + isRefresh = false + } + else -> { + dataModes = deviceBeans + } + } + weakReferenceHandler.sendEmptyMessage(2022112301) + } + }) //TODO 热门推荐 val imageArray = arrayOf( @@ -81,6 +105,7 @@ override fun onResume() { super.onResume() + isRefresh = true TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId()) .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { @@ -102,6 +127,7 @@ Log.d(kTag, "onError: $errorMsg") } }) + deviceViewModel.obtainOtherDeviceListByPage() } private val callback = Handler.Callback { @@ -194,6 +220,13 @@ } }) } + } else if (it.what == 2022112301) { + if (isRefresh) { + otherDeviceAdapter.notifyDataSetChanged() + } else { + otherDeviceAdapter = OtherDeviceAdapter(requireContext(), dataModes) + otherDeviceRecyclerView.adapter = otherDeviceAdapter + } } true } diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt index 1ec1301..6e82149 100644 --- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt @@ -87,7 +87,8 @@ } 2022092903 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt index 4b983f3..9de1a56 100644 --- a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt @@ -125,7 +125,8 @@ } 2022092803 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt index 0598a38..a0be055 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt @@ -151,7 +151,8 @@ } 2022092303 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 7c5ba31..595c52f 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -120,7 +120,8 @@ } 2022092603 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 6f79ec1..e177fed 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -58,12 +58,11 @@ .into(holder.imageView) holder.deviceModelView.text = rowsModel.name holder.deviceUsedTimeView.text = String.format( - "已使用${rowsModel.time.toString().diffDate()}天" + "已使用${rowsModel.time.toString().diffDate(false)}天" ) holder.rootView.setOnClickListener { clickListener?.onItemClick(position) } - // 长按监听 holder.moreOperateButton.setOnClickListener { clickListener?.onButtonClick(position) } diff --git a/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt new file mode 100644 index 0000000..f2a34ce --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt @@ -0,0 +1,77 @@ +package com.casic.br.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.casic.br.model.OtherDeviceModel +import com.casic.br.utils.LocaleConstant + +/** + * 汉威报警器Adapter + * */ +class OtherDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_other_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val rowsModel = dataRows[position] + holder.deviceNameView.text = rowsModel.deviceName + Glide.with(context) + .load(LocaleConstant.HW_JT_KBZ1) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + holder.deviceModelView.text = rowsModel.productCode + holder.deviceUsedTimeView.text = String.format( + "已使用${rowsModel.createTime.toString().diffDate(true)}天" + ) + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + + override fun getItemCount(): Int = dataRows.size + + private var clickListener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) + } + + fun setOnItemClickListener(clickListener: OnItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) + val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) + val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index d38507a..c035c7b 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -16,6 +16,7 @@ import top.zibin.luban.OnCompressListener import java.io.File import java.text.ParseException +import java.text.SimpleDateFormat import java.util.* import kotlin.math.abs @@ -56,17 +57,22 @@ /** * 时间差-天 * */ -fun String.diffDate(): Int { +fun String.diffDate(needFormat: Boolean): Int { if (this.isBlank()) { return 0 } - try { - val diff = abs(System.currentTimeMillis() - this.toLong() * 1000L) - return (diff / (86400000)).toInt() - } catch (e: ParseException) { - e.printStackTrace() - } - return 0 + val diff = if (needFormat) { + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this)!! + abs(System.currentTimeMillis() - date.time) + } else { + try { + abs(System.currentTimeMillis() - this.toLong() * 1000L) + } catch (e: ParseException) { + e.printStackTrace() + } + } as Long + return (diff / (86400000)).toInt() } fun String.separateResponseCode(): Int { diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt index 98971ce..c9f9257 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -4,16 +4,20 @@ import android.graphics.Typeface import android.os.Handler import android.util.Log +import androidx.lifecycle.ViewModelProvider import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.adapter.OtherDeviceAdapter import com.casic.br.adapter.RecommendAdapter import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.selectCategory +import com.casic.br.model.OtherDeviceModel import com.casic.br.model.RecommendModel import com.casic.br.utils.DeserializeModel import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity import com.casic.br.view.device.* +import com.casic.br.vm.DeviceViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -33,7 +37,10 @@ private val kTag = "DevicePageFragment" private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private lateinit var otherDeviceAdapter: OtherDeviceAdapter + private lateinit var deviceViewModel: DeviceViewModel private var dataBeans: MutableList = ArrayList() + private var dataModes: MutableList = ArrayList() private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -46,6 +53,23 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.listModel.observe(this, { + if (it.code == 200) { + val deviceBeans = it.data?.rows!! + when { + isRefresh -> { + dataModes.clear() + dataModes = deviceBeans + isRefresh = false + } + else -> { + dataModes = deviceBeans + } + } + weakReferenceHandler.sendEmptyMessage(2022112301) + } + }) //TODO 热门推荐 val imageArray = arrayOf( @@ -81,6 +105,7 @@ override fun onResume() { super.onResume() + isRefresh = true TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId()) .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { @@ -102,6 +127,7 @@ Log.d(kTag, "onError: $errorMsg") } }) + deviceViewModel.obtainOtherDeviceListByPage() } private val callback = Handler.Callback { @@ -194,6 +220,13 @@ } }) } + } else if (it.what == 2022112301) { + if (isRefresh) { + otherDeviceAdapter.notifyDataSetChanged() + } else { + otherDeviceAdapter = OtherDeviceAdapter(requireContext(), dataModes) + otherDeviceRecyclerView.adapter = otherDeviceAdapter + } } true } diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt index 1ec1301..6e82149 100644 --- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt @@ -87,7 +87,8 @@ } 2022092903 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt index 4b983f3..9de1a56 100644 --- a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt @@ -125,7 +125,8 @@ } 2022092803 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt index 0598a38..a0be055 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt @@ -151,7 +151,8 @@ } 2022092303 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 7c5ba31..595c52f 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -120,7 +120,8 @@ } 2022092603 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/model/OtherDeviceModel.java b/app/src/main/java/com/casic/br/model/OtherDeviceModel.java new file mode 100644 index 0000000..747a107 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/OtherDeviceModel.java @@ -0,0 +1,274 @@ +package com.casic.br.model; + +import java.util.List; + +public class OtherDeviceModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String brandCode; + private String brandName; + private String createTime; + private int deviceActive; + private String deviceActiveTime; + private String deviceAddress; + private int deviceBindUser; + private String deviceCoreParts; + private String deviceHardwareVersion; + private String deviceId; + private String deviceIp; + private String deviceMac; + private String deviceName; + private String deviceSoftwareVersion; + private int deviceStatus; + private String id; + private int iotDevice; + private String produceDate; + private String productCode; + private String productName; + private String snCode; + private String supplierId; + private String updateTime; + + public String getBrandCode() { + return brandCode; + } + + public void setBrandCode(String brandCode) { + this.brandCode = brandCode; + } + + public String getBrandName() { + return brandName; + } + + public void setBrandName(String brandName) { + this.brandName = brandName; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public int getDeviceActive() { + return deviceActive; + } + + public void setDeviceActive(int deviceActive) { + this.deviceActive = deviceActive; + } + + public String getDeviceActiveTime() { + return deviceActiveTime; + } + + public void setDeviceActiveTime(String deviceActiveTime) { + this.deviceActiveTime = deviceActiveTime; + } + + public String getDeviceAddress() { + return deviceAddress; + } + + public void setDeviceAddress(String deviceAddress) { + this.deviceAddress = deviceAddress; + } + + public int getDeviceBindUser() { + return deviceBindUser; + } + + public void setDeviceBindUser(int deviceBindUser) { + this.deviceBindUser = deviceBindUser; + } + + public String getDeviceCoreParts() { + return deviceCoreParts; + } + + public void setDeviceCoreParts(String deviceCoreParts) { + this.deviceCoreParts = deviceCoreParts; + } + + public String getDeviceHardwareVersion() { + return deviceHardwareVersion; + } + + public void setDeviceHardwareVersion(String deviceHardwareVersion) { + this.deviceHardwareVersion = deviceHardwareVersion; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getDeviceIp() { + return deviceIp; + } + + public void setDeviceIp(String deviceIp) { + this.deviceIp = deviceIp; + } + + public String getDeviceMac() { + return deviceMac; + } + + public void setDeviceMac(String deviceMac) { + this.deviceMac = deviceMac; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getDeviceSoftwareVersion() { + return deviceSoftwareVersion; + } + + public void setDeviceSoftwareVersion(String deviceSoftwareVersion) { + this.deviceSoftwareVersion = deviceSoftwareVersion; + } + + public int getDeviceStatus() { + return deviceStatus; + } + + public void setDeviceStatus(int deviceStatus) { + this.deviceStatus = deviceStatus; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getIotDevice() { + return iotDevice; + } + + public void setIotDevice(int iotDevice) { + this.iotDevice = iotDevice; + } + + public String getProduceDate() { + return produceDate; + } + + public void setProduceDate(String produceDate) { + this.produceDate = produceDate; + } + + public String getProductCode() { + return productCode; + } + + public void setProductCode(String productCode) { + this.productCode = productCode; + } + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public String getSnCode() { + return snCode; + } + + public void setSnCode(String snCode) { + this.snCode = snCode; + } + + public String getSupplierId() { + return supplierId; + } + + public void setSupplierId(String supplierId) { + this.supplierId = supplierId; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 6f79ec1..e177fed 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -58,12 +58,11 @@ .into(holder.imageView) holder.deviceModelView.text = rowsModel.name holder.deviceUsedTimeView.text = String.format( - "已使用${rowsModel.time.toString().diffDate()}天" + "已使用${rowsModel.time.toString().diffDate(false)}天" ) holder.rootView.setOnClickListener { clickListener?.onItemClick(position) } - // 长按监听 holder.moreOperateButton.setOnClickListener { clickListener?.onButtonClick(position) } diff --git a/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt new file mode 100644 index 0000000..f2a34ce --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt @@ -0,0 +1,77 @@ +package com.casic.br.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.casic.br.model.OtherDeviceModel +import com.casic.br.utils.LocaleConstant + +/** + * 汉威报警器Adapter + * */ +class OtherDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_other_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val rowsModel = dataRows[position] + holder.deviceNameView.text = rowsModel.deviceName + Glide.with(context) + .load(LocaleConstant.HW_JT_KBZ1) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + holder.deviceModelView.text = rowsModel.productCode + holder.deviceUsedTimeView.text = String.format( + "已使用${rowsModel.createTime.toString().diffDate(true)}天" + ) + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + + override fun getItemCount(): Int = dataRows.size + + private var clickListener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) + } + + fun setOnItemClickListener(clickListener: OnItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) + val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) + val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index d38507a..c035c7b 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -16,6 +16,7 @@ import top.zibin.luban.OnCompressListener import java.io.File import java.text.ParseException +import java.text.SimpleDateFormat import java.util.* import kotlin.math.abs @@ -56,17 +57,22 @@ /** * 时间差-天 * */ -fun String.diffDate(): Int { +fun String.diffDate(needFormat: Boolean): Int { if (this.isBlank()) { return 0 } - try { - val diff = abs(System.currentTimeMillis() - this.toLong() * 1000L) - return (diff / (86400000)).toInt() - } catch (e: ParseException) { - e.printStackTrace() - } - return 0 + val diff = if (needFormat) { + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this)!! + abs(System.currentTimeMillis() - date.time) + } else { + try { + abs(System.currentTimeMillis() - this.toLong() * 1000L) + } catch (e: ParseException) { + e.printStackTrace() + } + } as Long + return (diff / (86400000)).toInt() } fun String.separateResponseCode(): Int { diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt index 98971ce..c9f9257 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -4,16 +4,20 @@ import android.graphics.Typeface import android.os.Handler import android.util.Log +import androidx.lifecycle.ViewModelProvider import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.adapter.OtherDeviceAdapter import com.casic.br.adapter.RecommendAdapter import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.selectCategory +import com.casic.br.model.OtherDeviceModel import com.casic.br.model.RecommendModel import com.casic.br.utils.DeserializeModel import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity import com.casic.br.view.device.* +import com.casic.br.vm.DeviceViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -33,7 +37,10 @@ private val kTag = "DevicePageFragment" private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private lateinit var otherDeviceAdapter: OtherDeviceAdapter + private lateinit var deviceViewModel: DeviceViewModel private var dataBeans: MutableList = ArrayList() + private var dataModes: MutableList = ArrayList() private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -46,6 +53,23 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.listModel.observe(this, { + if (it.code == 200) { + val deviceBeans = it.data?.rows!! + when { + isRefresh -> { + dataModes.clear() + dataModes = deviceBeans + isRefresh = false + } + else -> { + dataModes = deviceBeans + } + } + weakReferenceHandler.sendEmptyMessage(2022112301) + } + }) //TODO 热门推荐 val imageArray = arrayOf( @@ -81,6 +105,7 @@ override fun onResume() { super.onResume() + isRefresh = true TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId()) .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { @@ -102,6 +127,7 @@ Log.d(kTag, "onError: $errorMsg") } }) + deviceViewModel.obtainOtherDeviceListByPage() } private val callback = Handler.Callback { @@ -194,6 +220,13 @@ } }) } + } else if (it.what == 2022112301) { + if (isRefresh) { + otherDeviceAdapter.notifyDataSetChanged() + } else { + otherDeviceAdapter = OtherDeviceAdapter(requireContext(), dataModes) + otherDeviceRecyclerView.adapter = otherDeviceAdapter + } } true } diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt index 1ec1301..6e82149 100644 --- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt @@ -87,7 +87,8 @@ } 2022092903 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt index 4b983f3..9de1a56 100644 --- a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt @@ -125,7 +125,8 @@ } 2022092803 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt index 0598a38..a0be055 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt @@ -151,7 +151,8 @@ } 2022092303 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 7c5ba31..595c52f 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -120,7 +120,8 @@ } 2022092603 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/model/OtherDeviceModel.java b/app/src/main/java/com/casic/br/model/OtherDeviceModel.java new file mode 100644 index 0000000..747a107 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/OtherDeviceModel.java @@ -0,0 +1,274 @@ +package com.casic.br.model; + +import java.util.List; + +public class OtherDeviceModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String brandCode; + private String brandName; + private String createTime; + private int deviceActive; + private String deviceActiveTime; + private String deviceAddress; + private int deviceBindUser; + private String deviceCoreParts; + private String deviceHardwareVersion; + private String deviceId; + private String deviceIp; + private String deviceMac; + private String deviceName; + private String deviceSoftwareVersion; + private int deviceStatus; + private String id; + private int iotDevice; + private String produceDate; + private String productCode; + private String productName; + private String snCode; + private String supplierId; + private String updateTime; + + public String getBrandCode() { + return brandCode; + } + + public void setBrandCode(String brandCode) { + this.brandCode = brandCode; + } + + public String getBrandName() { + return brandName; + } + + public void setBrandName(String brandName) { + this.brandName = brandName; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public int getDeviceActive() { + return deviceActive; + } + + public void setDeviceActive(int deviceActive) { + this.deviceActive = deviceActive; + } + + public String getDeviceActiveTime() { + return deviceActiveTime; + } + + public void setDeviceActiveTime(String deviceActiveTime) { + this.deviceActiveTime = deviceActiveTime; + } + + public String getDeviceAddress() { + return deviceAddress; + } + + public void setDeviceAddress(String deviceAddress) { + this.deviceAddress = deviceAddress; + } + + public int getDeviceBindUser() { + return deviceBindUser; + } + + public void setDeviceBindUser(int deviceBindUser) { + this.deviceBindUser = deviceBindUser; + } + + public String getDeviceCoreParts() { + return deviceCoreParts; + } + + public void setDeviceCoreParts(String deviceCoreParts) { + this.deviceCoreParts = deviceCoreParts; + } + + public String getDeviceHardwareVersion() { + return deviceHardwareVersion; + } + + public void setDeviceHardwareVersion(String deviceHardwareVersion) { + this.deviceHardwareVersion = deviceHardwareVersion; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getDeviceIp() { + return deviceIp; + } + + public void setDeviceIp(String deviceIp) { + this.deviceIp = deviceIp; + } + + public String getDeviceMac() { + return deviceMac; + } + + public void setDeviceMac(String deviceMac) { + this.deviceMac = deviceMac; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getDeviceSoftwareVersion() { + return deviceSoftwareVersion; + } + + public void setDeviceSoftwareVersion(String deviceSoftwareVersion) { + this.deviceSoftwareVersion = deviceSoftwareVersion; + } + + public int getDeviceStatus() { + return deviceStatus; + } + + public void setDeviceStatus(int deviceStatus) { + this.deviceStatus = deviceStatus; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getIotDevice() { + return iotDevice; + } + + public void setIotDevice(int iotDevice) { + this.iotDevice = iotDevice; + } + + public String getProduceDate() { + return produceDate; + } + + public void setProduceDate(String produceDate) { + this.produceDate = produceDate; + } + + public String getProductCode() { + return productCode; + } + + public void setProductCode(String productCode) { + this.productCode = productCode; + } + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public String getSnCode() { + return snCode; + } + + public void setSnCode(String snCode) { + this.snCode = snCode; + } + + public String getSupplierId() { + return supplierId; + } + + public void setSupplierId(String supplierId) { + this.supplierId = supplierId; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index dde5f22..9a1c919 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -104,4 +104,5 @@ const val WIFI_PASSWORD = "wifiPassword" const val ACCOUNT = "account" const val PASSWORD = "password" + const val HW_JT_KBZ1 = "https://www.hanwei.cn/wp-content/uploads/2022/04/JT-KBZ1.png" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 6f79ec1..e177fed 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -58,12 +58,11 @@ .into(holder.imageView) holder.deviceModelView.text = rowsModel.name holder.deviceUsedTimeView.text = String.format( - "已使用${rowsModel.time.toString().diffDate()}天" + "已使用${rowsModel.time.toString().diffDate(false)}天" ) holder.rootView.setOnClickListener { clickListener?.onItemClick(position) } - // 长按监听 holder.moreOperateButton.setOnClickListener { clickListener?.onButtonClick(position) } diff --git a/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt new file mode 100644 index 0000000..f2a34ce --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt @@ -0,0 +1,77 @@ +package com.casic.br.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.casic.br.model.OtherDeviceModel +import com.casic.br.utils.LocaleConstant + +/** + * 汉威报警器Adapter + * */ +class OtherDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_other_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val rowsModel = dataRows[position] + holder.deviceNameView.text = rowsModel.deviceName + Glide.with(context) + .load(LocaleConstant.HW_JT_KBZ1) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + holder.deviceModelView.text = rowsModel.productCode + holder.deviceUsedTimeView.text = String.format( + "已使用${rowsModel.createTime.toString().diffDate(true)}天" + ) + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + + override fun getItemCount(): Int = dataRows.size + + private var clickListener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) + } + + fun setOnItemClickListener(clickListener: OnItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) + val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) + val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index d38507a..c035c7b 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -16,6 +16,7 @@ import top.zibin.luban.OnCompressListener import java.io.File import java.text.ParseException +import java.text.SimpleDateFormat import java.util.* import kotlin.math.abs @@ -56,17 +57,22 @@ /** * 时间差-天 * */ -fun String.diffDate(): Int { +fun String.diffDate(needFormat: Boolean): Int { if (this.isBlank()) { return 0 } - try { - val diff = abs(System.currentTimeMillis() - this.toLong() * 1000L) - return (diff / (86400000)).toInt() - } catch (e: ParseException) { - e.printStackTrace() - } - return 0 + val diff = if (needFormat) { + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this)!! + abs(System.currentTimeMillis() - date.time) + } else { + try { + abs(System.currentTimeMillis() - this.toLong() * 1000L) + } catch (e: ParseException) { + e.printStackTrace() + } + } as Long + return (diff / (86400000)).toInt() } fun String.separateResponseCode(): Int { diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt index 98971ce..c9f9257 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -4,16 +4,20 @@ import android.graphics.Typeface import android.os.Handler import android.util.Log +import androidx.lifecycle.ViewModelProvider import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.adapter.OtherDeviceAdapter import com.casic.br.adapter.RecommendAdapter import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.selectCategory +import com.casic.br.model.OtherDeviceModel import com.casic.br.model.RecommendModel import com.casic.br.utils.DeserializeModel import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity import com.casic.br.view.device.* +import com.casic.br.vm.DeviceViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -33,7 +37,10 @@ private val kTag = "DevicePageFragment" private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private lateinit var otherDeviceAdapter: OtherDeviceAdapter + private lateinit var deviceViewModel: DeviceViewModel private var dataBeans: MutableList = ArrayList() + private var dataModes: MutableList = ArrayList() private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -46,6 +53,23 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.listModel.observe(this, { + if (it.code == 200) { + val deviceBeans = it.data?.rows!! + when { + isRefresh -> { + dataModes.clear() + dataModes = deviceBeans + isRefresh = false + } + else -> { + dataModes = deviceBeans + } + } + weakReferenceHandler.sendEmptyMessage(2022112301) + } + }) //TODO 热门推荐 val imageArray = arrayOf( @@ -81,6 +105,7 @@ override fun onResume() { super.onResume() + isRefresh = true TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId()) .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { @@ -102,6 +127,7 @@ Log.d(kTag, "onError: $errorMsg") } }) + deviceViewModel.obtainOtherDeviceListByPage() } private val callback = Handler.Callback { @@ -194,6 +220,13 @@ } }) } + } else if (it.what == 2022112301) { + if (isRefresh) { + otherDeviceAdapter.notifyDataSetChanged() + } else { + otherDeviceAdapter = OtherDeviceAdapter(requireContext(), dataModes) + otherDeviceRecyclerView.adapter = otherDeviceAdapter + } } true } diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt index 1ec1301..6e82149 100644 --- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt @@ -87,7 +87,8 @@ } 2022092903 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt index 4b983f3..9de1a56 100644 --- a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt @@ -125,7 +125,8 @@ } 2022092803 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt index 0598a38..a0be055 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt @@ -151,7 +151,8 @@ } 2022092303 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 7c5ba31..595c52f 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -120,7 +120,8 @@ } 2022092603 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/model/OtherDeviceModel.java b/app/src/main/java/com/casic/br/model/OtherDeviceModel.java new file mode 100644 index 0000000..747a107 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/OtherDeviceModel.java @@ -0,0 +1,274 @@ +package com.casic.br.model; + +import java.util.List; + +public class OtherDeviceModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String brandCode; + private String brandName; + private String createTime; + private int deviceActive; + private String deviceActiveTime; + private String deviceAddress; + private int deviceBindUser; + private String deviceCoreParts; + private String deviceHardwareVersion; + private String deviceId; + private String deviceIp; + private String deviceMac; + private String deviceName; + private String deviceSoftwareVersion; + private int deviceStatus; + private String id; + private int iotDevice; + private String produceDate; + private String productCode; + private String productName; + private String snCode; + private String supplierId; + private String updateTime; + + public String getBrandCode() { + return brandCode; + } + + public void setBrandCode(String brandCode) { + this.brandCode = brandCode; + } + + public String getBrandName() { + return brandName; + } + + public void setBrandName(String brandName) { + this.brandName = brandName; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public int getDeviceActive() { + return deviceActive; + } + + public void setDeviceActive(int deviceActive) { + this.deviceActive = deviceActive; + } + + public String getDeviceActiveTime() { + return deviceActiveTime; + } + + public void setDeviceActiveTime(String deviceActiveTime) { + this.deviceActiveTime = deviceActiveTime; + } + + public String getDeviceAddress() { + return deviceAddress; + } + + public void setDeviceAddress(String deviceAddress) { + this.deviceAddress = deviceAddress; + } + + public int getDeviceBindUser() { + return deviceBindUser; + } + + public void setDeviceBindUser(int deviceBindUser) { + this.deviceBindUser = deviceBindUser; + } + + public String getDeviceCoreParts() { + return deviceCoreParts; + } + + public void setDeviceCoreParts(String deviceCoreParts) { + this.deviceCoreParts = deviceCoreParts; + } + + public String getDeviceHardwareVersion() { + return deviceHardwareVersion; + } + + public void setDeviceHardwareVersion(String deviceHardwareVersion) { + this.deviceHardwareVersion = deviceHardwareVersion; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getDeviceIp() { + return deviceIp; + } + + public void setDeviceIp(String deviceIp) { + this.deviceIp = deviceIp; + } + + public String getDeviceMac() { + return deviceMac; + } + + public void setDeviceMac(String deviceMac) { + this.deviceMac = deviceMac; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getDeviceSoftwareVersion() { + return deviceSoftwareVersion; + } + + public void setDeviceSoftwareVersion(String deviceSoftwareVersion) { + this.deviceSoftwareVersion = deviceSoftwareVersion; + } + + public int getDeviceStatus() { + return deviceStatus; + } + + public void setDeviceStatus(int deviceStatus) { + this.deviceStatus = deviceStatus; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getIotDevice() { + return iotDevice; + } + + public void setIotDevice(int iotDevice) { + this.iotDevice = iotDevice; + } + + public String getProduceDate() { + return produceDate; + } + + public void setProduceDate(String produceDate) { + this.produceDate = produceDate; + } + + public String getProductCode() { + return productCode; + } + + public void setProductCode(String productCode) { + this.productCode = productCode; + } + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public String getSnCode() { + return snCode; + } + + public void setSnCode(String snCode) { + this.snCode = snCode; + } + + public String getSupplierId() { + return supplierId; + } + + public void setSupplierId(String supplierId) { + this.supplierId = supplierId; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index dde5f22..9a1c919 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -104,4 +104,5 @@ const val WIFI_PASSWORD = "wifiPassword" const val ACCOUNT = "account" const val PASSWORD = "password" + const val HW_JT_KBZ1 = "https://www.hanwei.cn/wp-content/uploads/2022/04/JT-KBZ1.png" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 788e40b..4a3cb74 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -155,4 +155,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 汉威设备列表 + */ + @POST("/deviceInfo/listPage") + suspend fun obtainOtherDeviceListByPage( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 6f79ec1..e177fed 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -58,12 +58,11 @@ .into(holder.imageView) holder.deviceModelView.text = rowsModel.name holder.deviceUsedTimeView.text = String.format( - "已使用${rowsModel.time.toString().diffDate()}天" + "已使用${rowsModel.time.toString().diffDate(false)}天" ) holder.rootView.setOnClickListener { clickListener?.onItemClick(position) } - // 长按监听 holder.moreOperateButton.setOnClickListener { clickListener?.onButtonClick(position) } diff --git a/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt new file mode 100644 index 0000000..f2a34ce --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt @@ -0,0 +1,77 @@ +package com.casic.br.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.casic.br.model.OtherDeviceModel +import com.casic.br.utils.LocaleConstant + +/** + * 汉威报警器Adapter + * */ +class OtherDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_other_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val rowsModel = dataRows[position] + holder.deviceNameView.text = rowsModel.deviceName + Glide.with(context) + .load(LocaleConstant.HW_JT_KBZ1) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + holder.deviceModelView.text = rowsModel.productCode + holder.deviceUsedTimeView.text = String.format( + "已使用${rowsModel.createTime.toString().diffDate(true)}天" + ) + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + + override fun getItemCount(): Int = dataRows.size + + private var clickListener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) + } + + fun setOnItemClickListener(clickListener: OnItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) + val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) + val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index d38507a..c035c7b 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -16,6 +16,7 @@ import top.zibin.luban.OnCompressListener import java.io.File import java.text.ParseException +import java.text.SimpleDateFormat import java.util.* import kotlin.math.abs @@ -56,17 +57,22 @@ /** * 时间差-天 * */ -fun String.diffDate(): Int { +fun String.diffDate(needFormat: Boolean): Int { if (this.isBlank()) { return 0 } - try { - val diff = abs(System.currentTimeMillis() - this.toLong() * 1000L) - return (diff / (86400000)).toInt() - } catch (e: ParseException) { - e.printStackTrace() - } - return 0 + val diff = if (needFormat) { + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this)!! + abs(System.currentTimeMillis() - date.time) + } else { + try { + abs(System.currentTimeMillis() - this.toLong() * 1000L) + } catch (e: ParseException) { + e.printStackTrace() + } + } as Long + return (diff / (86400000)).toInt() } fun String.separateResponseCode(): Int { diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt index 98971ce..c9f9257 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -4,16 +4,20 @@ import android.graphics.Typeface import android.os.Handler import android.util.Log +import androidx.lifecycle.ViewModelProvider import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.adapter.OtherDeviceAdapter import com.casic.br.adapter.RecommendAdapter import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.selectCategory +import com.casic.br.model.OtherDeviceModel import com.casic.br.model.RecommendModel import com.casic.br.utils.DeserializeModel import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity import com.casic.br.view.device.* +import com.casic.br.vm.DeviceViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -33,7 +37,10 @@ private val kTag = "DevicePageFragment" private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private lateinit var otherDeviceAdapter: OtherDeviceAdapter + private lateinit var deviceViewModel: DeviceViewModel private var dataBeans: MutableList = ArrayList() + private var dataModes: MutableList = ArrayList() private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -46,6 +53,23 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.listModel.observe(this, { + if (it.code == 200) { + val deviceBeans = it.data?.rows!! + when { + isRefresh -> { + dataModes.clear() + dataModes = deviceBeans + isRefresh = false + } + else -> { + dataModes = deviceBeans + } + } + weakReferenceHandler.sendEmptyMessage(2022112301) + } + }) //TODO 热门推荐 val imageArray = arrayOf( @@ -81,6 +105,7 @@ override fun onResume() { super.onResume() + isRefresh = true TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId()) .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { @@ -102,6 +127,7 @@ Log.d(kTag, "onError: $errorMsg") } }) + deviceViewModel.obtainOtherDeviceListByPage() } private val callback = Handler.Callback { @@ -194,6 +220,13 @@ } }) } + } else if (it.what == 2022112301) { + if (isRefresh) { + otherDeviceAdapter.notifyDataSetChanged() + } else { + otherDeviceAdapter = OtherDeviceAdapter(requireContext(), dataModes) + otherDeviceRecyclerView.adapter = otherDeviceAdapter + } } true } diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt index 1ec1301..6e82149 100644 --- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt @@ -87,7 +87,8 @@ } 2022092903 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt index 4b983f3..9de1a56 100644 --- a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt @@ -125,7 +125,8 @@ } 2022092803 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt index 0598a38..a0be055 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt @@ -151,7 +151,8 @@ } 2022092303 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 7c5ba31..595c52f 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -120,7 +120,8 @@ } 2022092603 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/model/OtherDeviceModel.java b/app/src/main/java/com/casic/br/model/OtherDeviceModel.java new file mode 100644 index 0000000..747a107 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/OtherDeviceModel.java @@ -0,0 +1,274 @@ +package com.casic.br.model; + +import java.util.List; + +public class OtherDeviceModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String brandCode; + private String brandName; + private String createTime; + private int deviceActive; + private String deviceActiveTime; + private String deviceAddress; + private int deviceBindUser; + private String deviceCoreParts; + private String deviceHardwareVersion; + private String deviceId; + private String deviceIp; + private String deviceMac; + private String deviceName; + private String deviceSoftwareVersion; + private int deviceStatus; + private String id; + private int iotDevice; + private String produceDate; + private String productCode; + private String productName; + private String snCode; + private String supplierId; + private String updateTime; + + public String getBrandCode() { + return brandCode; + } + + public void setBrandCode(String brandCode) { + this.brandCode = brandCode; + } + + public String getBrandName() { + return brandName; + } + + public void setBrandName(String brandName) { + this.brandName = brandName; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public int getDeviceActive() { + return deviceActive; + } + + public void setDeviceActive(int deviceActive) { + this.deviceActive = deviceActive; + } + + public String getDeviceActiveTime() { + return deviceActiveTime; + } + + public void setDeviceActiveTime(String deviceActiveTime) { + this.deviceActiveTime = deviceActiveTime; + } + + public String getDeviceAddress() { + return deviceAddress; + } + + public void setDeviceAddress(String deviceAddress) { + this.deviceAddress = deviceAddress; + } + + public int getDeviceBindUser() { + return deviceBindUser; + } + + public void setDeviceBindUser(int deviceBindUser) { + this.deviceBindUser = deviceBindUser; + } + + public String getDeviceCoreParts() { + return deviceCoreParts; + } + + public void setDeviceCoreParts(String deviceCoreParts) { + this.deviceCoreParts = deviceCoreParts; + } + + public String getDeviceHardwareVersion() { + return deviceHardwareVersion; + } + + public void setDeviceHardwareVersion(String deviceHardwareVersion) { + this.deviceHardwareVersion = deviceHardwareVersion; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getDeviceIp() { + return deviceIp; + } + + public void setDeviceIp(String deviceIp) { + this.deviceIp = deviceIp; + } + + public String getDeviceMac() { + return deviceMac; + } + + public void setDeviceMac(String deviceMac) { + this.deviceMac = deviceMac; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getDeviceSoftwareVersion() { + return deviceSoftwareVersion; + } + + public void setDeviceSoftwareVersion(String deviceSoftwareVersion) { + this.deviceSoftwareVersion = deviceSoftwareVersion; + } + + public int getDeviceStatus() { + return deviceStatus; + } + + public void setDeviceStatus(int deviceStatus) { + this.deviceStatus = deviceStatus; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getIotDevice() { + return iotDevice; + } + + public void setIotDevice(int iotDevice) { + this.iotDevice = iotDevice; + } + + public String getProduceDate() { + return produceDate; + } + + public void setProduceDate(String produceDate) { + this.produceDate = produceDate; + } + + public String getProductCode() { + return productCode; + } + + public void setProductCode(String productCode) { + this.productCode = productCode; + } + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public String getSnCode() { + return snCode; + } + + public void setSnCode(String snCode) { + this.snCode = snCode; + } + + public String getSupplierId() { + return supplierId; + } + + public void setSupplierId(String supplierId) { + this.supplierId = supplierId; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index dde5f22..9a1c919 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -104,4 +104,5 @@ const val WIFI_PASSWORD = "wifiPassword" const val ACCOUNT = "account" const val PASSWORD = "password" + const val HW_JT_KBZ1 = "https://www.hanwei.cn/wp-content/uploads/2022/04/JT-KBZ1.png" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 788e40b..4a3cb74 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -155,4 +155,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 汉威设备列表 + */ + @POST("/deviceInfo/listPage") + suspend fun obtainOtherDeviceListByPage( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index 4d105c3..7f28146 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -315,4 +315,23 @@ ) return api.updateMessageById(AuthenticationHelper.token!!, requestBody) } + + /** + * 汉威设备列表 + */ + suspend fun obtainOtherDeviceListByPage(): String { + val paramObject = JSONObject() + paramObject.put("brandName", "hanwei") + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = 1 + return api.obtainOtherDeviceListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 6f79ec1..e177fed 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -58,12 +58,11 @@ .into(holder.imageView) holder.deviceModelView.text = rowsModel.name holder.deviceUsedTimeView.text = String.format( - "已使用${rowsModel.time.toString().diffDate()}天" + "已使用${rowsModel.time.toString().diffDate(false)}天" ) holder.rootView.setOnClickListener { clickListener?.onItemClick(position) } - // 长按监听 holder.moreOperateButton.setOnClickListener { clickListener?.onButtonClick(position) } diff --git a/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt new file mode 100644 index 0000000..f2a34ce --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt @@ -0,0 +1,77 @@ +package com.casic.br.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.casic.br.model.OtherDeviceModel +import com.casic.br.utils.LocaleConstant + +/** + * 汉威报警器Adapter + * */ +class OtherDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_other_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val rowsModel = dataRows[position] + holder.deviceNameView.text = rowsModel.deviceName + Glide.with(context) + .load(LocaleConstant.HW_JT_KBZ1) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + holder.deviceModelView.text = rowsModel.productCode + holder.deviceUsedTimeView.text = String.format( + "已使用${rowsModel.createTime.toString().diffDate(true)}天" + ) + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + + override fun getItemCount(): Int = dataRows.size + + private var clickListener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) + } + + fun setOnItemClickListener(clickListener: OnItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) + val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) + val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index d38507a..c035c7b 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -16,6 +16,7 @@ import top.zibin.luban.OnCompressListener import java.io.File import java.text.ParseException +import java.text.SimpleDateFormat import java.util.* import kotlin.math.abs @@ -56,17 +57,22 @@ /** * 时间差-天 * */ -fun String.diffDate(): Int { +fun String.diffDate(needFormat: Boolean): Int { if (this.isBlank()) { return 0 } - try { - val diff = abs(System.currentTimeMillis() - this.toLong() * 1000L) - return (diff / (86400000)).toInt() - } catch (e: ParseException) { - e.printStackTrace() - } - return 0 + val diff = if (needFormat) { + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this)!! + abs(System.currentTimeMillis() - date.time) + } else { + try { + abs(System.currentTimeMillis() - this.toLong() * 1000L) + } catch (e: ParseException) { + e.printStackTrace() + } + } as Long + return (diff / (86400000)).toInt() } fun String.separateResponseCode(): Int { diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt index 98971ce..c9f9257 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -4,16 +4,20 @@ import android.graphics.Typeface import android.os.Handler import android.util.Log +import androidx.lifecycle.ViewModelProvider import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.adapter.OtherDeviceAdapter import com.casic.br.adapter.RecommendAdapter import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.selectCategory +import com.casic.br.model.OtherDeviceModel import com.casic.br.model.RecommendModel import com.casic.br.utils.DeserializeModel import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity import com.casic.br.view.device.* +import com.casic.br.vm.DeviceViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -33,7 +37,10 @@ private val kTag = "DevicePageFragment" private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private lateinit var otherDeviceAdapter: OtherDeviceAdapter + private lateinit var deviceViewModel: DeviceViewModel private var dataBeans: MutableList = ArrayList() + private var dataModes: MutableList = ArrayList() private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -46,6 +53,23 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.listModel.observe(this, { + if (it.code == 200) { + val deviceBeans = it.data?.rows!! + when { + isRefresh -> { + dataModes.clear() + dataModes = deviceBeans + isRefresh = false + } + else -> { + dataModes = deviceBeans + } + } + weakReferenceHandler.sendEmptyMessage(2022112301) + } + }) //TODO 热门推荐 val imageArray = arrayOf( @@ -81,6 +105,7 @@ override fun onResume() { super.onResume() + isRefresh = true TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId()) .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { @@ -102,6 +127,7 @@ Log.d(kTag, "onError: $errorMsg") } }) + deviceViewModel.obtainOtherDeviceListByPage() } private val callback = Handler.Callback { @@ -194,6 +220,13 @@ } }) } + } else if (it.what == 2022112301) { + if (isRefresh) { + otherDeviceAdapter.notifyDataSetChanged() + } else { + otherDeviceAdapter = OtherDeviceAdapter(requireContext(), dataModes) + otherDeviceRecyclerView.adapter = otherDeviceAdapter + } } true } diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt index 1ec1301..6e82149 100644 --- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt @@ -87,7 +87,8 @@ } 2022092903 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt index 4b983f3..9de1a56 100644 --- a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt @@ -125,7 +125,8 @@ } 2022092803 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt index 0598a38..a0be055 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt @@ -151,7 +151,8 @@ } 2022092303 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 7c5ba31..595c52f 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -120,7 +120,8 @@ } 2022092603 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/model/OtherDeviceModel.java b/app/src/main/java/com/casic/br/model/OtherDeviceModel.java new file mode 100644 index 0000000..747a107 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/OtherDeviceModel.java @@ -0,0 +1,274 @@ +package com.casic.br.model; + +import java.util.List; + +public class OtherDeviceModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String brandCode; + private String brandName; + private String createTime; + private int deviceActive; + private String deviceActiveTime; + private String deviceAddress; + private int deviceBindUser; + private String deviceCoreParts; + private String deviceHardwareVersion; + private String deviceId; + private String deviceIp; + private String deviceMac; + private String deviceName; + private String deviceSoftwareVersion; + private int deviceStatus; + private String id; + private int iotDevice; + private String produceDate; + private String productCode; + private String productName; + private String snCode; + private String supplierId; + private String updateTime; + + public String getBrandCode() { + return brandCode; + } + + public void setBrandCode(String brandCode) { + this.brandCode = brandCode; + } + + public String getBrandName() { + return brandName; + } + + public void setBrandName(String brandName) { + this.brandName = brandName; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public int getDeviceActive() { + return deviceActive; + } + + public void setDeviceActive(int deviceActive) { + this.deviceActive = deviceActive; + } + + public String getDeviceActiveTime() { + return deviceActiveTime; + } + + public void setDeviceActiveTime(String deviceActiveTime) { + this.deviceActiveTime = deviceActiveTime; + } + + public String getDeviceAddress() { + return deviceAddress; + } + + public void setDeviceAddress(String deviceAddress) { + this.deviceAddress = deviceAddress; + } + + public int getDeviceBindUser() { + return deviceBindUser; + } + + public void setDeviceBindUser(int deviceBindUser) { + this.deviceBindUser = deviceBindUser; + } + + public String getDeviceCoreParts() { + return deviceCoreParts; + } + + public void setDeviceCoreParts(String deviceCoreParts) { + this.deviceCoreParts = deviceCoreParts; + } + + public String getDeviceHardwareVersion() { + return deviceHardwareVersion; + } + + public void setDeviceHardwareVersion(String deviceHardwareVersion) { + this.deviceHardwareVersion = deviceHardwareVersion; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getDeviceIp() { + return deviceIp; + } + + public void setDeviceIp(String deviceIp) { + this.deviceIp = deviceIp; + } + + public String getDeviceMac() { + return deviceMac; + } + + public void setDeviceMac(String deviceMac) { + this.deviceMac = deviceMac; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getDeviceSoftwareVersion() { + return deviceSoftwareVersion; + } + + public void setDeviceSoftwareVersion(String deviceSoftwareVersion) { + this.deviceSoftwareVersion = deviceSoftwareVersion; + } + + public int getDeviceStatus() { + return deviceStatus; + } + + public void setDeviceStatus(int deviceStatus) { + this.deviceStatus = deviceStatus; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getIotDevice() { + return iotDevice; + } + + public void setIotDevice(int iotDevice) { + this.iotDevice = iotDevice; + } + + public String getProduceDate() { + return produceDate; + } + + public void setProduceDate(String produceDate) { + this.produceDate = produceDate; + } + + public String getProductCode() { + return productCode; + } + + public void setProductCode(String productCode) { + this.productCode = productCode; + } + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public String getSnCode() { + return snCode; + } + + public void setSnCode(String snCode) { + this.snCode = snCode; + } + + public String getSupplierId() { + return supplierId; + } + + public void setSupplierId(String supplierId) { + this.supplierId = supplierId; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index dde5f22..9a1c919 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -104,4 +104,5 @@ const val WIFI_PASSWORD = "wifiPassword" const val ACCOUNT = "account" const val PASSWORD = "password" + const val HW_JT_KBZ1 = "https://www.hanwei.cn/wp-content/uploads/2022/04/JT-KBZ1.png" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 788e40b..4a3cb74 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -155,4 +155,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 汉威设备列表 + */ + @POST("/deviceInfo/listPage") + suspend fun obtainOtherDeviceListByPage( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index 4d105c3..7f28146 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -315,4 +315,23 @@ ) return api.updateMessageById(AuthenticationHelper.token!!, requestBody) } + + /** + * 汉威设备列表 + */ + suspend fun obtainOtherDeviceListByPage(): String { + val paramObject = JSONObject() + paramObject.put("brandName", "hanwei") + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = 1 + return api.obtainOtherDeviceListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt index 300e963..da88052 100644 --- a/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt @@ -1,11 +1,15 @@ package com.casic.br.vm +import androidx.lifecycle.MutableLiveData import com.amap.api.location.AMapLocation import com.casic.br.base.BaseApplication import com.casic.br.extensions.separateResponseCode import com.casic.br.extensions.toErrorMessage +import com.casic.br.model.OtherDeviceModel import com.casic.br.model.UserDetailModel import com.casic.br.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.BaseViewModel @@ -14,6 +18,10 @@ import org.json.JSONObject class DeviceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val listModel = MutableLiveData() + fun addDevice( devResp: DeviceBean, userModel: UserDetailModel.DataModel, @@ -43,4 +51,18 @@ launch({ RetrofitServiceManager.addDeviceData(dataModel) }, { it.printStackTrace() }) + + fun obtainOtherDeviceListByPage() = launch({ + val response = RetrofitServiceManager.obtainOtherDeviceListByPage() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.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/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 6f79ec1..e177fed 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -58,12 +58,11 @@ .into(holder.imageView) holder.deviceModelView.text = rowsModel.name holder.deviceUsedTimeView.text = String.format( - "已使用${rowsModel.time.toString().diffDate()}天" + "已使用${rowsModel.time.toString().diffDate(false)}天" ) holder.rootView.setOnClickListener { clickListener?.onItemClick(position) } - // 长按监听 holder.moreOperateButton.setOnClickListener { clickListener?.onButtonClick(position) } diff --git a/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt new file mode 100644 index 0000000..f2a34ce --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/OtherDeviceAdapter.kt @@ -0,0 +1,77 @@ +package com.casic.br.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.casic.br.model.OtherDeviceModel +import com.casic.br.utils.LocaleConstant + +/** + * 汉威报警器Adapter + * */ +class OtherDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_other_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val rowsModel = dataRows[position] + holder.deviceNameView.text = rowsModel.deviceName + Glide.with(context) + .load(LocaleConstant.HW_JT_KBZ1) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + holder.deviceModelView.text = rowsModel.productCode + holder.deviceUsedTimeView.text = String.format( + "已使用${rowsModel.createTime.toString().diffDate(true)}天" + ) + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + + override fun getItemCount(): Int = dataRows.size + + private var clickListener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) + } + + fun setOnItemClickListener(clickListener: OnItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) + val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) + val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index d38507a..c035c7b 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -16,6 +16,7 @@ import top.zibin.luban.OnCompressListener import java.io.File import java.text.ParseException +import java.text.SimpleDateFormat import java.util.* import kotlin.math.abs @@ -56,17 +57,22 @@ /** * 时间差-天 * */ -fun String.diffDate(): Int { +fun String.diffDate(needFormat: Boolean): Int { if (this.isBlank()) { return 0 } - try { - val diff = abs(System.currentTimeMillis() - this.toLong() * 1000L) - return (diff / (86400000)).toInt() - } catch (e: ParseException) { - e.printStackTrace() - } - return 0 + val diff = if (needFormat) { + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this)!! + abs(System.currentTimeMillis() - date.time) + } else { + try { + abs(System.currentTimeMillis() - this.toLong() * 1000L) + } catch (e: ParseException) { + e.printStackTrace() + } + } as Long + return (diff / (86400000)).toInt() } fun String.separateResponseCode(): Int { diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt index 98971ce..c9f9257 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -4,16 +4,20 @@ import android.graphics.Typeface import android.os.Handler import android.util.Log +import androidx.lifecycle.ViewModelProvider import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.adapter.OtherDeviceAdapter import com.casic.br.adapter.RecommendAdapter import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.selectCategory +import com.casic.br.model.OtherDeviceModel import com.casic.br.model.RecommendModel import com.casic.br.utils.DeserializeModel import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity import com.casic.br.view.device.* +import com.casic.br.vm.DeviceViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -33,7 +37,10 @@ private val kTag = "DevicePageFragment" private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private lateinit var otherDeviceAdapter: OtherDeviceAdapter + private lateinit var deviceViewModel: DeviceViewModel private var dataBeans: MutableList = ArrayList() + private var dataModes: MutableList = ArrayList() private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -46,6 +53,23 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.listModel.observe(this, { + if (it.code == 200) { + val deviceBeans = it.data?.rows!! + when { + isRefresh -> { + dataModes.clear() + dataModes = deviceBeans + isRefresh = false + } + else -> { + dataModes = deviceBeans + } + } + weakReferenceHandler.sendEmptyMessage(2022112301) + } + }) //TODO 热门推荐 val imageArray = arrayOf( @@ -81,6 +105,7 @@ override fun onResume() { super.onResume() + isRefresh = true TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId()) .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { @@ -102,6 +127,7 @@ Log.d(kTag, "onError: $errorMsg") } }) + deviceViewModel.obtainOtherDeviceListByPage() } private val callback = Handler.Callback { @@ -194,6 +220,13 @@ } }) } + } else if (it.what == 2022112301) { + if (isRefresh) { + otherDeviceAdapter.notifyDataSetChanged() + } else { + otherDeviceAdapter = OtherDeviceAdapter(requireContext(), dataModes) + otherDeviceRecyclerView.adapter = otherDeviceAdapter + } } true } diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt index 1ec1301..6e82149 100644 --- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt @@ -87,7 +87,8 @@ } 2022092903 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt index 4b983f3..9de1a56 100644 --- a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt @@ -125,7 +125,8 @@ } 2022092803 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt index 0598a38..a0be055 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt @@ -151,7 +151,8 @@ } 2022092303 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 7c5ba31..595c52f 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -120,7 +120,8 @@ } 2022092603 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/model/OtherDeviceModel.java b/app/src/main/java/com/casic/br/model/OtherDeviceModel.java new file mode 100644 index 0000000..747a107 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/OtherDeviceModel.java @@ -0,0 +1,274 @@ +package com.casic.br.model; + +import java.util.List; + +public class OtherDeviceModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String brandCode; + private String brandName; + private String createTime; + private int deviceActive; + private String deviceActiveTime; + private String deviceAddress; + private int deviceBindUser; + private String deviceCoreParts; + private String deviceHardwareVersion; + private String deviceId; + private String deviceIp; + private String deviceMac; + private String deviceName; + private String deviceSoftwareVersion; + private int deviceStatus; + private String id; + private int iotDevice; + private String produceDate; + private String productCode; + private String productName; + private String snCode; + private String supplierId; + private String updateTime; + + public String getBrandCode() { + return brandCode; + } + + public void setBrandCode(String brandCode) { + this.brandCode = brandCode; + } + + public String getBrandName() { + return brandName; + } + + public void setBrandName(String brandName) { + this.brandName = brandName; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public int getDeviceActive() { + return deviceActive; + } + + public void setDeviceActive(int deviceActive) { + this.deviceActive = deviceActive; + } + + public String getDeviceActiveTime() { + return deviceActiveTime; + } + + public void setDeviceActiveTime(String deviceActiveTime) { + this.deviceActiveTime = deviceActiveTime; + } + + public String getDeviceAddress() { + return deviceAddress; + } + + public void setDeviceAddress(String deviceAddress) { + this.deviceAddress = deviceAddress; + } + + public int getDeviceBindUser() { + return deviceBindUser; + } + + public void setDeviceBindUser(int deviceBindUser) { + this.deviceBindUser = deviceBindUser; + } + + public String getDeviceCoreParts() { + return deviceCoreParts; + } + + public void setDeviceCoreParts(String deviceCoreParts) { + this.deviceCoreParts = deviceCoreParts; + } + + public String getDeviceHardwareVersion() { + return deviceHardwareVersion; + } + + public void setDeviceHardwareVersion(String deviceHardwareVersion) { + this.deviceHardwareVersion = deviceHardwareVersion; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getDeviceIp() { + return deviceIp; + } + + public void setDeviceIp(String deviceIp) { + this.deviceIp = deviceIp; + } + + public String getDeviceMac() { + return deviceMac; + } + + public void setDeviceMac(String deviceMac) { + this.deviceMac = deviceMac; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getDeviceSoftwareVersion() { + return deviceSoftwareVersion; + } + + public void setDeviceSoftwareVersion(String deviceSoftwareVersion) { + this.deviceSoftwareVersion = deviceSoftwareVersion; + } + + public int getDeviceStatus() { + return deviceStatus; + } + + public void setDeviceStatus(int deviceStatus) { + this.deviceStatus = deviceStatus; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getIotDevice() { + return iotDevice; + } + + public void setIotDevice(int iotDevice) { + this.iotDevice = iotDevice; + } + + public String getProduceDate() { + return produceDate; + } + + public void setProduceDate(String produceDate) { + this.produceDate = produceDate; + } + + public String getProductCode() { + return productCode; + } + + public void setProductCode(String productCode) { + this.productCode = productCode; + } + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public String getSnCode() { + return snCode; + } + + public void setSnCode(String snCode) { + this.snCode = snCode; + } + + public String getSupplierId() { + return supplierId; + } + + public void setSupplierId(String supplierId) { + this.supplierId = supplierId; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index dde5f22..9a1c919 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -104,4 +104,5 @@ const val WIFI_PASSWORD = "wifiPassword" const val ACCOUNT = "account" const val PASSWORD = "password" + const val HW_JT_KBZ1 = "https://www.hanwei.cn/wp-content/uploads/2022/04/JT-KBZ1.png" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 788e40b..4a3cb74 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -155,4 +155,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 汉威设备列表 + */ + @POST("/deviceInfo/listPage") + suspend fun obtainOtherDeviceListByPage( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index 4d105c3..7f28146 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -315,4 +315,23 @@ ) return api.updateMessageById(AuthenticationHelper.token!!, requestBody) } + + /** + * 汉威设备列表 + */ + suspend fun obtainOtherDeviceListByPage(): String { + val paramObject = JSONObject() + paramObject.put("brandName", "hanwei") + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = 1 + return api.obtainOtherDeviceListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt index 300e963..da88052 100644 --- a/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt @@ -1,11 +1,15 @@ package com.casic.br.vm +import androidx.lifecycle.MutableLiveData import com.amap.api.location.AMapLocation import com.casic.br.base.BaseApplication import com.casic.br.extensions.separateResponseCode import com.casic.br.extensions.toErrorMessage +import com.casic.br.model.OtherDeviceModel import com.casic.br.model.UserDetailModel import com.casic.br.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.BaseViewModel @@ -14,6 +18,10 @@ import org.json.JSONObject class DeviceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val listModel = MutableLiveData() + fun addDevice( devResp: DeviceBean, userModel: UserDetailModel.DataModel, @@ -43,4 +51,18 @@ launch({ RetrofitServiceManager.addDeviceData(dataModel) }, { it.printStackTrace() }) + + fun obtainOtherDeviceListByPage() = launch({ + val response = RetrofitServiceManager.obtainOtherDeviceListByPage() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.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/layout/fragment_device.xml b/app/src/main/res/layout/fragment_device.xml index 223f586..77fd67a 100644 --- a/app/src/main/res/layout/fragment_device.xml +++ b/app/src/main/res/layout/fragment_device.xml @@ -54,6 +54,25 @@ app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="2" /> + + + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_other_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val rowsModel = dataRows[position] + holder.deviceNameView.text = rowsModel.deviceName + Glide.with(context) + .load(LocaleConstant.HW_JT_KBZ1) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + holder.deviceModelView.text = rowsModel.productCode + holder.deviceUsedTimeView.text = String.format( + "已使用${rowsModel.createTime.toString().diffDate(true)}天" + ) + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + + override fun getItemCount(): Int = dataRows.size + + private var clickListener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) + } + + fun setOnItemClickListener(clickListener: OnItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) + val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) + val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index d38507a..c035c7b 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -16,6 +16,7 @@ import top.zibin.luban.OnCompressListener import java.io.File import java.text.ParseException +import java.text.SimpleDateFormat import java.util.* import kotlin.math.abs @@ -56,17 +57,22 @@ /** * 时间差-天 * */ -fun String.diffDate(): Int { +fun String.diffDate(needFormat: Boolean): Int { if (this.isBlank()) { return 0 } - try { - val diff = abs(System.currentTimeMillis() - this.toLong() * 1000L) - return (diff / (86400000)).toInt() - } catch (e: ParseException) { - e.printStackTrace() - } - return 0 + val diff = if (needFormat) { + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this)!! + abs(System.currentTimeMillis() - date.time) + } else { + try { + abs(System.currentTimeMillis() - this.toLong() * 1000L) + } catch (e: ParseException) { + e.printStackTrace() + } + } as Long + return (diff / (86400000)).toInt() } fun String.separateResponseCode(): Int { diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt index 98971ce..c9f9257 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -4,16 +4,20 @@ import android.graphics.Typeface import android.os.Handler import android.util.Log +import androidx.lifecycle.ViewModelProvider import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.adapter.OtherDeviceAdapter import com.casic.br.adapter.RecommendAdapter import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.selectCategory +import com.casic.br.model.OtherDeviceModel import com.casic.br.model.RecommendModel import com.casic.br.utils.DeserializeModel import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity import com.casic.br.view.device.* +import com.casic.br.vm.DeviceViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -33,7 +37,10 @@ private val kTag = "DevicePageFragment" private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private lateinit var otherDeviceAdapter: OtherDeviceAdapter + private lateinit var deviceViewModel: DeviceViewModel private var dataBeans: MutableList = ArrayList() + private var dataModes: MutableList = ArrayList() private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -46,6 +53,23 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + deviceViewModel.listModel.observe(this, { + if (it.code == 200) { + val deviceBeans = it.data?.rows!! + when { + isRefresh -> { + dataModes.clear() + dataModes = deviceBeans + isRefresh = false + } + else -> { + dataModes = deviceBeans + } + } + weakReferenceHandler.sendEmptyMessage(2022112301) + } + }) //TODO 热门推荐 val imageArray = arrayOf( @@ -81,6 +105,7 @@ override fun onResume() { super.onResume() + isRefresh = true TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId()) .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { @@ -102,6 +127,7 @@ Log.d(kTag, "onError: $errorMsg") } }) + deviceViewModel.obtainOtherDeviceListByPage() } private val callback = Handler.Callback { @@ -194,6 +220,13 @@ } }) } + } else if (it.what == 2022112301) { + if (isRefresh) { + otherDeviceAdapter.notifyDataSetChanged() + } else { + otherDeviceAdapter = OtherDeviceAdapter(requireContext(), dataModes) + otherDeviceRecyclerView.adapter = otherDeviceAdapter + } } true } diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt index 1ec1301..6e82149 100644 --- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt @@ -87,7 +87,8 @@ } 2022092903 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt index 4b983f3..9de1a56 100644 --- a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt @@ -125,7 +125,8 @@ } 2022092803 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt index 0598a38..a0be055 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt @@ -151,7 +151,8 @@ } 2022092303 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 7c5ba31..595c52f 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -120,7 +120,8 @@ } 2022092603 -> { val deviceBean = message.obj as DeviceBean - deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + deviceUsedTimeView.text = + String.format("${deviceBean.time.toString().diffDate(false)}天") ipAddressView.text = deviceBean.ip paramObject.put("usageTime", deviceUsedTimeView.text) diff --git a/app/src/main/java/com/casic/br/model/OtherDeviceModel.java b/app/src/main/java/com/casic/br/model/OtherDeviceModel.java new file mode 100644 index 0000000..747a107 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/OtherDeviceModel.java @@ -0,0 +1,274 @@ +package com.casic.br.model; + +import java.util.List; + +public class OtherDeviceModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String brandCode; + private String brandName; + private String createTime; + private int deviceActive; + private String deviceActiveTime; + private String deviceAddress; + private int deviceBindUser; + private String deviceCoreParts; + private String deviceHardwareVersion; + private String deviceId; + private String deviceIp; + private String deviceMac; + private String deviceName; + private String deviceSoftwareVersion; + private int deviceStatus; + private String id; + private int iotDevice; + private String produceDate; + private String productCode; + private String productName; + private String snCode; + private String supplierId; + private String updateTime; + + public String getBrandCode() { + return brandCode; + } + + public void setBrandCode(String brandCode) { + this.brandCode = brandCode; + } + + public String getBrandName() { + return brandName; + } + + public void setBrandName(String brandName) { + this.brandName = brandName; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public int getDeviceActive() { + return deviceActive; + } + + public void setDeviceActive(int deviceActive) { + this.deviceActive = deviceActive; + } + + public String getDeviceActiveTime() { + return deviceActiveTime; + } + + public void setDeviceActiveTime(String deviceActiveTime) { + this.deviceActiveTime = deviceActiveTime; + } + + public String getDeviceAddress() { + return deviceAddress; + } + + public void setDeviceAddress(String deviceAddress) { + this.deviceAddress = deviceAddress; + } + + public int getDeviceBindUser() { + return deviceBindUser; + } + + public void setDeviceBindUser(int deviceBindUser) { + this.deviceBindUser = deviceBindUser; + } + + public String getDeviceCoreParts() { + return deviceCoreParts; + } + + public void setDeviceCoreParts(String deviceCoreParts) { + this.deviceCoreParts = deviceCoreParts; + } + + public String getDeviceHardwareVersion() { + return deviceHardwareVersion; + } + + public void setDeviceHardwareVersion(String deviceHardwareVersion) { + this.deviceHardwareVersion = deviceHardwareVersion; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getDeviceIp() { + return deviceIp; + } + + public void setDeviceIp(String deviceIp) { + this.deviceIp = deviceIp; + } + + public String getDeviceMac() { + return deviceMac; + } + + public void setDeviceMac(String deviceMac) { + this.deviceMac = deviceMac; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getDeviceSoftwareVersion() { + return deviceSoftwareVersion; + } + + public void setDeviceSoftwareVersion(String deviceSoftwareVersion) { + this.deviceSoftwareVersion = deviceSoftwareVersion; + } + + public int getDeviceStatus() { + return deviceStatus; + } + + public void setDeviceStatus(int deviceStatus) { + this.deviceStatus = deviceStatus; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getIotDevice() { + return iotDevice; + } + + public void setIotDevice(int iotDevice) { + this.iotDevice = iotDevice; + } + + public String getProduceDate() { + return produceDate; + } + + public void setProduceDate(String produceDate) { + this.produceDate = produceDate; + } + + public String getProductCode() { + return productCode; + } + + public void setProductCode(String productCode) { + this.productCode = productCode; + } + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public String getSnCode() { + return snCode; + } + + public void setSnCode(String snCode) { + this.snCode = snCode; + } + + public String getSupplierId() { + return supplierId; + } + + public void setSupplierId(String supplierId) { + this.supplierId = supplierId; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index dde5f22..9a1c919 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -104,4 +104,5 @@ const val WIFI_PASSWORD = "wifiPassword" const val ACCOUNT = "account" const val PASSWORD = "password" + const val HW_JT_KBZ1 = "https://www.hanwei.cn/wp-content/uploads/2022/04/JT-KBZ1.png" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 788e40b..4a3cb74 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -155,4 +155,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 汉威设备列表 + */ + @POST("/deviceInfo/listPage") + suspend fun obtainOtherDeviceListByPage( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index 4d105c3..7f28146 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -315,4 +315,23 @@ ) return api.updateMessageById(AuthenticationHelper.token!!, requestBody) } + + /** + * 汉威设备列表 + */ + suspend fun obtainOtherDeviceListByPage(): String { + val paramObject = JSONObject() + paramObject.put("brandName", "hanwei") + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = 1 + return api.obtainOtherDeviceListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt index 300e963..da88052 100644 --- a/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt @@ -1,11 +1,15 @@ package com.casic.br.vm +import androidx.lifecycle.MutableLiveData import com.amap.api.location.AMapLocation import com.casic.br.base.BaseApplication import com.casic.br.extensions.separateResponseCode import com.casic.br.extensions.toErrorMessage +import com.casic.br.model.OtherDeviceModel import com.casic.br.model.UserDetailModel import com.casic.br.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.BaseViewModel @@ -14,6 +18,10 @@ import org.json.JSONObject class DeviceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val listModel = MutableLiveData() + fun addDevice( devResp: DeviceBean, userModel: UserDetailModel.DataModel, @@ -43,4 +51,18 @@ launch({ RetrofitServiceManager.addDeviceData(dataModel) }, { it.printStackTrace() }) + + fun obtainOtherDeviceListByPage() = launch({ + val response = RetrofitServiceManager.obtainOtherDeviceListByPage() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.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/layout/fragment_device.xml b/app/src/main/res/layout/fragment_device.xml index 223f586..77fd67a 100644 --- a/app/src/main/res/layout/fragment_device.xml +++ b/app/src/main/res/layout/fragment_device.xml @@ -54,6 +54,25 @@ app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="2" /> + + + + + + + + + + +