diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
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 cc20c54..4ef912b 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -1,25 +1,40 @@
package com.casic.br.fragment
import android.graphics.Typeface
+import android.util.Log
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.adapter.RecommendAdapter
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.model.AddedDeviceModel
+import com.casic.br.model.HomeModel
import com.casic.br.model.RecommendModel
+import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
import com.casic.br.view.device.WaterHeaterActivity
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
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.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
import kotlinx.android.synthetic.main.fragment_device.*
import kotlinx.android.synthetic.main.include_main_title.*
import java.util.*
+
class DevicePageFragment : KotlinBaseFragment() {
+ private val kTag = "DevicePageFragment"
+ private val gson by lazy { Gson() }
+
override fun initLayoutView(): Int = R.layout.fragment_device
override fun setupTopBarLayout() {
@@ -37,16 +52,6 @@
model1.deviceModel = "D40-DM1"
model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
deviceModels.add(model1)
- val model2 = AddedDeviceModel()
- model2.deviceName = "万家乐油烟机"
- model2.deviceModel = "CXW-320-W7"
- model2.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model2)
- val model3 = AddedDeviceModel()
- model3.deviceName = "万家乐壁挂炉"
- model3.deviceModel = "26-13A3L"
- model3.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model3)
val addedDeviceAdapter = AddedDeviceAdapter(requireContext())
addedDeviceAdapter.setupDevice(deviceModels)
@@ -102,8 +107,28 @@
}
override fun initEvent() {
- showAllDeviceLayout.setOnClickListener {
+ showAllDeviceButton.setOnClickListener {
requireContext().navigatePageTo()
}
}
+
+ override fun onResume() {
+ super.onResume()
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ return
+ }
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.newHomeInstance(homeModel.homeId.toLong())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ val deviceList: List = bean.deviceList
+ Log.d(kTag, deviceList.toJson())
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ // do something
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
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 cc20c54..4ef912b 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -1,25 +1,40 @@
package com.casic.br.fragment
import android.graphics.Typeface
+import android.util.Log
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.adapter.RecommendAdapter
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.model.AddedDeviceModel
+import com.casic.br.model.HomeModel
import com.casic.br.model.RecommendModel
+import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
import com.casic.br.view.device.WaterHeaterActivity
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
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.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
import kotlinx.android.synthetic.main.fragment_device.*
import kotlinx.android.synthetic.main.include_main_title.*
import java.util.*
+
class DevicePageFragment : KotlinBaseFragment() {
+ private val kTag = "DevicePageFragment"
+ private val gson by lazy { Gson() }
+
override fun initLayoutView(): Int = R.layout.fragment_device
override fun setupTopBarLayout() {
@@ -37,16 +52,6 @@
model1.deviceModel = "D40-DM1"
model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
deviceModels.add(model1)
- val model2 = AddedDeviceModel()
- model2.deviceName = "万家乐油烟机"
- model2.deviceModel = "CXW-320-W7"
- model2.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model2)
- val model3 = AddedDeviceModel()
- model3.deviceName = "万家乐壁挂炉"
- model3.deviceModel = "26-13A3L"
- model3.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model3)
val addedDeviceAdapter = AddedDeviceAdapter(requireContext())
addedDeviceAdapter.setupDevice(deviceModels)
@@ -102,8 +107,28 @@
}
override fun initEvent() {
- showAllDeviceLayout.setOnClickListener {
+ showAllDeviceButton.setOnClickListener {
requireContext().navigatePageTo()
}
}
+
+ override fun onResume() {
+ super.onResume()
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ return
+ }
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.newHomeInstance(homeModel.homeId.toLong())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ val deviceList: List = bean.deviceList
+ Log.d(kTag, deviceList.toJson())
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ // do something
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
index 8aba9b2..84e947c 100644
--- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
@@ -9,9 +9,13 @@
import com.casic.br.utils.GridItemDecoration
import com.casic.br.utils.LocaleConstant
import com.casic.br.view.LoginActivity
+import com.casic.br.view.MainActivity
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.youth.banner.Banner
import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
@@ -90,7 +94,39 @@
override fun initEvent() {
rightOperateView.setOnClickListener {
- requireContext().navigatePageTo()
+ if (rightOperateView.text == "退出") {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("退出确认")
+ .setMessage("退出当前账号,将不能同步数据")
+ .setNegativeButton("取消")
+ .setPositiveButton("确认退出")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ requireContext().navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ })
+ .build().show()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
}
+
+ override fun onResume() {
+ val isLogin = SaveKeyValues.getValue(LocaleConstant.USER_IS_LOGIN, false) as Boolean
+ if (isLogin) {
+ rightOperateView.text = "退出"
+ } else {
+ rightOperateView.text = "登录"
+ }
+ super.onResume()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
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 cc20c54..4ef912b 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -1,25 +1,40 @@
package com.casic.br.fragment
import android.graphics.Typeface
+import android.util.Log
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.adapter.RecommendAdapter
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.model.AddedDeviceModel
+import com.casic.br.model.HomeModel
import com.casic.br.model.RecommendModel
+import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
import com.casic.br.view.device.WaterHeaterActivity
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
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.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
import kotlinx.android.synthetic.main.fragment_device.*
import kotlinx.android.synthetic.main.include_main_title.*
import java.util.*
+
class DevicePageFragment : KotlinBaseFragment() {
+ private val kTag = "DevicePageFragment"
+ private val gson by lazy { Gson() }
+
override fun initLayoutView(): Int = R.layout.fragment_device
override fun setupTopBarLayout() {
@@ -37,16 +52,6 @@
model1.deviceModel = "D40-DM1"
model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
deviceModels.add(model1)
- val model2 = AddedDeviceModel()
- model2.deviceName = "万家乐油烟机"
- model2.deviceModel = "CXW-320-W7"
- model2.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model2)
- val model3 = AddedDeviceModel()
- model3.deviceName = "万家乐壁挂炉"
- model3.deviceModel = "26-13A3L"
- model3.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model3)
val addedDeviceAdapter = AddedDeviceAdapter(requireContext())
addedDeviceAdapter.setupDevice(deviceModels)
@@ -102,8 +107,28 @@
}
override fun initEvent() {
- showAllDeviceLayout.setOnClickListener {
+ showAllDeviceButton.setOnClickListener {
requireContext().navigatePageTo()
}
}
+
+ override fun onResume() {
+ super.onResume()
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ return
+ }
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.newHomeInstance(homeModel.homeId.toLong())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ val deviceList: List = bean.deviceList
+ Log.d(kTag, deviceList.toJson())
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ // do something
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
index 8aba9b2..84e947c 100644
--- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
@@ -9,9 +9,13 @@
import com.casic.br.utils.GridItemDecoration
import com.casic.br.utils.LocaleConstant
import com.casic.br.view.LoginActivity
+import com.casic.br.view.MainActivity
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.youth.banner.Banner
import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
@@ -90,7 +94,39 @@
override fun initEvent() {
rightOperateView.setOnClickListener {
- requireContext().navigatePageTo()
+ if (rightOperateView.text == "退出") {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("退出确认")
+ .setMessage("退出当前账号,将不能同步数据")
+ .setNegativeButton("取消")
+ .setPositiveButton("确认退出")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ requireContext().navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ })
+ .build().show()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
}
+
+ override fun onResume() {
+ val isLogin = SaveKeyValues.getValue(LocaleConstant.USER_IS_LOGIN, false) as Boolean
+ if (isLogin) {
+ rightOperateView.text = "退出"
+ } else {
+ rightOperateView.text = "登录"
+ }
+ super.onResume()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/model/HomeModel.java b/app/src/main/java/com/casic/br/model/HomeModel.java
new file mode 100644
index 0000000..638d420
--- /dev/null
+++ b/app/src/main/java/com/casic/br/model/HomeModel.java
@@ -0,0 +1,127 @@
+package com.casic.br.model;
+
+import java.util.List;
+
+public class HomeModel {
+
+ private boolean admin;
+ private String geoName;
+ private int homeId;
+ private int homeStatus;
+ private double lat;
+ private double lon;
+ private String name;
+ private int role;
+ private List rooms;
+
+ public boolean isAdmin() {
+ return admin;
+ }
+
+ public void setAdmin(boolean admin) {
+ this.admin = admin;
+ }
+
+ public String getGeoName() {
+ return geoName;
+ }
+
+ public void setGeoName(String geoName) {
+ this.geoName = geoName;
+ }
+
+ public int getHomeId() {
+ return homeId;
+ }
+
+ public void setHomeId(int homeId) {
+ this.homeId = homeId;
+ }
+
+ public int getHomeStatus() {
+ return homeStatus;
+ }
+
+ public void setHomeStatus(int homeStatus) {
+ this.homeStatus = homeStatus;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRole() {
+ return role;
+ }
+
+ public void setRole(int role) {
+ this.role = role;
+ }
+
+ public List getRooms() {
+ return rooms;
+ }
+
+ public void setRooms(List rooms) {
+ this.rooms = rooms;
+ }
+
+ public static class RoomsModel {
+ private int displayOrder;
+ private String name;
+ private int roomId;
+ private boolean sel;
+
+ public int getDisplayOrder() {
+ return displayOrder;
+ }
+
+ public void setDisplayOrder(int displayOrder) {
+ this.displayOrder = displayOrder;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(int roomId) {
+ this.roomId = roomId;
+ }
+
+ public boolean isSel() {
+ return sel;
+ }
+
+ public void setSel(boolean sel) {
+ this.sel = sel;
+ }
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
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 cc20c54..4ef912b 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -1,25 +1,40 @@
package com.casic.br.fragment
import android.graphics.Typeface
+import android.util.Log
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.adapter.RecommendAdapter
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.model.AddedDeviceModel
+import com.casic.br.model.HomeModel
import com.casic.br.model.RecommendModel
+import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
import com.casic.br.view.device.WaterHeaterActivity
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
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.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
import kotlinx.android.synthetic.main.fragment_device.*
import kotlinx.android.synthetic.main.include_main_title.*
import java.util.*
+
class DevicePageFragment : KotlinBaseFragment() {
+ private val kTag = "DevicePageFragment"
+ private val gson by lazy { Gson() }
+
override fun initLayoutView(): Int = R.layout.fragment_device
override fun setupTopBarLayout() {
@@ -37,16 +52,6 @@
model1.deviceModel = "D40-DM1"
model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
deviceModels.add(model1)
- val model2 = AddedDeviceModel()
- model2.deviceName = "万家乐油烟机"
- model2.deviceModel = "CXW-320-W7"
- model2.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model2)
- val model3 = AddedDeviceModel()
- model3.deviceName = "万家乐壁挂炉"
- model3.deviceModel = "26-13A3L"
- model3.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model3)
val addedDeviceAdapter = AddedDeviceAdapter(requireContext())
addedDeviceAdapter.setupDevice(deviceModels)
@@ -102,8 +107,28 @@
}
override fun initEvent() {
- showAllDeviceLayout.setOnClickListener {
+ showAllDeviceButton.setOnClickListener {
requireContext().navigatePageTo()
}
}
+
+ override fun onResume() {
+ super.onResume()
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ return
+ }
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.newHomeInstance(homeModel.homeId.toLong())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ val deviceList: List = bean.deviceList
+ Log.d(kTag, deviceList.toJson())
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ // do something
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
index 8aba9b2..84e947c 100644
--- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
@@ -9,9 +9,13 @@
import com.casic.br.utils.GridItemDecoration
import com.casic.br.utils.LocaleConstant
import com.casic.br.view.LoginActivity
+import com.casic.br.view.MainActivity
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.youth.banner.Banner
import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
@@ -90,7 +94,39 @@
override fun initEvent() {
rightOperateView.setOnClickListener {
- requireContext().navigatePageTo()
+ if (rightOperateView.text == "退出") {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("退出确认")
+ .setMessage("退出当前账号,将不能同步数据")
+ .setNegativeButton("取消")
+ .setPositiveButton("确认退出")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ requireContext().navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ })
+ .build().show()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
}
+
+ override fun onResume() {
+ val isLogin = SaveKeyValues.getValue(LocaleConstant.USER_IS_LOGIN, false) as Boolean
+ if (isLogin) {
+ rightOperateView.text = "退出"
+ } else {
+ rightOperateView.text = "登录"
+ }
+ super.onResume()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/model/HomeModel.java b/app/src/main/java/com/casic/br/model/HomeModel.java
new file mode 100644
index 0000000..638d420
--- /dev/null
+++ b/app/src/main/java/com/casic/br/model/HomeModel.java
@@ -0,0 +1,127 @@
+package com.casic.br.model;
+
+import java.util.List;
+
+public class HomeModel {
+
+ private boolean admin;
+ private String geoName;
+ private int homeId;
+ private int homeStatus;
+ private double lat;
+ private double lon;
+ private String name;
+ private int role;
+ private List rooms;
+
+ public boolean isAdmin() {
+ return admin;
+ }
+
+ public void setAdmin(boolean admin) {
+ this.admin = admin;
+ }
+
+ public String getGeoName() {
+ return geoName;
+ }
+
+ public void setGeoName(String geoName) {
+ this.geoName = geoName;
+ }
+
+ public int getHomeId() {
+ return homeId;
+ }
+
+ public void setHomeId(int homeId) {
+ this.homeId = homeId;
+ }
+
+ public int getHomeStatus() {
+ return homeStatus;
+ }
+
+ public void setHomeStatus(int homeStatus) {
+ this.homeStatus = homeStatus;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRole() {
+ return role;
+ }
+
+ public void setRole(int role) {
+ this.role = role;
+ }
+
+ public List getRooms() {
+ return rooms;
+ }
+
+ public void setRooms(List rooms) {
+ this.rooms = rooms;
+ }
+
+ public static class RoomsModel {
+ private int displayOrder;
+ private String name;
+ private int roomId;
+ private boolean sel;
+
+ public int getDisplayOrder() {
+ return displayOrder;
+ }
+
+ public void setDisplayOrder(int displayOrder) {
+ this.displayOrder = displayOrder;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(int roomId) {
+ this.roomId = roomId;
+ }
+
+ public boolean isSel() {
+ return sel;
+ }
+
+ public void setSel(boolean sel) {
+ this.sel = sel;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt
deleted file mode 100644
index da62e63..0000000
--- a/app/src/main/java/com/casic/br/utils/DialogManager.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.casic.br.utils;
-
-import android.app.Activity
-import android.view.WindowManager
-import com.pengxh.kt.lite.base.BaseSingleton
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
-
-class DialogManager private constructor(private val activity: Activity) {
-
- private lateinit var loadingDialog: QMUITipDialog
-
- companion object : BaseSingleton() {
- override val creator: (Activity) -> DialogManager
- get() = ::DialogManager
- }
-
- fun showLoadingDialog(message: String) {
- loadingDialog = QMUITipDialog
- .Builder(activity)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord(message)
- .create()
- if (!activity.isDestroyed) {
- try {
- loadingDialog.show()
- } catch (e: WindowManager.BadTokenException) {
- e.printStackTrace()
- }
- }
- }
-
- fun dismissLoadingDialog() {
- if (loadingDialog.isShowing) {
- loadingDialog.dismiss()
- }
- }
-}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
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 cc20c54..4ef912b 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -1,25 +1,40 @@
package com.casic.br.fragment
import android.graphics.Typeface
+import android.util.Log
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.adapter.RecommendAdapter
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.model.AddedDeviceModel
+import com.casic.br.model.HomeModel
import com.casic.br.model.RecommendModel
+import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
import com.casic.br.view.device.WaterHeaterActivity
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
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.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
import kotlinx.android.synthetic.main.fragment_device.*
import kotlinx.android.synthetic.main.include_main_title.*
import java.util.*
+
class DevicePageFragment : KotlinBaseFragment() {
+ private val kTag = "DevicePageFragment"
+ private val gson by lazy { Gson() }
+
override fun initLayoutView(): Int = R.layout.fragment_device
override fun setupTopBarLayout() {
@@ -37,16 +52,6 @@
model1.deviceModel = "D40-DM1"
model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
deviceModels.add(model1)
- val model2 = AddedDeviceModel()
- model2.deviceName = "万家乐油烟机"
- model2.deviceModel = "CXW-320-W7"
- model2.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model2)
- val model3 = AddedDeviceModel()
- model3.deviceName = "万家乐壁挂炉"
- model3.deviceModel = "26-13A3L"
- model3.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model3)
val addedDeviceAdapter = AddedDeviceAdapter(requireContext())
addedDeviceAdapter.setupDevice(deviceModels)
@@ -102,8 +107,28 @@
}
override fun initEvent() {
- showAllDeviceLayout.setOnClickListener {
+ showAllDeviceButton.setOnClickListener {
requireContext().navigatePageTo()
}
}
+
+ override fun onResume() {
+ super.onResume()
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ return
+ }
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.newHomeInstance(homeModel.homeId.toLong())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ val deviceList: List = bean.deviceList
+ Log.d(kTag, deviceList.toJson())
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ // do something
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
index 8aba9b2..84e947c 100644
--- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
@@ -9,9 +9,13 @@
import com.casic.br.utils.GridItemDecoration
import com.casic.br.utils.LocaleConstant
import com.casic.br.view.LoginActivity
+import com.casic.br.view.MainActivity
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.youth.banner.Banner
import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
@@ -90,7 +94,39 @@
override fun initEvent() {
rightOperateView.setOnClickListener {
- requireContext().navigatePageTo()
+ if (rightOperateView.text == "退出") {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("退出确认")
+ .setMessage("退出当前账号,将不能同步数据")
+ .setNegativeButton("取消")
+ .setPositiveButton("确认退出")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ requireContext().navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ })
+ .build().show()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
}
+
+ override fun onResume() {
+ val isLogin = SaveKeyValues.getValue(LocaleConstant.USER_IS_LOGIN, false) as Boolean
+ if (isLogin) {
+ rightOperateView.text = "退出"
+ } else {
+ rightOperateView.text = "登录"
+ }
+ super.onResume()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/model/HomeModel.java b/app/src/main/java/com/casic/br/model/HomeModel.java
new file mode 100644
index 0000000..638d420
--- /dev/null
+++ b/app/src/main/java/com/casic/br/model/HomeModel.java
@@ -0,0 +1,127 @@
+package com.casic.br.model;
+
+import java.util.List;
+
+public class HomeModel {
+
+ private boolean admin;
+ private String geoName;
+ private int homeId;
+ private int homeStatus;
+ private double lat;
+ private double lon;
+ private String name;
+ private int role;
+ private List rooms;
+
+ public boolean isAdmin() {
+ return admin;
+ }
+
+ public void setAdmin(boolean admin) {
+ this.admin = admin;
+ }
+
+ public String getGeoName() {
+ return geoName;
+ }
+
+ public void setGeoName(String geoName) {
+ this.geoName = geoName;
+ }
+
+ public int getHomeId() {
+ return homeId;
+ }
+
+ public void setHomeId(int homeId) {
+ this.homeId = homeId;
+ }
+
+ public int getHomeStatus() {
+ return homeStatus;
+ }
+
+ public void setHomeStatus(int homeStatus) {
+ this.homeStatus = homeStatus;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRole() {
+ return role;
+ }
+
+ public void setRole(int role) {
+ this.role = role;
+ }
+
+ public List getRooms() {
+ return rooms;
+ }
+
+ public void setRooms(List rooms) {
+ this.rooms = rooms;
+ }
+
+ public static class RoomsModel {
+ private int displayOrder;
+ private String name;
+ private int roomId;
+ private boolean sel;
+
+ public int getDisplayOrder() {
+ return displayOrder;
+ }
+
+ public void setDisplayOrder(int displayOrder) {
+ this.displayOrder = displayOrder;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(int roomId) {
+ this.roomId = roomId;
+ }
+
+ public boolean isSel() {
+ return sel;
+ }
+
+ public void setSel(boolean sel) {
+ this.sel = sel;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt
deleted file mode 100644
index da62e63..0000000
--- a/app/src/main/java/com/casic/br/utils/DialogManager.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.casic.br.utils;
-
-import android.app.Activity
-import android.view.WindowManager
-import com.pengxh.kt.lite.base.BaseSingleton
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
-
-class DialogManager private constructor(private val activity: Activity) {
-
- private lateinit var loadingDialog: QMUITipDialog
-
- companion object : BaseSingleton() {
- override val creator: (Activity) -> DialogManager
- get() = ::DialogManager
- }
-
- fun showLoadingDialog(message: String) {
- loadingDialog = QMUITipDialog
- .Builder(activity)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord(message)
- .create()
- if (!activity.isDestroyed) {
- try {
- loadingDialog.show()
- } catch (e: WindowManager.BadTokenException) {
- e.printStackTrace()
- }
- }
- }
-
- fun dismissLoadingDialog() {
- if (loadingDialog.isShowing) {
- loadingDialog.dismiss()
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
new file mode 100644
index 0000000..e04e327
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
@@ -0,0 +1,31 @@
+package com.casic.br.utils
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object LoadingDialogHub {
+
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun show(activity: Activity, message: String) {
+ loadingDialog = QMUITipDialog
+ .Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismiss() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
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 cc20c54..4ef912b 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -1,25 +1,40 @@
package com.casic.br.fragment
import android.graphics.Typeface
+import android.util.Log
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.adapter.RecommendAdapter
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.model.AddedDeviceModel
+import com.casic.br.model.HomeModel
import com.casic.br.model.RecommendModel
+import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
import com.casic.br.view.device.WaterHeaterActivity
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
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.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
import kotlinx.android.synthetic.main.fragment_device.*
import kotlinx.android.synthetic.main.include_main_title.*
import java.util.*
+
class DevicePageFragment : KotlinBaseFragment() {
+ private val kTag = "DevicePageFragment"
+ private val gson by lazy { Gson() }
+
override fun initLayoutView(): Int = R.layout.fragment_device
override fun setupTopBarLayout() {
@@ -37,16 +52,6 @@
model1.deviceModel = "D40-DM1"
model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
deviceModels.add(model1)
- val model2 = AddedDeviceModel()
- model2.deviceName = "万家乐油烟机"
- model2.deviceModel = "CXW-320-W7"
- model2.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model2)
- val model3 = AddedDeviceModel()
- model3.deviceName = "万家乐壁挂炉"
- model3.deviceModel = "26-13A3L"
- model3.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model3)
val addedDeviceAdapter = AddedDeviceAdapter(requireContext())
addedDeviceAdapter.setupDevice(deviceModels)
@@ -102,8 +107,28 @@
}
override fun initEvent() {
- showAllDeviceLayout.setOnClickListener {
+ showAllDeviceButton.setOnClickListener {
requireContext().navigatePageTo()
}
}
+
+ override fun onResume() {
+ super.onResume()
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ return
+ }
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.newHomeInstance(homeModel.homeId.toLong())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ val deviceList: List = bean.deviceList
+ Log.d(kTag, deviceList.toJson())
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ // do something
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
index 8aba9b2..84e947c 100644
--- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
@@ -9,9 +9,13 @@
import com.casic.br.utils.GridItemDecoration
import com.casic.br.utils.LocaleConstant
import com.casic.br.view.LoginActivity
+import com.casic.br.view.MainActivity
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.youth.banner.Banner
import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
@@ -90,7 +94,39 @@
override fun initEvent() {
rightOperateView.setOnClickListener {
- requireContext().navigatePageTo()
+ if (rightOperateView.text == "退出") {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("退出确认")
+ .setMessage("退出当前账号,将不能同步数据")
+ .setNegativeButton("取消")
+ .setPositiveButton("确认退出")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ requireContext().navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ })
+ .build().show()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
}
+
+ override fun onResume() {
+ val isLogin = SaveKeyValues.getValue(LocaleConstant.USER_IS_LOGIN, false) as Boolean
+ if (isLogin) {
+ rightOperateView.text = "退出"
+ } else {
+ rightOperateView.text = "登录"
+ }
+ super.onResume()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/model/HomeModel.java b/app/src/main/java/com/casic/br/model/HomeModel.java
new file mode 100644
index 0000000..638d420
--- /dev/null
+++ b/app/src/main/java/com/casic/br/model/HomeModel.java
@@ -0,0 +1,127 @@
+package com.casic.br.model;
+
+import java.util.List;
+
+public class HomeModel {
+
+ private boolean admin;
+ private String geoName;
+ private int homeId;
+ private int homeStatus;
+ private double lat;
+ private double lon;
+ private String name;
+ private int role;
+ private List rooms;
+
+ public boolean isAdmin() {
+ return admin;
+ }
+
+ public void setAdmin(boolean admin) {
+ this.admin = admin;
+ }
+
+ public String getGeoName() {
+ return geoName;
+ }
+
+ public void setGeoName(String geoName) {
+ this.geoName = geoName;
+ }
+
+ public int getHomeId() {
+ return homeId;
+ }
+
+ public void setHomeId(int homeId) {
+ this.homeId = homeId;
+ }
+
+ public int getHomeStatus() {
+ return homeStatus;
+ }
+
+ public void setHomeStatus(int homeStatus) {
+ this.homeStatus = homeStatus;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRole() {
+ return role;
+ }
+
+ public void setRole(int role) {
+ this.role = role;
+ }
+
+ public List getRooms() {
+ return rooms;
+ }
+
+ public void setRooms(List rooms) {
+ this.rooms = rooms;
+ }
+
+ public static class RoomsModel {
+ private int displayOrder;
+ private String name;
+ private int roomId;
+ private boolean sel;
+
+ public int getDisplayOrder() {
+ return displayOrder;
+ }
+
+ public void setDisplayOrder(int displayOrder) {
+ this.displayOrder = displayOrder;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(int roomId) {
+ this.roomId = roomId;
+ }
+
+ public boolean isSel() {
+ return sel;
+ }
+
+ public void setSel(boolean sel) {
+ this.sel = sel;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt
deleted file mode 100644
index da62e63..0000000
--- a/app/src/main/java/com/casic/br/utils/DialogManager.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.casic.br.utils;
-
-import android.app.Activity
-import android.view.WindowManager
-import com.pengxh.kt.lite.base.BaseSingleton
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
-
-class DialogManager private constructor(private val activity: Activity) {
-
- private lateinit var loadingDialog: QMUITipDialog
-
- companion object : BaseSingleton() {
- override val creator: (Activity) -> DialogManager
- get() = ::DialogManager
- }
-
- fun showLoadingDialog(message: String) {
- loadingDialog = QMUITipDialog
- .Builder(activity)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord(message)
- .create()
- if (!activity.isDestroyed) {
- try {
- loadingDialog.show()
- } catch (e: WindowManager.BadTokenException) {
- e.printStackTrace()
- }
- }
- }
-
- fun dismissLoadingDialog() {
- if (loadingDialog.isShowing) {
- loadingDialog.dismiss()
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
new file mode 100644
index 0000000..e04e327
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
@@ -0,0 +1,31 @@
+package com.casic.br.utils
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object LoadingDialogHub {
+
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun show(activity: Activity, message: String) {
+ loadingDialog = QMUITipDialog
+ .Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismiss() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index 197a466..dd365ad 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -53,7 +53,8 @@
* String
* =============================================================================================
* */
- const val USER_DETAIL_MODEL = "userDetailModel"
+ const val USER_IS_LOGIN = "isLogin"
+ const val HOME_DETAIL_MODEL = "homeDetailModel"
const val SERVER_BASE_URL = "http://111.198.10.15:11304"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
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 cc20c54..4ef912b 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -1,25 +1,40 @@
package com.casic.br.fragment
import android.graphics.Typeface
+import android.util.Log
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.adapter.RecommendAdapter
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.model.AddedDeviceModel
+import com.casic.br.model.HomeModel
import com.casic.br.model.RecommendModel
+import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
import com.casic.br.view.device.WaterHeaterActivity
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
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.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
import kotlinx.android.synthetic.main.fragment_device.*
import kotlinx.android.synthetic.main.include_main_title.*
import java.util.*
+
class DevicePageFragment : KotlinBaseFragment() {
+ private val kTag = "DevicePageFragment"
+ private val gson by lazy { Gson() }
+
override fun initLayoutView(): Int = R.layout.fragment_device
override fun setupTopBarLayout() {
@@ -37,16 +52,6 @@
model1.deviceModel = "D40-DM1"
model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
deviceModels.add(model1)
- val model2 = AddedDeviceModel()
- model2.deviceName = "万家乐油烟机"
- model2.deviceModel = "CXW-320-W7"
- model2.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model2)
- val model3 = AddedDeviceModel()
- model3.deviceName = "万家乐壁挂炉"
- model3.deviceModel = "26-13A3L"
- model3.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model3)
val addedDeviceAdapter = AddedDeviceAdapter(requireContext())
addedDeviceAdapter.setupDevice(deviceModels)
@@ -102,8 +107,28 @@
}
override fun initEvent() {
- showAllDeviceLayout.setOnClickListener {
+ showAllDeviceButton.setOnClickListener {
requireContext().navigatePageTo()
}
}
+
+ override fun onResume() {
+ super.onResume()
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ return
+ }
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.newHomeInstance(homeModel.homeId.toLong())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ val deviceList: List = bean.deviceList
+ Log.d(kTag, deviceList.toJson())
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ // do something
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
index 8aba9b2..84e947c 100644
--- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
@@ -9,9 +9,13 @@
import com.casic.br.utils.GridItemDecoration
import com.casic.br.utils.LocaleConstant
import com.casic.br.view.LoginActivity
+import com.casic.br.view.MainActivity
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.youth.banner.Banner
import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
@@ -90,7 +94,39 @@
override fun initEvent() {
rightOperateView.setOnClickListener {
- requireContext().navigatePageTo()
+ if (rightOperateView.text == "退出") {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("退出确认")
+ .setMessage("退出当前账号,将不能同步数据")
+ .setNegativeButton("取消")
+ .setPositiveButton("确认退出")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ requireContext().navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ })
+ .build().show()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
}
+
+ override fun onResume() {
+ val isLogin = SaveKeyValues.getValue(LocaleConstant.USER_IS_LOGIN, false) as Boolean
+ if (isLogin) {
+ rightOperateView.text = "退出"
+ } else {
+ rightOperateView.text = "登录"
+ }
+ super.onResume()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/model/HomeModel.java b/app/src/main/java/com/casic/br/model/HomeModel.java
new file mode 100644
index 0000000..638d420
--- /dev/null
+++ b/app/src/main/java/com/casic/br/model/HomeModel.java
@@ -0,0 +1,127 @@
+package com.casic.br.model;
+
+import java.util.List;
+
+public class HomeModel {
+
+ private boolean admin;
+ private String geoName;
+ private int homeId;
+ private int homeStatus;
+ private double lat;
+ private double lon;
+ private String name;
+ private int role;
+ private List rooms;
+
+ public boolean isAdmin() {
+ return admin;
+ }
+
+ public void setAdmin(boolean admin) {
+ this.admin = admin;
+ }
+
+ public String getGeoName() {
+ return geoName;
+ }
+
+ public void setGeoName(String geoName) {
+ this.geoName = geoName;
+ }
+
+ public int getHomeId() {
+ return homeId;
+ }
+
+ public void setHomeId(int homeId) {
+ this.homeId = homeId;
+ }
+
+ public int getHomeStatus() {
+ return homeStatus;
+ }
+
+ public void setHomeStatus(int homeStatus) {
+ this.homeStatus = homeStatus;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRole() {
+ return role;
+ }
+
+ public void setRole(int role) {
+ this.role = role;
+ }
+
+ public List getRooms() {
+ return rooms;
+ }
+
+ public void setRooms(List rooms) {
+ this.rooms = rooms;
+ }
+
+ public static class RoomsModel {
+ private int displayOrder;
+ private String name;
+ private int roomId;
+ private boolean sel;
+
+ public int getDisplayOrder() {
+ return displayOrder;
+ }
+
+ public void setDisplayOrder(int displayOrder) {
+ this.displayOrder = displayOrder;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(int roomId) {
+ this.roomId = roomId;
+ }
+
+ public boolean isSel() {
+ return sel;
+ }
+
+ public void setSel(boolean sel) {
+ this.sel = sel;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt
deleted file mode 100644
index da62e63..0000000
--- a/app/src/main/java/com/casic/br/utils/DialogManager.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.casic.br.utils;
-
-import android.app.Activity
-import android.view.WindowManager
-import com.pengxh.kt.lite.base.BaseSingleton
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
-
-class DialogManager private constructor(private val activity: Activity) {
-
- private lateinit var loadingDialog: QMUITipDialog
-
- companion object : BaseSingleton() {
- override val creator: (Activity) -> DialogManager
- get() = ::DialogManager
- }
-
- fun showLoadingDialog(message: String) {
- loadingDialog = QMUITipDialog
- .Builder(activity)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord(message)
- .create()
- if (!activity.isDestroyed) {
- try {
- loadingDialog.show()
- } catch (e: WindowManager.BadTokenException) {
- e.printStackTrace()
- }
- }
- }
-
- fun dismissLoadingDialog() {
- if (loadingDialog.isShowing) {
- loadingDialog.dismiss()
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
new file mode 100644
index 0000000..e04e327
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
@@ -0,0 +1,31 @@
+package com.casic.br.utils
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object LoadingDialogHub {
+
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun show(activity: Activity, message: String) {
+ loadingDialog = QMUITipDialog
+ .Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismiss() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index 197a466..dd365ad 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -53,7 +53,8 @@
* String
* =============================================================================================
* */
- const val USER_DETAIL_MODEL = "userDetailModel"
+ const val USER_IS_LOGIN = "isLogin"
+ const val HOME_DETAIL_MODEL = "homeDetailModel"
const val SERVER_BASE_URL = "http://111.198.10.15:11304"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
index ce8f99e..210a258 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
@@ -30,13 +30,12 @@
override fun initEvent() {
iotDevice.setOnClickListener {
- navigatePageTo()
- finish()
+ //IoT设备首先需要先配置网络
+ navigatePageTo()
}
notIotDevice.setOnClickListener {
navigatePageTo()
- finish()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
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 cc20c54..4ef912b 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -1,25 +1,40 @@
package com.casic.br.fragment
import android.graphics.Typeface
+import android.util.Log
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.adapter.RecommendAdapter
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.model.AddedDeviceModel
+import com.casic.br.model.HomeModel
import com.casic.br.model.RecommendModel
+import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
import com.casic.br.view.device.WaterHeaterActivity
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
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.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
import kotlinx.android.synthetic.main.fragment_device.*
import kotlinx.android.synthetic.main.include_main_title.*
import java.util.*
+
class DevicePageFragment : KotlinBaseFragment() {
+ private val kTag = "DevicePageFragment"
+ private val gson by lazy { Gson() }
+
override fun initLayoutView(): Int = R.layout.fragment_device
override fun setupTopBarLayout() {
@@ -37,16 +52,6 @@
model1.deviceModel = "D40-DM1"
model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
deviceModels.add(model1)
- val model2 = AddedDeviceModel()
- model2.deviceName = "万家乐油烟机"
- model2.deviceModel = "CXW-320-W7"
- model2.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model2)
- val model3 = AddedDeviceModel()
- model3.deviceName = "万家乐壁挂炉"
- model3.deviceModel = "26-13A3L"
- model3.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model3)
val addedDeviceAdapter = AddedDeviceAdapter(requireContext())
addedDeviceAdapter.setupDevice(deviceModels)
@@ -102,8 +107,28 @@
}
override fun initEvent() {
- showAllDeviceLayout.setOnClickListener {
+ showAllDeviceButton.setOnClickListener {
requireContext().navigatePageTo()
}
}
+
+ override fun onResume() {
+ super.onResume()
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ return
+ }
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.newHomeInstance(homeModel.homeId.toLong())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ val deviceList: List = bean.deviceList
+ Log.d(kTag, deviceList.toJson())
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ // do something
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
index 8aba9b2..84e947c 100644
--- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
@@ -9,9 +9,13 @@
import com.casic.br.utils.GridItemDecoration
import com.casic.br.utils.LocaleConstant
import com.casic.br.view.LoginActivity
+import com.casic.br.view.MainActivity
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.youth.banner.Banner
import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
@@ -90,7 +94,39 @@
override fun initEvent() {
rightOperateView.setOnClickListener {
- requireContext().navigatePageTo()
+ if (rightOperateView.text == "退出") {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("退出确认")
+ .setMessage("退出当前账号,将不能同步数据")
+ .setNegativeButton("取消")
+ .setPositiveButton("确认退出")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ requireContext().navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ })
+ .build().show()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
}
+
+ override fun onResume() {
+ val isLogin = SaveKeyValues.getValue(LocaleConstant.USER_IS_LOGIN, false) as Boolean
+ if (isLogin) {
+ rightOperateView.text = "退出"
+ } else {
+ rightOperateView.text = "登录"
+ }
+ super.onResume()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/model/HomeModel.java b/app/src/main/java/com/casic/br/model/HomeModel.java
new file mode 100644
index 0000000..638d420
--- /dev/null
+++ b/app/src/main/java/com/casic/br/model/HomeModel.java
@@ -0,0 +1,127 @@
+package com.casic.br.model;
+
+import java.util.List;
+
+public class HomeModel {
+
+ private boolean admin;
+ private String geoName;
+ private int homeId;
+ private int homeStatus;
+ private double lat;
+ private double lon;
+ private String name;
+ private int role;
+ private List rooms;
+
+ public boolean isAdmin() {
+ return admin;
+ }
+
+ public void setAdmin(boolean admin) {
+ this.admin = admin;
+ }
+
+ public String getGeoName() {
+ return geoName;
+ }
+
+ public void setGeoName(String geoName) {
+ this.geoName = geoName;
+ }
+
+ public int getHomeId() {
+ return homeId;
+ }
+
+ public void setHomeId(int homeId) {
+ this.homeId = homeId;
+ }
+
+ public int getHomeStatus() {
+ return homeStatus;
+ }
+
+ public void setHomeStatus(int homeStatus) {
+ this.homeStatus = homeStatus;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRole() {
+ return role;
+ }
+
+ public void setRole(int role) {
+ this.role = role;
+ }
+
+ public List getRooms() {
+ return rooms;
+ }
+
+ public void setRooms(List rooms) {
+ this.rooms = rooms;
+ }
+
+ public static class RoomsModel {
+ private int displayOrder;
+ private String name;
+ private int roomId;
+ private boolean sel;
+
+ public int getDisplayOrder() {
+ return displayOrder;
+ }
+
+ public void setDisplayOrder(int displayOrder) {
+ this.displayOrder = displayOrder;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(int roomId) {
+ this.roomId = roomId;
+ }
+
+ public boolean isSel() {
+ return sel;
+ }
+
+ public void setSel(boolean sel) {
+ this.sel = sel;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt
deleted file mode 100644
index da62e63..0000000
--- a/app/src/main/java/com/casic/br/utils/DialogManager.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.casic.br.utils;
-
-import android.app.Activity
-import android.view.WindowManager
-import com.pengxh.kt.lite.base.BaseSingleton
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
-
-class DialogManager private constructor(private val activity: Activity) {
-
- private lateinit var loadingDialog: QMUITipDialog
-
- companion object : BaseSingleton() {
- override val creator: (Activity) -> DialogManager
- get() = ::DialogManager
- }
-
- fun showLoadingDialog(message: String) {
- loadingDialog = QMUITipDialog
- .Builder(activity)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord(message)
- .create()
- if (!activity.isDestroyed) {
- try {
- loadingDialog.show()
- } catch (e: WindowManager.BadTokenException) {
- e.printStackTrace()
- }
- }
- }
-
- fun dismissLoadingDialog() {
- if (loadingDialog.isShowing) {
- loadingDialog.dismiss()
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
new file mode 100644
index 0000000..e04e327
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
@@ -0,0 +1,31 @@
+package com.casic.br.utils
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object LoadingDialogHub {
+
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun show(activity: Activity, message: String) {
+ loadingDialog = QMUITipDialog
+ .Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismiss() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index 197a466..dd365ad 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -53,7 +53,8 @@
* String
* =============================================================================================
* */
- const val USER_DETAIL_MODEL = "userDetailModel"
+ const val USER_IS_LOGIN = "isLogin"
+ const val HOME_DETAIL_MODEL = "homeDetailModel"
const val SERVER_BASE_URL = "http://111.198.10.15:11304"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
index ce8f99e..210a258 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
@@ -30,13 +30,12 @@
override fun initEvent() {
iotDevice.setOnClickListener {
- navigatePageTo()
- finish()
+ //IoT设备首先需要先配置网络
+ navigatePageTo()
}
notIotDevice.setOnClickListener {
navigatePageTo()
- finish()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
index d58aebd..ec99e90 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
@@ -4,6 +4,8 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.PageNavigationManager
import kotlinx.android.synthetic.main.activity_add_device_result.*
class AddDeviceResultActivity : KotlinBaseActivity() {
@@ -26,7 +28,8 @@
override fun initEvent() {
completeButton.setOnClickListener {
- finish()
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
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 cc20c54..4ef912b 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -1,25 +1,40 @@
package com.casic.br.fragment
import android.graphics.Typeface
+import android.util.Log
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.adapter.RecommendAdapter
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.model.AddedDeviceModel
+import com.casic.br.model.HomeModel
import com.casic.br.model.RecommendModel
+import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
import com.casic.br.view.device.WaterHeaterActivity
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
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.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
import kotlinx.android.synthetic.main.fragment_device.*
import kotlinx.android.synthetic.main.include_main_title.*
import java.util.*
+
class DevicePageFragment : KotlinBaseFragment() {
+ private val kTag = "DevicePageFragment"
+ private val gson by lazy { Gson() }
+
override fun initLayoutView(): Int = R.layout.fragment_device
override fun setupTopBarLayout() {
@@ -37,16 +52,6 @@
model1.deviceModel = "D40-DM1"
model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
deviceModels.add(model1)
- val model2 = AddedDeviceModel()
- model2.deviceName = "万家乐油烟机"
- model2.deviceModel = "CXW-320-W7"
- model2.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model2)
- val model3 = AddedDeviceModel()
- model3.deviceName = "万家乐壁挂炉"
- model3.deviceModel = "26-13A3L"
- model3.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model3)
val addedDeviceAdapter = AddedDeviceAdapter(requireContext())
addedDeviceAdapter.setupDevice(deviceModels)
@@ -102,8 +107,28 @@
}
override fun initEvent() {
- showAllDeviceLayout.setOnClickListener {
+ showAllDeviceButton.setOnClickListener {
requireContext().navigatePageTo()
}
}
+
+ override fun onResume() {
+ super.onResume()
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ return
+ }
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.newHomeInstance(homeModel.homeId.toLong())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ val deviceList: List = bean.deviceList
+ Log.d(kTag, deviceList.toJson())
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ // do something
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
index 8aba9b2..84e947c 100644
--- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
@@ -9,9 +9,13 @@
import com.casic.br.utils.GridItemDecoration
import com.casic.br.utils.LocaleConstant
import com.casic.br.view.LoginActivity
+import com.casic.br.view.MainActivity
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.youth.banner.Banner
import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
@@ -90,7 +94,39 @@
override fun initEvent() {
rightOperateView.setOnClickListener {
- requireContext().navigatePageTo()
+ if (rightOperateView.text == "退出") {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("退出确认")
+ .setMessage("退出当前账号,将不能同步数据")
+ .setNegativeButton("取消")
+ .setPositiveButton("确认退出")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ requireContext().navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ })
+ .build().show()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
}
+
+ override fun onResume() {
+ val isLogin = SaveKeyValues.getValue(LocaleConstant.USER_IS_LOGIN, false) as Boolean
+ if (isLogin) {
+ rightOperateView.text = "退出"
+ } else {
+ rightOperateView.text = "登录"
+ }
+ super.onResume()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/model/HomeModel.java b/app/src/main/java/com/casic/br/model/HomeModel.java
new file mode 100644
index 0000000..638d420
--- /dev/null
+++ b/app/src/main/java/com/casic/br/model/HomeModel.java
@@ -0,0 +1,127 @@
+package com.casic.br.model;
+
+import java.util.List;
+
+public class HomeModel {
+
+ private boolean admin;
+ private String geoName;
+ private int homeId;
+ private int homeStatus;
+ private double lat;
+ private double lon;
+ private String name;
+ private int role;
+ private List rooms;
+
+ public boolean isAdmin() {
+ return admin;
+ }
+
+ public void setAdmin(boolean admin) {
+ this.admin = admin;
+ }
+
+ public String getGeoName() {
+ return geoName;
+ }
+
+ public void setGeoName(String geoName) {
+ this.geoName = geoName;
+ }
+
+ public int getHomeId() {
+ return homeId;
+ }
+
+ public void setHomeId(int homeId) {
+ this.homeId = homeId;
+ }
+
+ public int getHomeStatus() {
+ return homeStatus;
+ }
+
+ public void setHomeStatus(int homeStatus) {
+ this.homeStatus = homeStatus;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRole() {
+ return role;
+ }
+
+ public void setRole(int role) {
+ this.role = role;
+ }
+
+ public List getRooms() {
+ return rooms;
+ }
+
+ public void setRooms(List rooms) {
+ this.rooms = rooms;
+ }
+
+ public static class RoomsModel {
+ private int displayOrder;
+ private String name;
+ private int roomId;
+ private boolean sel;
+
+ public int getDisplayOrder() {
+ return displayOrder;
+ }
+
+ public void setDisplayOrder(int displayOrder) {
+ this.displayOrder = displayOrder;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(int roomId) {
+ this.roomId = roomId;
+ }
+
+ public boolean isSel() {
+ return sel;
+ }
+
+ public void setSel(boolean sel) {
+ this.sel = sel;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt
deleted file mode 100644
index da62e63..0000000
--- a/app/src/main/java/com/casic/br/utils/DialogManager.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.casic.br.utils;
-
-import android.app.Activity
-import android.view.WindowManager
-import com.pengxh.kt.lite.base.BaseSingleton
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
-
-class DialogManager private constructor(private val activity: Activity) {
-
- private lateinit var loadingDialog: QMUITipDialog
-
- companion object : BaseSingleton() {
- override val creator: (Activity) -> DialogManager
- get() = ::DialogManager
- }
-
- fun showLoadingDialog(message: String) {
- loadingDialog = QMUITipDialog
- .Builder(activity)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord(message)
- .create()
- if (!activity.isDestroyed) {
- try {
- loadingDialog.show()
- } catch (e: WindowManager.BadTokenException) {
- e.printStackTrace()
- }
- }
- }
-
- fun dismissLoadingDialog() {
- if (loadingDialog.isShowing) {
- loadingDialog.dismiss()
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
new file mode 100644
index 0000000..e04e327
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
@@ -0,0 +1,31 @@
+package com.casic.br.utils
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object LoadingDialogHub {
+
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun show(activity: Activity, message: String) {
+ loadingDialog = QMUITipDialog
+ .Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismiss() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index 197a466..dd365ad 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -53,7 +53,8 @@
* String
* =============================================================================================
* */
- const val USER_DETAIL_MODEL = "userDetailModel"
+ const val USER_IS_LOGIN = "isLogin"
+ const val HOME_DETAIL_MODEL = "homeDetailModel"
const val SERVER_BASE_URL = "http://111.198.10.15:11304"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
index ce8f99e..210a258 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
@@ -30,13 +30,12 @@
override fun initEvent() {
iotDevice.setOnClickListener {
- navigatePageTo()
- finish()
+ //IoT设备首先需要先配置网络
+ navigatePageTo()
}
notIotDevice.setOnClickListener {
navigatePageTo()
- finish()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
index d58aebd..ec99e90 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
@@ -4,6 +4,8 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.PageNavigationManager
import kotlinx.android.synthetic.main.activity_add_device_result.*
class AddDeviceResultActivity : KotlinBaseActivity() {
@@ -26,7 +28,8 @@
override fun initEvent() {
completeButton.setOnClickListener {
- finish()
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt
deleted file mode 100644
index 25ce475..0000000
--- a/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.casic.br.view
-
-import android.view.View
-import android.widget.AdapterView
-import com.casic.br.R
-import com.casic.br.extensions.initLayoutImmersionBar
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import kotlinx.android.synthetic.main.activity_add_device_iot.*
-
-/**
- * 添加IoT设备
- * */
-class AddIoTDeviceActivity : KotlinBaseActivity() {
-
- override fun initLayoutView(): Int = R.layout.activity_add_device_iot
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- ImmersionBar.with(this).statusBarDarkFont(true).init()
- initLayoutImmersionBar(rootView)
- leftBackView.setOnClickListener { finish() }
- }
-
- override fun initData() {
- //默认选择WIFI快连
- connectTypeSpinner.setSelection(0)
- }
-
- override fun initEvent() {
- connectTypeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?, view: View?, position: Int, id: Long
- ) {
-
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
- }
-
- nextStepButton.setOnClickListener {
- if (connectTypeSpinner.selectedItemPosition == 0) {
- navigatePageTo()
- } else {
- navigatePageTo()
- }
- finish()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
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 cc20c54..4ef912b 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -1,25 +1,40 @@
package com.casic.br.fragment
import android.graphics.Typeface
+import android.util.Log
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.adapter.RecommendAdapter
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.model.AddedDeviceModel
+import com.casic.br.model.HomeModel
import com.casic.br.model.RecommendModel
+import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
import com.casic.br.view.device.WaterHeaterActivity
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
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.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
import kotlinx.android.synthetic.main.fragment_device.*
import kotlinx.android.synthetic.main.include_main_title.*
import java.util.*
+
class DevicePageFragment : KotlinBaseFragment() {
+ private val kTag = "DevicePageFragment"
+ private val gson by lazy { Gson() }
+
override fun initLayoutView(): Int = R.layout.fragment_device
override fun setupTopBarLayout() {
@@ -37,16 +52,6 @@
model1.deviceModel = "D40-DM1"
model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
deviceModels.add(model1)
- val model2 = AddedDeviceModel()
- model2.deviceName = "万家乐油烟机"
- model2.deviceModel = "CXW-320-W7"
- model2.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model2)
- val model3 = AddedDeviceModel()
- model3.deviceName = "万家乐壁挂炉"
- model3.deviceModel = "26-13A3L"
- model3.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model3)
val addedDeviceAdapter = AddedDeviceAdapter(requireContext())
addedDeviceAdapter.setupDevice(deviceModels)
@@ -102,8 +107,28 @@
}
override fun initEvent() {
- showAllDeviceLayout.setOnClickListener {
+ showAllDeviceButton.setOnClickListener {
requireContext().navigatePageTo()
}
}
+
+ override fun onResume() {
+ super.onResume()
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ return
+ }
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.newHomeInstance(homeModel.homeId.toLong())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ val deviceList: List = bean.deviceList
+ Log.d(kTag, deviceList.toJson())
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ // do something
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
index 8aba9b2..84e947c 100644
--- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
@@ -9,9 +9,13 @@
import com.casic.br.utils.GridItemDecoration
import com.casic.br.utils.LocaleConstant
import com.casic.br.view.LoginActivity
+import com.casic.br.view.MainActivity
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.youth.banner.Banner
import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
@@ -90,7 +94,39 @@
override fun initEvent() {
rightOperateView.setOnClickListener {
- requireContext().navigatePageTo()
+ if (rightOperateView.text == "退出") {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("退出确认")
+ .setMessage("退出当前账号,将不能同步数据")
+ .setNegativeButton("取消")
+ .setPositiveButton("确认退出")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ requireContext().navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ })
+ .build().show()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
}
+
+ override fun onResume() {
+ val isLogin = SaveKeyValues.getValue(LocaleConstant.USER_IS_LOGIN, false) as Boolean
+ if (isLogin) {
+ rightOperateView.text = "退出"
+ } else {
+ rightOperateView.text = "登录"
+ }
+ super.onResume()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/model/HomeModel.java b/app/src/main/java/com/casic/br/model/HomeModel.java
new file mode 100644
index 0000000..638d420
--- /dev/null
+++ b/app/src/main/java/com/casic/br/model/HomeModel.java
@@ -0,0 +1,127 @@
+package com.casic.br.model;
+
+import java.util.List;
+
+public class HomeModel {
+
+ private boolean admin;
+ private String geoName;
+ private int homeId;
+ private int homeStatus;
+ private double lat;
+ private double lon;
+ private String name;
+ private int role;
+ private List rooms;
+
+ public boolean isAdmin() {
+ return admin;
+ }
+
+ public void setAdmin(boolean admin) {
+ this.admin = admin;
+ }
+
+ public String getGeoName() {
+ return geoName;
+ }
+
+ public void setGeoName(String geoName) {
+ this.geoName = geoName;
+ }
+
+ public int getHomeId() {
+ return homeId;
+ }
+
+ public void setHomeId(int homeId) {
+ this.homeId = homeId;
+ }
+
+ public int getHomeStatus() {
+ return homeStatus;
+ }
+
+ public void setHomeStatus(int homeStatus) {
+ this.homeStatus = homeStatus;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRole() {
+ return role;
+ }
+
+ public void setRole(int role) {
+ this.role = role;
+ }
+
+ public List getRooms() {
+ return rooms;
+ }
+
+ public void setRooms(List rooms) {
+ this.rooms = rooms;
+ }
+
+ public static class RoomsModel {
+ private int displayOrder;
+ private String name;
+ private int roomId;
+ private boolean sel;
+
+ public int getDisplayOrder() {
+ return displayOrder;
+ }
+
+ public void setDisplayOrder(int displayOrder) {
+ this.displayOrder = displayOrder;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(int roomId) {
+ this.roomId = roomId;
+ }
+
+ public boolean isSel() {
+ return sel;
+ }
+
+ public void setSel(boolean sel) {
+ this.sel = sel;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt
deleted file mode 100644
index da62e63..0000000
--- a/app/src/main/java/com/casic/br/utils/DialogManager.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.casic.br.utils;
-
-import android.app.Activity
-import android.view.WindowManager
-import com.pengxh.kt.lite.base.BaseSingleton
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
-
-class DialogManager private constructor(private val activity: Activity) {
-
- private lateinit var loadingDialog: QMUITipDialog
-
- companion object : BaseSingleton() {
- override val creator: (Activity) -> DialogManager
- get() = ::DialogManager
- }
-
- fun showLoadingDialog(message: String) {
- loadingDialog = QMUITipDialog
- .Builder(activity)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord(message)
- .create()
- if (!activity.isDestroyed) {
- try {
- loadingDialog.show()
- } catch (e: WindowManager.BadTokenException) {
- e.printStackTrace()
- }
- }
- }
-
- fun dismissLoadingDialog() {
- if (loadingDialog.isShowing) {
- loadingDialog.dismiss()
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
new file mode 100644
index 0000000..e04e327
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
@@ -0,0 +1,31 @@
+package com.casic.br.utils
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object LoadingDialogHub {
+
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun show(activity: Activity, message: String) {
+ loadingDialog = QMUITipDialog
+ .Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismiss() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index 197a466..dd365ad 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -53,7 +53,8 @@
* String
* =============================================================================================
* */
- const val USER_DETAIL_MODEL = "userDetailModel"
+ const val USER_IS_LOGIN = "isLogin"
+ const val HOME_DETAIL_MODEL = "homeDetailModel"
const val SERVER_BASE_URL = "http://111.198.10.15:11304"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
index ce8f99e..210a258 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
@@ -30,13 +30,12 @@
override fun initEvent() {
iotDevice.setOnClickListener {
- navigatePageTo()
- finish()
+ //IoT设备首先需要先配置网络
+ navigatePageTo()
}
notIotDevice.setOnClickListener {
navigatePageTo()
- finish()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
index d58aebd..ec99e90 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
@@ -4,6 +4,8 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.PageNavigationManager
import kotlinx.android.synthetic.main.activity_add_device_result.*
class AddDeviceResultActivity : KotlinBaseActivity() {
@@ -26,7 +28,8 @@
override fun initEvent() {
completeButton.setOnClickListener {
- finish()
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt
deleted file mode 100644
index 25ce475..0000000
--- a/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.casic.br.view
-
-import android.view.View
-import android.widget.AdapterView
-import com.casic.br.R
-import com.casic.br.extensions.initLayoutImmersionBar
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import kotlinx.android.synthetic.main.activity_add_device_iot.*
-
-/**
- * 添加IoT设备
- * */
-class AddIoTDeviceActivity : KotlinBaseActivity() {
-
- override fun initLayoutView(): Int = R.layout.activity_add_device_iot
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- ImmersionBar.with(this).statusBarDarkFont(true).init()
- initLayoutImmersionBar(rootView)
- leftBackView.setOnClickListener { finish() }
- }
-
- override fun initData() {
- //默认选择WIFI快连
- connectTypeSpinner.setSelection(0)
- }
-
- override fun initEvent() {
- connectTypeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?, view: View?, position: Int, id: Long
- ) {
-
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
- }
-
- nextStepButton.setOnClickListener {
- if (connectTypeSpinner.selectedItemPosition == 0) {
- navigatePageTo()
- } else {
- navigatePageTo()
- }
- finish()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt
index 9de6790..54975e3 100644
--- a/app/src/main/java/com/casic/br/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt
@@ -1,11 +1,26 @@
package com.casic.br.view
+import android.content.Context
import com.casic.br.R
+import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
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.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.android.user.api.ILoginCallback
+import com.tuya.smart.android.user.bean.User
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import kotlinx.android.synthetic.main.activity_login.*
+import kotlinx.android.synthetic.main.activity_login.userPhoneView
+import kotlinx.android.synthetic.main.activity_register.*
class LoginActivity : KotlinBaseActivity() {
+ private val context: Context = this@LoginActivity
+
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
@@ -21,6 +36,38 @@
}
override fun initEvent() {
+ registerView.setOnClickListener {
+ navigatePageTo()
+ }
+ loginButton.setOnClickListener {
+ val userPhone = userPhoneView.text.toString()
+ if (userPhone.isBlank()) {
+ "请输入手机号".show(this)
+ return@setOnClickListener
+ }
+ val userPassword = passwordView.text.toString()
+ if (userPassword.isBlank()) {
+ "请输入密码".show(this)
+ return@setOnClickListener
+ }
+
+ LoadingDialogHub.show(this, "登录中,请稍后")
+ TuyaHomeSdk.getUserInstance()
+ .loginWithPhonePassword("86", userPhone, userPassword, object : ILoginCallback {
+ override fun onSuccess(user: User?) {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, true)
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ LoadingDialogHub.dismiss()
+ "登录失败".show(context)
+ }
+ })
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
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 cc20c54..4ef912b 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -1,25 +1,40 @@
package com.casic.br.fragment
import android.graphics.Typeface
+import android.util.Log
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.adapter.RecommendAdapter
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.model.AddedDeviceModel
+import com.casic.br.model.HomeModel
import com.casic.br.model.RecommendModel
+import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
import com.casic.br.view.device.WaterHeaterActivity
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
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.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
import kotlinx.android.synthetic.main.fragment_device.*
import kotlinx.android.synthetic.main.include_main_title.*
import java.util.*
+
class DevicePageFragment : KotlinBaseFragment() {
+ private val kTag = "DevicePageFragment"
+ private val gson by lazy { Gson() }
+
override fun initLayoutView(): Int = R.layout.fragment_device
override fun setupTopBarLayout() {
@@ -37,16 +52,6 @@
model1.deviceModel = "D40-DM1"
model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
deviceModels.add(model1)
- val model2 = AddedDeviceModel()
- model2.deviceName = "万家乐油烟机"
- model2.deviceModel = "CXW-320-W7"
- model2.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model2)
- val model3 = AddedDeviceModel()
- model3.deviceName = "万家乐壁挂炉"
- model3.deviceModel = "26-13A3L"
- model3.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model3)
val addedDeviceAdapter = AddedDeviceAdapter(requireContext())
addedDeviceAdapter.setupDevice(deviceModels)
@@ -102,8 +107,28 @@
}
override fun initEvent() {
- showAllDeviceLayout.setOnClickListener {
+ showAllDeviceButton.setOnClickListener {
requireContext().navigatePageTo()
}
}
+
+ override fun onResume() {
+ super.onResume()
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ return
+ }
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.newHomeInstance(homeModel.homeId.toLong())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ val deviceList: List = bean.deviceList
+ Log.d(kTag, deviceList.toJson())
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ // do something
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
index 8aba9b2..84e947c 100644
--- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
@@ -9,9 +9,13 @@
import com.casic.br.utils.GridItemDecoration
import com.casic.br.utils.LocaleConstant
import com.casic.br.view.LoginActivity
+import com.casic.br.view.MainActivity
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.youth.banner.Banner
import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
@@ -90,7 +94,39 @@
override fun initEvent() {
rightOperateView.setOnClickListener {
- requireContext().navigatePageTo()
+ if (rightOperateView.text == "退出") {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("退出确认")
+ .setMessage("退出当前账号,将不能同步数据")
+ .setNegativeButton("取消")
+ .setPositiveButton("确认退出")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ requireContext().navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ })
+ .build().show()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
}
+
+ override fun onResume() {
+ val isLogin = SaveKeyValues.getValue(LocaleConstant.USER_IS_LOGIN, false) as Boolean
+ if (isLogin) {
+ rightOperateView.text = "退出"
+ } else {
+ rightOperateView.text = "登录"
+ }
+ super.onResume()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/model/HomeModel.java b/app/src/main/java/com/casic/br/model/HomeModel.java
new file mode 100644
index 0000000..638d420
--- /dev/null
+++ b/app/src/main/java/com/casic/br/model/HomeModel.java
@@ -0,0 +1,127 @@
+package com.casic.br.model;
+
+import java.util.List;
+
+public class HomeModel {
+
+ private boolean admin;
+ private String geoName;
+ private int homeId;
+ private int homeStatus;
+ private double lat;
+ private double lon;
+ private String name;
+ private int role;
+ private List rooms;
+
+ public boolean isAdmin() {
+ return admin;
+ }
+
+ public void setAdmin(boolean admin) {
+ this.admin = admin;
+ }
+
+ public String getGeoName() {
+ return geoName;
+ }
+
+ public void setGeoName(String geoName) {
+ this.geoName = geoName;
+ }
+
+ public int getHomeId() {
+ return homeId;
+ }
+
+ public void setHomeId(int homeId) {
+ this.homeId = homeId;
+ }
+
+ public int getHomeStatus() {
+ return homeStatus;
+ }
+
+ public void setHomeStatus(int homeStatus) {
+ this.homeStatus = homeStatus;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRole() {
+ return role;
+ }
+
+ public void setRole(int role) {
+ this.role = role;
+ }
+
+ public List getRooms() {
+ return rooms;
+ }
+
+ public void setRooms(List rooms) {
+ this.rooms = rooms;
+ }
+
+ public static class RoomsModel {
+ private int displayOrder;
+ private String name;
+ private int roomId;
+ private boolean sel;
+
+ public int getDisplayOrder() {
+ return displayOrder;
+ }
+
+ public void setDisplayOrder(int displayOrder) {
+ this.displayOrder = displayOrder;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(int roomId) {
+ this.roomId = roomId;
+ }
+
+ public boolean isSel() {
+ return sel;
+ }
+
+ public void setSel(boolean sel) {
+ this.sel = sel;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt
deleted file mode 100644
index da62e63..0000000
--- a/app/src/main/java/com/casic/br/utils/DialogManager.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.casic.br.utils;
-
-import android.app.Activity
-import android.view.WindowManager
-import com.pengxh.kt.lite.base.BaseSingleton
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
-
-class DialogManager private constructor(private val activity: Activity) {
-
- private lateinit var loadingDialog: QMUITipDialog
-
- companion object : BaseSingleton() {
- override val creator: (Activity) -> DialogManager
- get() = ::DialogManager
- }
-
- fun showLoadingDialog(message: String) {
- loadingDialog = QMUITipDialog
- .Builder(activity)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord(message)
- .create()
- if (!activity.isDestroyed) {
- try {
- loadingDialog.show()
- } catch (e: WindowManager.BadTokenException) {
- e.printStackTrace()
- }
- }
- }
-
- fun dismissLoadingDialog() {
- if (loadingDialog.isShowing) {
- loadingDialog.dismiss()
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
new file mode 100644
index 0000000..e04e327
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
@@ -0,0 +1,31 @@
+package com.casic.br.utils
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object LoadingDialogHub {
+
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun show(activity: Activity, message: String) {
+ loadingDialog = QMUITipDialog
+ .Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismiss() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index 197a466..dd365ad 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -53,7 +53,8 @@
* String
* =============================================================================================
* */
- const val USER_DETAIL_MODEL = "userDetailModel"
+ const val USER_IS_LOGIN = "isLogin"
+ const val HOME_DETAIL_MODEL = "homeDetailModel"
const val SERVER_BASE_URL = "http://111.198.10.15:11304"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
index ce8f99e..210a258 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
@@ -30,13 +30,12 @@
override fun initEvent() {
iotDevice.setOnClickListener {
- navigatePageTo()
- finish()
+ //IoT设备首先需要先配置网络
+ navigatePageTo()
}
notIotDevice.setOnClickListener {
navigatePageTo()
- finish()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
index d58aebd..ec99e90 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
@@ -4,6 +4,8 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.PageNavigationManager
import kotlinx.android.synthetic.main.activity_add_device_result.*
class AddDeviceResultActivity : KotlinBaseActivity() {
@@ -26,7 +28,8 @@
override fun initEvent() {
completeButton.setOnClickListener {
- finish()
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt
deleted file mode 100644
index 25ce475..0000000
--- a/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.casic.br.view
-
-import android.view.View
-import android.widget.AdapterView
-import com.casic.br.R
-import com.casic.br.extensions.initLayoutImmersionBar
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import kotlinx.android.synthetic.main.activity_add_device_iot.*
-
-/**
- * 添加IoT设备
- * */
-class AddIoTDeviceActivity : KotlinBaseActivity() {
-
- override fun initLayoutView(): Int = R.layout.activity_add_device_iot
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- ImmersionBar.with(this).statusBarDarkFont(true).init()
- initLayoutImmersionBar(rootView)
- leftBackView.setOnClickListener { finish() }
- }
-
- override fun initData() {
- //默认选择WIFI快连
- connectTypeSpinner.setSelection(0)
- }
-
- override fun initEvent() {
- connectTypeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?, view: View?, position: Int, id: Long
- ) {
-
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
- }
-
- nextStepButton.setOnClickListener {
- if (connectTypeSpinner.selectedItemPosition == 0) {
- navigatePageTo()
- } else {
- navigatePageTo()
- }
- finish()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt
index 9de6790..54975e3 100644
--- a/app/src/main/java/com/casic/br/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt
@@ -1,11 +1,26 @@
package com.casic.br.view
+import android.content.Context
import com.casic.br.R
+import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
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.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.android.user.api.ILoginCallback
+import com.tuya.smart.android.user.bean.User
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import kotlinx.android.synthetic.main.activity_login.*
+import kotlinx.android.synthetic.main.activity_login.userPhoneView
+import kotlinx.android.synthetic.main.activity_register.*
class LoginActivity : KotlinBaseActivity() {
+ private val context: Context = this@LoginActivity
+
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
@@ -21,6 +36,38 @@
}
override fun initEvent() {
+ registerView.setOnClickListener {
+ navigatePageTo()
+ }
+ loginButton.setOnClickListener {
+ val userPhone = userPhoneView.text.toString()
+ if (userPhone.isBlank()) {
+ "请输入手机号".show(this)
+ return@setOnClickListener
+ }
+ val userPassword = passwordView.text.toString()
+ if (userPassword.isBlank()) {
+ "请输入密码".show(this)
+ return@setOnClickListener
+ }
+
+ LoadingDialogHub.show(this, "登录中,请稍后")
+ TuyaHomeSdk.getUserInstance()
+ .loginWithPhonePassword("86", userPhone, userPassword, object : ILoginCallback {
+ override fun onSuccess(user: User?) {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, true)
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ LoadingDialogHub.dismiss()
+ "登录失败".show(context)
+ }
+ })
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt
index a2fb29a..25f4254 100644
--- a/app/src/main/java/com/casic/br/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/view/MainActivity.kt
@@ -1,5 +1,6 @@
package com.casic.br.view
+import android.util.Log
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
@@ -7,13 +8,20 @@
import com.casic.br.R
import com.casic.br.adapter.ViewPagerAdapter
import com.casic.br.fragment.*
+import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
+ private val kTag = "MainActivity"
private var menuItem: MenuItem? = null
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
@@ -33,7 +41,27 @@
}
override fun initData() {
+ /**
+ * TODO 需要改为实际情况
+ *
+ * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
+ * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
+ * 用户账号下创建任意多个家庭。
+ * */
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ TuyaHomeSdk.getHomeManagerInstance()
+ .createHome("北燃生活体验馆", 116.486394, 39.885734, "西直门内南小街", arrayListOf("1"), object :
+ ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean?) {
+ SaveKeyValues.putValue(LocaleConstant.HOME_DETAIL_MODEL, bean!!.toJson())
+ }
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
+ }
+ })
+ }
}
override fun observeRequestState() {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
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 cc20c54..4ef912b 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -1,25 +1,40 @@
package com.casic.br.fragment
import android.graphics.Typeface
+import android.util.Log
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.adapter.RecommendAdapter
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.model.AddedDeviceModel
+import com.casic.br.model.HomeModel
import com.casic.br.model.RecommendModel
+import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
import com.casic.br.view.device.WaterHeaterActivity
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
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.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
import kotlinx.android.synthetic.main.fragment_device.*
import kotlinx.android.synthetic.main.include_main_title.*
import java.util.*
+
class DevicePageFragment : KotlinBaseFragment() {
+ private val kTag = "DevicePageFragment"
+ private val gson by lazy { Gson() }
+
override fun initLayoutView(): Int = R.layout.fragment_device
override fun setupTopBarLayout() {
@@ -37,16 +52,6 @@
model1.deviceModel = "D40-DM1"
model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
deviceModels.add(model1)
- val model2 = AddedDeviceModel()
- model2.deviceName = "万家乐油烟机"
- model2.deviceModel = "CXW-320-W7"
- model2.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model2)
- val model3 = AddedDeviceModel()
- model3.deviceName = "万家乐壁挂炉"
- model3.deviceModel = "26-13A3L"
- model3.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model3)
val addedDeviceAdapter = AddedDeviceAdapter(requireContext())
addedDeviceAdapter.setupDevice(deviceModels)
@@ -102,8 +107,28 @@
}
override fun initEvent() {
- showAllDeviceLayout.setOnClickListener {
+ showAllDeviceButton.setOnClickListener {
requireContext().navigatePageTo()
}
}
+
+ override fun onResume() {
+ super.onResume()
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ return
+ }
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.newHomeInstance(homeModel.homeId.toLong())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ val deviceList: List = bean.deviceList
+ Log.d(kTag, deviceList.toJson())
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ // do something
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
index 8aba9b2..84e947c 100644
--- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
@@ -9,9 +9,13 @@
import com.casic.br.utils.GridItemDecoration
import com.casic.br.utils.LocaleConstant
import com.casic.br.view.LoginActivity
+import com.casic.br.view.MainActivity
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.youth.banner.Banner
import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
@@ -90,7 +94,39 @@
override fun initEvent() {
rightOperateView.setOnClickListener {
- requireContext().navigatePageTo()
+ if (rightOperateView.text == "退出") {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("退出确认")
+ .setMessage("退出当前账号,将不能同步数据")
+ .setNegativeButton("取消")
+ .setPositiveButton("确认退出")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ requireContext().navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ })
+ .build().show()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
}
+
+ override fun onResume() {
+ val isLogin = SaveKeyValues.getValue(LocaleConstant.USER_IS_LOGIN, false) as Boolean
+ if (isLogin) {
+ rightOperateView.text = "退出"
+ } else {
+ rightOperateView.text = "登录"
+ }
+ super.onResume()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/model/HomeModel.java b/app/src/main/java/com/casic/br/model/HomeModel.java
new file mode 100644
index 0000000..638d420
--- /dev/null
+++ b/app/src/main/java/com/casic/br/model/HomeModel.java
@@ -0,0 +1,127 @@
+package com.casic.br.model;
+
+import java.util.List;
+
+public class HomeModel {
+
+ private boolean admin;
+ private String geoName;
+ private int homeId;
+ private int homeStatus;
+ private double lat;
+ private double lon;
+ private String name;
+ private int role;
+ private List rooms;
+
+ public boolean isAdmin() {
+ return admin;
+ }
+
+ public void setAdmin(boolean admin) {
+ this.admin = admin;
+ }
+
+ public String getGeoName() {
+ return geoName;
+ }
+
+ public void setGeoName(String geoName) {
+ this.geoName = geoName;
+ }
+
+ public int getHomeId() {
+ return homeId;
+ }
+
+ public void setHomeId(int homeId) {
+ this.homeId = homeId;
+ }
+
+ public int getHomeStatus() {
+ return homeStatus;
+ }
+
+ public void setHomeStatus(int homeStatus) {
+ this.homeStatus = homeStatus;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRole() {
+ return role;
+ }
+
+ public void setRole(int role) {
+ this.role = role;
+ }
+
+ public List getRooms() {
+ return rooms;
+ }
+
+ public void setRooms(List rooms) {
+ this.rooms = rooms;
+ }
+
+ public static class RoomsModel {
+ private int displayOrder;
+ private String name;
+ private int roomId;
+ private boolean sel;
+
+ public int getDisplayOrder() {
+ return displayOrder;
+ }
+
+ public void setDisplayOrder(int displayOrder) {
+ this.displayOrder = displayOrder;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(int roomId) {
+ this.roomId = roomId;
+ }
+
+ public boolean isSel() {
+ return sel;
+ }
+
+ public void setSel(boolean sel) {
+ this.sel = sel;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt
deleted file mode 100644
index da62e63..0000000
--- a/app/src/main/java/com/casic/br/utils/DialogManager.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.casic.br.utils;
-
-import android.app.Activity
-import android.view.WindowManager
-import com.pengxh.kt.lite.base.BaseSingleton
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
-
-class DialogManager private constructor(private val activity: Activity) {
-
- private lateinit var loadingDialog: QMUITipDialog
-
- companion object : BaseSingleton() {
- override val creator: (Activity) -> DialogManager
- get() = ::DialogManager
- }
-
- fun showLoadingDialog(message: String) {
- loadingDialog = QMUITipDialog
- .Builder(activity)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord(message)
- .create()
- if (!activity.isDestroyed) {
- try {
- loadingDialog.show()
- } catch (e: WindowManager.BadTokenException) {
- e.printStackTrace()
- }
- }
- }
-
- fun dismissLoadingDialog() {
- if (loadingDialog.isShowing) {
- loadingDialog.dismiss()
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
new file mode 100644
index 0000000..e04e327
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
@@ -0,0 +1,31 @@
+package com.casic.br.utils
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object LoadingDialogHub {
+
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun show(activity: Activity, message: String) {
+ loadingDialog = QMUITipDialog
+ .Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismiss() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index 197a466..dd365ad 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -53,7 +53,8 @@
* String
* =============================================================================================
* */
- const val USER_DETAIL_MODEL = "userDetailModel"
+ const val USER_IS_LOGIN = "isLogin"
+ const val HOME_DETAIL_MODEL = "homeDetailModel"
const val SERVER_BASE_URL = "http://111.198.10.15:11304"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
index ce8f99e..210a258 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
@@ -30,13 +30,12 @@
override fun initEvent() {
iotDevice.setOnClickListener {
- navigatePageTo()
- finish()
+ //IoT设备首先需要先配置网络
+ navigatePageTo()
}
notIotDevice.setOnClickListener {
navigatePageTo()
- finish()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
index d58aebd..ec99e90 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
@@ -4,6 +4,8 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.PageNavigationManager
import kotlinx.android.synthetic.main.activity_add_device_result.*
class AddDeviceResultActivity : KotlinBaseActivity() {
@@ -26,7 +28,8 @@
override fun initEvent() {
completeButton.setOnClickListener {
- finish()
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt
deleted file mode 100644
index 25ce475..0000000
--- a/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.casic.br.view
-
-import android.view.View
-import android.widget.AdapterView
-import com.casic.br.R
-import com.casic.br.extensions.initLayoutImmersionBar
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import kotlinx.android.synthetic.main.activity_add_device_iot.*
-
-/**
- * 添加IoT设备
- * */
-class AddIoTDeviceActivity : KotlinBaseActivity() {
-
- override fun initLayoutView(): Int = R.layout.activity_add_device_iot
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- ImmersionBar.with(this).statusBarDarkFont(true).init()
- initLayoutImmersionBar(rootView)
- leftBackView.setOnClickListener { finish() }
- }
-
- override fun initData() {
- //默认选择WIFI快连
- connectTypeSpinner.setSelection(0)
- }
-
- override fun initEvent() {
- connectTypeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?, view: View?, position: Int, id: Long
- ) {
-
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
- }
-
- nextStepButton.setOnClickListener {
- if (connectTypeSpinner.selectedItemPosition == 0) {
- navigatePageTo()
- } else {
- navigatePageTo()
- }
- finish()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt
index 9de6790..54975e3 100644
--- a/app/src/main/java/com/casic/br/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt
@@ -1,11 +1,26 @@
package com.casic.br.view
+import android.content.Context
import com.casic.br.R
+import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
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.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.android.user.api.ILoginCallback
+import com.tuya.smart.android.user.bean.User
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import kotlinx.android.synthetic.main.activity_login.*
+import kotlinx.android.synthetic.main.activity_login.userPhoneView
+import kotlinx.android.synthetic.main.activity_register.*
class LoginActivity : KotlinBaseActivity() {
+ private val context: Context = this@LoginActivity
+
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
@@ -21,6 +36,38 @@
}
override fun initEvent() {
+ registerView.setOnClickListener {
+ navigatePageTo()
+ }
+ loginButton.setOnClickListener {
+ val userPhone = userPhoneView.text.toString()
+ if (userPhone.isBlank()) {
+ "请输入手机号".show(this)
+ return@setOnClickListener
+ }
+ val userPassword = passwordView.text.toString()
+ if (userPassword.isBlank()) {
+ "请输入密码".show(this)
+ return@setOnClickListener
+ }
+
+ LoadingDialogHub.show(this, "登录中,请稍后")
+ TuyaHomeSdk.getUserInstance()
+ .loginWithPhonePassword("86", userPhone, userPassword, object : ILoginCallback {
+ override fun onSuccess(user: User?) {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, true)
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ LoadingDialogHub.dismiss()
+ "登录失败".show(context)
+ }
+ })
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt
index a2fb29a..25f4254 100644
--- a/app/src/main/java/com/casic/br/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/view/MainActivity.kt
@@ -1,5 +1,6 @@
package com.casic.br.view
+import android.util.Log
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
@@ -7,13 +8,20 @@
import com.casic.br.R
import com.casic.br.adapter.ViewPagerAdapter
import com.casic.br.fragment.*
+import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
+ private val kTag = "MainActivity"
private var menuItem: MenuItem? = null
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
@@ -33,7 +41,27 @@
}
override fun initData() {
+ /**
+ * TODO 需要改为实际情况
+ *
+ * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
+ * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
+ * 用户账号下创建任意多个家庭。
+ * */
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ TuyaHomeSdk.getHomeManagerInstance()
+ .createHome("北燃生活体验馆", 116.486394, 39.885734, "西直门内南小街", arrayListOf("1"), object :
+ ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean?) {
+ SaveKeyValues.putValue(LocaleConstant.HOME_DETAIL_MODEL, bean!!.toJson())
+ }
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
+ }
+ })
+ }
}
override fun observeRequestState() {
diff --git a/app/src/main/java/com/casic/br/view/RegisterActivity.kt b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
new file mode 100644
index 0000000..96510fb
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
@@ -0,0 +1,113 @@
+package com.casic.br.view
+
+import android.content.Context
+import android.os.CountDownTimer
+import com.casic.br.R
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.LoadingDialogHub
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.isPhoneNumber
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.tuya.smart.android.user.api.IRegisterCallback
+import com.tuya.smart.android.user.bean.User
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IResultCallback
+import kotlinx.android.synthetic.main.activity_register.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import java.util.*
+
+class RegisterActivity : KotlinBaseActivity() {
+
+ private val kTag = "RegisterActivity"
+ private val context: Context = this@RegisterActivity
+
+ override fun initLayoutView(): Int = R.layout.activity_register
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "注册账号"
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ requestCodeButton.setOnClickListener {
+ if (userPhoneView.text.toString().isBlank()) {
+ "请输入手机号".show(this)
+ return@setOnClickListener
+ }
+ if (!userPhoneView.text.toString().isPhoneNumber()) {
+ "手机号不正确,请检查".show(this)
+ return@setOnClickListener
+ }
+ //发送验证码
+ TuyaHomeSdk.getUserInstance().sendVerifyCodeWithUserName(
+ userPhoneView.text.toString(), "", "86", 1,
+ object : IResultCallback {
+ override fun onSuccess() {
+ "发送验证码成功".show(context)
+ }
+
+ override fun onError(code: String?, error: String?) {
+ "发送验证码失败".show(context)
+ }
+ })
+
+ //开始倒计时
+ object : CountDownTimer(60 * 1000, 1000) {
+ override fun onTick(millisUntilFinished: Long) {
+ requestCodeButton.text = String.format("${millisUntilFinished / 1000}s")
+ requestCodeButton.isEnabled = false
+ }
+
+ override fun onFinish() {
+ requestCodeButton.text = "获取验证码"
+ requestCodeButton.isEnabled = true
+ }
+ }.start()
+ }
+
+ registerButton.setOnClickListener {
+ val userPhone = userPhoneView.text.toString()
+ if (userPhone.isBlank()) {
+ "请输入手机号".show(this)
+ return@setOnClickListener
+ }
+ val smsCode = requestCodeView.text.toString()
+ if (smsCode.isBlank()) {
+ "请输入验证码".show(this)
+ return@setOnClickListener
+ }
+ val userPassword = userPasswordView.text.toString()
+ if (userPassword.isBlank()) {
+ "请输入密码".show(this)
+ return@setOnClickListener
+ }
+
+ LoadingDialogHub.show(this, "注册中,请稍后")
+ TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
+ "86", userPhone, userPassword, smsCode,
+ object : IRegisterCallback {
+ override fun onSuccess(user: User?) {
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ LoadingDialogHub.dismiss()
+ "用户注册失败".show(context)
+ }
+ })
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
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 cc20c54..4ef912b 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -1,25 +1,40 @@
package com.casic.br.fragment
import android.graphics.Typeface
+import android.util.Log
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.adapter.RecommendAdapter
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.model.AddedDeviceModel
+import com.casic.br.model.HomeModel
import com.casic.br.model.RecommendModel
+import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
import com.casic.br.view.device.WaterHeaterActivity
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
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.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
import kotlinx.android.synthetic.main.fragment_device.*
import kotlinx.android.synthetic.main.include_main_title.*
import java.util.*
+
class DevicePageFragment : KotlinBaseFragment() {
+ private val kTag = "DevicePageFragment"
+ private val gson by lazy { Gson() }
+
override fun initLayoutView(): Int = R.layout.fragment_device
override fun setupTopBarLayout() {
@@ -37,16 +52,6 @@
model1.deviceModel = "D40-DM1"
model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
deviceModels.add(model1)
- val model2 = AddedDeviceModel()
- model2.deviceName = "万家乐油烟机"
- model2.deviceModel = "CXW-320-W7"
- model2.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model2)
- val model3 = AddedDeviceModel()
- model3.deviceName = "万家乐壁挂炉"
- model3.deviceModel = "26-13A3L"
- model3.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model3)
val addedDeviceAdapter = AddedDeviceAdapter(requireContext())
addedDeviceAdapter.setupDevice(deviceModels)
@@ -102,8 +107,28 @@
}
override fun initEvent() {
- showAllDeviceLayout.setOnClickListener {
+ showAllDeviceButton.setOnClickListener {
requireContext().navigatePageTo()
}
}
+
+ override fun onResume() {
+ super.onResume()
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ return
+ }
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.newHomeInstance(homeModel.homeId.toLong())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ val deviceList: List = bean.deviceList
+ Log.d(kTag, deviceList.toJson())
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ // do something
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
index 8aba9b2..84e947c 100644
--- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
@@ -9,9 +9,13 @@
import com.casic.br.utils.GridItemDecoration
import com.casic.br.utils.LocaleConstant
import com.casic.br.view.LoginActivity
+import com.casic.br.view.MainActivity
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.youth.banner.Banner
import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
@@ -90,7 +94,39 @@
override fun initEvent() {
rightOperateView.setOnClickListener {
- requireContext().navigatePageTo()
+ if (rightOperateView.text == "退出") {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("退出确认")
+ .setMessage("退出当前账号,将不能同步数据")
+ .setNegativeButton("取消")
+ .setPositiveButton("确认退出")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ requireContext().navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ })
+ .build().show()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
}
+
+ override fun onResume() {
+ val isLogin = SaveKeyValues.getValue(LocaleConstant.USER_IS_LOGIN, false) as Boolean
+ if (isLogin) {
+ rightOperateView.text = "退出"
+ } else {
+ rightOperateView.text = "登录"
+ }
+ super.onResume()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/model/HomeModel.java b/app/src/main/java/com/casic/br/model/HomeModel.java
new file mode 100644
index 0000000..638d420
--- /dev/null
+++ b/app/src/main/java/com/casic/br/model/HomeModel.java
@@ -0,0 +1,127 @@
+package com.casic.br.model;
+
+import java.util.List;
+
+public class HomeModel {
+
+ private boolean admin;
+ private String geoName;
+ private int homeId;
+ private int homeStatus;
+ private double lat;
+ private double lon;
+ private String name;
+ private int role;
+ private List rooms;
+
+ public boolean isAdmin() {
+ return admin;
+ }
+
+ public void setAdmin(boolean admin) {
+ this.admin = admin;
+ }
+
+ public String getGeoName() {
+ return geoName;
+ }
+
+ public void setGeoName(String geoName) {
+ this.geoName = geoName;
+ }
+
+ public int getHomeId() {
+ return homeId;
+ }
+
+ public void setHomeId(int homeId) {
+ this.homeId = homeId;
+ }
+
+ public int getHomeStatus() {
+ return homeStatus;
+ }
+
+ public void setHomeStatus(int homeStatus) {
+ this.homeStatus = homeStatus;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRole() {
+ return role;
+ }
+
+ public void setRole(int role) {
+ this.role = role;
+ }
+
+ public List getRooms() {
+ return rooms;
+ }
+
+ public void setRooms(List rooms) {
+ this.rooms = rooms;
+ }
+
+ public static class RoomsModel {
+ private int displayOrder;
+ private String name;
+ private int roomId;
+ private boolean sel;
+
+ public int getDisplayOrder() {
+ return displayOrder;
+ }
+
+ public void setDisplayOrder(int displayOrder) {
+ this.displayOrder = displayOrder;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(int roomId) {
+ this.roomId = roomId;
+ }
+
+ public boolean isSel() {
+ return sel;
+ }
+
+ public void setSel(boolean sel) {
+ this.sel = sel;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt
deleted file mode 100644
index da62e63..0000000
--- a/app/src/main/java/com/casic/br/utils/DialogManager.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.casic.br.utils;
-
-import android.app.Activity
-import android.view.WindowManager
-import com.pengxh.kt.lite.base.BaseSingleton
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
-
-class DialogManager private constructor(private val activity: Activity) {
-
- private lateinit var loadingDialog: QMUITipDialog
-
- companion object : BaseSingleton() {
- override val creator: (Activity) -> DialogManager
- get() = ::DialogManager
- }
-
- fun showLoadingDialog(message: String) {
- loadingDialog = QMUITipDialog
- .Builder(activity)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord(message)
- .create()
- if (!activity.isDestroyed) {
- try {
- loadingDialog.show()
- } catch (e: WindowManager.BadTokenException) {
- e.printStackTrace()
- }
- }
- }
-
- fun dismissLoadingDialog() {
- if (loadingDialog.isShowing) {
- loadingDialog.dismiss()
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
new file mode 100644
index 0000000..e04e327
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
@@ -0,0 +1,31 @@
+package com.casic.br.utils
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object LoadingDialogHub {
+
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun show(activity: Activity, message: String) {
+ loadingDialog = QMUITipDialog
+ .Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismiss() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index 197a466..dd365ad 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -53,7 +53,8 @@
* String
* =============================================================================================
* */
- const val USER_DETAIL_MODEL = "userDetailModel"
+ const val USER_IS_LOGIN = "isLogin"
+ const val HOME_DETAIL_MODEL = "homeDetailModel"
const val SERVER_BASE_URL = "http://111.198.10.15:11304"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
index ce8f99e..210a258 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
@@ -30,13 +30,12 @@
override fun initEvent() {
iotDevice.setOnClickListener {
- navigatePageTo()
- finish()
+ //IoT设备首先需要先配置网络
+ navigatePageTo()
}
notIotDevice.setOnClickListener {
navigatePageTo()
- finish()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
index d58aebd..ec99e90 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
@@ -4,6 +4,8 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.PageNavigationManager
import kotlinx.android.synthetic.main.activity_add_device_result.*
class AddDeviceResultActivity : KotlinBaseActivity() {
@@ -26,7 +28,8 @@
override fun initEvent() {
completeButton.setOnClickListener {
- finish()
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt
deleted file mode 100644
index 25ce475..0000000
--- a/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.casic.br.view
-
-import android.view.View
-import android.widget.AdapterView
-import com.casic.br.R
-import com.casic.br.extensions.initLayoutImmersionBar
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import kotlinx.android.synthetic.main.activity_add_device_iot.*
-
-/**
- * 添加IoT设备
- * */
-class AddIoTDeviceActivity : KotlinBaseActivity() {
-
- override fun initLayoutView(): Int = R.layout.activity_add_device_iot
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- ImmersionBar.with(this).statusBarDarkFont(true).init()
- initLayoutImmersionBar(rootView)
- leftBackView.setOnClickListener { finish() }
- }
-
- override fun initData() {
- //默认选择WIFI快连
- connectTypeSpinner.setSelection(0)
- }
-
- override fun initEvent() {
- connectTypeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?, view: View?, position: Int, id: Long
- ) {
-
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
- }
-
- nextStepButton.setOnClickListener {
- if (connectTypeSpinner.selectedItemPosition == 0) {
- navigatePageTo()
- } else {
- navigatePageTo()
- }
- finish()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt
index 9de6790..54975e3 100644
--- a/app/src/main/java/com/casic/br/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt
@@ -1,11 +1,26 @@
package com.casic.br.view
+import android.content.Context
import com.casic.br.R
+import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
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.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.android.user.api.ILoginCallback
+import com.tuya.smart.android.user.bean.User
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import kotlinx.android.synthetic.main.activity_login.*
+import kotlinx.android.synthetic.main.activity_login.userPhoneView
+import kotlinx.android.synthetic.main.activity_register.*
class LoginActivity : KotlinBaseActivity() {
+ private val context: Context = this@LoginActivity
+
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
@@ -21,6 +36,38 @@
}
override fun initEvent() {
+ registerView.setOnClickListener {
+ navigatePageTo()
+ }
+ loginButton.setOnClickListener {
+ val userPhone = userPhoneView.text.toString()
+ if (userPhone.isBlank()) {
+ "请输入手机号".show(this)
+ return@setOnClickListener
+ }
+ val userPassword = passwordView.text.toString()
+ if (userPassword.isBlank()) {
+ "请输入密码".show(this)
+ return@setOnClickListener
+ }
+
+ LoadingDialogHub.show(this, "登录中,请稍后")
+ TuyaHomeSdk.getUserInstance()
+ .loginWithPhonePassword("86", userPhone, userPassword, object : ILoginCallback {
+ override fun onSuccess(user: User?) {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, true)
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ LoadingDialogHub.dismiss()
+ "登录失败".show(context)
+ }
+ })
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt
index a2fb29a..25f4254 100644
--- a/app/src/main/java/com/casic/br/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/view/MainActivity.kt
@@ -1,5 +1,6 @@
package com.casic.br.view
+import android.util.Log
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
@@ -7,13 +8,20 @@
import com.casic.br.R
import com.casic.br.adapter.ViewPagerAdapter
import com.casic.br.fragment.*
+import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
+ private val kTag = "MainActivity"
private var menuItem: MenuItem? = null
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
@@ -33,7 +41,27 @@
}
override fun initData() {
+ /**
+ * TODO 需要改为实际情况
+ *
+ * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
+ * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
+ * 用户账号下创建任意多个家庭。
+ * */
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ TuyaHomeSdk.getHomeManagerInstance()
+ .createHome("北燃生活体验馆", 116.486394, 39.885734, "西直门内南小街", arrayListOf("1"), object :
+ ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean?) {
+ SaveKeyValues.putValue(LocaleConstant.HOME_DETAIL_MODEL, bean!!.toJson())
+ }
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
+ }
+ })
+ }
}
override fun observeRequestState() {
diff --git a/app/src/main/java/com/casic/br/view/RegisterActivity.kt b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
new file mode 100644
index 0000000..96510fb
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
@@ -0,0 +1,113 @@
+package com.casic.br.view
+
+import android.content.Context
+import android.os.CountDownTimer
+import com.casic.br.R
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.LoadingDialogHub
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.isPhoneNumber
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.tuya.smart.android.user.api.IRegisterCallback
+import com.tuya.smart.android.user.bean.User
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IResultCallback
+import kotlinx.android.synthetic.main.activity_register.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import java.util.*
+
+class RegisterActivity : KotlinBaseActivity() {
+
+ private val kTag = "RegisterActivity"
+ private val context: Context = this@RegisterActivity
+
+ override fun initLayoutView(): Int = R.layout.activity_register
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "注册账号"
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ requestCodeButton.setOnClickListener {
+ if (userPhoneView.text.toString().isBlank()) {
+ "请输入手机号".show(this)
+ return@setOnClickListener
+ }
+ if (!userPhoneView.text.toString().isPhoneNumber()) {
+ "手机号不正确,请检查".show(this)
+ return@setOnClickListener
+ }
+ //发送验证码
+ TuyaHomeSdk.getUserInstance().sendVerifyCodeWithUserName(
+ userPhoneView.text.toString(), "", "86", 1,
+ object : IResultCallback {
+ override fun onSuccess() {
+ "发送验证码成功".show(context)
+ }
+
+ override fun onError(code: String?, error: String?) {
+ "发送验证码失败".show(context)
+ }
+ })
+
+ //开始倒计时
+ object : CountDownTimer(60 * 1000, 1000) {
+ override fun onTick(millisUntilFinished: Long) {
+ requestCodeButton.text = String.format("${millisUntilFinished / 1000}s")
+ requestCodeButton.isEnabled = false
+ }
+
+ override fun onFinish() {
+ requestCodeButton.text = "获取验证码"
+ requestCodeButton.isEnabled = true
+ }
+ }.start()
+ }
+
+ registerButton.setOnClickListener {
+ val userPhone = userPhoneView.text.toString()
+ if (userPhone.isBlank()) {
+ "请输入手机号".show(this)
+ return@setOnClickListener
+ }
+ val smsCode = requestCodeView.text.toString()
+ if (smsCode.isBlank()) {
+ "请输入验证码".show(this)
+ return@setOnClickListener
+ }
+ val userPassword = userPasswordView.text.toString()
+ if (userPassword.isBlank()) {
+ "请输入密码".show(this)
+ return@setOnClickListener
+ }
+
+ LoadingDialogHub.show(this, "注册中,请稍后")
+ TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
+ "86", userPhone, userPassword, smsCode,
+ object : IRegisterCallback {
+ override fun onSuccess(user: User?) {
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ LoadingDialogHub.dismiss()
+ "用户注册失败".show(context)
+ }
+ })
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/RegisterResultActivity.kt b/app/src/main/java/com/casic/br/view/RegisterResultActivity.kt
new file mode 100644
index 0000000..6a0de18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/RegisterResultActivity.kt
@@ -0,0 +1,40 @@
+package com.casic.br.view
+
+import android.view.View
+import com.casic.br.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import kotlinx.android.synthetic.main.activity_register_result.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+
+class RegisterResultActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_register_result
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.visibility = View.GONE
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ loginButton.setOnClickListener {
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
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 cc20c54..4ef912b 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -1,25 +1,40 @@
package com.casic.br.fragment
import android.graphics.Typeface
+import android.util.Log
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.adapter.RecommendAdapter
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.model.AddedDeviceModel
+import com.casic.br.model.HomeModel
import com.casic.br.model.RecommendModel
+import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
import com.casic.br.view.device.WaterHeaterActivity
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
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.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
import kotlinx.android.synthetic.main.fragment_device.*
import kotlinx.android.synthetic.main.include_main_title.*
import java.util.*
+
class DevicePageFragment : KotlinBaseFragment() {
+ private val kTag = "DevicePageFragment"
+ private val gson by lazy { Gson() }
+
override fun initLayoutView(): Int = R.layout.fragment_device
override fun setupTopBarLayout() {
@@ -37,16 +52,6 @@
model1.deviceModel = "D40-DM1"
model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
deviceModels.add(model1)
- val model2 = AddedDeviceModel()
- model2.deviceName = "万家乐油烟机"
- model2.deviceModel = "CXW-320-W7"
- model2.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model2)
- val model3 = AddedDeviceModel()
- model3.deviceName = "万家乐壁挂炉"
- model3.deviceModel = "26-13A3L"
- model3.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model3)
val addedDeviceAdapter = AddedDeviceAdapter(requireContext())
addedDeviceAdapter.setupDevice(deviceModels)
@@ -102,8 +107,28 @@
}
override fun initEvent() {
- showAllDeviceLayout.setOnClickListener {
+ showAllDeviceButton.setOnClickListener {
requireContext().navigatePageTo()
}
}
+
+ override fun onResume() {
+ super.onResume()
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ return
+ }
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.newHomeInstance(homeModel.homeId.toLong())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ val deviceList: List = bean.deviceList
+ Log.d(kTag, deviceList.toJson())
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ // do something
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
index 8aba9b2..84e947c 100644
--- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
@@ -9,9 +9,13 @@
import com.casic.br.utils.GridItemDecoration
import com.casic.br.utils.LocaleConstant
import com.casic.br.view.LoginActivity
+import com.casic.br.view.MainActivity
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.youth.banner.Banner
import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
@@ -90,7 +94,39 @@
override fun initEvent() {
rightOperateView.setOnClickListener {
- requireContext().navigatePageTo()
+ if (rightOperateView.text == "退出") {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("退出确认")
+ .setMessage("退出当前账号,将不能同步数据")
+ .setNegativeButton("取消")
+ .setPositiveButton("确认退出")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ requireContext().navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ })
+ .build().show()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
}
+
+ override fun onResume() {
+ val isLogin = SaveKeyValues.getValue(LocaleConstant.USER_IS_LOGIN, false) as Boolean
+ if (isLogin) {
+ rightOperateView.text = "退出"
+ } else {
+ rightOperateView.text = "登录"
+ }
+ super.onResume()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/model/HomeModel.java b/app/src/main/java/com/casic/br/model/HomeModel.java
new file mode 100644
index 0000000..638d420
--- /dev/null
+++ b/app/src/main/java/com/casic/br/model/HomeModel.java
@@ -0,0 +1,127 @@
+package com.casic.br.model;
+
+import java.util.List;
+
+public class HomeModel {
+
+ private boolean admin;
+ private String geoName;
+ private int homeId;
+ private int homeStatus;
+ private double lat;
+ private double lon;
+ private String name;
+ private int role;
+ private List rooms;
+
+ public boolean isAdmin() {
+ return admin;
+ }
+
+ public void setAdmin(boolean admin) {
+ this.admin = admin;
+ }
+
+ public String getGeoName() {
+ return geoName;
+ }
+
+ public void setGeoName(String geoName) {
+ this.geoName = geoName;
+ }
+
+ public int getHomeId() {
+ return homeId;
+ }
+
+ public void setHomeId(int homeId) {
+ this.homeId = homeId;
+ }
+
+ public int getHomeStatus() {
+ return homeStatus;
+ }
+
+ public void setHomeStatus(int homeStatus) {
+ this.homeStatus = homeStatus;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRole() {
+ return role;
+ }
+
+ public void setRole(int role) {
+ this.role = role;
+ }
+
+ public List getRooms() {
+ return rooms;
+ }
+
+ public void setRooms(List rooms) {
+ this.rooms = rooms;
+ }
+
+ public static class RoomsModel {
+ private int displayOrder;
+ private String name;
+ private int roomId;
+ private boolean sel;
+
+ public int getDisplayOrder() {
+ return displayOrder;
+ }
+
+ public void setDisplayOrder(int displayOrder) {
+ this.displayOrder = displayOrder;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(int roomId) {
+ this.roomId = roomId;
+ }
+
+ public boolean isSel() {
+ return sel;
+ }
+
+ public void setSel(boolean sel) {
+ this.sel = sel;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt
deleted file mode 100644
index da62e63..0000000
--- a/app/src/main/java/com/casic/br/utils/DialogManager.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.casic.br.utils;
-
-import android.app.Activity
-import android.view.WindowManager
-import com.pengxh.kt.lite.base.BaseSingleton
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
-
-class DialogManager private constructor(private val activity: Activity) {
-
- private lateinit var loadingDialog: QMUITipDialog
-
- companion object : BaseSingleton() {
- override val creator: (Activity) -> DialogManager
- get() = ::DialogManager
- }
-
- fun showLoadingDialog(message: String) {
- loadingDialog = QMUITipDialog
- .Builder(activity)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord(message)
- .create()
- if (!activity.isDestroyed) {
- try {
- loadingDialog.show()
- } catch (e: WindowManager.BadTokenException) {
- e.printStackTrace()
- }
- }
- }
-
- fun dismissLoadingDialog() {
- if (loadingDialog.isShowing) {
- loadingDialog.dismiss()
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
new file mode 100644
index 0000000..e04e327
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
@@ -0,0 +1,31 @@
+package com.casic.br.utils
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object LoadingDialogHub {
+
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun show(activity: Activity, message: String) {
+ loadingDialog = QMUITipDialog
+ .Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismiss() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index 197a466..dd365ad 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -53,7 +53,8 @@
* String
* =============================================================================================
* */
- const val USER_DETAIL_MODEL = "userDetailModel"
+ const val USER_IS_LOGIN = "isLogin"
+ const val HOME_DETAIL_MODEL = "homeDetailModel"
const val SERVER_BASE_URL = "http://111.198.10.15:11304"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
index ce8f99e..210a258 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
@@ -30,13 +30,12 @@
override fun initEvent() {
iotDevice.setOnClickListener {
- navigatePageTo()
- finish()
+ //IoT设备首先需要先配置网络
+ navigatePageTo()
}
notIotDevice.setOnClickListener {
navigatePageTo()
- finish()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
index d58aebd..ec99e90 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
@@ -4,6 +4,8 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.PageNavigationManager
import kotlinx.android.synthetic.main.activity_add_device_result.*
class AddDeviceResultActivity : KotlinBaseActivity() {
@@ -26,7 +28,8 @@
override fun initEvent() {
completeButton.setOnClickListener {
- finish()
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt
deleted file mode 100644
index 25ce475..0000000
--- a/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.casic.br.view
-
-import android.view.View
-import android.widget.AdapterView
-import com.casic.br.R
-import com.casic.br.extensions.initLayoutImmersionBar
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import kotlinx.android.synthetic.main.activity_add_device_iot.*
-
-/**
- * 添加IoT设备
- * */
-class AddIoTDeviceActivity : KotlinBaseActivity() {
-
- override fun initLayoutView(): Int = R.layout.activity_add_device_iot
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- ImmersionBar.with(this).statusBarDarkFont(true).init()
- initLayoutImmersionBar(rootView)
- leftBackView.setOnClickListener { finish() }
- }
-
- override fun initData() {
- //默认选择WIFI快连
- connectTypeSpinner.setSelection(0)
- }
-
- override fun initEvent() {
- connectTypeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?, view: View?, position: Int, id: Long
- ) {
-
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
- }
-
- nextStepButton.setOnClickListener {
- if (connectTypeSpinner.selectedItemPosition == 0) {
- navigatePageTo()
- } else {
- navigatePageTo()
- }
- finish()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt
index 9de6790..54975e3 100644
--- a/app/src/main/java/com/casic/br/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt
@@ -1,11 +1,26 @@
package com.casic.br.view
+import android.content.Context
import com.casic.br.R
+import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
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.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.android.user.api.ILoginCallback
+import com.tuya.smart.android.user.bean.User
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import kotlinx.android.synthetic.main.activity_login.*
+import kotlinx.android.synthetic.main.activity_login.userPhoneView
+import kotlinx.android.synthetic.main.activity_register.*
class LoginActivity : KotlinBaseActivity() {
+ private val context: Context = this@LoginActivity
+
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
@@ -21,6 +36,38 @@
}
override fun initEvent() {
+ registerView.setOnClickListener {
+ navigatePageTo()
+ }
+ loginButton.setOnClickListener {
+ val userPhone = userPhoneView.text.toString()
+ if (userPhone.isBlank()) {
+ "请输入手机号".show(this)
+ return@setOnClickListener
+ }
+ val userPassword = passwordView.text.toString()
+ if (userPassword.isBlank()) {
+ "请输入密码".show(this)
+ return@setOnClickListener
+ }
+
+ LoadingDialogHub.show(this, "登录中,请稍后")
+ TuyaHomeSdk.getUserInstance()
+ .loginWithPhonePassword("86", userPhone, userPassword, object : ILoginCallback {
+ override fun onSuccess(user: User?) {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, true)
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ LoadingDialogHub.dismiss()
+ "登录失败".show(context)
+ }
+ })
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt
index a2fb29a..25f4254 100644
--- a/app/src/main/java/com/casic/br/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/view/MainActivity.kt
@@ -1,5 +1,6 @@
package com.casic.br.view
+import android.util.Log
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
@@ -7,13 +8,20 @@
import com.casic.br.R
import com.casic.br.adapter.ViewPagerAdapter
import com.casic.br.fragment.*
+import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
+ private val kTag = "MainActivity"
private var menuItem: MenuItem? = null
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
@@ -33,7 +41,27 @@
}
override fun initData() {
+ /**
+ * TODO 需要改为实际情况
+ *
+ * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
+ * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
+ * 用户账号下创建任意多个家庭。
+ * */
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ TuyaHomeSdk.getHomeManagerInstance()
+ .createHome("北燃生活体验馆", 116.486394, 39.885734, "西直门内南小街", arrayListOf("1"), object :
+ ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean?) {
+ SaveKeyValues.putValue(LocaleConstant.HOME_DETAIL_MODEL, bean!!.toJson())
+ }
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
+ }
+ })
+ }
}
override fun observeRequestState() {
diff --git a/app/src/main/java/com/casic/br/view/RegisterActivity.kt b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
new file mode 100644
index 0000000..96510fb
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
@@ -0,0 +1,113 @@
+package com.casic.br.view
+
+import android.content.Context
+import android.os.CountDownTimer
+import com.casic.br.R
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.LoadingDialogHub
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.isPhoneNumber
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.tuya.smart.android.user.api.IRegisterCallback
+import com.tuya.smart.android.user.bean.User
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IResultCallback
+import kotlinx.android.synthetic.main.activity_register.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import java.util.*
+
+class RegisterActivity : KotlinBaseActivity() {
+
+ private val kTag = "RegisterActivity"
+ private val context: Context = this@RegisterActivity
+
+ override fun initLayoutView(): Int = R.layout.activity_register
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "注册账号"
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ requestCodeButton.setOnClickListener {
+ if (userPhoneView.text.toString().isBlank()) {
+ "请输入手机号".show(this)
+ return@setOnClickListener
+ }
+ if (!userPhoneView.text.toString().isPhoneNumber()) {
+ "手机号不正确,请检查".show(this)
+ return@setOnClickListener
+ }
+ //发送验证码
+ TuyaHomeSdk.getUserInstance().sendVerifyCodeWithUserName(
+ userPhoneView.text.toString(), "", "86", 1,
+ object : IResultCallback {
+ override fun onSuccess() {
+ "发送验证码成功".show(context)
+ }
+
+ override fun onError(code: String?, error: String?) {
+ "发送验证码失败".show(context)
+ }
+ })
+
+ //开始倒计时
+ object : CountDownTimer(60 * 1000, 1000) {
+ override fun onTick(millisUntilFinished: Long) {
+ requestCodeButton.text = String.format("${millisUntilFinished / 1000}s")
+ requestCodeButton.isEnabled = false
+ }
+
+ override fun onFinish() {
+ requestCodeButton.text = "获取验证码"
+ requestCodeButton.isEnabled = true
+ }
+ }.start()
+ }
+
+ registerButton.setOnClickListener {
+ val userPhone = userPhoneView.text.toString()
+ if (userPhone.isBlank()) {
+ "请输入手机号".show(this)
+ return@setOnClickListener
+ }
+ val smsCode = requestCodeView.text.toString()
+ if (smsCode.isBlank()) {
+ "请输入验证码".show(this)
+ return@setOnClickListener
+ }
+ val userPassword = userPasswordView.text.toString()
+ if (userPassword.isBlank()) {
+ "请输入密码".show(this)
+ return@setOnClickListener
+ }
+
+ LoadingDialogHub.show(this, "注册中,请稍后")
+ TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
+ "86", userPhone, userPassword, smsCode,
+ object : IRegisterCallback {
+ override fun onSuccess(user: User?) {
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ LoadingDialogHub.dismiss()
+ "用户注册失败".show(context)
+ }
+ })
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/RegisterResultActivity.kt b/app/src/main/java/com/casic/br/view/RegisterResultActivity.kt
new file mode 100644
index 0000000..6a0de18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/RegisterResultActivity.kt
@@ -0,0 +1,40 @@
+package com.casic.br.view
+
+import android.view.View
+import com.casic.br.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import kotlinx.android.synthetic.main.activity_register_result.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+
+class RegisterResultActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_register_result
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.visibility = View.GONE
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ loginButton.setOnClickListener {
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt
new file mode 100644
index 0000000..4dc700e
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt
@@ -0,0 +1,102 @@
+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
+import com.casic.br.model.HomeModel
+import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.gyf.immersionbar.ImmersionBar
+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
+import com.tuya.smart.home.sdk.builder.ActivatorBuilder
+import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
+import com.tuya.smart.sdk.api.ITuyaSmartActivatorListener
+import com.tuya.smart.sdk.bean.DeviceBean
+import com.tuya.smart.sdk.enums.ActivatorModelEnum
+import kotlinx.android.synthetic.main.activity_reset_device.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import java.util.*
+
+class ResetDeviceActivity : KotlinBaseActivity() {
+
+ private val kTag = "ResetDeviceActivity"
+ private val context: Context = this@ResetDeviceActivity
+ private val gson by lazy { Gson() }
+ private lateinit var params: ArrayList
+
+ override fun initLayoutView(): Int = R.layout.activity_reset_device
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+ }
+
+ override fun initEvent() {
+ nextStepButton.setOnClickListener {
+ if (!confirmCheckBox.isChecked) {
+ "请确认设备指示灯是否闪烁".show(this)
+ return@setOnClickListener
+ }
+ LoadingDialogHub.show(this, "设备配网中,请稍后")
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeModel.homeId.toLong(),
+ object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String) {
+ Log.d(kTag, "token: $token")
+ //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
+ val builder = object : ActivatorBuilder() {}
+ builder.ssid = params[0]
+ builder.context = context
+ builder.password = params[1]
+ builder.activatorModel = ActivatorModelEnum.TY_EZ
+ builder.timeOut = 100
+ builder.token = token
+ builder.listener = object : ITuyaSmartActivatorListener {
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.i(kTag, "onError: $errorMsg")
+ 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()
+ }
+ }
+ TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder).start()
+ }
+
+ override fun onFailure(s: String, s1: String) {
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
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 cc20c54..4ef912b 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -1,25 +1,40 @@
package com.casic.br.fragment
import android.graphics.Typeface
+import android.util.Log
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.adapter.RecommendAdapter
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.model.AddedDeviceModel
+import com.casic.br.model.HomeModel
import com.casic.br.model.RecommendModel
+import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
import com.casic.br.view.device.WaterHeaterActivity
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
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.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
import kotlinx.android.synthetic.main.fragment_device.*
import kotlinx.android.synthetic.main.include_main_title.*
import java.util.*
+
class DevicePageFragment : KotlinBaseFragment() {
+ private val kTag = "DevicePageFragment"
+ private val gson by lazy { Gson() }
+
override fun initLayoutView(): Int = R.layout.fragment_device
override fun setupTopBarLayout() {
@@ -37,16 +52,6 @@
model1.deviceModel = "D40-DM1"
model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
deviceModels.add(model1)
- val model2 = AddedDeviceModel()
- model2.deviceName = "万家乐油烟机"
- model2.deviceModel = "CXW-320-W7"
- model2.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model2)
- val model3 = AddedDeviceModel()
- model3.deviceName = "万家乐壁挂炉"
- model3.deviceModel = "26-13A3L"
- model3.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model3)
val addedDeviceAdapter = AddedDeviceAdapter(requireContext())
addedDeviceAdapter.setupDevice(deviceModels)
@@ -102,8 +107,28 @@
}
override fun initEvent() {
- showAllDeviceLayout.setOnClickListener {
+ showAllDeviceButton.setOnClickListener {
requireContext().navigatePageTo()
}
}
+
+ override fun onResume() {
+ super.onResume()
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ return
+ }
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.newHomeInstance(homeModel.homeId.toLong())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ val deviceList: List = bean.deviceList
+ Log.d(kTag, deviceList.toJson())
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ // do something
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
index 8aba9b2..84e947c 100644
--- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
@@ -9,9 +9,13 @@
import com.casic.br.utils.GridItemDecoration
import com.casic.br.utils.LocaleConstant
import com.casic.br.view.LoginActivity
+import com.casic.br.view.MainActivity
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.youth.banner.Banner
import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
@@ -90,7 +94,39 @@
override fun initEvent() {
rightOperateView.setOnClickListener {
- requireContext().navigatePageTo()
+ if (rightOperateView.text == "退出") {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("退出确认")
+ .setMessage("退出当前账号,将不能同步数据")
+ .setNegativeButton("取消")
+ .setPositiveButton("确认退出")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ requireContext().navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ })
+ .build().show()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
}
+
+ override fun onResume() {
+ val isLogin = SaveKeyValues.getValue(LocaleConstant.USER_IS_LOGIN, false) as Boolean
+ if (isLogin) {
+ rightOperateView.text = "退出"
+ } else {
+ rightOperateView.text = "登录"
+ }
+ super.onResume()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/model/HomeModel.java b/app/src/main/java/com/casic/br/model/HomeModel.java
new file mode 100644
index 0000000..638d420
--- /dev/null
+++ b/app/src/main/java/com/casic/br/model/HomeModel.java
@@ -0,0 +1,127 @@
+package com.casic.br.model;
+
+import java.util.List;
+
+public class HomeModel {
+
+ private boolean admin;
+ private String geoName;
+ private int homeId;
+ private int homeStatus;
+ private double lat;
+ private double lon;
+ private String name;
+ private int role;
+ private List rooms;
+
+ public boolean isAdmin() {
+ return admin;
+ }
+
+ public void setAdmin(boolean admin) {
+ this.admin = admin;
+ }
+
+ public String getGeoName() {
+ return geoName;
+ }
+
+ public void setGeoName(String geoName) {
+ this.geoName = geoName;
+ }
+
+ public int getHomeId() {
+ return homeId;
+ }
+
+ public void setHomeId(int homeId) {
+ this.homeId = homeId;
+ }
+
+ public int getHomeStatus() {
+ return homeStatus;
+ }
+
+ public void setHomeStatus(int homeStatus) {
+ this.homeStatus = homeStatus;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRole() {
+ return role;
+ }
+
+ public void setRole(int role) {
+ this.role = role;
+ }
+
+ public List getRooms() {
+ return rooms;
+ }
+
+ public void setRooms(List rooms) {
+ this.rooms = rooms;
+ }
+
+ public static class RoomsModel {
+ private int displayOrder;
+ private String name;
+ private int roomId;
+ private boolean sel;
+
+ public int getDisplayOrder() {
+ return displayOrder;
+ }
+
+ public void setDisplayOrder(int displayOrder) {
+ this.displayOrder = displayOrder;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(int roomId) {
+ this.roomId = roomId;
+ }
+
+ public boolean isSel() {
+ return sel;
+ }
+
+ public void setSel(boolean sel) {
+ this.sel = sel;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt
deleted file mode 100644
index da62e63..0000000
--- a/app/src/main/java/com/casic/br/utils/DialogManager.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.casic.br.utils;
-
-import android.app.Activity
-import android.view.WindowManager
-import com.pengxh.kt.lite.base.BaseSingleton
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
-
-class DialogManager private constructor(private val activity: Activity) {
-
- private lateinit var loadingDialog: QMUITipDialog
-
- companion object : BaseSingleton() {
- override val creator: (Activity) -> DialogManager
- get() = ::DialogManager
- }
-
- fun showLoadingDialog(message: String) {
- loadingDialog = QMUITipDialog
- .Builder(activity)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord(message)
- .create()
- if (!activity.isDestroyed) {
- try {
- loadingDialog.show()
- } catch (e: WindowManager.BadTokenException) {
- e.printStackTrace()
- }
- }
- }
-
- fun dismissLoadingDialog() {
- if (loadingDialog.isShowing) {
- loadingDialog.dismiss()
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
new file mode 100644
index 0000000..e04e327
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
@@ -0,0 +1,31 @@
+package com.casic.br.utils
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object LoadingDialogHub {
+
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun show(activity: Activity, message: String) {
+ loadingDialog = QMUITipDialog
+ .Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismiss() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index 197a466..dd365ad 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -53,7 +53,8 @@
* String
* =============================================================================================
* */
- const val USER_DETAIL_MODEL = "userDetailModel"
+ const val USER_IS_LOGIN = "isLogin"
+ const val HOME_DETAIL_MODEL = "homeDetailModel"
const val SERVER_BASE_URL = "http://111.198.10.15:11304"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
index ce8f99e..210a258 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
@@ -30,13 +30,12 @@
override fun initEvent() {
iotDevice.setOnClickListener {
- navigatePageTo()
- finish()
+ //IoT设备首先需要先配置网络
+ navigatePageTo()
}
notIotDevice.setOnClickListener {
navigatePageTo()
- finish()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
index d58aebd..ec99e90 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
@@ -4,6 +4,8 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.PageNavigationManager
import kotlinx.android.synthetic.main.activity_add_device_result.*
class AddDeviceResultActivity : KotlinBaseActivity() {
@@ -26,7 +28,8 @@
override fun initEvent() {
completeButton.setOnClickListener {
- finish()
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt
deleted file mode 100644
index 25ce475..0000000
--- a/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.casic.br.view
-
-import android.view.View
-import android.widget.AdapterView
-import com.casic.br.R
-import com.casic.br.extensions.initLayoutImmersionBar
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import kotlinx.android.synthetic.main.activity_add_device_iot.*
-
-/**
- * 添加IoT设备
- * */
-class AddIoTDeviceActivity : KotlinBaseActivity() {
-
- override fun initLayoutView(): Int = R.layout.activity_add_device_iot
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- ImmersionBar.with(this).statusBarDarkFont(true).init()
- initLayoutImmersionBar(rootView)
- leftBackView.setOnClickListener { finish() }
- }
-
- override fun initData() {
- //默认选择WIFI快连
- connectTypeSpinner.setSelection(0)
- }
-
- override fun initEvent() {
- connectTypeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?, view: View?, position: Int, id: Long
- ) {
-
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
- }
-
- nextStepButton.setOnClickListener {
- if (connectTypeSpinner.selectedItemPosition == 0) {
- navigatePageTo()
- } else {
- navigatePageTo()
- }
- finish()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt
index 9de6790..54975e3 100644
--- a/app/src/main/java/com/casic/br/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt
@@ -1,11 +1,26 @@
package com.casic.br.view
+import android.content.Context
import com.casic.br.R
+import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
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.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.android.user.api.ILoginCallback
+import com.tuya.smart.android.user.bean.User
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import kotlinx.android.synthetic.main.activity_login.*
+import kotlinx.android.synthetic.main.activity_login.userPhoneView
+import kotlinx.android.synthetic.main.activity_register.*
class LoginActivity : KotlinBaseActivity() {
+ private val context: Context = this@LoginActivity
+
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
@@ -21,6 +36,38 @@
}
override fun initEvent() {
+ registerView.setOnClickListener {
+ navigatePageTo()
+ }
+ loginButton.setOnClickListener {
+ val userPhone = userPhoneView.text.toString()
+ if (userPhone.isBlank()) {
+ "请输入手机号".show(this)
+ return@setOnClickListener
+ }
+ val userPassword = passwordView.text.toString()
+ if (userPassword.isBlank()) {
+ "请输入密码".show(this)
+ return@setOnClickListener
+ }
+
+ LoadingDialogHub.show(this, "登录中,请稍后")
+ TuyaHomeSdk.getUserInstance()
+ .loginWithPhonePassword("86", userPhone, userPassword, object : ILoginCallback {
+ override fun onSuccess(user: User?) {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, true)
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ LoadingDialogHub.dismiss()
+ "登录失败".show(context)
+ }
+ })
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt
index a2fb29a..25f4254 100644
--- a/app/src/main/java/com/casic/br/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/view/MainActivity.kt
@@ -1,5 +1,6 @@
package com.casic.br.view
+import android.util.Log
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
@@ -7,13 +8,20 @@
import com.casic.br.R
import com.casic.br.adapter.ViewPagerAdapter
import com.casic.br.fragment.*
+import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
+ private val kTag = "MainActivity"
private var menuItem: MenuItem? = null
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
@@ -33,7 +41,27 @@
}
override fun initData() {
+ /**
+ * TODO 需要改为实际情况
+ *
+ * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
+ * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
+ * 用户账号下创建任意多个家庭。
+ * */
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ TuyaHomeSdk.getHomeManagerInstance()
+ .createHome("北燃生活体验馆", 116.486394, 39.885734, "西直门内南小街", arrayListOf("1"), object :
+ ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean?) {
+ SaveKeyValues.putValue(LocaleConstant.HOME_DETAIL_MODEL, bean!!.toJson())
+ }
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
+ }
+ })
+ }
}
override fun observeRequestState() {
diff --git a/app/src/main/java/com/casic/br/view/RegisterActivity.kt b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
new file mode 100644
index 0000000..96510fb
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
@@ -0,0 +1,113 @@
+package com.casic.br.view
+
+import android.content.Context
+import android.os.CountDownTimer
+import com.casic.br.R
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.LoadingDialogHub
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.isPhoneNumber
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.tuya.smart.android.user.api.IRegisterCallback
+import com.tuya.smart.android.user.bean.User
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IResultCallback
+import kotlinx.android.synthetic.main.activity_register.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import java.util.*
+
+class RegisterActivity : KotlinBaseActivity() {
+
+ private val kTag = "RegisterActivity"
+ private val context: Context = this@RegisterActivity
+
+ override fun initLayoutView(): Int = R.layout.activity_register
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "注册账号"
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ requestCodeButton.setOnClickListener {
+ if (userPhoneView.text.toString().isBlank()) {
+ "请输入手机号".show(this)
+ return@setOnClickListener
+ }
+ if (!userPhoneView.text.toString().isPhoneNumber()) {
+ "手机号不正确,请检查".show(this)
+ return@setOnClickListener
+ }
+ //发送验证码
+ TuyaHomeSdk.getUserInstance().sendVerifyCodeWithUserName(
+ userPhoneView.text.toString(), "", "86", 1,
+ object : IResultCallback {
+ override fun onSuccess() {
+ "发送验证码成功".show(context)
+ }
+
+ override fun onError(code: String?, error: String?) {
+ "发送验证码失败".show(context)
+ }
+ })
+
+ //开始倒计时
+ object : CountDownTimer(60 * 1000, 1000) {
+ override fun onTick(millisUntilFinished: Long) {
+ requestCodeButton.text = String.format("${millisUntilFinished / 1000}s")
+ requestCodeButton.isEnabled = false
+ }
+
+ override fun onFinish() {
+ requestCodeButton.text = "获取验证码"
+ requestCodeButton.isEnabled = true
+ }
+ }.start()
+ }
+
+ registerButton.setOnClickListener {
+ val userPhone = userPhoneView.text.toString()
+ if (userPhone.isBlank()) {
+ "请输入手机号".show(this)
+ return@setOnClickListener
+ }
+ val smsCode = requestCodeView.text.toString()
+ if (smsCode.isBlank()) {
+ "请输入验证码".show(this)
+ return@setOnClickListener
+ }
+ val userPassword = userPasswordView.text.toString()
+ if (userPassword.isBlank()) {
+ "请输入密码".show(this)
+ return@setOnClickListener
+ }
+
+ LoadingDialogHub.show(this, "注册中,请稍后")
+ TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
+ "86", userPhone, userPassword, smsCode,
+ object : IRegisterCallback {
+ override fun onSuccess(user: User?) {
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ LoadingDialogHub.dismiss()
+ "用户注册失败".show(context)
+ }
+ })
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/RegisterResultActivity.kt b/app/src/main/java/com/casic/br/view/RegisterResultActivity.kt
new file mode 100644
index 0000000..6a0de18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/RegisterResultActivity.kt
@@ -0,0 +1,40 @@
+package com.casic.br.view
+
+import android.view.View
+import com.casic.br.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import kotlinx.android.synthetic.main.activity_register_result.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+
+class RegisterResultActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_register_result
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.visibility = View.GONE
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ loginButton.setOnClickListener {
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt
new file mode 100644
index 0000000..4dc700e
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt
@@ -0,0 +1,102 @@
+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
+import com.casic.br.model.HomeModel
+import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.gyf.immersionbar.ImmersionBar
+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
+import com.tuya.smart.home.sdk.builder.ActivatorBuilder
+import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
+import com.tuya.smart.sdk.api.ITuyaSmartActivatorListener
+import com.tuya.smart.sdk.bean.DeviceBean
+import com.tuya.smart.sdk.enums.ActivatorModelEnum
+import kotlinx.android.synthetic.main.activity_reset_device.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import java.util.*
+
+class ResetDeviceActivity : KotlinBaseActivity() {
+
+ private val kTag = "ResetDeviceActivity"
+ private val context: Context = this@ResetDeviceActivity
+ private val gson by lazy { Gson() }
+ private lateinit var params: ArrayList
+
+ override fun initLayoutView(): Int = R.layout.activity_reset_device
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+ }
+
+ override fun initEvent() {
+ nextStepButton.setOnClickListener {
+ if (!confirmCheckBox.isChecked) {
+ "请确认设备指示灯是否闪烁".show(this)
+ return@setOnClickListener
+ }
+ LoadingDialogHub.show(this, "设备配网中,请稍后")
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeModel.homeId.toLong(),
+ object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String) {
+ Log.d(kTag, "token: $token")
+ //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
+ val builder = object : ActivatorBuilder() {}
+ builder.ssid = params[0]
+ builder.context = context
+ builder.password = params[1]
+ builder.activatorModel = ActivatorModelEnum.TY_EZ
+ builder.timeOut = 100
+ builder.token = token
+ builder.listener = object : ITuyaSmartActivatorListener {
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.i(kTag, "onError: $errorMsg")
+ 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()
+ }
+ }
+ TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder).start()
+ }
+
+ override fun onFailure(s: String, s1: String) {
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/SearchDeviceResult.kt b/app/src/main/java/com/casic/br/view/SearchDeviceResult.kt
deleted file mode 100644
index ed466ae..0000000
--- a/app/src/main/java/com/casic/br/view/SearchDeviceResult.kt
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.casic.br.view
-
-import com.casic.br.R
-import com.casic.br.extensions.initLayoutImmersionBar
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import kotlinx.android.synthetic.main.activity_search_device_result.*
-import kotlinx.android.synthetic.main.include_left_back_title.*
-
-class SearchDeviceResult : KotlinBaseActivity() {
-
- override fun initLayoutView(): Int = R.layout.activity_search_device_result
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- ImmersionBar.with(this).statusBarDarkFont(true).init()
- initLayoutImmersionBar(rootView)
- leftBackView.setOnClickListener { finish() }
- titleView.text = "添加设备"
- }
-
- override fun initData() {
-
- }
-
- override fun initEvent() {
- confirmButton.setOnClickListener {
- navigatePageTo()
- finish()
- }
-
- reSearchDeviceView.setOnClickListener {
- navigatePageTo()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0e96..ba3523a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,15 +41,16 @@
+
+
-
-
+
+
-
diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt
index bf8285c..c90a197 100644
--- a/app/src/main/java/com/casic/br/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt
@@ -1,16 +1,10 @@
package com.casic.br.base
import android.app.Application
-import android.util.Log
import com.casic.br.greendao.DaoMaster
import com.casic.br.greendao.DaoSession
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.android.user.api.ILoginCallback
-import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlin.properties.Delegates
@@ -30,46 +24,13 @@
super.onCreate()
instance = this
SaveKeyValues.initSharedPreferences(this)
- initTuya()
+ TuyaHomeSdk.init(this)
+ TuyaHomeSdk.setDebugMode(true)
val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
}
- private fun initTuya() {
- TuyaHomeSdk.init(this)
- TuyaHomeSdk.setDebugMode(true)
- /**
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- //TODO 必须登录
- TuyaHomeSdk.getUserInstance()
- .loginWithPhonePassword("86", "18310581916", "123456", object : ILoginCallback {
- override fun onSuccess(user: User?) {
- Log.d(kTag, "Login success:" + user!!.username)
- }
-
- override fun onError(code: String, error: String) {
- Log.e(kTag, "code: " + code + "error:" + error)
- }
- })
-
-
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "北燃生活体验馆", arrayListOf(), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- Log.d(kTag, bean!!.toJson())
- }
-
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
-
fun obtainDaoSession(): DaoSession {
return daoSession
}
diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt
index 5866614..5726394 100644
--- a/app/src/main/java/com/casic/br/extensions/Context.kt
+++ b/app/src/main/java/com/casic/br/extensions/Context.kt
@@ -2,11 +2,16 @@
import android.content.Context
import android.view.ViewGroup
+import com.casic.br.base.BaseApplication
+import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
//根据不同设备状态栏高度设置"跳过"按钮的Margin值
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
+ if (statusBarHeight == 0) {
+ statusBarHeight = 44f.dp2px(BaseApplication.obtainInstance())
+ }
rootView.setPadding(0, statusBarHeight, 0, 0)
rootView.requestLayout()
}
\ No newline at end of file
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 cc20c54..4ef912b 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -1,25 +1,40 @@
package com.casic.br.fragment
import android.graphics.Typeface
+import android.util.Log
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.adapter.RecommendAdapter
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.model.AddedDeviceModel
+import com.casic.br.model.HomeModel
import com.casic.br.model.RecommendModel
+import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
import com.casic.br.view.device.WaterHeaterActivity
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
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.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
import kotlinx.android.synthetic.main.fragment_device.*
import kotlinx.android.synthetic.main.include_main_title.*
import java.util.*
+
class DevicePageFragment : KotlinBaseFragment() {
+ private val kTag = "DevicePageFragment"
+ private val gson by lazy { Gson() }
+
override fun initLayoutView(): Int = R.layout.fragment_device
override fun setupTopBarLayout() {
@@ -37,16 +52,6 @@
model1.deviceModel = "D40-DM1"
model1.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
deviceModels.add(model1)
- val model2 = AddedDeviceModel()
- model2.deviceName = "万家乐油烟机"
- model2.deviceModel = "CXW-320-W7"
- model2.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model2)
- val model3 = AddedDeviceModel()
- model3.deviceName = "万家乐壁挂炉"
- model3.deviceModel = "26-13A3L"
- model3.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天"
- deviceModels.add(model3)
val addedDeviceAdapter = AddedDeviceAdapter(requireContext())
addedDeviceAdapter.setupDevice(deviceModels)
@@ -102,8 +107,28 @@
}
override fun initEvent() {
- showAllDeviceLayout.setOnClickListener {
+ showAllDeviceButton.setOnClickListener {
requireContext().navigatePageTo()
}
}
+
+ override fun onResume() {
+ super.onResume()
+ val s = SaveKeyValues.getValue(LocaleConstant.HOME_DETAIL_MODEL, "") as String
+ if (s == "") {
+ return
+ }
+ val homeModel = gson.fromJson(s, object : TypeToken() {}.type)
+ TuyaHomeSdk.newHomeInstance(homeModel.homeId.toLong())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ val deviceList: List = bean.deviceList
+ Log.d(kTag, deviceList.toJson())
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ // do something
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
index 8aba9b2..84e947c 100644
--- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt
@@ -9,9 +9,13 @@
import com.casic.br.utils.GridItemDecoration
import com.casic.br.utils.LocaleConstant
import com.casic.br.view.LoginActivity
+import com.casic.br.view.MainActivity
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.youth.banner.Banner
import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
@@ -90,7 +94,39 @@
override fun initEvent() {
rightOperateView.setOnClickListener {
- requireContext().navigatePageTo()
+ if (rightOperateView.text == "退出") {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("退出确认")
+ .setMessage("退出当前账号,将不能同步数据")
+ .setNegativeButton("取消")
+ .setPositiveButton("确认退出")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, false)
+ requireContext().navigatePageTo()
+ PageNavigationManager.finishAllActivity()
+ }
+ })
+ .build().show()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
}
+
+ override fun onResume() {
+ val isLogin = SaveKeyValues.getValue(LocaleConstant.USER_IS_LOGIN, false) as Boolean
+ if (isLogin) {
+ rightOperateView.text = "退出"
+ } else {
+ rightOperateView.text = "登录"
+ }
+ super.onResume()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/model/HomeModel.java b/app/src/main/java/com/casic/br/model/HomeModel.java
new file mode 100644
index 0000000..638d420
--- /dev/null
+++ b/app/src/main/java/com/casic/br/model/HomeModel.java
@@ -0,0 +1,127 @@
+package com.casic.br.model;
+
+import java.util.List;
+
+public class HomeModel {
+
+ private boolean admin;
+ private String geoName;
+ private int homeId;
+ private int homeStatus;
+ private double lat;
+ private double lon;
+ private String name;
+ private int role;
+ private List rooms;
+
+ public boolean isAdmin() {
+ return admin;
+ }
+
+ public void setAdmin(boolean admin) {
+ this.admin = admin;
+ }
+
+ public String getGeoName() {
+ return geoName;
+ }
+
+ public void setGeoName(String geoName) {
+ this.geoName = geoName;
+ }
+
+ public int getHomeId() {
+ return homeId;
+ }
+
+ public void setHomeId(int homeId) {
+ this.homeId = homeId;
+ }
+
+ public int getHomeStatus() {
+ return homeStatus;
+ }
+
+ public void setHomeStatus(int homeStatus) {
+ this.homeStatus = homeStatus;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRole() {
+ return role;
+ }
+
+ public void setRole(int role) {
+ this.role = role;
+ }
+
+ public List getRooms() {
+ return rooms;
+ }
+
+ public void setRooms(List rooms) {
+ this.rooms = rooms;
+ }
+
+ public static class RoomsModel {
+ private int displayOrder;
+ private String name;
+ private int roomId;
+ private boolean sel;
+
+ public int getDisplayOrder() {
+ return displayOrder;
+ }
+
+ public void setDisplayOrder(int displayOrder) {
+ this.displayOrder = displayOrder;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(int roomId) {
+ this.roomId = roomId;
+ }
+
+ public boolean isSel() {
+ return sel;
+ }
+
+ public void setSel(boolean sel) {
+ this.sel = sel;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt
deleted file mode 100644
index da62e63..0000000
--- a/app/src/main/java/com/casic/br/utils/DialogManager.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.casic.br.utils;
-
-import android.app.Activity
-import android.view.WindowManager
-import com.pengxh.kt.lite.base.BaseSingleton
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
-
-class DialogManager private constructor(private val activity: Activity) {
-
- private lateinit var loadingDialog: QMUITipDialog
-
- companion object : BaseSingleton() {
- override val creator: (Activity) -> DialogManager
- get() = ::DialogManager
- }
-
- fun showLoadingDialog(message: String) {
- loadingDialog = QMUITipDialog
- .Builder(activity)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord(message)
- .create()
- if (!activity.isDestroyed) {
- try {
- loadingDialog.show()
- } catch (e: WindowManager.BadTokenException) {
- e.printStackTrace()
- }
- }
- }
-
- fun dismissLoadingDialog() {
- if (loadingDialog.isShowing) {
- loadingDialog.dismiss()
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
new file mode 100644
index 0000000..e04e327
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LoadingDialogHub.kt
@@ -0,0 +1,31 @@
+package com.casic.br.utils
+
+import android.app.Activity
+import android.view.WindowManager
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+
+object LoadingDialogHub {
+
+ private lateinit var loadingDialog: QMUITipDialog
+
+ fun show(activity: Activity, message: String) {
+ loadingDialog = QMUITipDialog
+ .Builder(activity)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord(message)
+ .create()
+ if (!activity.isDestroyed) {
+ try {
+ loadingDialog.show()
+ } catch (e: WindowManager.BadTokenException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ fun dismiss() {
+ if (loadingDialog.isShowing) {
+ loadingDialog.dismiss()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index 197a466..dd365ad 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -53,7 +53,8 @@
* String
* =============================================================================================
* */
- const val USER_DETAIL_MODEL = "userDetailModel"
+ const val USER_IS_LOGIN = "isLogin"
+ const val HOME_DETAIL_MODEL = "homeDetailModel"
const val SERVER_BASE_URL = "http://111.198.10.15:11304"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
index ce8f99e..210a258 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceActivity.kt
@@ -30,13 +30,12 @@
override fun initEvent() {
iotDevice.setOnClickListener {
- navigatePageTo()
- finish()
+ //IoT设备首先需要先配置网络
+ navigatePageTo()
}
notIotDevice.setOnClickListener {
navigatePageTo()
- finish()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
index d58aebd..ec99e90 100644
--- a/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddDeviceResultActivity.kt
@@ -4,6 +4,8 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.PageNavigationManager
import kotlinx.android.synthetic.main.activity_add_device_result.*
class AddDeviceResultActivity : KotlinBaseActivity() {
@@ -26,7 +28,8 @@
override fun initEvent() {
completeButton.setOnClickListener {
- finish()
+ navigatePageTo()
+ PageNavigationManager.finishAllActivity()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt
deleted file mode 100644
index 25ce475..0000000
--- a/app/src/main/java/com/casic/br/view/AddIoTDeviceActivity.kt
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.casic.br.view
-
-import android.view.View
-import android.widget.AdapterView
-import com.casic.br.R
-import com.casic.br.extensions.initLayoutImmersionBar
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import kotlinx.android.synthetic.main.activity_add_device_iot.*
-
-/**
- * 添加IoT设备
- * */
-class AddIoTDeviceActivity : KotlinBaseActivity() {
-
- override fun initLayoutView(): Int = R.layout.activity_add_device_iot
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- ImmersionBar.with(this).statusBarDarkFont(true).init()
- initLayoutImmersionBar(rootView)
- leftBackView.setOnClickListener { finish() }
- }
-
- override fun initData() {
- //默认选择WIFI快连
- connectTypeSpinner.setSelection(0)
- }
-
- override fun initEvent() {
- connectTypeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?, view: View?, position: Int, id: Long
- ) {
-
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
- }
-
- nextStepButton.setOnClickListener {
- if (connectTypeSpinner.selectedItemPosition == 0) {
- navigatePageTo()
- } else {
- navigatePageTo()
- }
- finish()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt
index 9de6790..54975e3 100644
--- a/app/src/main/java/com/casic/br/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt
@@ -1,11 +1,26 @@
package com.casic.br.view
+import android.content.Context
import com.casic.br.R
+import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
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.utils.PageNavigationManager
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.android.user.api.ILoginCallback
+import com.tuya.smart.android.user.bean.User
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import kotlinx.android.synthetic.main.activity_login.*
+import kotlinx.android.synthetic.main.activity_login.userPhoneView
+import kotlinx.android.synthetic.main.activity_register.*
class LoginActivity : KotlinBaseActivity() {
+ private val context: Context = this@LoginActivity
+
override fun initLayoutView(): Int = R.layout.activity_login
override fun setupTopBarLayout() {
@@ -21,6 +36,38 @@
}
override fun initEvent() {
+ registerView.setOnClickListener {
+ navigatePageTo()
+ }
+ loginButton.setOnClickListener {
+ val userPhone = userPhoneView.text.toString()
+ if (userPhone.isBlank()) {
+ "请输入手机号".show(this)
+ return@setOnClickListener
+ }
+ val userPassword = passwordView.text.toString()
+ if (userPassword.isBlank()) {
+ "请输入密码".show(this)
+ return@setOnClickListener
+ }
+
+ LoadingDialogHub.show(this, "登录中,请稍后")
+ TuyaHomeSdk.getUserInstance()
+ .loginWithPhonePassword("86", userPhone, userPassword, object : ILoginCallback {
+ override fun onSuccess(user: User?) {
+ SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, true)
+ LoadingDialogHub.dismiss()
+ navigatePageTo