diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + rootView.setPadding(0, statusBarHeight, 0, 0) + rootView.requestLayout() +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml new file mode 100644 index 0000000..3561f6e --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml new file mode 100644 index 0000000..3561f6e --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml new file mode 100644 index 0000000..5d1d1f4 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml new file mode 100644 index 0000000..3561f6e --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml new file mode 100644 index 0000000..5d1d1f4 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml deleted file mode 100644 index a93ef6c..0000000 --- a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml new file mode 100644 index 0000000..3561f6e --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml new file mode 100644 index 0000000..5d1d1f4 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml deleted file mode 100644 index a93ef6c..0000000 --- a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/button_common_selector.xml b/app/src/main/res/drawable/button_common_selector.xml new file mode 100644 index 0000000..d806fcf --- /dev/null +++ b/app/src/main/res/drawable/button_common_selector.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml new file mode 100644 index 0000000..3561f6e --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml new file mode 100644 index 0000000..5d1d1f4 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml deleted file mode 100644 index a93ef6c..0000000 --- a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/button_common_selector.xml b/app/src/main/res/drawable/button_common_selector.xml new file mode 100644 index 0000000..d806fcf --- /dev/null +++ b/app/src/main/res/drawable/button_common_selector.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml index 5875998..f8e7781 100644 --- a/app/src/main/res/drawable/button_main_selector.xml +++ b/app/src/main/res/drawable/button_main_selector.xml @@ -3,16 +3,16 @@ - + - + - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml new file mode 100644 index 0000000..3561f6e --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml new file mode 100644 index 0000000..5d1d1f4 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml deleted file mode 100644 index a93ef6c..0000000 --- a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/button_common_selector.xml b/app/src/main/res/drawable/button_common_selector.xml new file mode 100644 index 0000000..d806fcf --- /dev/null +++ b/app/src/main/res/drawable/button_common_selector.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml index 5875998..f8e7781 100644 --- a/app/src/main/res/drawable/button_main_selector.xml +++ b/app/src/main/res/drawable/button_main_selector.xml @@ -3,16 +3,16 @@ - + - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_white_selector.xml b/app/src/main/res/drawable/button_white_selector.xml index 4dd3c0b..c32a27e 100644 --- a/app/src/main/res/drawable/button_white_selector.xml +++ b/app/src/main/res/drawable/button_white_selector.xml @@ -3,14 +3,14 @@ - + - + diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml new file mode 100644 index 0000000..3561f6e --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml new file mode 100644 index 0000000..5d1d1f4 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml deleted file mode 100644 index a93ef6c..0000000 --- a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/button_common_selector.xml b/app/src/main/res/drawable/button_common_selector.xml new file mode 100644 index 0000000..d806fcf --- /dev/null +++ b/app/src/main/res/drawable/button_common_selector.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml index 5875998..f8e7781 100644 --- a/app/src/main/res/drawable/button_main_selector.xml +++ b/app/src/main/res/drawable/button_main_selector.xml @@ -3,16 +3,16 @@ - + - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_white_selector.xml b/app/src/main/res/drawable/button_white_selector.xml index 4dd3c0b..c32a27e 100644 --- a/app/src/main/res/drawable/button_white_selector.xml +++ b/app/src/main/res/drawable/button_white_selector.xml @@ -3,14 +3,14 @@ - + - + diff --git a/app/src/main/res/drawable/ic_add_device.xml b/app/src/main/res/drawable/ic_add_device.xml index 14c8ec9..e228615 100644 --- a/app/src/main/res/drawable/ic_add_device.xml +++ b/app/src/main/res/drawable/ic_add_device.xml @@ -1,9 +1,9 @@ + android:fillColor="@color/mainThemeColor" + android:pathData="M512,42.67c259.2,0 469.33,210.13 469.33,469.33s-210.13,469.33 -469.33,469.33S42.67,771.2 42.67,512 252.8,42.67 512,42.67zM512,106.67C288.15,106.67 106.67,288.15 106.67,512s181.48,405.33 405.33,405.33 405.33,-181.48 405.33,-405.33S735.85,106.67 512,106.67zM546.13,320c4.69,0 8.53,3.84 8.53,8.53L554.67,469.33h140.8c4.69,0 8.53,3.84 8.53,8.53v46.93a8.53,8.53 0,0 1,-8.53 8.53L554.67,533.33v140.8a8.53,8.53 0,0 1,-8.53 8.53h-46.93a8.53,8.53 0,0 1,-8.53 -8.53L490.67,533.33h-140.8a8.53,8.53 0,0 1,-8.53 -8.53v-46.93c0,-4.69 3.84,-8.53 8.53,-8.53L490.67,469.33v-140.8c0,-4.69 3.84,-8.53 8.53,-8.53h46.93z" /> diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml new file mode 100644 index 0000000..3561f6e --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml new file mode 100644 index 0000000..5d1d1f4 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml deleted file mode 100644 index a93ef6c..0000000 --- a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/button_common_selector.xml b/app/src/main/res/drawable/button_common_selector.xml new file mode 100644 index 0000000..d806fcf --- /dev/null +++ b/app/src/main/res/drawable/button_common_selector.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml index 5875998..f8e7781 100644 --- a/app/src/main/res/drawable/button_main_selector.xml +++ b/app/src/main/res/drawable/button_main_selector.xml @@ -3,16 +3,16 @@ - + - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_white_selector.xml b/app/src/main/res/drawable/button_white_selector.xml index 4dd3c0b..c32a27e 100644 --- a/app/src/main/res/drawable/button_white_selector.xml +++ b/app/src/main/res/drawable/button_white_selector.xml @@ -3,14 +3,14 @@ - + - + diff --git a/app/src/main/res/drawable/ic_add_device.xml b/app/src/main/res/drawable/ic_add_device.xml index 14c8ec9..e228615 100644 --- a/app/src/main/res/drawable/ic_add_device.xml +++ b/app/src/main/res/drawable/ic_add_device.xml @@ -1,9 +1,9 @@ + android:fillColor="@color/mainThemeColor" + android:pathData="M512,42.67c259.2,0 469.33,210.13 469.33,469.33s-210.13,469.33 -469.33,469.33S42.67,771.2 42.67,512 252.8,42.67 512,42.67zM512,106.67C288.15,106.67 106.67,288.15 106.67,512s181.48,405.33 405.33,405.33 405.33,-181.48 405.33,-405.33S735.85,106.67 512,106.67zM546.13,320c4.69,0 8.53,3.84 8.53,8.53L554.67,469.33h140.8c4.69,0 8.53,3.84 8.53,8.53v46.93a8.53,8.53 0,0 1,-8.53 8.53L554.67,533.33v140.8a8.53,8.53 0,0 1,-8.53 8.53h-46.93a8.53,8.53 0,0 1,-8.53 -8.53L490.67,533.33h-140.8a8.53,8.53 0,0 1,-8.53 -8.53v-46.93c0,-4.69 3.84,-8.53 8.53,-8.53L490.67,469.33v-140.8c0,-4.69 3.84,-8.53 8.53,-8.53h46.93z" /> diff --git a/app/src/main/res/drawable/ic_camera.xml b/app/src/main/res/drawable/ic_camera.xml deleted file mode 100644 index b612ce9..0000000 --- a/app/src/main/res/drawable/ic_camera.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml new file mode 100644 index 0000000..3561f6e --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml new file mode 100644 index 0000000..5d1d1f4 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml deleted file mode 100644 index a93ef6c..0000000 --- a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/button_common_selector.xml b/app/src/main/res/drawable/button_common_selector.xml new file mode 100644 index 0000000..d806fcf --- /dev/null +++ b/app/src/main/res/drawable/button_common_selector.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml index 5875998..f8e7781 100644 --- a/app/src/main/res/drawable/button_main_selector.xml +++ b/app/src/main/res/drawable/button_main_selector.xml @@ -3,16 +3,16 @@ - + - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_white_selector.xml b/app/src/main/res/drawable/button_white_selector.xml index 4dd3c0b..c32a27e 100644 --- a/app/src/main/res/drawable/button_white_selector.xml +++ b/app/src/main/res/drawable/button_white_selector.xml @@ -3,14 +3,14 @@ - + - + diff --git a/app/src/main/res/drawable/ic_add_device.xml b/app/src/main/res/drawable/ic_add_device.xml index 14c8ec9..e228615 100644 --- a/app/src/main/res/drawable/ic_add_device.xml +++ b/app/src/main/res/drawable/ic_add_device.xml @@ -1,9 +1,9 @@ + android:fillColor="@color/mainThemeColor" + android:pathData="M512,42.67c259.2,0 469.33,210.13 469.33,469.33s-210.13,469.33 -469.33,469.33S42.67,771.2 42.67,512 252.8,42.67 512,42.67zM512,106.67C288.15,106.67 106.67,288.15 106.67,512s181.48,405.33 405.33,405.33 405.33,-181.48 405.33,-405.33S735.85,106.67 512,106.67zM546.13,320c4.69,0 8.53,3.84 8.53,8.53L554.67,469.33h140.8c4.69,0 8.53,3.84 8.53,8.53v46.93a8.53,8.53 0,0 1,-8.53 8.53L554.67,533.33v140.8a8.53,8.53 0,0 1,-8.53 8.53h-46.93a8.53,8.53 0,0 1,-8.53 -8.53L490.67,533.33h-140.8a8.53,8.53 0,0 1,-8.53 -8.53v-46.93c0,-4.69 3.84,-8.53 8.53,-8.53L490.67,469.33v-140.8c0,-4.69 3.84,-8.53 8.53,-8.53h46.93z" /> diff --git a/app/src/main/res/drawable/ic_camera.xml b/app/src/main/res/drawable/ic_camera.xml deleted file mode 100644 index b612ce9..0000000 --- a/app/src/main/res/drawable/ic_camera.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9..0000000 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml new file mode 100644 index 0000000..3561f6e --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml new file mode 100644 index 0000000..5d1d1f4 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml deleted file mode 100644 index a93ef6c..0000000 --- a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/button_common_selector.xml b/app/src/main/res/drawable/button_common_selector.xml new file mode 100644 index 0000000..d806fcf --- /dev/null +++ b/app/src/main/res/drawable/button_common_selector.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml index 5875998..f8e7781 100644 --- a/app/src/main/res/drawable/button_main_selector.xml +++ b/app/src/main/res/drawable/button_main_selector.xml @@ -3,16 +3,16 @@ - + - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_white_selector.xml b/app/src/main/res/drawable/button_white_selector.xml index 4dd3c0b..c32a27e 100644 --- a/app/src/main/res/drawable/button_white_selector.xml +++ b/app/src/main/res/drawable/button_white_selector.xml @@ -3,14 +3,14 @@ - + - + diff --git a/app/src/main/res/drawable/ic_add_device.xml b/app/src/main/res/drawable/ic_add_device.xml index 14c8ec9..e228615 100644 --- a/app/src/main/res/drawable/ic_add_device.xml +++ b/app/src/main/res/drawable/ic_add_device.xml @@ -1,9 +1,9 @@ + android:fillColor="@color/mainThemeColor" + android:pathData="M512,42.67c259.2,0 469.33,210.13 469.33,469.33s-210.13,469.33 -469.33,469.33S42.67,771.2 42.67,512 252.8,42.67 512,42.67zM512,106.67C288.15,106.67 106.67,288.15 106.67,512s181.48,405.33 405.33,405.33 405.33,-181.48 405.33,-405.33S735.85,106.67 512,106.67zM546.13,320c4.69,0 8.53,3.84 8.53,8.53L554.67,469.33h140.8c4.69,0 8.53,3.84 8.53,8.53v46.93a8.53,8.53 0,0 1,-8.53 8.53L554.67,533.33v140.8a8.53,8.53 0,0 1,-8.53 8.53h-46.93a8.53,8.53 0,0 1,-8.53 -8.53L490.67,533.33h-140.8a8.53,8.53 0,0 1,-8.53 -8.53v-46.93c0,-4.69 3.84,-8.53 8.53,-8.53L490.67,469.33v-140.8c0,-4.69 3.84,-8.53 8.53,-8.53h46.93z" /> diff --git a/app/src/main/res/drawable/ic_camera.xml b/app/src/main/res/drawable/ic_camera.xml deleted file mode 100644 index b612ce9..0000000 --- a/app/src/main/res/drawable/ic_camera.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9..0000000 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_location.xml b/app/src/main/res/drawable/ic_location.xml deleted file mode 100644 index 52e376f..0000000 --- a/app/src/main/res/drawable/ic_location.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml new file mode 100644 index 0000000..3561f6e --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml new file mode 100644 index 0000000..5d1d1f4 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml deleted file mode 100644 index a93ef6c..0000000 --- a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/button_common_selector.xml b/app/src/main/res/drawable/button_common_selector.xml new file mode 100644 index 0000000..d806fcf --- /dev/null +++ b/app/src/main/res/drawable/button_common_selector.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml index 5875998..f8e7781 100644 --- a/app/src/main/res/drawable/button_main_selector.xml +++ b/app/src/main/res/drawable/button_main_selector.xml @@ -3,16 +3,16 @@ - + - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_white_selector.xml b/app/src/main/res/drawable/button_white_selector.xml index 4dd3c0b..c32a27e 100644 --- a/app/src/main/res/drawable/button_white_selector.xml +++ b/app/src/main/res/drawable/button_white_selector.xml @@ -3,14 +3,14 @@ - + - + diff --git a/app/src/main/res/drawable/ic_add_device.xml b/app/src/main/res/drawable/ic_add_device.xml index 14c8ec9..e228615 100644 --- a/app/src/main/res/drawable/ic_add_device.xml +++ b/app/src/main/res/drawable/ic_add_device.xml @@ -1,9 +1,9 @@ + android:fillColor="@color/mainThemeColor" + android:pathData="M512,42.67c259.2,0 469.33,210.13 469.33,469.33s-210.13,469.33 -469.33,469.33S42.67,771.2 42.67,512 252.8,42.67 512,42.67zM512,106.67C288.15,106.67 106.67,288.15 106.67,512s181.48,405.33 405.33,405.33 405.33,-181.48 405.33,-405.33S735.85,106.67 512,106.67zM546.13,320c4.69,0 8.53,3.84 8.53,8.53L554.67,469.33h140.8c4.69,0 8.53,3.84 8.53,8.53v46.93a8.53,8.53 0,0 1,-8.53 8.53L554.67,533.33v140.8a8.53,8.53 0,0 1,-8.53 8.53h-46.93a8.53,8.53 0,0 1,-8.53 -8.53L490.67,533.33h-140.8a8.53,8.53 0,0 1,-8.53 -8.53v-46.93c0,-4.69 3.84,-8.53 8.53,-8.53L490.67,469.33v-140.8c0,-4.69 3.84,-8.53 8.53,-8.53h46.93z" /> diff --git a/app/src/main/res/drawable/ic_camera.xml b/app/src/main/res/drawable/ic_camera.xml deleted file mode 100644 index b612ce9..0000000 --- a/app/src/main/res/drawable/ic_camera.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9..0000000 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_location.xml b/app/src/main/res/drawable/ic_location.xml deleted file mode 100644 index 52e376f..0000000 --- a/app/src/main/res/drawable/ic_location.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_qq.xml b/app/src/main/res/drawable/ic_qq.xml new file mode 100644 index 0000000..9b330f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_qq.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml new file mode 100644 index 0000000..3561f6e --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml new file mode 100644 index 0000000..5d1d1f4 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml deleted file mode 100644 index a93ef6c..0000000 --- a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/button_common_selector.xml b/app/src/main/res/drawable/button_common_selector.xml new file mode 100644 index 0000000..d806fcf --- /dev/null +++ b/app/src/main/res/drawable/button_common_selector.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml index 5875998..f8e7781 100644 --- a/app/src/main/res/drawable/button_main_selector.xml +++ b/app/src/main/res/drawable/button_main_selector.xml @@ -3,16 +3,16 @@ - + - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_white_selector.xml b/app/src/main/res/drawable/button_white_selector.xml index 4dd3c0b..c32a27e 100644 --- a/app/src/main/res/drawable/button_white_selector.xml +++ b/app/src/main/res/drawable/button_white_selector.xml @@ -3,14 +3,14 @@ - + - + diff --git a/app/src/main/res/drawable/ic_add_device.xml b/app/src/main/res/drawable/ic_add_device.xml index 14c8ec9..e228615 100644 --- a/app/src/main/res/drawable/ic_add_device.xml +++ b/app/src/main/res/drawable/ic_add_device.xml @@ -1,9 +1,9 @@ + android:fillColor="@color/mainThemeColor" + android:pathData="M512,42.67c259.2,0 469.33,210.13 469.33,469.33s-210.13,469.33 -469.33,469.33S42.67,771.2 42.67,512 252.8,42.67 512,42.67zM512,106.67C288.15,106.67 106.67,288.15 106.67,512s181.48,405.33 405.33,405.33 405.33,-181.48 405.33,-405.33S735.85,106.67 512,106.67zM546.13,320c4.69,0 8.53,3.84 8.53,8.53L554.67,469.33h140.8c4.69,0 8.53,3.84 8.53,8.53v46.93a8.53,8.53 0,0 1,-8.53 8.53L554.67,533.33v140.8a8.53,8.53 0,0 1,-8.53 8.53h-46.93a8.53,8.53 0,0 1,-8.53 -8.53L490.67,533.33h-140.8a8.53,8.53 0,0 1,-8.53 -8.53v-46.93c0,-4.69 3.84,-8.53 8.53,-8.53L490.67,469.33v-140.8c0,-4.69 3.84,-8.53 8.53,-8.53h46.93z" /> diff --git a/app/src/main/res/drawable/ic_camera.xml b/app/src/main/res/drawable/ic_camera.xml deleted file mode 100644 index b612ce9..0000000 --- a/app/src/main/res/drawable/ic_camera.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9..0000000 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_location.xml b/app/src/main/res/drawable/ic_location.xml deleted file mode 100644 index 52e376f..0000000 --- a/app/src/main/res/drawable/ic_location.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_qq.xml b/app/src/main/res/drawable/ic_qq.xml new file mode 100644 index 0000000..9b330f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_qq.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_storage.xml b/app/src/main/res/drawable/ic_storage.xml deleted file mode 100644 index 898c1cf..0000000 --- a/app/src/main/res/drawable/ic_storage.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml new file mode 100644 index 0000000..3561f6e --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml new file mode 100644 index 0000000..5d1d1f4 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml deleted file mode 100644 index a93ef6c..0000000 --- a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/button_common_selector.xml b/app/src/main/res/drawable/button_common_selector.xml new file mode 100644 index 0000000..d806fcf --- /dev/null +++ b/app/src/main/res/drawable/button_common_selector.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml index 5875998..f8e7781 100644 --- a/app/src/main/res/drawable/button_main_selector.xml +++ b/app/src/main/res/drawable/button_main_selector.xml @@ -3,16 +3,16 @@ - + - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_white_selector.xml b/app/src/main/res/drawable/button_white_selector.xml index 4dd3c0b..c32a27e 100644 --- a/app/src/main/res/drawable/button_white_selector.xml +++ b/app/src/main/res/drawable/button_white_selector.xml @@ -3,14 +3,14 @@ - + - + diff --git a/app/src/main/res/drawable/ic_add_device.xml b/app/src/main/res/drawable/ic_add_device.xml index 14c8ec9..e228615 100644 --- a/app/src/main/res/drawable/ic_add_device.xml +++ b/app/src/main/res/drawable/ic_add_device.xml @@ -1,9 +1,9 @@ + android:fillColor="@color/mainThemeColor" + android:pathData="M512,42.67c259.2,0 469.33,210.13 469.33,469.33s-210.13,469.33 -469.33,469.33S42.67,771.2 42.67,512 252.8,42.67 512,42.67zM512,106.67C288.15,106.67 106.67,288.15 106.67,512s181.48,405.33 405.33,405.33 405.33,-181.48 405.33,-405.33S735.85,106.67 512,106.67zM546.13,320c4.69,0 8.53,3.84 8.53,8.53L554.67,469.33h140.8c4.69,0 8.53,3.84 8.53,8.53v46.93a8.53,8.53 0,0 1,-8.53 8.53L554.67,533.33v140.8a8.53,8.53 0,0 1,-8.53 8.53h-46.93a8.53,8.53 0,0 1,-8.53 -8.53L490.67,533.33h-140.8a8.53,8.53 0,0 1,-8.53 -8.53v-46.93c0,-4.69 3.84,-8.53 8.53,-8.53L490.67,469.33v-140.8c0,-4.69 3.84,-8.53 8.53,-8.53h46.93z" /> diff --git a/app/src/main/res/drawable/ic_camera.xml b/app/src/main/res/drawable/ic_camera.xml deleted file mode 100644 index b612ce9..0000000 --- a/app/src/main/res/drawable/ic_camera.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9..0000000 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_location.xml b/app/src/main/res/drawable/ic_location.xml deleted file mode 100644 index 52e376f..0000000 --- a/app/src/main/res/drawable/ic_location.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_qq.xml b/app/src/main/res/drawable/ic_qq.xml new file mode 100644 index 0000000..9b330f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_qq.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_storage.xml b/app/src/main/res/drawable/ic_storage.xml deleted file mode 100644 index 898c1cf..0000000 --- a/app/src/main/res/drawable/ic_storage.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_wechat.xml b/app/src/main/res/drawable/ic_wechat.xml new file mode 100644 index 0000000..5cc61ac --- /dev/null +++ b/app/src/main/res/drawable/ic_wechat.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml new file mode 100644 index 0000000..3561f6e --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml new file mode 100644 index 0000000..5d1d1f4 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml deleted file mode 100644 index a93ef6c..0000000 --- a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/button_common_selector.xml b/app/src/main/res/drawable/button_common_selector.xml new file mode 100644 index 0000000..d806fcf --- /dev/null +++ b/app/src/main/res/drawable/button_common_selector.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml index 5875998..f8e7781 100644 --- a/app/src/main/res/drawable/button_main_selector.xml +++ b/app/src/main/res/drawable/button_main_selector.xml @@ -3,16 +3,16 @@ - + - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_white_selector.xml b/app/src/main/res/drawable/button_white_selector.xml index 4dd3c0b..c32a27e 100644 --- a/app/src/main/res/drawable/button_white_selector.xml +++ b/app/src/main/res/drawable/button_white_selector.xml @@ -3,14 +3,14 @@ - + - + diff --git a/app/src/main/res/drawable/ic_add_device.xml b/app/src/main/res/drawable/ic_add_device.xml index 14c8ec9..e228615 100644 --- a/app/src/main/res/drawable/ic_add_device.xml +++ b/app/src/main/res/drawable/ic_add_device.xml @@ -1,9 +1,9 @@ + android:fillColor="@color/mainThemeColor" + android:pathData="M512,42.67c259.2,0 469.33,210.13 469.33,469.33s-210.13,469.33 -469.33,469.33S42.67,771.2 42.67,512 252.8,42.67 512,42.67zM512,106.67C288.15,106.67 106.67,288.15 106.67,512s181.48,405.33 405.33,405.33 405.33,-181.48 405.33,-405.33S735.85,106.67 512,106.67zM546.13,320c4.69,0 8.53,3.84 8.53,8.53L554.67,469.33h140.8c4.69,0 8.53,3.84 8.53,8.53v46.93a8.53,8.53 0,0 1,-8.53 8.53L554.67,533.33v140.8a8.53,8.53 0,0 1,-8.53 8.53h-46.93a8.53,8.53 0,0 1,-8.53 -8.53L490.67,533.33h-140.8a8.53,8.53 0,0 1,-8.53 -8.53v-46.93c0,-4.69 3.84,-8.53 8.53,-8.53L490.67,469.33v-140.8c0,-4.69 3.84,-8.53 8.53,-8.53h46.93z" /> diff --git a/app/src/main/res/drawable/ic_camera.xml b/app/src/main/res/drawable/ic_camera.xml deleted file mode 100644 index b612ce9..0000000 --- a/app/src/main/res/drawable/ic_camera.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9..0000000 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_location.xml b/app/src/main/res/drawable/ic_location.xml deleted file mode 100644 index 52e376f..0000000 --- a/app/src/main/res/drawable/ic_location.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_qq.xml b/app/src/main/res/drawable/ic_qq.xml new file mode 100644 index 0000000..9b330f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_qq.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_storage.xml b/app/src/main/res/drawable/ic_storage.xml deleted file mode 100644 index 898c1cf..0000000 --- a/app/src/main/res/drawable/ic_storage.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_wechat.xml b/app/src/main/res/drawable/ic_wechat.xml new file mode 100644 index 0000000..5cc61ac --- /dev/null +++ b/app/src/main/res/drawable/ic_wechat.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_zfb.xml b/app/src/main/res/drawable/ic_zfb.xml new file mode 100644 index 0000000..71fa53d --- /dev/null +++ b/app/src/main/res/drawable/ic_zfb.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml new file mode 100644 index 0000000..3561f6e --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml new file mode 100644 index 0000000..5d1d1f4 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml deleted file mode 100644 index a93ef6c..0000000 --- a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/button_common_selector.xml b/app/src/main/res/drawable/button_common_selector.xml new file mode 100644 index 0000000..d806fcf --- /dev/null +++ b/app/src/main/res/drawable/button_common_selector.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml index 5875998..f8e7781 100644 --- a/app/src/main/res/drawable/button_main_selector.xml +++ b/app/src/main/res/drawable/button_main_selector.xml @@ -3,16 +3,16 @@ - + - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_white_selector.xml b/app/src/main/res/drawable/button_white_selector.xml index 4dd3c0b..c32a27e 100644 --- a/app/src/main/res/drawable/button_white_selector.xml +++ b/app/src/main/res/drawable/button_white_selector.xml @@ -3,14 +3,14 @@ - + - + diff --git a/app/src/main/res/drawable/ic_add_device.xml b/app/src/main/res/drawable/ic_add_device.xml index 14c8ec9..e228615 100644 --- a/app/src/main/res/drawable/ic_add_device.xml +++ b/app/src/main/res/drawable/ic_add_device.xml @@ -1,9 +1,9 @@ + android:fillColor="@color/mainThemeColor" + android:pathData="M512,42.67c259.2,0 469.33,210.13 469.33,469.33s-210.13,469.33 -469.33,469.33S42.67,771.2 42.67,512 252.8,42.67 512,42.67zM512,106.67C288.15,106.67 106.67,288.15 106.67,512s181.48,405.33 405.33,405.33 405.33,-181.48 405.33,-405.33S735.85,106.67 512,106.67zM546.13,320c4.69,0 8.53,3.84 8.53,8.53L554.67,469.33h140.8c4.69,0 8.53,3.84 8.53,8.53v46.93a8.53,8.53 0,0 1,-8.53 8.53L554.67,533.33v140.8a8.53,8.53 0,0 1,-8.53 8.53h-46.93a8.53,8.53 0,0 1,-8.53 -8.53L490.67,533.33h-140.8a8.53,8.53 0,0 1,-8.53 -8.53v-46.93c0,-4.69 3.84,-8.53 8.53,-8.53L490.67,469.33v-140.8c0,-4.69 3.84,-8.53 8.53,-8.53h46.93z" /> diff --git a/app/src/main/res/drawable/ic_camera.xml b/app/src/main/res/drawable/ic_camera.xml deleted file mode 100644 index b612ce9..0000000 --- a/app/src/main/res/drawable/ic_camera.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9..0000000 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_location.xml b/app/src/main/res/drawable/ic_location.xml deleted file mode 100644 index 52e376f..0000000 --- a/app/src/main/res/drawable/ic_location.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_qq.xml b/app/src/main/res/drawable/ic_qq.xml new file mode 100644 index 0000000..9b330f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_qq.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_storage.xml b/app/src/main/res/drawable/ic_storage.xml deleted file mode 100644 index 898c1cf..0000000 --- a/app/src/main/res/drawable/ic_storage.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_wechat.xml b/app/src/main/res/drawable/ic_wechat.xml new file mode 100644 index 0000000..5cc61ac --- /dev/null +++ b/app/src/main/res/drawable/ic_wechat.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_zfb.xml b/app/src/main/res/drawable/ic_zfb.xml new file mode 100644 index 0000000..71fa53d --- /dev/null +++ b/app/src/main/res/drawable/ic_zfb.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_bg_solid_layout_white_radius_10.xml b/app/src/main/res/drawable/selector_bg_solid_layout_white_radius_10.xml new file mode 100644 index 0000000..b18e5c5 --- /dev/null +++ b/app/src/main/res/drawable/selector_bg_solid_layout_white_radius_10.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7cc948d..163aeb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ //Google官方授权框架 implementation 'pub.devrel:easypermissions:3.0.0' //沉浸式状态栏。基础依赖包,必须要依赖 - implementation 'com.gyf.immersionbar:immersionbar:3.0.0' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' //空白页 implementation 'com.qmuiteam:qmui:2.0.0-alpha10' implementation 'com.qmuiteam:arch:0.3.1' diff --git a/app/libs/lite-release.aar b/app/libs/lite-release.aar index bae3254..9f8c814 100644 --- a/app/libs/lite-release.aar +++ b/app/libs/lite-release.aar Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c387fc..defbd7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" + android:resizeableActivity="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" @@ -37,10 +38,20 @@ + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt index 48321ae..58a92c8 100644 --- a/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/AddedDeviceAdapter.kt @@ -1,40 +1,89 @@ package com.casic.br.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R import com.casic.br.model.AddedDeviceModel +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.obtainScreenWidth +@SuppressLint("NotifyDataSetChanged") class AddedDeviceAdapter( - private val context: Context, - private val dataRows: MutableList + private val context: Context, private val spacing: Float ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val screenWidth = context.obtainScreenWidth() + private var dataRows: MutableList = ArrayList() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_added_device_rv_l, parent, false) - ) + fun setupDevice(devices: MutableList) { + dataRows = devices + notifyDataSetChanged() + } - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - holder.deviceNameView.text = dataRows[position].deviceName - holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime - holder.itemView.setOnClickListener { - clickListener?.onItemClick(position) + fun deleteDevice(position: Int) { + if (dataRows.isNotEmpty()) { + dataRows.removeAt(position) + notifyDataSetChanged() } } - override fun getItemCount(): Int = dataRows.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_added_device_rv_g, parent, false) + ) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.deviceNameView.text = "添加设备" + holder.moreOperateButton.visibility = View.GONE + + holder.imageView.setImageResource(R.drawable.ic_add_device) + if (holder.imageView.layoutParams is ViewGroup.MarginLayoutParams) { + val params = holder.imageView.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(0, 3f.dp2px(context), 0, 0) + holder.imageView.requestLayout() + } + holder.imageView.layoutParams.width = 40f.dp2px(context) + holder.imageView.layoutParams.height = 40f.dp2px(context) + + holder.tempLayout.visibility = View.GONE + holder.imageView.setOnClickListener { //添加图片 + clickListener?.onAddDeviceClick() + } + } else { + holder.deviceNameView.text = dataRows[position].deviceName + holder.deviceModelView.text = dataRows[position].deviceModel + holder.deviceUsedTimeView.text = dataRows[position].deviceUsedTime + holder.rootView.setOnClickListener { + clickListener?.onItemClick(position) + } + // 长按监听 + holder.moreOperateButton.setOnClickListener { + clickListener?.onButtonClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + 1 private var clickListener: OnItemClickListener? = null interface OnItemClickListener { + fun onAddDeviceClick() + fun onItemClick(position: Int) + + fun onButtonClick(position: Int) } fun setOnItemClickListener(clickListener: OnItemClickListener?) { @@ -42,8 +91,12 @@ } class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView: ImageView = itemView.findViewById(R.id.imageView) + val rootView: LinearLayout = itemView.findViewById(R.id.rootView) val deviceNameView: TextView = itemView.findViewById(R.id.deviceNameView) + val moreOperateButton: Button = itemView.findViewById(R.id.moreOperateButton) + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val tempLayout: LinearLayout = itemView.findViewById(R.id.tempLayout) + val deviceModelView: TextView = itemView.findViewById(R.id.deviceModelView) val deviceUsedTimeView: TextView = itemView.findViewById(R.id.deviceUsedTimeView) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/Context.kt b/app/src/main/java/com/casic/br/extensions/Context.kt new file mode 100644 index 0000000..5866614 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/Context.kt @@ -0,0 +1,12 @@ +package com.casic.br.extensions + +import android.content.Context +import android.view.ViewGroup +import com.qmuiteam.qmui.util.QMUIDisplayHelper + +fun Context.initLayoutImmersionBar(rootView: ViewGroup) { + //根据不同设备状态栏高度设置"跳过"按钮的Margin值 + val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) + 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 9857505..c52f538 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -1,8 +1,9 @@ package com.casic.br.fragment -import androidx.recyclerview.widget.DividerItemDecoration +import android.graphics.Typeface import com.casic.br.R import com.casic.br.adapter.AddedDeviceAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.AddedDeviceModel import com.casic.br.view.AllDeviceActivity import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -17,7 +18,9 @@ override fun initLayoutView(): Int = R.layout.fragment_device override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "设备" + leftTitleView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) } override fun initData() { @@ -25,33 +28,40 @@ val deviceModels = ArrayList() for (i in 0..2) { val model = AddedDeviceModel() - model.deviceName = "*****热水器" + model.deviceName = "万家乐热水器" + model.deviceModel = "D40-DM1" model.deviceUsedTime = "已使用${Random().nextInt(12)}个月${Random().nextInt(31)}天" deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) - ) + val addedDeviceAdapter = AddedDeviceAdapter(requireContext(), 13f) + addedDeviceAdapter.setupDevice(deviceModels) deviceRecyclerView.adapter = addedDeviceAdapter addedDeviceAdapter.setOnItemClickListener(object : AddedDeviceAdapter.OnItemClickListener { + override fun onAddDeviceClick() { + + } + override fun onItemClick(position: Int) { //TODO 需要根据设备类型显示不同的页面 val deviceModel = deviceModels[position] deviceModel.deviceName.show(requireContext()) } + + override fun onButtonClick(position: Int) { + + } }) } + override fun observeRequestState() { + + } + override fun initEvent() { showAllDeviceLayout.setOnClickListener { requireContext().navigatePageTo() } - - addDeviceLayout.setOnClickListener { - - } } } \ 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 07dfe01..8aba9b2 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -4,10 +4,13 @@ import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter import com.casic.br.adapter.HomeGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.model.BannerImageModel import com.casic.br.utils.GridItemDecoration import com.casic.br.utils.LocaleConstant +import com.casic.br.view.LoginActivity import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter @@ -15,7 +18,6 @@ import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.AlphaPageTransformer import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_recommend.* import java.util.* class HomePageFragment : KotlinBaseFragment() { @@ -23,7 +25,7 @@ override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -82,7 +84,13 @@ }) } - override fun initEvent() { + override fun observeRequestState() { } + + override fun initEvent() { + rightOperateView.setOnClickListener { + requireContext().navigatePageTo() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt index 16fde61..90dcfcf 100644 --- a/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MessagePageFragment.kt @@ -5,13 +5,13 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.br.R import com.casic.br.adapter.MessageListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.extensions.showEmptyPage import com.casic.br.model.LocaleMessageBean import com.casic.br.utils.DataBaseManager import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.fragment_message.* -import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_empty_view.* import kotlinx.android.synthetic.main.include_main_title.* @@ -28,6 +28,7 @@ override fun initLayoutView(): Int = R.layout.fragment_message override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "消息" } @@ -35,6 +36,10 @@ weakReferenceHandler = WeakReferenceHandler(callback) } + override fun observeRequestState() { + + } + override fun initEvent() { messageLayout.setOnRefreshListener { isRefresh = true @@ -96,7 +101,7 @@ } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - settingsRecyclerView.addItemDecoration( + messageRecyclerView.addItemDecoration( DividerItemDecoration( requireContext(), DividerItemDecoration.VERTICAL ) diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index b3f222a..afc5de7 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -6,6 +6,7 @@ import com.casic.br.R import com.casic.br.adapter.IconTextGridAdapter import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.utils.LocaleConstant import com.casic.br.view.AddressManagerActivity import com.casic.br.view.EditUserActivity @@ -20,6 +21,7 @@ override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { + requireContext().initLayoutImmersionBar(rootView) leftTitleView.text = "我的" } @@ -85,6 +87,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { editUserView.setOnClickListener { requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt index 8b11894..cc69400 100644 --- a/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/ShopPageFragment.kt @@ -3,6 +3,7 @@ import androidx.fragment.app.Fragment import com.casic.br.R import com.casic.br.adapter.SubViewPagerAdapter +import com.casic.br.extensions.initLayoutImmersionBar import com.casic.br.fragment.shop.ComponentFragment import com.casic.br.fragment.shop.RecommendFragment import com.casic.br.fragment.shop.SmartHomeFragment @@ -26,7 +27,7 @@ override fun initLayoutView(): Int = R.layout.fragment_shop override fun setupTopBarLayout() { - + requireContext().initLayoutImmersionBar(rootView) } override fun initData() { @@ -37,6 +38,10 @@ shopTopTabLayout.setupWithViewPager(shopViewPager) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt index dc67cc4..760d844 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/ComponentFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt index 68791a0..a013b9e 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/RecommendFragment.kt @@ -99,6 +99,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt index 09753d6..508fc18 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartHomeFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt index 535e512..0c4e37a 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/SmartKitchenFragment.kt @@ -15,6 +15,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java index 40a545c..451a69a 100644 --- a/app/src/main/java/com/casic/br/model/AddedDeviceModel.java +++ b/app/src/main/java/com/casic/br/model/AddedDeviceModel.java @@ -4,11 +4,20 @@ * 已添加设备(Iot和非Iot设备)数据模型 */ public class AddedDeviceModel { - private String deviceImage; private String deviceName; + private String deviceImage; + private String deviceModel; private String deviceType; private String deviceUsedTime; + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + public String getDeviceImage() { return deviceImage; } @@ -17,12 +26,12 @@ this.deviceImage = deviceImage; } - public String getDeviceName() { - return deviceName; + public String getDeviceModel() { + return deviceModel; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; } public String getDeviceType() { diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index bdf257e..1842b75 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -23,6 +23,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt index bafd851..c4bb8d2 100644 --- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt +++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt @@ -35,19 +35,23 @@ deviceModels.add(model) } - val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) - deviceRecyclerView.addItemDecoration( - DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - ) - deviceRecyclerView.adapter = addedDeviceAdapter - addedDeviceAdapter.setOnItemClickListener(object : - AddedDeviceAdapter.OnItemClickListener { - override fun onItemClick(position: Int) { - //TODO 需要根据设备类型显示不同的页面 - val deviceModel = deviceModels[position] - deviceModel.deviceName.show(this@AllDeviceActivity) - } - }) +// val addedDeviceAdapter = AddedDeviceAdapter(this, deviceModels) +// deviceRecyclerView.addItemDecoration( +// DividerItemDecoration(this, DividerItemDecoration.VERTICAL) +// ) +// deviceRecyclerView.adapter = addedDeviceAdapter +// addedDeviceAdapter.setOnItemClickListener(object : +// AddedDeviceAdapter.OnItemClickListener { +// override fun onItemClick(position: Int) { +// //TODO 需要根据设备类型显示不同的页面 +// val deviceModel = deviceModels[position] +// deviceModel.deviceName.show(this@AllDeviceActivity) +// } +// }) + } + + override fun observeRequestState() { + } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt index 9b04044..70ecf10 100644 --- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt +++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt @@ -41,6 +41,10 @@ } + override fun observeRequestState() { + + } + override fun initEvent() { avatarLayout.setOnClickListener { BottomActionSheet.Builder() diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt new file mode 100644 index 0000000..9de6790 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt @@ -0,0 +1,26 @@ +package com.casic.br.view + +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class LoginActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_login + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt index c2fe809..a2fb29a 100644 --- a/app/src/main/java/com/casic/br/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/view/MainActivity.kt @@ -9,9 +9,7 @@ import com.casic.br.fragment.* 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.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { @@ -32,13 +30,16 @@ override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) } override fun initData() { } + override fun observeRequestState() { + + } + override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnItemSelectedListener { menuItem -> diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 62a5fb8..1a2a9c8 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -1,47 +1,34 @@ package com.casic.br.view +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.casic.br.R import com.casic.br.utils.LocaleConstant -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 kotlinx.android.synthetic.main.activity_permssion.* import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks -class PermissionActivity : KotlinBaseActivity(), PermissionCallbacks { +class PermissionActivity : AppCompatActivity(), PermissionCallbacks { - override fun initLayoutView(): Int = R.layout.activity_permssion - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) - } - - override fun initData() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { - enterMainButton.setOnClickListener { - EasyPermissions.requestPermissions( - this@PermissionActivity, - resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocaleConstant.PERMISSIONS_CODE, - *LocaleConstant.USER_PERMISSIONS - ) - } + EasyPermissions.requestPermissions( + this@PermissionActivity, + resources.getString(R.string.app_name) + "需要获取存储相关权限", + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS + ) } } - override fun initEvent() { - - } - private fun startSplashScreenActivity() { - navigatePageTo() + //TODO 不要开屏页 +// navigatePageTo() + navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SettingsActivity.kt b/app/src/main/java/com/casic/br/view/SettingsActivity.kt index b8dd006..2c89b31 100644 --- a/app/src/main/java/com/casic/br/view/SettingsActivity.kt +++ b/app/src/main/java/com/casic/br/view/SettingsActivity.kt @@ -43,6 +43,10 @@ }) } + override fun observeRequestState() { + + } + override fun initEvent() { } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt index 26ea221..4fdf7dd 100644 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt @@ -41,6 +41,10 @@ } } + override fun observeRequestState() { + + } + override fun initEvent() { countDownTimer.start() skipButton.setChangeAlphaWhenPress(true) diff --git a/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml new file mode 100644 index 0000000..3561f6e --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml new file mode 100644 index 0000000..5d1d1f4 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_7.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml deleted file mode 100644 index a93ef6c..0000000 --- a/app/src/main/res/drawable/bg_stroke_layout_radius_5.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/button_common_selector.xml b/app/src/main/res/drawable/button_common_selector.xml new file mode 100644 index 0000000..d806fcf --- /dev/null +++ b/app/src/main/res/drawable/button_common_selector.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml index 5875998..f8e7781 100644 --- a/app/src/main/res/drawable/button_main_selector.xml +++ b/app/src/main/res/drawable/button_main_selector.xml @@ -3,16 +3,16 @@ - + - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_white_selector.xml b/app/src/main/res/drawable/button_white_selector.xml index 4dd3c0b..c32a27e 100644 --- a/app/src/main/res/drawable/button_white_selector.xml +++ b/app/src/main/res/drawable/button_white_selector.xml @@ -3,14 +3,14 @@ - + - + diff --git a/app/src/main/res/drawable/ic_add_device.xml b/app/src/main/res/drawable/ic_add_device.xml index 14c8ec9..e228615 100644 --- a/app/src/main/res/drawable/ic_add_device.xml +++ b/app/src/main/res/drawable/ic_add_device.xml @@ -1,9 +1,9 @@ + android:fillColor="@color/mainThemeColor" + android:pathData="M512,42.67c259.2,0 469.33,210.13 469.33,469.33s-210.13,469.33 -469.33,469.33S42.67,771.2 42.67,512 252.8,42.67 512,42.67zM512,106.67C288.15,106.67 106.67,288.15 106.67,512s181.48,405.33 405.33,405.33 405.33,-181.48 405.33,-405.33S735.85,106.67 512,106.67zM546.13,320c4.69,0 8.53,3.84 8.53,8.53L554.67,469.33h140.8c4.69,0 8.53,3.84 8.53,8.53v46.93a8.53,8.53 0,0 1,-8.53 8.53L554.67,533.33v140.8a8.53,8.53 0,0 1,-8.53 8.53h-46.93a8.53,8.53 0,0 1,-8.53 -8.53L490.67,533.33h-140.8a8.53,8.53 0,0 1,-8.53 -8.53v-46.93c0,-4.69 3.84,-8.53 8.53,-8.53L490.67,469.33v-140.8c0,-4.69 3.84,-8.53 8.53,-8.53h46.93z" /> diff --git a/app/src/main/res/drawable/ic_camera.xml b/app/src/main/res/drawable/ic_camera.xml deleted file mode 100644 index b612ce9..0000000 --- a/app/src/main/res/drawable/ic_camera.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9..0000000 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_location.xml b/app/src/main/res/drawable/ic_location.xml deleted file mode 100644 index 52e376f..0000000 --- a/app/src/main/res/drawable/ic_location.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_qq.xml b/app/src/main/res/drawable/ic_qq.xml new file mode 100644 index 0000000..9b330f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_qq.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_storage.xml b/app/src/main/res/drawable/ic_storage.xml deleted file mode 100644 index 898c1cf..0000000 --- a/app/src/main/res/drawable/ic_storage.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_wechat.xml b/app/src/main/res/drawable/ic_wechat.xml new file mode 100644 index 0000000..5cc61ac --- /dev/null +++ b/app/src/main/res/drawable/ic_wechat.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_zfb.xml b/app/src/main/res/drawable/ic_zfb.xml new file mode 100644 index 0000000..71fa53d --- /dev/null +++ b/app/src/main/res/drawable/ic_zfb.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_bg_solid_layout_white_radius_10.xml b/app/src/main/res/drawable/selector_bg_solid_layout_white_radius_10.xml new file mode 100644 index 0000000..b18e5c5 --- /dev/null +++ b/app/src/main/res/drawable/selector_bg_solid_layout_white_radius_10.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml new file mode 100644 index 0000000..1ae1069 --- /dev/null +++ b/app/src/main/res/layout/activity_login.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + +