diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a519f6e..745c999 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -59,6 +59,7 @@ + + + if (message.what == 2022092601) { + val parseObject = JSONObject.parseObject(message.obj as String) + parseObject.keys.forEach { + when (it) { + "1" -> {//开关机 + isDeviceWorking = parseObject[it] as Boolean + turnOffRadioButton.isChecked = isDeviceWorking + } + "2" -> { + when (parseObject[it] as String) { + "comfortable" -> comfortableRadioButton.isChecked = true + "eco" -> ecoRadioButton.isChecked = true + "summer" -> summerRadioButton.isChecked = true + else -> { + comfortableRadioButton.isChecked = false + ecoRadioButton.isChecked = false + summerRadioButton.isChecked = false + } + } + } + "3" -> {//卫浴温度设置 + + } + "5" -> {//供暖温度设置 + + } + "14" -> { + totalGasUsedView.text = String.format( + "${parseObject[it] as String}${requireContext().resources.getString(R.string.volume_unit)}" + ) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a519f6e..745c999 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -59,6 +59,7 @@ + + if (message.what == 2022092601) { + val parseObject = JSONObject.parseObject(message.obj as String) + parseObject.keys.forEach { + when (it) { + "1" -> {//开关机 + isDeviceWorking = parseObject[it] as Boolean + turnOffRadioButton.isChecked = isDeviceWorking + } + "2" -> { + when (parseObject[it] as String) { + "comfortable" -> comfortableRadioButton.isChecked = true + "eco" -> ecoRadioButton.isChecked = true + "summer" -> summerRadioButton.isChecked = true + else -> { + comfortableRadioButton.isChecked = false + ecoRadioButton.isChecked = false + summerRadioButton.isChecked = false + } + } + } + "3" -> {//卫浴温度设置 + + } + "5" -> {//供暖温度设置 + + } + "14" -> { + totalGasUsedView.text = String.format( + "${parseObject[it] as String}${requireContext().resources.getString(R.string.volume_unit)}" + ) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt new file mode 100644 index 0000000..683a605 --- /dev/null +++ b/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt @@ -0,0 +1,25 @@ +package com.casic.br.fragment.fireplace + +import com.casic.br.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class ServicePageFragment : KotlinBaseFragment() { + + override fun initLayoutView(): Int = R.layout.fragment_device_fireplace_service + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a519f6e..745c999 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -59,6 +59,7 @@ + + if (message.what == 2022092601) { + val parseObject = JSONObject.parseObject(message.obj as String) + parseObject.keys.forEach { + when (it) { + "1" -> {//开关机 + isDeviceWorking = parseObject[it] as Boolean + turnOffRadioButton.isChecked = isDeviceWorking + } + "2" -> { + when (parseObject[it] as String) { + "comfortable" -> comfortableRadioButton.isChecked = true + "eco" -> ecoRadioButton.isChecked = true + "summer" -> summerRadioButton.isChecked = true + else -> { + comfortableRadioButton.isChecked = false + ecoRadioButton.isChecked = false + summerRadioButton.isChecked = false + } + } + } + "3" -> {//卫浴温度设置 + + } + "5" -> {//供暖温度设置 + + } + "14" -> { + totalGasUsedView.text = String.format( + "${parseObject[it] as String}${requireContext().resources.getString(R.string.volume_unit)}" + ) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt new file mode 100644 index 0000000..683a605 --- /dev/null +++ b/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt @@ -0,0 +1,25 @@ +package com.casic.br.fragment.fireplace + +import com.casic.br.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class ServicePageFragment : KotlinBaseFragment() { + + override fun initLayoutView(): Int = R.layout.fragment_device_fireplace_service + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt new file mode 100644 index 0000000..08e466b --- /dev/null +++ b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt @@ -0,0 +1,135 @@ +package com.casic.br.fragment.fireplace + +import android.content.Context +import android.net.wifi.WifiManager +import android.os.Handler +import android.view.View +import com.alibaba.fastjson.JSONObject +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.tuya.smart.sdk.api.ITuyaDevice +import com.tuya.smart.sdk.bean.DeviceBean +import kotlinx.android.synthetic.main.fragment_device_fireplace_status.* + +class StatusPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() { + + companion object { + lateinit var weakReference: WeakReferenceHandler + } + + private val kTag = "StatusPageFragment" + private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager } + private var isDeviceWorking = false + + override fun initLayoutView(): Int = R.layout.fragment_device_fireplace_status + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReference = WeakReferenceHandler(callback) + } + + private val callback = Handler.Callback { message -> + when (message.what) { + 2022092802 -> { + val parseObject = JSONObject.parseObject(message.obj as String) + parseObject.keys.forEach { + when (it) { + "1" -> {//开关机 + isDeviceWorking = parseObject[it] as Boolean + } + "4" -> { + showerTempView.text = String.format( + "${parseObject[it]}${ + requireContext().resources.getString(R.string.temperature_unit) + }" + ) + } + "6" -> { + heaterTempView.text = String.format( + "${parseObject[it]}${ + requireContext().resources.getString(R.string.temperature_unit) + }" + ) + } + "10" -> { + heaterStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "11" -> { + showerStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "103" -> { + antifreezeStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "102" -> { + ventilatorStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "101" -> { + pumpStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + } + } + } + 2022092803 -> { + val deviceBean = message.obj as DeviceBean + deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + ipAddressView.text = deviceBean.ip + } + } + true + } + + override fun initEvent() { + + } + + override fun onResume() { + super.onResume() + wifiStatusSwitch.isChecked = !wifi.connectionInfo.ssid.contains("unknown ssid") + if (wifiStatusSwitch.isChecked) { + wifiLayout.visibility = View.VISIBLE + wifiNameView.text = wifi.connectionInfo.ssid.replace("\"", "") + } else { + wifiLayout.visibility = View.GONE + } + deviceStateView.text = if (!isDeviceWorking) { + "已关机" + } else { + "工作中" + } + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a519f6e..745c999 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -59,6 +59,7 @@ + + if (message.what == 2022092601) { + val parseObject = JSONObject.parseObject(message.obj as String) + parseObject.keys.forEach { + when (it) { + "1" -> {//开关机 + isDeviceWorking = parseObject[it] as Boolean + turnOffRadioButton.isChecked = isDeviceWorking + } + "2" -> { + when (parseObject[it] as String) { + "comfortable" -> comfortableRadioButton.isChecked = true + "eco" -> ecoRadioButton.isChecked = true + "summer" -> summerRadioButton.isChecked = true + else -> { + comfortableRadioButton.isChecked = false + ecoRadioButton.isChecked = false + summerRadioButton.isChecked = false + } + } + } + "3" -> {//卫浴温度设置 + + } + "5" -> {//供暖温度设置 + + } + "14" -> { + totalGasUsedView.text = String.format( + "${parseObject[it] as String}${requireContext().resources.getString(R.string.volume_unit)}" + ) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt new file mode 100644 index 0000000..683a605 --- /dev/null +++ b/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt @@ -0,0 +1,25 @@ +package com.casic.br.fragment.fireplace + +import com.casic.br.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class ServicePageFragment : KotlinBaseFragment() { + + override fun initLayoutView(): Int = R.layout.fragment_device_fireplace_service + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt new file mode 100644 index 0000000..08e466b --- /dev/null +++ b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt @@ -0,0 +1,135 @@ +package com.casic.br.fragment.fireplace + +import android.content.Context +import android.net.wifi.WifiManager +import android.os.Handler +import android.view.View +import com.alibaba.fastjson.JSONObject +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.tuya.smart.sdk.api.ITuyaDevice +import com.tuya.smart.sdk.bean.DeviceBean +import kotlinx.android.synthetic.main.fragment_device_fireplace_status.* + +class StatusPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() { + + companion object { + lateinit var weakReference: WeakReferenceHandler + } + + private val kTag = "StatusPageFragment" + private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager } + private var isDeviceWorking = false + + override fun initLayoutView(): Int = R.layout.fragment_device_fireplace_status + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReference = WeakReferenceHandler(callback) + } + + private val callback = Handler.Callback { message -> + when (message.what) { + 2022092802 -> { + val parseObject = JSONObject.parseObject(message.obj as String) + parseObject.keys.forEach { + when (it) { + "1" -> {//开关机 + isDeviceWorking = parseObject[it] as Boolean + } + "4" -> { + showerTempView.text = String.format( + "${parseObject[it]}${ + requireContext().resources.getString(R.string.temperature_unit) + }" + ) + } + "6" -> { + heaterTempView.text = String.format( + "${parseObject[it]}${ + requireContext().resources.getString(R.string.temperature_unit) + }" + ) + } + "10" -> { + heaterStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "11" -> { + showerStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "103" -> { + antifreezeStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "102" -> { + ventilatorStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "101" -> { + pumpStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + } + } + } + 2022092803 -> { + val deviceBean = message.obj as DeviceBean + deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + ipAddressView.text = deviceBean.ip + } + } + true + } + + override fun initEvent() { + + } + + override fun onResume() { + super.onResume() + wifiStatusSwitch.isChecked = !wifi.connectionInfo.ssid.contains("unknown ssid") + if (wifiStatusSwitch.isChecked) { + wifiLayout.visibility = View.VISIBLE + wifiNameView.text = wifi.connectionInfo.ssid.replace("\"", "") + } else { + wifiLayout.visibility = View.GONE + } + deviceStateView.text = if (!isDeviceWorking) { + "已关机" + } else { + "工作中" + } + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt index 139cb18..79598a9 100644 --- a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt @@ -1,7 +1,132 @@ package com.casic.br.view.device +import android.graphics.Typeface +import android.util.Log +import android.view.LayoutInflater +import android.widget.TextView +import androidx.fragment.app.Fragment +import com.bumptech.glide.Glide +import com.casic.br.R +import com.casic.br.adapter.TabPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.fragment.fireplace.ControlPageFragment +import com.casic.br.fragment.fireplace.ServicePageFragment +import com.casic.br.fragment.fireplace.StatusPageFragment +import com.casic.br.utils.CommandManager +import com.casic.br.utils.LocaleConstant +import com.casic.br.utils.TuyaDeviceListener +import com.google.android.material.tabs.TabLayout +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.tuya.smart.home.sdk.TuyaHomeSdk +import com.tuya.smart.sdk.api.ITuyaDevice +import kotlinx.android.synthetic.main.activity_fire_place.* +import kotlinx.android.synthetic.main.include_device_title.* +import java.util.* + /** * 壁挂炉 * */ -class FireplaceActivity { +class FireplaceActivity : KotlinBaseActivity() { + + private val kTag = "FireplaceActivity" + private val inflater by lazy { LayoutInflater.from(this) } + private var fragmentPages: ArrayList = ArrayList() + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_fire_place + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = "万家乐壁挂炉" + Glide.with(this) + .load(deviceBean.iconUrl) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + fragmentPages.add(ControlPageFragment(deviceInstance, deviceId)) + fragmentPages.add(StatusPageFragment(deviceInstance)) + fragmentPages.add(ServicePageFragment()) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + + val controlMsg = ControlPageFragment.weakReference.obtainMessage() + controlMsg.what = 2022092801 + controlMsg.obj = dpStr + ControlPageFragment.weakReference.sendMessage(controlMsg) + + val statusMsg = StatusPageFragment.weakReference.obtainMessage() + statusMsg.what = 2022092802 + statusMsg.obj = dpStr + StatusPageFragment.weakReference.sendMessage(statusMsg) + + val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage() + deviceBeanMsg.what = 2022092803 + deviceBeanMsg.obj = deviceBean + StatusPageFragment.weakReference.sendMessage(deviceBeanMsg) + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + + } + + deviceViewPager.adapter = + TabPagerAdapter(fragmentPages, LocaleConstant.DEVICE_PAGE_TITLE, supportFragmentManager) + deviceTabLayout.setupWithViewPager(deviceViewPager) + deviceTabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { + override fun onTabSelected(tab: TabLayout.Tab?) { + val textView = inflater.inflate(R.layout.item_top_tab, null) as TextView + textView.textSize = 16f + textView.typeface = Typeface.DEFAULT_BOLD + textView.text = tab!!.text + tab.customView = textView + } + + override fun onTabUnselected(tab: TabLayout.Tab?) { + tab?.customView = null + } + + override fun onTabReselected(tab: TabLayout.Tab?) { + + } + }) + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a519f6e..745c999 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -59,6 +59,7 @@ + + if (message.what == 2022092601) { + val parseObject = JSONObject.parseObject(message.obj as String) + parseObject.keys.forEach { + when (it) { + "1" -> {//开关机 + isDeviceWorking = parseObject[it] as Boolean + turnOffRadioButton.isChecked = isDeviceWorking + } + "2" -> { + when (parseObject[it] as String) { + "comfortable" -> comfortableRadioButton.isChecked = true + "eco" -> ecoRadioButton.isChecked = true + "summer" -> summerRadioButton.isChecked = true + else -> { + comfortableRadioButton.isChecked = false + ecoRadioButton.isChecked = false + summerRadioButton.isChecked = false + } + } + } + "3" -> {//卫浴温度设置 + + } + "5" -> {//供暖温度设置 + + } + "14" -> { + totalGasUsedView.text = String.format( + "${parseObject[it] as String}${requireContext().resources.getString(R.string.volume_unit)}" + ) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt new file mode 100644 index 0000000..683a605 --- /dev/null +++ b/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt @@ -0,0 +1,25 @@ +package com.casic.br.fragment.fireplace + +import com.casic.br.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class ServicePageFragment : KotlinBaseFragment() { + + override fun initLayoutView(): Int = R.layout.fragment_device_fireplace_service + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt new file mode 100644 index 0000000..08e466b --- /dev/null +++ b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt @@ -0,0 +1,135 @@ +package com.casic.br.fragment.fireplace + +import android.content.Context +import android.net.wifi.WifiManager +import android.os.Handler +import android.view.View +import com.alibaba.fastjson.JSONObject +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.tuya.smart.sdk.api.ITuyaDevice +import com.tuya.smart.sdk.bean.DeviceBean +import kotlinx.android.synthetic.main.fragment_device_fireplace_status.* + +class StatusPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() { + + companion object { + lateinit var weakReference: WeakReferenceHandler + } + + private val kTag = "StatusPageFragment" + private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager } + private var isDeviceWorking = false + + override fun initLayoutView(): Int = R.layout.fragment_device_fireplace_status + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReference = WeakReferenceHandler(callback) + } + + private val callback = Handler.Callback { message -> + when (message.what) { + 2022092802 -> { + val parseObject = JSONObject.parseObject(message.obj as String) + parseObject.keys.forEach { + when (it) { + "1" -> {//开关机 + isDeviceWorking = parseObject[it] as Boolean + } + "4" -> { + showerTempView.text = String.format( + "${parseObject[it]}${ + requireContext().resources.getString(R.string.temperature_unit) + }" + ) + } + "6" -> { + heaterTempView.text = String.format( + "${parseObject[it]}${ + requireContext().resources.getString(R.string.temperature_unit) + }" + ) + } + "10" -> { + heaterStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "11" -> { + showerStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "103" -> { + antifreezeStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "102" -> { + ventilatorStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "101" -> { + pumpStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + } + } + } + 2022092803 -> { + val deviceBean = message.obj as DeviceBean + deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + ipAddressView.text = deviceBean.ip + } + } + true + } + + override fun initEvent() { + + } + + override fun onResume() { + super.onResume() + wifiStatusSwitch.isChecked = !wifi.connectionInfo.ssid.contains("unknown ssid") + if (wifiStatusSwitch.isChecked) { + wifiLayout.visibility = View.VISIBLE + wifiNameView.text = wifi.connectionInfo.ssid.replace("\"", "") + } else { + wifiLayout.visibility = View.GONE + } + deviceStateView.text = if (!isDeviceWorking) { + "已关机" + } else { + "工作中" + } + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt index 139cb18..79598a9 100644 --- a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt @@ -1,7 +1,132 @@ package com.casic.br.view.device +import android.graphics.Typeface +import android.util.Log +import android.view.LayoutInflater +import android.widget.TextView +import androidx.fragment.app.Fragment +import com.bumptech.glide.Glide +import com.casic.br.R +import com.casic.br.adapter.TabPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.fragment.fireplace.ControlPageFragment +import com.casic.br.fragment.fireplace.ServicePageFragment +import com.casic.br.fragment.fireplace.StatusPageFragment +import com.casic.br.utils.CommandManager +import com.casic.br.utils.LocaleConstant +import com.casic.br.utils.TuyaDeviceListener +import com.google.android.material.tabs.TabLayout +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.tuya.smart.home.sdk.TuyaHomeSdk +import com.tuya.smart.sdk.api.ITuyaDevice +import kotlinx.android.synthetic.main.activity_fire_place.* +import kotlinx.android.synthetic.main.include_device_title.* +import java.util.* + /** * 壁挂炉 * */ -class FireplaceActivity { +class FireplaceActivity : KotlinBaseActivity() { + + private val kTag = "FireplaceActivity" + private val inflater by lazy { LayoutInflater.from(this) } + private var fragmentPages: ArrayList = ArrayList() + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_fire_place + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = "万家乐壁挂炉" + Glide.with(this) + .load(deviceBean.iconUrl) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + fragmentPages.add(ControlPageFragment(deviceInstance, deviceId)) + fragmentPages.add(StatusPageFragment(deviceInstance)) + fragmentPages.add(ServicePageFragment()) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + + val controlMsg = ControlPageFragment.weakReference.obtainMessage() + controlMsg.what = 2022092801 + controlMsg.obj = dpStr + ControlPageFragment.weakReference.sendMessage(controlMsg) + + val statusMsg = StatusPageFragment.weakReference.obtainMessage() + statusMsg.what = 2022092802 + statusMsg.obj = dpStr + StatusPageFragment.weakReference.sendMessage(statusMsg) + + val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage() + deviceBeanMsg.what = 2022092803 + deviceBeanMsg.obj = deviceBean + StatusPageFragment.weakReference.sendMessage(deviceBeanMsg) + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + + } + + deviceViewPager.adapter = + TabPagerAdapter(fragmentPages, LocaleConstant.DEVICE_PAGE_TITLE, supportFragmentManager) + deviceTabLayout.setupWithViewPager(deviceViewPager) + deviceTabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { + override fun onTabSelected(tab: TabLayout.Tab?) { + val textView = inflater.inflate(R.layout.item_top_tab, null) as TextView + textView.textSize = 16f + textView.typeface = Typeface.DEFAULT_BOLD + textView.text = tab!!.text + tab.customView = textView + } + + override fun onTabUnselected(tab: TabLayout.Tab?) { + tab?.customView = null + } + + override fun onTabReselected(tab: TabLayout.Tab?) { + + } + }) + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_fire_place.xml b/app/src/main/res/layout/activity_fire_place.xml new file mode 100644 index 0000000..1bd9505 --- /dev/null +++ b/app/src/main/res/layout/activity_fire_place.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a519f6e..745c999 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -59,6 +59,7 @@ + + if (message.what == 2022092601) { + val parseObject = JSONObject.parseObject(message.obj as String) + parseObject.keys.forEach { + when (it) { + "1" -> {//开关机 + isDeviceWorking = parseObject[it] as Boolean + turnOffRadioButton.isChecked = isDeviceWorking + } + "2" -> { + when (parseObject[it] as String) { + "comfortable" -> comfortableRadioButton.isChecked = true + "eco" -> ecoRadioButton.isChecked = true + "summer" -> summerRadioButton.isChecked = true + else -> { + comfortableRadioButton.isChecked = false + ecoRadioButton.isChecked = false + summerRadioButton.isChecked = false + } + } + } + "3" -> {//卫浴温度设置 + + } + "5" -> {//供暖温度设置 + + } + "14" -> { + totalGasUsedView.text = String.format( + "${parseObject[it] as String}${requireContext().resources.getString(R.string.volume_unit)}" + ) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt new file mode 100644 index 0000000..683a605 --- /dev/null +++ b/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt @@ -0,0 +1,25 @@ +package com.casic.br.fragment.fireplace + +import com.casic.br.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class ServicePageFragment : KotlinBaseFragment() { + + override fun initLayoutView(): Int = R.layout.fragment_device_fireplace_service + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt new file mode 100644 index 0000000..08e466b --- /dev/null +++ b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt @@ -0,0 +1,135 @@ +package com.casic.br.fragment.fireplace + +import android.content.Context +import android.net.wifi.WifiManager +import android.os.Handler +import android.view.View +import com.alibaba.fastjson.JSONObject +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.tuya.smart.sdk.api.ITuyaDevice +import com.tuya.smart.sdk.bean.DeviceBean +import kotlinx.android.synthetic.main.fragment_device_fireplace_status.* + +class StatusPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() { + + companion object { + lateinit var weakReference: WeakReferenceHandler + } + + private val kTag = "StatusPageFragment" + private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager } + private var isDeviceWorking = false + + override fun initLayoutView(): Int = R.layout.fragment_device_fireplace_status + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReference = WeakReferenceHandler(callback) + } + + private val callback = Handler.Callback { message -> + when (message.what) { + 2022092802 -> { + val parseObject = JSONObject.parseObject(message.obj as String) + parseObject.keys.forEach { + when (it) { + "1" -> {//开关机 + isDeviceWorking = parseObject[it] as Boolean + } + "4" -> { + showerTempView.text = String.format( + "${parseObject[it]}${ + requireContext().resources.getString(R.string.temperature_unit) + }" + ) + } + "6" -> { + heaterTempView.text = String.format( + "${parseObject[it]}${ + requireContext().resources.getString(R.string.temperature_unit) + }" + ) + } + "10" -> { + heaterStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "11" -> { + showerStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "103" -> { + antifreezeStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "102" -> { + ventilatorStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "101" -> { + pumpStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + } + } + } + 2022092803 -> { + val deviceBean = message.obj as DeviceBean + deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + ipAddressView.text = deviceBean.ip + } + } + true + } + + override fun initEvent() { + + } + + override fun onResume() { + super.onResume() + wifiStatusSwitch.isChecked = !wifi.connectionInfo.ssid.contains("unknown ssid") + if (wifiStatusSwitch.isChecked) { + wifiLayout.visibility = View.VISIBLE + wifiNameView.text = wifi.connectionInfo.ssid.replace("\"", "") + } else { + wifiLayout.visibility = View.GONE + } + deviceStateView.text = if (!isDeviceWorking) { + "已关机" + } else { + "工作中" + } + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt index 139cb18..79598a9 100644 --- a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt @@ -1,7 +1,132 @@ package com.casic.br.view.device +import android.graphics.Typeface +import android.util.Log +import android.view.LayoutInflater +import android.widget.TextView +import androidx.fragment.app.Fragment +import com.bumptech.glide.Glide +import com.casic.br.R +import com.casic.br.adapter.TabPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.fragment.fireplace.ControlPageFragment +import com.casic.br.fragment.fireplace.ServicePageFragment +import com.casic.br.fragment.fireplace.StatusPageFragment +import com.casic.br.utils.CommandManager +import com.casic.br.utils.LocaleConstant +import com.casic.br.utils.TuyaDeviceListener +import com.google.android.material.tabs.TabLayout +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.tuya.smart.home.sdk.TuyaHomeSdk +import com.tuya.smart.sdk.api.ITuyaDevice +import kotlinx.android.synthetic.main.activity_fire_place.* +import kotlinx.android.synthetic.main.include_device_title.* +import java.util.* + /** * 壁挂炉 * */ -class FireplaceActivity { +class FireplaceActivity : KotlinBaseActivity() { + + private val kTag = "FireplaceActivity" + private val inflater by lazy { LayoutInflater.from(this) } + private var fragmentPages: ArrayList = ArrayList() + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_fire_place + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = "万家乐壁挂炉" + Glide.with(this) + .load(deviceBean.iconUrl) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + fragmentPages.add(ControlPageFragment(deviceInstance, deviceId)) + fragmentPages.add(StatusPageFragment(deviceInstance)) + fragmentPages.add(ServicePageFragment()) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + + val controlMsg = ControlPageFragment.weakReference.obtainMessage() + controlMsg.what = 2022092801 + controlMsg.obj = dpStr + ControlPageFragment.weakReference.sendMessage(controlMsg) + + val statusMsg = StatusPageFragment.weakReference.obtainMessage() + statusMsg.what = 2022092802 + statusMsg.obj = dpStr + StatusPageFragment.weakReference.sendMessage(statusMsg) + + val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage() + deviceBeanMsg.what = 2022092803 + deviceBeanMsg.obj = deviceBean + StatusPageFragment.weakReference.sendMessage(deviceBeanMsg) + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + + } + + deviceViewPager.adapter = + TabPagerAdapter(fragmentPages, LocaleConstant.DEVICE_PAGE_TITLE, supportFragmentManager) + deviceTabLayout.setupWithViewPager(deviceViewPager) + deviceTabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { + override fun onTabSelected(tab: TabLayout.Tab?) { + val textView = inflater.inflate(R.layout.item_top_tab, null) as TextView + textView.textSize = 16f + textView.typeface = Typeface.DEFAULT_BOLD + textView.text = tab!!.text + tab.customView = textView + } + + override fun onTabUnselected(tab: TabLayout.Tab?) { + tab?.customView = null + } + + override fun onTabReselected(tab: TabLayout.Tab?) { + + } + }) + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_fire_place.xml b/app/src/main/res/layout/activity_fire_place.xml new file mode 100644 index 0000000..1bd9505 --- /dev/null +++ b/app/src/main/res/layout/activity_fire_place.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_device_fireplace_control.xml b/app/src/main/res/layout/fragment_device_fireplace_control.xml new file mode 100644 index 0000000..838d7d4 --- /dev/null +++ b/app/src/main/res/layout/fragment_device_fireplace_control.xml @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a519f6e..745c999 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -59,6 +59,7 @@ + + if (message.what == 2022092601) { + val parseObject = JSONObject.parseObject(message.obj as String) + parseObject.keys.forEach { + when (it) { + "1" -> {//开关机 + isDeviceWorking = parseObject[it] as Boolean + turnOffRadioButton.isChecked = isDeviceWorking + } + "2" -> { + when (parseObject[it] as String) { + "comfortable" -> comfortableRadioButton.isChecked = true + "eco" -> ecoRadioButton.isChecked = true + "summer" -> summerRadioButton.isChecked = true + else -> { + comfortableRadioButton.isChecked = false + ecoRadioButton.isChecked = false + summerRadioButton.isChecked = false + } + } + } + "3" -> {//卫浴温度设置 + + } + "5" -> {//供暖温度设置 + + } + "14" -> { + totalGasUsedView.text = String.format( + "${parseObject[it] as String}${requireContext().resources.getString(R.string.volume_unit)}" + ) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt new file mode 100644 index 0000000..683a605 --- /dev/null +++ b/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt @@ -0,0 +1,25 @@ +package com.casic.br.fragment.fireplace + +import com.casic.br.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class ServicePageFragment : KotlinBaseFragment() { + + override fun initLayoutView(): Int = R.layout.fragment_device_fireplace_service + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt new file mode 100644 index 0000000..08e466b --- /dev/null +++ b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt @@ -0,0 +1,135 @@ +package com.casic.br.fragment.fireplace + +import android.content.Context +import android.net.wifi.WifiManager +import android.os.Handler +import android.view.View +import com.alibaba.fastjson.JSONObject +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.tuya.smart.sdk.api.ITuyaDevice +import com.tuya.smart.sdk.bean.DeviceBean +import kotlinx.android.synthetic.main.fragment_device_fireplace_status.* + +class StatusPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() { + + companion object { + lateinit var weakReference: WeakReferenceHandler + } + + private val kTag = "StatusPageFragment" + private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager } + private var isDeviceWorking = false + + override fun initLayoutView(): Int = R.layout.fragment_device_fireplace_status + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReference = WeakReferenceHandler(callback) + } + + private val callback = Handler.Callback { message -> + when (message.what) { + 2022092802 -> { + val parseObject = JSONObject.parseObject(message.obj as String) + parseObject.keys.forEach { + when (it) { + "1" -> {//开关机 + isDeviceWorking = parseObject[it] as Boolean + } + "4" -> { + showerTempView.text = String.format( + "${parseObject[it]}${ + requireContext().resources.getString(R.string.temperature_unit) + }" + ) + } + "6" -> { + heaterTempView.text = String.format( + "${parseObject[it]}${ + requireContext().resources.getString(R.string.temperature_unit) + }" + ) + } + "10" -> { + heaterStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "11" -> { + showerStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "103" -> { + antifreezeStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "102" -> { + ventilatorStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "101" -> { + pumpStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + } + } + } + 2022092803 -> { + val deviceBean = message.obj as DeviceBean + deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + ipAddressView.text = deviceBean.ip + } + } + true + } + + override fun initEvent() { + + } + + override fun onResume() { + super.onResume() + wifiStatusSwitch.isChecked = !wifi.connectionInfo.ssid.contains("unknown ssid") + if (wifiStatusSwitch.isChecked) { + wifiLayout.visibility = View.VISIBLE + wifiNameView.text = wifi.connectionInfo.ssid.replace("\"", "") + } else { + wifiLayout.visibility = View.GONE + } + deviceStateView.text = if (!isDeviceWorking) { + "已关机" + } else { + "工作中" + } + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt index 139cb18..79598a9 100644 --- a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt @@ -1,7 +1,132 @@ package com.casic.br.view.device +import android.graphics.Typeface +import android.util.Log +import android.view.LayoutInflater +import android.widget.TextView +import androidx.fragment.app.Fragment +import com.bumptech.glide.Glide +import com.casic.br.R +import com.casic.br.adapter.TabPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.fragment.fireplace.ControlPageFragment +import com.casic.br.fragment.fireplace.ServicePageFragment +import com.casic.br.fragment.fireplace.StatusPageFragment +import com.casic.br.utils.CommandManager +import com.casic.br.utils.LocaleConstant +import com.casic.br.utils.TuyaDeviceListener +import com.google.android.material.tabs.TabLayout +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.tuya.smart.home.sdk.TuyaHomeSdk +import com.tuya.smart.sdk.api.ITuyaDevice +import kotlinx.android.synthetic.main.activity_fire_place.* +import kotlinx.android.synthetic.main.include_device_title.* +import java.util.* + /** * 壁挂炉 * */ -class FireplaceActivity { +class FireplaceActivity : KotlinBaseActivity() { + + private val kTag = "FireplaceActivity" + private val inflater by lazy { LayoutInflater.from(this) } + private var fragmentPages: ArrayList = ArrayList() + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_fire_place + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = "万家乐壁挂炉" + Glide.with(this) + .load(deviceBean.iconUrl) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + fragmentPages.add(ControlPageFragment(deviceInstance, deviceId)) + fragmentPages.add(StatusPageFragment(deviceInstance)) + fragmentPages.add(ServicePageFragment()) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + + val controlMsg = ControlPageFragment.weakReference.obtainMessage() + controlMsg.what = 2022092801 + controlMsg.obj = dpStr + ControlPageFragment.weakReference.sendMessage(controlMsg) + + val statusMsg = StatusPageFragment.weakReference.obtainMessage() + statusMsg.what = 2022092802 + statusMsg.obj = dpStr + StatusPageFragment.weakReference.sendMessage(statusMsg) + + val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage() + deviceBeanMsg.what = 2022092803 + deviceBeanMsg.obj = deviceBean + StatusPageFragment.weakReference.sendMessage(deviceBeanMsg) + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + + } + + deviceViewPager.adapter = + TabPagerAdapter(fragmentPages, LocaleConstant.DEVICE_PAGE_TITLE, supportFragmentManager) + deviceTabLayout.setupWithViewPager(deviceViewPager) + deviceTabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { + override fun onTabSelected(tab: TabLayout.Tab?) { + val textView = inflater.inflate(R.layout.item_top_tab, null) as TextView + textView.textSize = 16f + textView.typeface = Typeface.DEFAULT_BOLD + textView.text = tab!!.text + tab.customView = textView + } + + override fun onTabUnselected(tab: TabLayout.Tab?) { + tab?.customView = null + } + + override fun onTabReselected(tab: TabLayout.Tab?) { + + } + }) + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_fire_place.xml b/app/src/main/res/layout/activity_fire_place.xml new file mode 100644 index 0000000..1bd9505 --- /dev/null +++ b/app/src/main/res/layout/activity_fire_place.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_device_fireplace_control.xml b/app/src/main/res/layout/fragment_device_fireplace_control.xml new file mode 100644 index 0000000..838d7d4 --- /dev/null +++ b/app/src/main/res/layout/fragment_device_fireplace_control.xml @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_device_fireplace_service.xml b/app/src/main/res/layout/fragment_device_fireplace_service.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/fragment_device_fireplace_service.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a519f6e..745c999 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -59,6 +59,7 @@ + + if (message.what == 2022092601) { + val parseObject = JSONObject.parseObject(message.obj as String) + parseObject.keys.forEach { + when (it) { + "1" -> {//开关机 + isDeviceWorking = parseObject[it] as Boolean + turnOffRadioButton.isChecked = isDeviceWorking + } + "2" -> { + when (parseObject[it] as String) { + "comfortable" -> comfortableRadioButton.isChecked = true + "eco" -> ecoRadioButton.isChecked = true + "summer" -> summerRadioButton.isChecked = true + else -> { + comfortableRadioButton.isChecked = false + ecoRadioButton.isChecked = false + summerRadioButton.isChecked = false + } + } + } + "3" -> {//卫浴温度设置 + + } + "5" -> {//供暖温度设置 + + } + "14" -> { + totalGasUsedView.text = String.format( + "${parseObject[it] as String}${requireContext().resources.getString(R.string.volume_unit)}" + ) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt new file mode 100644 index 0000000..683a605 --- /dev/null +++ b/app/src/main/java/com/casic/br/fragment/fireplace/ServicePageFragment.kt @@ -0,0 +1,25 @@ +package com.casic.br.fragment.fireplace + +import com.casic.br.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class ServicePageFragment : KotlinBaseFragment() { + + override fun initLayoutView(): Int = R.layout.fragment_device_fireplace_service + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt new file mode 100644 index 0000000..08e466b --- /dev/null +++ b/app/src/main/java/com/casic/br/fragment/fireplace/StatusPageFragment.kt @@ -0,0 +1,135 @@ +package com.casic.br.fragment.fireplace + +import android.content.Context +import android.net.wifi.WifiManager +import android.os.Handler +import android.view.View +import com.alibaba.fastjson.JSONObject +import com.casic.br.R +import com.casic.br.extensions.diffDate +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.tuya.smart.sdk.api.ITuyaDevice +import com.tuya.smart.sdk.bean.DeviceBean +import kotlinx.android.synthetic.main.fragment_device_fireplace_status.* + +class StatusPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() { + + companion object { + lateinit var weakReference: WeakReferenceHandler + } + + private val kTag = "StatusPageFragment" + private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager } + private var isDeviceWorking = false + + override fun initLayoutView(): Int = R.layout.fragment_device_fireplace_status + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReference = WeakReferenceHandler(callback) + } + + private val callback = Handler.Callback { message -> + when (message.what) { + 2022092802 -> { + val parseObject = JSONObject.parseObject(message.obj as String) + parseObject.keys.forEach { + when (it) { + "1" -> {//开关机 + isDeviceWorking = parseObject[it] as Boolean + } + "4" -> { + showerTempView.text = String.format( + "${parseObject[it]}${ + requireContext().resources.getString(R.string.temperature_unit) + }" + ) + } + "6" -> { + heaterTempView.text = String.format( + "${parseObject[it]}${ + requireContext().resources.getString(R.string.temperature_unit) + }" + ) + } + "10" -> { + heaterStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "11" -> { + showerStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "103" -> { + antifreezeStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "102" -> { + ventilatorStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + "101" -> { + pumpStateView.text = if (parseObject[it] as Boolean) { + "已开启" + } else { + "已关闭" + } + } + } + } + } + 2022092803 -> { + val deviceBean = message.obj as DeviceBean + deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") + ipAddressView.text = deviceBean.ip + } + } + true + } + + override fun initEvent() { + + } + + override fun onResume() { + super.onResume() + wifiStatusSwitch.isChecked = !wifi.connectionInfo.ssid.contains("unknown ssid") + if (wifiStatusSwitch.isChecked) { + wifiLayout.visibility = View.VISIBLE + wifiNameView.text = wifi.connectionInfo.ssid.replace("\"", "") + } else { + wifiLayout.visibility = View.GONE + } + deviceStateView.text = if (!isDeviceWorking) { + "已关机" + } else { + "工作中" + } + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt index 139cb18..79598a9 100644 --- a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt @@ -1,7 +1,132 @@ package com.casic.br.view.device +import android.graphics.Typeface +import android.util.Log +import android.view.LayoutInflater +import android.widget.TextView +import androidx.fragment.app.Fragment +import com.bumptech.glide.Glide +import com.casic.br.R +import com.casic.br.adapter.TabPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.fragment.fireplace.ControlPageFragment +import com.casic.br.fragment.fireplace.ServicePageFragment +import com.casic.br.fragment.fireplace.StatusPageFragment +import com.casic.br.utils.CommandManager +import com.casic.br.utils.LocaleConstant +import com.casic.br.utils.TuyaDeviceListener +import com.google.android.material.tabs.TabLayout +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.tuya.smart.home.sdk.TuyaHomeSdk +import com.tuya.smart.sdk.api.ITuyaDevice +import kotlinx.android.synthetic.main.activity_fire_place.* +import kotlinx.android.synthetic.main.include_device_title.* +import java.util.* + /** * 壁挂炉 * */ -class FireplaceActivity { +class FireplaceActivity : KotlinBaseActivity() { + + private val kTag = "FireplaceActivity" + private val inflater by lazy { LayoutInflater.from(this) } + private var fragmentPages: ArrayList = ArrayList() + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_fire_place + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = "万家乐壁挂炉" + Glide.with(this) + .load(deviceBean.iconUrl) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + fragmentPages.add(ControlPageFragment(deviceInstance, deviceId)) + fragmentPages.add(StatusPageFragment(deviceInstance)) + fragmentPages.add(ServicePageFragment()) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + + val controlMsg = ControlPageFragment.weakReference.obtainMessage() + controlMsg.what = 2022092801 + controlMsg.obj = dpStr + ControlPageFragment.weakReference.sendMessage(controlMsg) + + val statusMsg = StatusPageFragment.weakReference.obtainMessage() + statusMsg.what = 2022092802 + statusMsg.obj = dpStr + StatusPageFragment.weakReference.sendMessage(statusMsg) + + val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage() + deviceBeanMsg.what = 2022092803 + deviceBeanMsg.obj = deviceBean + StatusPageFragment.weakReference.sendMessage(deviceBeanMsg) + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + + } + + deviceViewPager.adapter = + TabPagerAdapter(fragmentPages, LocaleConstant.DEVICE_PAGE_TITLE, supportFragmentManager) + deviceTabLayout.setupWithViewPager(deviceViewPager) + deviceTabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { + override fun onTabSelected(tab: TabLayout.Tab?) { + val textView = inflater.inflate(R.layout.item_top_tab, null) as TextView + textView.textSize = 16f + textView.typeface = Typeface.DEFAULT_BOLD + textView.text = tab!!.text + tab.customView = textView + } + + override fun onTabUnselected(tab: TabLayout.Tab?) { + tab?.customView = null + } + + override fun onTabReselected(tab: TabLayout.Tab?) { + + } + }) + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_fire_place.xml b/app/src/main/res/layout/activity_fire_place.xml new file mode 100644 index 0000000..1bd9505 --- /dev/null +++ b/app/src/main/res/layout/activity_fire_place.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_device_fireplace_control.xml b/app/src/main/res/layout/fragment_device_fireplace_control.xml new file mode 100644 index 0000000..838d7d4 --- /dev/null +++ b/app/src/main/res/layout/fragment_device_fireplace_control.xml @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_device_fireplace_service.xml b/app/src/main/res/layout/fragment_device_fireplace_service.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/fragment_device_fireplace_service.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_device_fireplace_status.xml b/app/src/main/res/layout/fragment_device_fireplace_status.xml new file mode 100644 index 0000000..0b501a8 --- /dev/null +++ b/app/src/main/res/layout/fragment_device_fireplace_status.xml @@ -0,0 +1,362 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file