diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ba3523a..c8e1fb2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ba3523a..c8e1fb2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,7 @@ + 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 4be4e05..d4bbc7c 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,6 +1,5 @@ package com.casic.br.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View @@ -10,28 +9,18 @@ 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.model.AddedDeviceModel import com.pengxh.kt.lite.extensions.dp2px -@SuppressLint("NotifyDataSetChanged") -class AddedDeviceAdapter(private val context: Context) : - RecyclerView.Adapter() { +class AddedDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private var dataRows: MutableList = ArrayList() - - fun setupDevice(devices: MutableList) { - dataRows = devices - notifyDataSetChanged() - } - - fun deleteDevice(position: Int) { - if (dataRows.isNotEmpty()) { - dataRows.removeAt(position) - notifyDataSetChanged() - } - } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( @@ -59,6 +48,11 @@ } } else { holder.deviceNameView.text = dataRows[position].deviceName + Glide.with(context) + .load(dataRows[position].deviceImage) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) holder.deviceModelView.text = dataRows[position].deviceModel holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime holder.rootView.setOnClickListener { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ba3523a..c8e1fb2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,7 @@ + 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 4be4e05..d4bbc7c 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,6 +1,5 @@ package com.casic.br.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View @@ -10,28 +9,18 @@ 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.model.AddedDeviceModel import com.pengxh.kt.lite.extensions.dp2px -@SuppressLint("NotifyDataSetChanged") -class AddedDeviceAdapter(private val context: Context) : - RecyclerView.Adapter() { +class AddedDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private var dataRows: MutableList = ArrayList() - - fun setupDevice(devices: MutableList) { - dataRows = devices - notifyDataSetChanged() - } - - fun deleteDevice(position: Int) { - if (dataRows.isNotEmpty()) { - dataRows.removeAt(position) - notifyDataSetChanged() - } - } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( @@ -59,6 +48,11 @@ } } else { holder.deviceNameView.text = dataRows[position].deviceName + Glide.with(context) + .load(dataRows[position].deviceImage) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) holder.deviceModelView.text = dataRows[position].deviceModel holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime holder.rootView.setOnClickListener { 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 b9e32f4..3480d5b 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,6 +1,7 @@ package com.casic.br.fragment import android.graphics.Typeface +import android.os.Handler import android.util.Log import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter @@ -11,13 +12,14 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity +import com.casic.br.view.device.CookerActivity import com.casic.br.view.device.FireplaceActivity import com.casic.br.view.device.RangeHoodActivity import com.casic.br.view.device.WaterHeaterActivity import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.SaveKeyValues +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.tuya.smart.home.sdk.TuyaHomeSdk import com.tuya.smart.home.sdk.bean.HomeBean import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback @@ -30,6 +32,10 @@ class DevicePageFragment : KotlinBaseFragment() { private val kTag = "DevicePageFragment" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -40,44 +46,7 @@ } override fun initData() { - //TODO 模拟数据 - val deviceModels = ArrayList() - - val model1 = AddedDeviceModel() - model1.deviceName = "万家乐热水器" - model1.deviceModel = "D40-DM1" - model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" - deviceModels.add(model1) - - val addedDeviceAdapter = AddedDeviceAdapter(requireContext()) - addedDeviceAdapter.setupDevice(deviceModels) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onAddDeviceClick() { - requireContext().navigatePageTo() - } - - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - when { - deviceModel.deviceName.contains("热水器") -> { - requireContext().navigatePageTo(deviceModel.deviceName) - } - deviceModel.deviceName.contains("油烟机") -> { - requireContext().navigatePageTo() - } - deviceModel.deviceName.contains("壁挂炉") -> { - requireContext().navigatePageTo() - } - } - } - - override fun onButtonClick(position: Int) { - - } - }) + weakReferenceHandler = WeakReferenceHandler(callback) //热门推荐 //TODO 模拟数据 只显示前三个设备 @@ -118,12 +87,77 @@ .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { val deviceList: List = bean.deviceList - Log.d(kTag, deviceList.toJson()) + val deviceModels = ArrayList() + deviceList.forEach { + val model = AddedDeviceModel() + when (it.deviceCategory) { + "yyj" -> model.deviceName = "万家乐油烟机" + } + model.isOnline = it.isOnline + model.deviceImage = it.iconUrl + model.deviceModel = it.name + model.deviceType = it.deviceCategory + model.deviceUsedTime = "未知" + deviceModels.add(model) + } + + when { + isRefresh -> { + dataBeans.clear() + dataBeans = deviceModels + isRefresh = false + } + else -> { + dataBeans = deviceModels + } + } + weakReferenceHandler.sendEmptyMessage(2022091901) } override fun onError(errorCode: String, errorMsg: String) { - // do something + Log.d(kTag, "onError: $errorMsg") } }) } + + private val callback = Handler.Callback { + if (it.what == 2022091901) { + if (isRefresh) { + addedDeviceAdapter.notifyDataSetChanged() + } else { + addedDeviceAdapter = AddedDeviceAdapter(requireContext(), dataBeans) + deviceRecyclerView.adapter = addedDeviceAdapter + addedDeviceAdapter.setOnItemClickListener(object : + AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + requireContext().navigatePageTo() + } + + override fun onItemClick(position: Int) { + // 需要根据设备类型显示不同的页面 + val deviceModel = dataBeans[position] + when { + deviceModel.deviceName.contains("热水器") -> { + requireContext().navigatePageTo(deviceModel.deviceName) + } + deviceModel.deviceName.contains("油烟机") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("壁挂炉") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("燃气灶") -> { + requireContext().navigatePageTo() + } + } + } + + override fun onButtonClick(position: Int) { + + } + }) + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ba3523a..c8e1fb2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,7 @@ + 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 4be4e05..d4bbc7c 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,6 +1,5 @@ package com.casic.br.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View @@ -10,28 +9,18 @@ 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.model.AddedDeviceModel import com.pengxh.kt.lite.extensions.dp2px -@SuppressLint("NotifyDataSetChanged") -class AddedDeviceAdapter(private val context: Context) : - RecyclerView.Adapter() { +class AddedDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private var dataRows: MutableList = ArrayList() - - fun setupDevice(devices: MutableList) { - dataRows = devices - notifyDataSetChanged() - } - - fun deleteDevice(position: Int) { - if (dataRows.isNotEmpty()) { - dataRows.removeAt(position) - notifyDataSetChanged() - } - } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( @@ -59,6 +48,11 @@ } } else { holder.deviceNameView.text = dataRows[position].deviceName + Glide.with(context) + .load(dataRows[position].deviceImage) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) holder.deviceModelView.text = dataRows[position].deviceModel holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime holder.rootView.setOnClickListener { 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 b9e32f4..3480d5b 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,6 +1,7 @@ package com.casic.br.fragment import android.graphics.Typeface +import android.os.Handler import android.util.Log import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter @@ -11,13 +12,14 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity +import com.casic.br.view.device.CookerActivity import com.casic.br.view.device.FireplaceActivity import com.casic.br.view.device.RangeHoodActivity import com.casic.br.view.device.WaterHeaterActivity import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.SaveKeyValues +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.tuya.smart.home.sdk.TuyaHomeSdk import com.tuya.smart.home.sdk.bean.HomeBean import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback @@ -30,6 +32,10 @@ class DevicePageFragment : KotlinBaseFragment() { private val kTag = "DevicePageFragment" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -40,44 +46,7 @@ } override fun initData() { - //TODO 模拟数据 - val deviceModels = ArrayList() - - val model1 = AddedDeviceModel() - model1.deviceName = "万家乐热水器" - model1.deviceModel = "D40-DM1" - model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" - deviceModels.add(model1) - - val addedDeviceAdapter = AddedDeviceAdapter(requireContext()) - addedDeviceAdapter.setupDevice(deviceModels) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onAddDeviceClick() { - requireContext().navigatePageTo() - } - - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - when { - deviceModel.deviceName.contains("热水器") -> { - requireContext().navigatePageTo(deviceModel.deviceName) - } - deviceModel.deviceName.contains("油烟机") -> { - requireContext().navigatePageTo() - } - deviceModel.deviceName.contains("壁挂炉") -> { - requireContext().navigatePageTo() - } - } - } - - override fun onButtonClick(position: Int) { - - } - }) + weakReferenceHandler = WeakReferenceHandler(callback) //热门推荐 //TODO 模拟数据 只显示前三个设备 @@ -118,12 +87,77 @@ .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { val deviceList: List = bean.deviceList - Log.d(kTag, deviceList.toJson()) + val deviceModels = ArrayList() + deviceList.forEach { + val model = AddedDeviceModel() + when (it.deviceCategory) { + "yyj" -> model.deviceName = "万家乐油烟机" + } + model.isOnline = it.isOnline + model.deviceImage = it.iconUrl + model.deviceModel = it.name + model.deviceType = it.deviceCategory + model.deviceUsedTime = "未知" + deviceModels.add(model) + } + + when { + isRefresh -> { + dataBeans.clear() + dataBeans = deviceModels + isRefresh = false + } + else -> { + dataBeans = deviceModels + } + } + weakReferenceHandler.sendEmptyMessage(2022091901) } override fun onError(errorCode: String, errorMsg: String) { - // do something + Log.d(kTag, "onError: $errorMsg") } }) } + + private val callback = Handler.Callback { + if (it.what == 2022091901) { + if (isRefresh) { + addedDeviceAdapter.notifyDataSetChanged() + } else { + addedDeviceAdapter = AddedDeviceAdapter(requireContext(), dataBeans) + deviceRecyclerView.adapter = addedDeviceAdapter + addedDeviceAdapter.setOnItemClickListener(object : + AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + requireContext().navigatePageTo() + } + + override fun onItemClick(position: Int) { + // 需要根据设备类型显示不同的页面 + val deviceModel = dataBeans[position] + when { + deviceModel.deviceName.contains("热水器") -> { + requireContext().navigatePageTo(deviceModel.deviceName) + } + deviceModel.deviceName.contains("油烟机") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("壁挂炉") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("燃气灶") -> { + requireContext().navigatePageTo() + } + } + } + + override fun onButtonClick(position: Int) { + + } + }) + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 451a69a..d4a358b 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -5,6 +5,7 @@ */ public class AddedDeviceModel { private String deviceName; + private boolean isOnline; private String deviceImage; private String deviceModel; private String deviceType; @@ -18,6 +19,14 @@ this.deviceName = deviceName; } + public boolean isOnline() { + return isOnline; + } + + public void setOnline(boolean online) { + isOnline = online; + } + public String getDeviceImage() { return deviceImage; } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ba3523a..c8e1fb2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,7 @@ + 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 4be4e05..d4bbc7c 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,6 +1,5 @@ package com.casic.br.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View @@ -10,28 +9,18 @@ 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.model.AddedDeviceModel import com.pengxh.kt.lite.extensions.dp2px -@SuppressLint("NotifyDataSetChanged") -class AddedDeviceAdapter(private val context: Context) : - RecyclerView.Adapter() { +class AddedDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private var dataRows: MutableList = ArrayList() - - fun setupDevice(devices: MutableList) { - dataRows = devices - notifyDataSetChanged() - } - - fun deleteDevice(position: Int) { - if (dataRows.isNotEmpty()) { - dataRows.removeAt(position) - notifyDataSetChanged() - } - } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( @@ -59,6 +48,11 @@ } } else { holder.deviceNameView.text = dataRows[position].deviceName + Glide.with(context) + .load(dataRows[position].deviceImage) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) holder.deviceModelView.text = dataRows[position].deviceModel holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime holder.rootView.setOnClickListener { 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 b9e32f4..3480d5b 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,6 +1,7 @@ package com.casic.br.fragment import android.graphics.Typeface +import android.os.Handler import android.util.Log import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter @@ -11,13 +12,14 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity +import com.casic.br.view.device.CookerActivity import com.casic.br.view.device.FireplaceActivity import com.casic.br.view.device.RangeHoodActivity import com.casic.br.view.device.WaterHeaterActivity import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.SaveKeyValues +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.tuya.smart.home.sdk.TuyaHomeSdk import com.tuya.smart.home.sdk.bean.HomeBean import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback @@ -30,6 +32,10 @@ class DevicePageFragment : KotlinBaseFragment() { private val kTag = "DevicePageFragment" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -40,44 +46,7 @@ } override fun initData() { - //TODO 模拟数据 - val deviceModels = ArrayList() - - val model1 = AddedDeviceModel() - model1.deviceName = "万家乐热水器" - model1.deviceModel = "D40-DM1" - model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" - deviceModels.add(model1) - - val addedDeviceAdapter = AddedDeviceAdapter(requireContext()) - addedDeviceAdapter.setupDevice(deviceModels) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onAddDeviceClick() { - requireContext().navigatePageTo() - } - - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - when { - deviceModel.deviceName.contains("热水器") -> { - requireContext().navigatePageTo(deviceModel.deviceName) - } - deviceModel.deviceName.contains("油烟机") -> { - requireContext().navigatePageTo() - } - deviceModel.deviceName.contains("壁挂炉") -> { - requireContext().navigatePageTo() - } - } - } - - override fun onButtonClick(position: Int) { - - } - }) + weakReferenceHandler = WeakReferenceHandler(callback) //热门推荐 //TODO 模拟数据 只显示前三个设备 @@ -118,12 +87,77 @@ .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { val deviceList: List = bean.deviceList - Log.d(kTag, deviceList.toJson()) + val deviceModels = ArrayList() + deviceList.forEach { + val model = AddedDeviceModel() + when (it.deviceCategory) { + "yyj" -> model.deviceName = "万家乐油烟机" + } + model.isOnline = it.isOnline + model.deviceImage = it.iconUrl + model.deviceModel = it.name + model.deviceType = it.deviceCategory + model.deviceUsedTime = "未知" + deviceModels.add(model) + } + + when { + isRefresh -> { + dataBeans.clear() + dataBeans = deviceModels + isRefresh = false + } + else -> { + dataBeans = deviceModels + } + } + weakReferenceHandler.sendEmptyMessage(2022091901) } override fun onError(errorCode: String, errorMsg: String) { - // do something + Log.d(kTag, "onError: $errorMsg") } }) } + + private val callback = Handler.Callback { + if (it.what == 2022091901) { + if (isRefresh) { + addedDeviceAdapter.notifyDataSetChanged() + } else { + addedDeviceAdapter = AddedDeviceAdapter(requireContext(), dataBeans) + deviceRecyclerView.adapter = addedDeviceAdapter + addedDeviceAdapter.setOnItemClickListener(object : + AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + requireContext().navigatePageTo() + } + + override fun onItemClick(position: Int) { + // 需要根据设备类型显示不同的页面 + val deviceModel = dataBeans[position] + when { + deviceModel.deviceName.contains("热水器") -> { + requireContext().navigatePageTo(deviceModel.deviceName) + } + deviceModel.deviceName.contains("油烟机") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("壁挂炉") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("燃气灶") -> { + requireContext().navigatePageTo() + } + } + } + + override fun onButtonClick(position: Int) { + + } + }) + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 451a69a..d4a358b 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -5,6 +5,7 @@ */ public class AddedDeviceModel { private String deviceName; + private boolean isOnline; private String deviceImage; private String deviceModel; private String deviceType; @@ -18,6 +19,14 @@ this.deviceName = deviceName; } + public boolean isOnline() { + return isOnline; + } + + public void setOnline(boolean online) { + isOnline = online; + } + public String getDeviceImage() { return deviceImage; } diff --git a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt index bd5363c..08b0d19 100644 --- a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt @@ -1,7 +1,5 @@ package com.casic.br.view -import android.content.Context -import android.util.Log import android.view.View import com.casic.br.R import com.casic.br.extensions.initLayoutImmersionBar @@ -11,7 +9,6 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -26,8 +23,6 @@ class ResetDeviceActivity : KotlinBaseActivity() { - private val kTag = "ResetDeviceActivity" - private val context: Context = this@ResetDeviceActivity private lateinit var params: ArrayList override fun initLayoutView(): Int = R.layout.activity_reset_device @@ -58,30 +53,26 @@ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object : ITuyaActivatorGetToken { override fun onSuccess(token: String) { - Log.d(kTag, "token: $token") //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。 val builder = ActivatorBuilder().apply { this.ssid = params[0] - this.context = context + this.context = this@ResetDeviceActivity this.password = params[1] this.activatorModel = ActivatorModelEnum.TY_EZ this.timeOut = 100 this.token = token this.listener = object : ITuyaSmartActivatorListener { override fun onError(errorCode: String?, errorMsg: String?) { - Log.i(kTag, "onError: $errorMsg") + "添加设备超时".show(this@ResetDeviceActivity) LoadingDialogHub.dismiss() } override fun onActiveSuccess(devResp: DeviceBean?) { LoadingDialogHub.dismiss() - Log.d(kTag, devResp!!.toJson()) navigatePageTo() } override fun onStep(step: String?, data: Any?) { - Log.i(kTag, "step: $step") - Log.i(kTag, "data: $data") LoadingDialogHub.dismiss() } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ba3523a..c8e1fb2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,7 @@ + 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 4be4e05..d4bbc7c 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,6 +1,5 @@ package com.casic.br.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View @@ -10,28 +9,18 @@ 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.model.AddedDeviceModel import com.pengxh.kt.lite.extensions.dp2px -@SuppressLint("NotifyDataSetChanged") -class AddedDeviceAdapter(private val context: Context) : - RecyclerView.Adapter() { +class AddedDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private var dataRows: MutableList = ArrayList() - - fun setupDevice(devices: MutableList) { - dataRows = devices - notifyDataSetChanged() - } - - fun deleteDevice(position: Int) { - if (dataRows.isNotEmpty()) { - dataRows.removeAt(position) - notifyDataSetChanged() - } - } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( @@ -59,6 +48,11 @@ } } else { holder.deviceNameView.text = dataRows[position].deviceName + Glide.with(context) + .load(dataRows[position].deviceImage) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) holder.deviceModelView.text = dataRows[position].deviceModel holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime holder.rootView.setOnClickListener { 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 b9e32f4..3480d5b 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,6 +1,7 @@ package com.casic.br.fragment import android.graphics.Typeface +import android.os.Handler import android.util.Log import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter @@ -11,13 +12,14 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity +import com.casic.br.view.device.CookerActivity import com.casic.br.view.device.FireplaceActivity import com.casic.br.view.device.RangeHoodActivity import com.casic.br.view.device.WaterHeaterActivity import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.SaveKeyValues +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.tuya.smart.home.sdk.TuyaHomeSdk import com.tuya.smart.home.sdk.bean.HomeBean import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback @@ -30,6 +32,10 @@ class DevicePageFragment : KotlinBaseFragment() { private val kTag = "DevicePageFragment" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -40,44 +46,7 @@ } override fun initData() { - //TODO 模拟数据 - val deviceModels = ArrayList() - - val model1 = AddedDeviceModel() - model1.deviceName = "万家乐热水器" - model1.deviceModel = "D40-DM1" - model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" - deviceModels.add(model1) - - val addedDeviceAdapter = AddedDeviceAdapter(requireContext()) - addedDeviceAdapter.setupDevice(deviceModels) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onAddDeviceClick() { - requireContext().navigatePageTo() - } - - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - when { - deviceModel.deviceName.contains("热水器") -> { - requireContext().navigatePageTo(deviceModel.deviceName) - } - deviceModel.deviceName.contains("油烟机") -> { - requireContext().navigatePageTo() - } - deviceModel.deviceName.contains("壁挂炉") -> { - requireContext().navigatePageTo() - } - } - } - - override fun onButtonClick(position: Int) { - - } - }) + weakReferenceHandler = WeakReferenceHandler(callback) //热门推荐 //TODO 模拟数据 只显示前三个设备 @@ -118,12 +87,77 @@ .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { val deviceList: List = bean.deviceList - Log.d(kTag, deviceList.toJson()) + val deviceModels = ArrayList() + deviceList.forEach { + val model = AddedDeviceModel() + when (it.deviceCategory) { + "yyj" -> model.deviceName = "万家乐油烟机" + } + model.isOnline = it.isOnline + model.deviceImage = it.iconUrl + model.deviceModel = it.name + model.deviceType = it.deviceCategory + model.deviceUsedTime = "未知" + deviceModels.add(model) + } + + when { + isRefresh -> { + dataBeans.clear() + dataBeans = deviceModels + isRefresh = false + } + else -> { + dataBeans = deviceModels + } + } + weakReferenceHandler.sendEmptyMessage(2022091901) } override fun onError(errorCode: String, errorMsg: String) { - // do something + Log.d(kTag, "onError: $errorMsg") } }) } + + private val callback = Handler.Callback { + if (it.what == 2022091901) { + if (isRefresh) { + addedDeviceAdapter.notifyDataSetChanged() + } else { + addedDeviceAdapter = AddedDeviceAdapter(requireContext(), dataBeans) + deviceRecyclerView.adapter = addedDeviceAdapter + addedDeviceAdapter.setOnItemClickListener(object : + AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + requireContext().navigatePageTo() + } + + override fun onItemClick(position: Int) { + // 需要根据设备类型显示不同的页面 + val deviceModel = dataBeans[position] + when { + deviceModel.deviceName.contains("热水器") -> { + requireContext().navigatePageTo(deviceModel.deviceName) + } + deviceModel.deviceName.contains("油烟机") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("壁挂炉") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("燃气灶") -> { + requireContext().navigatePageTo() + } + } + } + + override fun onButtonClick(position: Int) { + + } + }) + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 451a69a..d4a358b 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -5,6 +5,7 @@ */ public class AddedDeviceModel { private String deviceName; + private boolean isOnline; private String deviceImage; private String deviceModel; private String deviceType; @@ -18,6 +19,14 @@ this.deviceName = deviceName; } + public boolean isOnline() { + return isOnline; + } + + public void setOnline(boolean online) { + isOnline = online; + } + public String getDeviceImage() { return deviceImage; } diff --git a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt index bd5363c..08b0d19 100644 --- a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt @@ -1,7 +1,5 @@ package com.casic.br.view -import android.content.Context -import android.util.Log import android.view.View import com.casic.br.R import com.casic.br.extensions.initLayoutImmersionBar @@ -11,7 +9,6 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -26,8 +23,6 @@ class ResetDeviceActivity : KotlinBaseActivity() { - private val kTag = "ResetDeviceActivity" - private val context: Context = this@ResetDeviceActivity private lateinit var params: ArrayList override fun initLayoutView(): Int = R.layout.activity_reset_device @@ -58,30 +53,26 @@ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object : ITuyaActivatorGetToken { override fun onSuccess(token: String) { - Log.d(kTag, "token: $token") //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。 val builder = ActivatorBuilder().apply { this.ssid = params[0] - this.context = context + this.context = this@ResetDeviceActivity this.password = params[1] this.activatorModel = ActivatorModelEnum.TY_EZ this.timeOut = 100 this.token = token this.listener = object : ITuyaSmartActivatorListener { override fun onError(errorCode: String?, errorMsg: String?) { - Log.i(kTag, "onError: $errorMsg") + "添加设备超时".show(this@ResetDeviceActivity) LoadingDialogHub.dismiss() } override fun onActiveSuccess(devResp: DeviceBean?) { LoadingDialogHub.dismiss() - Log.d(kTag, devResp!!.toJson()) navigatePageTo() } override fun onStep(step: String?, data: Any?) { - Log.i(kTag, "step: $step") - Log.i(kTag, "data: $data") LoadingDialogHub.dismiss() } } diff --git a/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt b/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt index 838bde6..d8035fa 100644 --- a/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt @@ -1,7 +1,28 @@ package com.casic.br.view.device +import com.casic.br.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + /** * 油烟机 * */ -class RangeHoodActivity { +class RangeHoodActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_range_hood + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ba3523a..c8e1fb2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,7 @@ + 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 4be4e05..d4bbc7c 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,6 +1,5 @@ package com.casic.br.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View @@ -10,28 +9,18 @@ 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.model.AddedDeviceModel import com.pengxh.kt.lite.extensions.dp2px -@SuppressLint("NotifyDataSetChanged") -class AddedDeviceAdapter(private val context: Context) : - RecyclerView.Adapter() { +class AddedDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private var dataRows: MutableList = ArrayList() - - fun setupDevice(devices: MutableList) { - dataRows = devices - notifyDataSetChanged() - } - - fun deleteDevice(position: Int) { - if (dataRows.isNotEmpty()) { - dataRows.removeAt(position) - notifyDataSetChanged() - } - } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( @@ -59,6 +48,11 @@ } } else { holder.deviceNameView.text = dataRows[position].deviceName + Glide.with(context) + .load(dataRows[position].deviceImage) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) holder.deviceModelView.text = dataRows[position].deviceModel holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime holder.rootView.setOnClickListener { 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 b9e32f4..3480d5b 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,6 +1,7 @@ package com.casic.br.fragment import android.graphics.Typeface +import android.os.Handler import android.util.Log import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter @@ -11,13 +12,14 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity +import com.casic.br.view.device.CookerActivity import com.casic.br.view.device.FireplaceActivity import com.casic.br.view.device.RangeHoodActivity import com.casic.br.view.device.WaterHeaterActivity import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.SaveKeyValues +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.tuya.smart.home.sdk.TuyaHomeSdk import com.tuya.smart.home.sdk.bean.HomeBean import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback @@ -30,6 +32,10 @@ class DevicePageFragment : KotlinBaseFragment() { private val kTag = "DevicePageFragment" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -40,44 +46,7 @@ } override fun initData() { - //TODO 模拟数据 - val deviceModels = ArrayList() - - val model1 = AddedDeviceModel() - model1.deviceName = "万家乐热水器" - model1.deviceModel = "D40-DM1" - model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" - deviceModels.add(model1) - - val addedDeviceAdapter = AddedDeviceAdapter(requireContext()) - addedDeviceAdapter.setupDevice(deviceModels) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onAddDeviceClick() { - requireContext().navigatePageTo() - } - - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - when { - deviceModel.deviceName.contains("热水器") -> { - requireContext().navigatePageTo(deviceModel.deviceName) - } - deviceModel.deviceName.contains("油烟机") -> { - requireContext().navigatePageTo() - } - deviceModel.deviceName.contains("壁挂炉") -> { - requireContext().navigatePageTo() - } - } - } - - override fun onButtonClick(position: Int) { - - } - }) + weakReferenceHandler = WeakReferenceHandler(callback) //热门推荐 //TODO 模拟数据 只显示前三个设备 @@ -118,12 +87,77 @@ .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { val deviceList: List = bean.deviceList - Log.d(kTag, deviceList.toJson()) + val deviceModels = ArrayList() + deviceList.forEach { + val model = AddedDeviceModel() + when (it.deviceCategory) { + "yyj" -> model.deviceName = "万家乐油烟机" + } + model.isOnline = it.isOnline + model.deviceImage = it.iconUrl + model.deviceModel = it.name + model.deviceType = it.deviceCategory + model.deviceUsedTime = "未知" + deviceModels.add(model) + } + + when { + isRefresh -> { + dataBeans.clear() + dataBeans = deviceModels + isRefresh = false + } + else -> { + dataBeans = deviceModels + } + } + weakReferenceHandler.sendEmptyMessage(2022091901) } override fun onError(errorCode: String, errorMsg: String) { - // do something + Log.d(kTag, "onError: $errorMsg") } }) } + + private val callback = Handler.Callback { + if (it.what == 2022091901) { + if (isRefresh) { + addedDeviceAdapter.notifyDataSetChanged() + } else { + addedDeviceAdapter = AddedDeviceAdapter(requireContext(), dataBeans) + deviceRecyclerView.adapter = addedDeviceAdapter + addedDeviceAdapter.setOnItemClickListener(object : + AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + requireContext().navigatePageTo() + } + + override fun onItemClick(position: Int) { + // 需要根据设备类型显示不同的页面 + val deviceModel = dataBeans[position] + when { + deviceModel.deviceName.contains("热水器") -> { + requireContext().navigatePageTo(deviceModel.deviceName) + } + deviceModel.deviceName.contains("油烟机") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("壁挂炉") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("燃气灶") -> { + requireContext().navigatePageTo() + } + } + } + + override fun onButtonClick(position: Int) { + + } + }) + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 451a69a..d4a358b 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -5,6 +5,7 @@ */ public class AddedDeviceModel { private String deviceName; + private boolean isOnline; private String deviceImage; private String deviceModel; private String deviceType; @@ -18,6 +19,14 @@ this.deviceName = deviceName; } + public boolean isOnline() { + return isOnline; + } + + public void setOnline(boolean online) { + isOnline = online; + } + public String getDeviceImage() { return deviceImage; } diff --git a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt index bd5363c..08b0d19 100644 --- a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt @@ -1,7 +1,5 @@ package com.casic.br.view -import android.content.Context -import android.util.Log import android.view.View import com.casic.br.R import com.casic.br.extensions.initLayoutImmersionBar @@ -11,7 +9,6 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -26,8 +23,6 @@ class ResetDeviceActivity : KotlinBaseActivity() { - private val kTag = "ResetDeviceActivity" - private val context: Context = this@ResetDeviceActivity private lateinit var params: ArrayList override fun initLayoutView(): Int = R.layout.activity_reset_device @@ -58,30 +53,26 @@ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object : ITuyaActivatorGetToken { override fun onSuccess(token: String) { - Log.d(kTag, "token: $token") //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。 val builder = ActivatorBuilder().apply { this.ssid = params[0] - this.context = context + this.context = this@ResetDeviceActivity this.password = params[1] this.activatorModel = ActivatorModelEnum.TY_EZ this.timeOut = 100 this.token = token this.listener = object : ITuyaSmartActivatorListener { override fun onError(errorCode: String?, errorMsg: String?) { - Log.i(kTag, "onError: $errorMsg") + "添加设备超时".show(this@ResetDeviceActivity) LoadingDialogHub.dismiss() } override fun onActiveSuccess(devResp: DeviceBean?) { LoadingDialogHub.dismiss() - Log.d(kTag, devResp!!.toJson()) navigatePageTo() } override fun onStep(step: String?, data: Any?) { - Log.i(kTag, "step: $step") - Log.i(kTag, "data: $data") LoadingDialogHub.dismiss() } } diff --git a/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt b/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt index 838bde6..d8035fa 100644 --- a/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt @@ -1,7 +1,28 @@ package com.casic.br.view.device +import com.casic.br.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + /** * 油烟机 * */ -class RangeHoodActivity { +class RangeHoodActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_range_hood + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt index 3e21b07..423ef45 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt @@ -13,6 +13,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import kotlinx.android.synthetic.main.activity_water_heater.* +import kotlinx.android.synthetic.main.include_device_title.* import java.util.* diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ba3523a..c8e1fb2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,7 @@ + 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 4be4e05..d4bbc7c 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,6 +1,5 @@ package com.casic.br.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View @@ -10,28 +9,18 @@ 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.model.AddedDeviceModel import com.pengxh.kt.lite.extensions.dp2px -@SuppressLint("NotifyDataSetChanged") -class AddedDeviceAdapter(private val context: Context) : - RecyclerView.Adapter() { +class AddedDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private var dataRows: MutableList = ArrayList() - - fun setupDevice(devices: MutableList) { - dataRows = devices - notifyDataSetChanged() - } - - fun deleteDevice(position: Int) { - if (dataRows.isNotEmpty()) { - dataRows.removeAt(position) - notifyDataSetChanged() - } - } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( @@ -59,6 +48,11 @@ } } else { holder.deviceNameView.text = dataRows[position].deviceName + Glide.with(context) + .load(dataRows[position].deviceImage) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) holder.deviceModelView.text = dataRows[position].deviceModel holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime holder.rootView.setOnClickListener { 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 b9e32f4..3480d5b 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,6 +1,7 @@ package com.casic.br.fragment import android.graphics.Typeface +import android.os.Handler import android.util.Log import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter @@ -11,13 +12,14 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity +import com.casic.br.view.device.CookerActivity import com.casic.br.view.device.FireplaceActivity import com.casic.br.view.device.RangeHoodActivity import com.casic.br.view.device.WaterHeaterActivity import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.SaveKeyValues +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.tuya.smart.home.sdk.TuyaHomeSdk import com.tuya.smart.home.sdk.bean.HomeBean import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback @@ -30,6 +32,10 @@ class DevicePageFragment : KotlinBaseFragment() { private val kTag = "DevicePageFragment" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -40,44 +46,7 @@ } override fun initData() { - //TODO 模拟数据 - val deviceModels = ArrayList() - - val model1 = AddedDeviceModel() - model1.deviceName = "万家乐热水器" - model1.deviceModel = "D40-DM1" - model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" - deviceModels.add(model1) - - val addedDeviceAdapter = AddedDeviceAdapter(requireContext()) - addedDeviceAdapter.setupDevice(deviceModels) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onAddDeviceClick() { - requireContext().navigatePageTo() - } - - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - when { - deviceModel.deviceName.contains("热水器") -> { - requireContext().navigatePageTo(deviceModel.deviceName) - } - deviceModel.deviceName.contains("油烟机") -> { - requireContext().navigatePageTo() - } - deviceModel.deviceName.contains("壁挂炉") -> { - requireContext().navigatePageTo() - } - } - } - - override fun onButtonClick(position: Int) { - - } - }) + weakReferenceHandler = WeakReferenceHandler(callback) //热门推荐 //TODO 模拟数据 只显示前三个设备 @@ -118,12 +87,77 @@ .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { val deviceList: List = bean.deviceList - Log.d(kTag, deviceList.toJson()) + val deviceModels = ArrayList() + deviceList.forEach { + val model = AddedDeviceModel() + when (it.deviceCategory) { + "yyj" -> model.deviceName = "万家乐油烟机" + } + model.isOnline = it.isOnline + model.deviceImage = it.iconUrl + model.deviceModel = it.name + model.deviceType = it.deviceCategory + model.deviceUsedTime = "未知" + deviceModels.add(model) + } + + when { + isRefresh -> { + dataBeans.clear() + dataBeans = deviceModels + isRefresh = false + } + else -> { + dataBeans = deviceModels + } + } + weakReferenceHandler.sendEmptyMessage(2022091901) } override fun onError(errorCode: String, errorMsg: String) { - // do something + Log.d(kTag, "onError: $errorMsg") } }) } + + private val callback = Handler.Callback { + if (it.what == 2022091901) { + if (isRefresh) { + addedDeviceAdapter.notifyDataSetChanged() + } else { + addedDeviceAdapter = AddedDeviceAdapter(requireContext(), dataBeans) + deviceRecyclerView.adapter = addedDeviceAdapter + addedDeviceAdapter.setOnItemClickListener(object : + AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + requireContext().navigatePageTo() + } + + override fun onItemClick(position: Int) { + // 需要根据设备类型显示不同的页面 + val deviceModel = dataBeans[position] + when { + deviceModel.deviceName.contains("热水器") -> { + requireContext().navigatePageTo(deviceModel.deviceName) + } + deviceModel.deviceName.contains("油烟机") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("壁挂炉") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("燃气灶") -> { + requireContext().navigatePageTo() + } + } + } + + override fun onButtonClick(position: Int) { + + } + }) + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 451a69a..d4a358b 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -5,6 +5,7 @@ */ public class AddedDeviceModel { private String deviceName; + private boolean isOnline; private String deviceImage; private String deviceModel; private String deviceType; @@ -18,6 +19,14 @@ this.deviceName = deviceName; } + public boolean isOnline() { + return isOnline; + } + + public void setOnline(boolean online) { + isOnline = online; + } + public String getDeviceImage() { return deviceImage; } diff --git a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt index bd5363c..08b0d19 100644 --- a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt @@ -1,7 +1,5 @@ package com.casic.br.view -import android.content.Context -import android.util.Log import android.view.View import com.casic.br.R import com.casic.br.extensions.initLayoutImmersionBar @@ -11,7 +9,6 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -26,8 +23,6 @@ class ResetDeviceActivity : KotlinBaseActivity() { - private val kTag = "ResetDeviceActivity" - private val context: Context = this@ResetDeviceActivity private lateinit var params: ArrayList override fun initLayoutView(): Int = R.layout.activity_reset_device @@ -58,30 +53,26 @@ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object : ITuyaActivatorGetToken { override fun onSuccess(token: String) { - Log.d(kTag, "token: $token") //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。 val builder = ActivatorBuilder().apply { this.ssid = params[0] - this.context = context + this.context = this@ResetDeviceActivity this.password = params[1] this.activatorModel = ActivatorModelEnum.TY_EZ this.timeOut = 100 this.token = token this.listener = object : ITuyaSmartActivatorListener { override fun onError(errorCode: String?, errorMsg: String?) { - Log.i(kTag, "onError: $errorMsg") + "添加设备超时".show(this@ResetDeviceActivity) LoadingDialogHub.dismiss() } override fun onActiveSuccess(devResp: DeviceBean?) { LoadingDialogHub.dismiss() - Log.d(kTag, devResp!!.toJson()) navigatePageTo() } override fun onStep(step: String?, data: Any?) { - Log.i(kTag, "step: $step") - Log.i(kTag, "data: $data") LoadingDialogHub.dismiss() } } diff --git a/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt b/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt index 838bde6..d8035fa 100644 --- a/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt @@ -1,7 +1,28 @@ package com.casic.br.view.device +import com.casic.br.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + /** * 油烟机 * */ -class RangeHoodActivity { +class RangeHoodActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_range_hood + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt index 3e21b07..423ef45 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt @@ -13,6 +13,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import kotlinx.android.synthetic.main.activity_water_heater.* +import kotlinx.android.synthetic.main.include_device_title.* import java.util.* diff --git a/app/src/main/res/layout/activity_range_hood.xml b/app/src/main/res/layout/activity_range_hood.xml new file mode 100644 index 0000000..811651f --- /dev/null +++ b/app/src/main/res/layout/activity_range_hood.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ba3523a..c8e1fb2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,7 @@ + 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 4be4e05..d4bbc7c 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,6 +1,5 @@ package com.casic.br.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View @@ -10,28 +9,18 @@ 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.model.AddedDeviceModel import com.pengxh.kt.lite.extensions.dp2px -@SuppressLint("NotifyDataSetChanged") -class AddedDeviceAdapter(private val context: Context) : - RecyclerView.Adapter() { +class AddedDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private var dataRows: MutableList = ArrayList() - - fun setupDevice(devices: MutableList) { - dataRows = devices - notifyDataSetChanged() - } - - fun deleteDevice(position: Int) { - if (dataRows.isNotEmpty()) { - dataRows.removeAt(position) - notifyDataSetChanged() - } - } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( @@ -59,6 +48,11 @@ } } else { holder.deviceNameView.text = dataRows[position].deviceName + Glide.with(context) + .load(dataRows[position].deviceImage) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) holder.deviceModelView.text = dataRows[position].deviceModel holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime holder.rootView.setOnClickListener { 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 b9e32f4..3480d5b 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,6 +1,7 @@ package com.casic.br.fragment import android.graphics.Typeface +import android.os.Handler import android.util.Log import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter @@ -11,13 +12,14 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity +import com.casic.br.view.device.CookerActivity import com.casic.br.view.device.FireplaceActivity import com.casic.br.view.device.RangeHoodActivity import com.casic.br.view.device.WaterHeaterActivity import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.SaveKeyValues +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.tuya.smart.home.sdk.TuyaHomeSdk import com.tuya.smart.home.sdk.bean.HomeBean import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback @@ -30,6 +32,10 @@ class DevicePageFragment : KotlinBaseFragment() { private val kTag = "DevicePageFragment" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -40,44 +46,7 @@ } override fun initData() { - //TODO 模拟数据 - val deviceModels = ArrayList() - - val model1 = AddedDeviceModel() - model1.deviceName = "万家乐热水器" - model1.deviceModel = "D40-DM1" - model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" - deviceModels.add(model1) - - val addedDeviceAdapter = AddedDeviceAdapter(requireContext()) - addedDeviceAdapter.setupDevice(deviceModels) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onAddDeviceClick() { - requireContext().navigatePageTo() - } - - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - when { - deviceModel.deviceName.contains("热水器") -> { - requireContext().navigatePageTo(deviceModel.deviceName) - } - deviceModel.deviceName.contains("油烟机") -> { - requireContext().navigatePageTo() - } - deviceModel.deviceName.contains("壁挂炉") -> { - requireContext().navigatePageTo() - } - } - } - - override fun onButtonClick(position: Int) { - - } - }) + weakReferenceHandler = WeakReferenceHandler(callback) //热门推荐 //TODO 模拟数据 只显示前三个设备 @@ -118,12 +87,77 @@ .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { val deviceList: List = bean.deviceList - Log.d(kTag, deviceList.toJson()) + val deviceModels = ArrayList() + deviceList.forEach { + val model = AddedDeviceModel() + when (it.deviceCategory) { + "yyj" -> model.deviceName = "万家乐油烟机" + } + model.isOnline = it.isOnline + model.deviceImage = it.iconUrl + model.deviceModel = it.name + model.deviceType = it.deviceCategory + model.deviceUsedTime = "未知" + deviceModels.add(model) + } + + when { + isRefresh -> { + dataBeans.clear() + dataBeans = deviceModels + isRefresh = false + } + else -> { + dataBeans = deviceModels + } + } + weakReferenceHandler.sendEmptyMessage(2022091901) } override fun onError(errorCode: String, errorMsg: String) { - // do something + Log.d(kTag, "onError: $errorMsg") } }) } + + private val callback = Handler.Callback { + if (it.what == 2022091901) { + if (isRefresh) { + addedDeviceAdapter.notifyDataSetChanged() + } else { + addedDeviceAdapter = AddedDeviceAdapter(requireContext(), dataBeans) + deviceRecyclerView.adapter = addedDeviceAdapter + addedDeviceAdapter.setOnItemClickListener(object : + AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + requireContext().navigatePageTo() + } + + override fun onItemClick(position: Int) { + // 需要根据设备类型显示不同的页面 + val deviceModel = dataBeans[position] + when { + deviceModel.deviceName.contains("热水器") -> { + requireContext().navigatePageTo(deviceModel.deviceName) + } + deviceModel.deviceName.contains("油烟机") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("壁挂炉") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("燃气灶") -> { + requireContext().navigatePageTo() + } + } + } + + override fun onButtonClick(position: Int) { + + } + }) + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 451a69a..d4a358b 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -5,6 +5,7 @@ */ public class AddedDeviceModel { private String deviceName; + private boolean isOnline; private String deviceImage; private String deviceModel; private String deviceType; @@ -18,6 +19,14 @@ this.deviceName = deviceName; } + public boolean isOnline() { + return isOnline; + } + + public void setOnline(boolean online) { + isOnline = online; + } + public String getDeviceImage() { return deviceImage; } diff --git a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt index bd5363c..08b0d19 100644 --- a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt @@ -1,7 +1,5 @@ package com.casic.br.view -import android.content.Context -import android.util.Log import android.view.View import com.casic.br.R import com.casic.br.extensions.initLayoutImmersionBar @@ -11,7 +9,6 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -26,8 +23,6 @@ class ResetDeviceActivity : KotlinBaseActivity() { - private val kTag = "ResetDeviceActivity" - private val context: Context = this@ResetDeviceActivity private lateinit var params: ArrayList override fun initLayoutView(): Int = R.layout.activity_reset_device @@ -58,30 +53,26 @@ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object : ITuyaActivatorGetToken { override fun onSuccess(token: String) { - Log.d(kTag, "token: $token") //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。 val builder = ActivatorBuilder().apply { this.ssid = params[0] - this.context = context + this.context = this@ResetDeviceActivity this.password = params[1] this.activatorModel = ActivatorModelEnum.TY_EZ this.timeOut = 100 this.token = token this.listener = object : ITuyaSmartActivatorListener { override fun onError(errorCode: String?, errorMsg: String?) { - Log.i(kTag, "onError: $errorMsg") + "添加设备超时".show(this@ResetDeviceActivity) LoadingDialogHub.dismiss() } override fun onActiveSuccess(devResp: DeviceBean?) { LoadingDialogHub.dismiss() - Log.d(kTag, devResp!!.toJson()) navigatePageTo() } override fun onStep(step: String?, data: Any?) { - Log.i(kTag, "step: $step") - Log.i(kTag, "data: $data") LoadingDialogHub.dismiss() } } diff --git a/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt b/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt index 838bde6..d8035fa 100644 --- a/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt @@ -1,7 +1,28 @@ package com.casic.br.view.device +import com.casic.br.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + /** * 油烟机 * */ -class RangeHoodActivity { +class RangeHoodActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_range_hood + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt index 3e21b07..423ef45 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt @@ -13,6 +13,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import kotlinx.android.synthetic.main.activity_water_heater.* +import kotlinx.android.synthetic.main.include_device_title.* import java.util.* diff --git a/app/src/main/res/layout/activity_range_hood.xml b/app/src/main/res/layout/activity_range_hood.xml new file mode 100644 index 0000000..811651f --- /dev/null +++ b/app/src/main/res/layout/activity_range_hood.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_heater.xml b/app/src/main/res/layout/activity_water_heater.xml index 5a5f36f..d2de0ad 100644 --- a/app/src/main/res/layout/activity_water_heater.xml +++ b/app/src/main/res/layout/activity_water_heater.xml @@ -7,36 +7,7 @@ android:background="@mipmap/common_bkg" android:orientation="vertical"> - - - - - - - - + + 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 4be4e05..d4bbc7c 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,6 +1,5 @@ package com.casic.br.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View @@ -10,28 +9,18 @@ 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.model.AddedDeviceModel import com.pengxh.kt.lite.extensions.dp2px -@SuppressLint("NotifyDataSetChanged") -class AddedDeviceAdapter(private val context: Context) : - RecyclerView.Adapter() { +class AddedDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private var dataRows: MutableList = ArrayList() - - fun setupDevice(devices: MutableList) { - dataRows = devices - notifyDataSetChanged() - } - - fun deleteDevice(position: Int) { - if (dataRows.isNotEmpty()) { - dataRows.removeAt(position) - notifyDataSetChanged() - } - } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( @@ -59,6 +48,11 @@ } } else { holder.deviceNameView.text = dataRows[position].deviceName + Glide.with(context) + .load(dataRows[position].deviceImage) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) holder.deviceModelView.text = dataRows[position].deviceModel holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime holder.rootView.setOnClickListener { 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 b9e32f4..3480d5b 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,6 +1,7 @@ package com.casic.br.fragment import android.graphics.Typeface +import android.os.Handler import android.util.Log import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter @@ -11,13 +12,14 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity +import com.casic.br.view.device.CookerActivity import com.casic.br.view.device.FireplaceActivity import com.casic.br.view.device.RangeHoodActivity import com.casic.br.view.device.WaterHeaterActivity import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.SaveKeyValues +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.tuya.smart.home.sdk.TuyaHomeSdk import com.tuya.smart.home.sdk.bean.HomeBean import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback @@ -30,6 +32,10 @@ class DevicePageFragment : KotlinBaseFragment() { private val kTag = "DevicePageFragment" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -40,44 +46,7 @@ } override fun initData() { - //TODO 模拟数据 - val deviceModels = ArrayList() - - val model1 = AddedDeviceModel() - model1.deviceName = "万家乐热水器" - model1.deviceModel = "D40-DM1" - model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" - deviceModels.add(model1) - - val addedDeviceAdapter = AddedDeviceAdapter(requireContext()) - addedDeviceAdapter.setupDevice(deviceModels) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onAddDeviceClick() { - requireContext().navigatePageTo() - } - - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - when { - deviceModel.deviceName.contains("热水器") -> { - requireContext().navigatePageTo(deviceModel.deviceName) - } - deviceModel.deviceName.contains("油烟机") -> { - requireContext().navigatePageTo() - } - deviceModel.deviceName.contains("壁挂炉") -> { - requireContext().navigatePageTo() - } - } - } - - override fun onButtonClick(position: Int) { - - } - }) + weakReferenceHandler = WeakReferenceHandler(callback) //热门推荐 //TODO 模拟数据 只显示前三个设备 @@ -118,12 +87,77 @@ .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { val deviceList: List = bean.deviceList - Log.d(kTag, deviceList.toJson()) + val deviceModels = ArrayList() + deviceList.forEach { + val model = AddedDeviceModel() + when (it.deviceCategory) { + "yyj" -> model.deviceName = "万家乐油烟机" + } + model.isOnline = it.isOnline + model.deviceImage = it.iconUrl + model.deviceModel = it.name + model.deviceType = it.deviceCategory + model.deviceUsedTime = "未知" + deviceModels.add(model) + } + + when { + isRefresh -> { + dataBeans.clear() + dataBeans = deviceModels + isRefresh = false + } + else -> { + dataBeans = deviceModels + } + } + weakReferenceHandler.sendEmptyMessage(2022091901) } override fun onError(errorCode: String, errorMsg: String) { - // do something + Log.d(kTag, "onError: $errorMsg") } }) } + + private val callback = Handler.Callback { + if (it.what == 2022091901) { + if (isRefresh) { + addedDeviceAdapter.notifyDataSetChanged() + } else { + addedDeviceAdapter = AddedDeviceAdapter(requireContext(), dataBeans) + deviceRecyclerView.adapter = addedDeviceAdapter + addedDeviceAdapter.setOnItemClickListener(object : + AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + requireContext().navigatePageTo() + } + + override fun onItemClick(position: Int) { + // 需要根据设备类型显示不同的页面 + val deviceModel = dataBeans[position] + when { + deviceModel.deviceName.contains("热水器") -> { + requireContext().navigatePageTo(deviceModel.deviceName) + } + deviceModel.deviceName.contains("油烟机") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("壁挂炉") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("燃气灶") -> { + requireContext().navigatePageTo() + } + } + } + + override fun onButtonClick(position: Int) { + + } + }) + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 451a69a..d4a358b 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -5,6 +5,7 @@ */ public class AddedDeviceModel { private String deviceName; + private boolean isOnline; private String deviceImage; private String deviceModel; private String deviceType; @@ -18,6 +19,14 @@ this.deviceName = deviceName; } + public boolean isOnline() { + return isOnline; + } + + public void setOnline(boolean online) { + isOnline = online; + } + public String getDeviceImage() { return deviceImage; } diff --git a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt index bd5363c..08b0d19 100644 --- a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt @@ -1,7 +1,5 @@ package com.casic.br.view -import android.content.Context -import android.util.Log import android.view.View import com.casic.br.R import com.casic.br.extensions.initLayoutImmersionBar @@ -11,7 +9,6 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -26,8 +23,6 @@ class ResetDeviceActivity : KotlinBaseActivity() { - private val kTag = "ResetDeviceActivity" - private val context: Context = this@ResetDeviceActivity private lateinit var params: ArrayList override fun initLayoutView(): Int = R.layout.activity_reset_device @@ -58,30 +53,26 @@ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object : ITuyaActivatorGetToken { override fun onSuccess(token: String) { - Log.d(kTag, "token: $token") //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。 val builder = ActivatorBuilder().apply { this.ssid = params[0] - this.context = context + this.context = this@ResetDeviceActivity this.password = params[1] this.activatorModel = ActivatorModelEnum.TY_EZ this.timeOut = 100 this.token = token this.listener = object : ITuyaSmartActivatorListener { override fun onError(errorCode: String?, errorMsg: String?) { - Log.i(kTag, "onError: $errorMsg") + "添加设备超时".show(this@ResetDeviceActivity) LoadingDialogHub.dismiss() } override fun onActiveSuccess(devResp: DeviceBean?) { LoadingDialogHub.dismiss() - Log.d(kTag, devResp!!.toJson()) navigatePageTo() } override fun onStep(step: String?, data: Any?) { - Log.i(kTag, "step: $step") - Log.i(kTag, "data: $data") LoadingDialogHub.dismiss() } } diff --git a/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt b/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt index 838bde6..d8035fa 100644 --- a/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt @@ -1,7 +1,28 @@ package com.casic.br.view.device +import com.casic.br.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + /** * 油烟机 * */ -class RangeHoodActivity { +class RangeHoodActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_range_hood + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt index 3e21b07..423ef45 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt @@ -13,6 +13,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import kotlinx.android.synthetic.main.activity_water_heater.* +import kotlinx.android.synthetic.main.include_device_title.* import java.util.* diff --git a/app/src/main/res/layout/activity_range_hood.xml b/app/src/main/res/layout/activity_range_hood.xml new file mode 100644 index 0000000..811651f --- /dev/null +++ b/app/src/main/res/layout/activity_range_hood.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_heater.xml b/app/src/main/res/layout/activity_water_heater.xml index 5a5f36f..d2de0ad 100644 --- a/app/src/main/res/layout/activity_water_heater.xml +++ b/app/src/main/res/layout/activity_water_heater.xml @@ -7,36 +7,7 @@ android:background="@mipmap/common_bkg" android:orientation="vertical"> - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ba3523a..c8e1fb2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,7 @@ + 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 4be4e05..d4bbc7c 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,6 +1,5 @@ package com.casic.br.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View @@ -10,28 +9,18 @@ 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.model.AddedDeviceModel import com.pengxh.kt.lite.extensions.dp2px -@SuppressLint("NotifyDataSetChanged") -class AddedDeviceAdapter(private val context: Context) : - RecyclerView.Adapter() { +class AddedDeviceAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private var dataRows: MutableList = ArrayList() - - fun setupDevice(devices: MutableList) { - dataRows = devices - notifyDataSetChanged() - } - - fun deleteDevice(position: Int) { - if (dataRows.isNotEmpty()) { - dataRows.removeAt(position) - notifyDataSetChanged() - } - } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( @@ -59,6 +48,11 @@ } } else { holder.deviceNameView.text = dataRows[position].deviceName + Glide.with(context) + .load(dataRows[position].deviceImage) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) holder.deviceModelView.text = dataRows[position].deviceModel holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime holder.rootView.setOnClickListener { 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 b9e32f4..3480d5b 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,6 +1,7 @@ package com.casic.br.fragment import android.graphics.Typeface +import android.os.Handler import android.util.Log import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter @@ -11,13 +12,14 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddDeviceActivity import com.casic.br.view.AllDeviceActivity +import com.casic.br.view.device.CookerActivity import com.casic.br.view.device.FireplaceActivity import com.casic.br.view.device.RangeHoodActivity import com.casic.br.view.device.WaterHeaterActivity import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.SaveKeyValues +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.tuya.smart.home.sdk.TuyaHomeSdk import com.tuya.smart.home.sdk.bean.HomeBean import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback @@ -30,6 +32,10 @@ class DevicePageFragment : KotlinBaseFragment() { private val kTag = "DevicePageFragment" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var addedDeviceAdapter: AddedDeviceAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false override fun initLayoutView(): Int = R.layout.fragment_device @@ -40,44 +46,7 @@ } override fun initData() { - //TODO 模拟数据 - val deviceModels = ArrayList() - - val model1 = AddedDeviceModel() - model1.deviceName = "万家乐热水器" - model1.deviceModel = "D40-DM1" - model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" - deviceModels.add(model1) - - val addedDeviceAdapter = AddedDeviceAdapter(requireContext()) - addedDeviceAdapter.setupDevice(deviceModels) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onAddDeviceClick() { - requireContext().navigatePageTo() - } - - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - when { - deviceModel.deviceName.contains("热水器") -> { - requireContext().navigatePageTo(deviceModel.deviceName) - } - deviceModel.deviceName.contains("油烟机") -> { - requireContext().navigatePageTo() - } - deviceModel.deviceName.contains("壁挂炉") -> { - requireContext().navigatePageTo() - } - } - } - - override fun onButtonClick(position: Int) { - - } - }) + weakReferenceHandler = WeakReferenceHandler(callback) //热门推荐 //TODO 模拟数据 只显示前三个设备 @@ -118,12 +87,77 @@ .getHomeDetail(object : ITuyaHomeResultCallback { override fun onSuccess(bean: HomeBean) { val deviceList: List = bean.deviceList - Log.d(kTag, deviceList.toJson()) + val deviceModels = ArrayList() + deviceList.forEach { + val model = AddedDeviceModel() + when (it.deviceCategory) { + "yyj" -> model.deviceName = "万家乐油烟机" + } + model.isOnline = it.isOnline + model.deviceImage = it.iconUrl + model.deviceModel = it.name + model.deviceType = it.deviceCategory + model.deviceUsedTime = "未知" + deviceModels.add(model) + } + + when { + isRefresh -> { + dataBeans.clear() + dataBeans = deviceModels + isRefresh = false + } + else -> { + dataBeans = deviceModels + } + } + weakReferenceHandler.sendEmptyMessage(2022091901) } override fun onError(errorCode: String, errorMsg: String) { - // do something + Log.d(kTag, "onError: $errorMsg") } }) } + + private val callback = Handler.Callback { + if (it.what == 2022091901) { + if (isRefresh) { + addedDeviceAdapter.notifyDataSetChanged() + } else { + addedDeviceAdapter = AddedDeviceAdapter(requireContext(), dataBeans) + deviceRecyclerView.adapter = addedDeviceAdapter + addedDeviceAdapter.setOnItemClickListener(object : + AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + requireContext().navigatePageTo() + } + + override fun onItemClick(position: Int) { + // 需要根据设备类型显示不同的页面 + val deviceModel = dataBeans[position] + when { + deviceModel.deviceName.contains("热水器") -> { + requireContext().navigatePageTo(deviceModel.deviceName) + } + deviceModel.deviceName.contains("油烟机") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("壁挂炉") -> { + requireContext().navigatePageTo() + } + deviceModel.deviceName.contains("燃气灶") -> { + requireContext().navigatePageTo() + } + } + } + + override fun onButtonClick(position: Int) { + + } + }) + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 451a69a..d4a358b 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -5,6 +5,7 @@ */ public class AddedDeviceModel { private String deviceName; + private boolean isOnline; private String deviceImage; private String deviceModel; private String deviceType; @@ -18,6 +19,14 @@ this.deviceName = deviceName; } + public boolean isOnline() { + return isOnline; + } + + public void setOnline(boolean online) { + isOnline = online; + } + public String getDeviceImage() { return deviceImage; } diff --git a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt index bd5363c..08b0d19 100644 --- a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt @@ -1,7 +1,5 @@ package com.casic.br.view -import android.content.Context -import android.util.Log import android.view.View import com.casic.br.R import com.casic.br.extensions.initLayoutImmersionBar @@ -11,7 +9,6 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -26,8 +23,6 @@ class ResetDeviceActivity : KotlinBaseActivity() { - private val kTag = "ResetDeviceActivity" - private val context: Context = this@ResetDeviceActivity private lateinit var params: ArrayList override fun initLayoutView(): Int = R.layout.activity_reset_device @@ -58,30 +53,26 @@ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object : ITuyaActivatorGetToken { override fun onSuccess(token: String) { - Log.d(kTag, "token: $token") //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。 val builder = ActivatorBuilder().apply { this.ssid = params[0] - this.context = context + this.context = this@ResetDeviceActivity this.password = params[1] this.activatorModel = ActivatorModelEnum.TY_EZ this.timeOut = 100 this.token = token this.listener = object : ITuyaSmartActivatorListener { override fun onError(errorCode: String?, errorMsg: String?) { - Log.i(kTag, "onError: $errorMsg") + "添加设备超时".show(this@ResetDeviceActivity) LoadingDialogHub.dismiss() } override fun onActiveSuccess(devResp: DeviceBean?) { LoadingDialogHub.dismiss() - Log.d(kTag, devResp!!.toJson()) navigatePageTo() } override fun onStep(step: String?, data: Any?) { - Log.i(kTag, "step: $step") - Log.i(kTag, "data: $data") LoadingDialogHub.dismiss() } } diff --git a/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt b/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt index 838bde6..d8035fa 100644 --- a/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/RangeHoodActivity.kt @@ -1,7 +1,28 @@ package com.casic.br.view.device +import com.casic.br.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + /** * 油烟机 * */ -class RangeHoodActivity { +class RangeHoodActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_range_hood + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt index 3e21b07..423ef45 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt @@ -13,6 +13,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.utils.Constant import kotlinx.android.synthetic.main.activity_water_heater.* +import kotlinx.android.synthetic.main.include_device_title.* import java.util.* diff --git a/app/src/main/res/layout/activity_range_hood.xml b/app/src/main/res/layout/activity_range_hood.xml new file mode 100644 index 0000000..811651f --- /dev/null +++ b/app/src/main/res/layout/activity_range_hood.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_heater.xml b/app/src/main/res/layout/activity_water_heater.xml index 5a5f36f..d2de0ad 100644 --- a/app/src/main/res/layout/activity_water_heater.xml +++ b/app/src/main/res/layout/activity_water_heater.xml @@ -7,36 +7,7 @@ android:background="@mipmap/common_bkg" android:orientation="vertical"> - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_added_device_rv_g.xml b/app/src/main/res/layout/item_added_device_rv_g.xml index e322e7e..15131cf 100644 --- a/app/src/main/res/layout/item_added_device_rv_g.xml +++ b/app/src/main/res/layout/item_added_device_rv_g.xml @@ -61,7 +61,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="sans-serif-medium" - android:gravity="center" android:paddingVertical="@dimen/dp_3" android:text="@string/app_name" android:textColor="@color/mainTextColor" @@ -71,7 +70,6 @@ android:id="@+id/deviceUsedTimeView" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:gravity="center" android:paddingVertical="@dimen/dp_3" android:singleLine="true" android:text="@string/app_name"