fix: 详情界面新增

This commit is contained in:
2022-12-27 16:04:30 +08:00
parent bbc778fb12
commit ea692d190b
42 changed files with 582 additions and 125 deletions

View File

@@ -1,4 +0,0 @@
package com.navinfo.vivo.db.dao.entity
class Attachment {
}

View File

@@ -1,15 +0,0 @@
package com.navinfo.vivo.ui
import android.graphics.Color
import androidx.core.text.buildSpannedString
import androidx.core.text.color
import com.google.android.material.textfield.TextInputLayout
class ViewExtend {
fun TextInputLayout.markRequiredInRed() {
hint = buildSpannedString {
append(hint)
color(Color.RED) { append(" *") } // Mind the space prefix.
}
}
}

View File

@@ -1,43 +0,0 @@
package com.navinfo.vivo.ui.message
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.navinfo.vivo.databinding.FragmentHomeBinding
import com.navinfo.vivo.databinding.FragmentObtainMessageBinding
import com.navinfo.vivo.ui.home.HomeViewModel
class ObtainMessageFragment: Fragment() {
private var _binding: FragmentObtainMessageBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val obtainMessageViewModel =
ViewModelProvider(this).get(ObtainMessageViewModel::class.java)
_binding = FragmentObtainMessageBinding.inflate(inflater, container, false)
val root: View = binding.root
val textView: TextView = binding.textHome
obtainMessageViewModel.text.observe(viewLifecycleOwner) {
textView.text = it
}
return root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@@ -1,6 +0,0 @@
package com.navinfo.vivo.ui.message
import androidx.lifecycle.ViewModel
class ObtainMessageViewModel: ViewModel() {
}

View File

@@ -1,13 +1,12 @@
package com.navinfo.vivo
package com.navinfo.volvo
import android.os.Bundle
import com.google.android.material.bottomnavigation.BottomNavigationView
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import com.navinfo.vivo.databinding.ActivityMainBinding
import com.navinfo.volvo.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
@@ -29,7 +28,7 @@ class MainActivity : AppCompatActivity() {
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
// setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
}

View File

@@ -1,4 +1,4 @@
package com.navinfo.vivo.db.dao;
package com.navinfo.volvo.db.dao;
import android.content.Context;
@@ -10,7 +10,7 @@ import androidx.room.RoomDatabase;
import androidx.sqlite.db.SupportSQLiteDatabase;
import androidx.sqlite.db.SupportSQLiteOpenHelper;
import com.navinfo.vivo.db.dao.entity.Message;
import com.navinfo.volvo.db.dao.entity.Message;
import com.tencent.wcdb.database.SQLiteCipherSpec;
import com.tencent.wcdb.database.SQLiteDatabase;

View File

@@ -1,10 +1,10 @@
package com.navinfo.vivo.db.dao
package com.navinfo.volvo.db.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import com.navinfo.vivo.db.dao.entity.Message
import com.navinfo.volvo.db.dao.entity.Message
@Dao
interface MessageDao {

View File

@@ -0,0 +1,30 @@
package com.navinfo.volvo.db.dao.entity
import androidx.room.TypeConverter
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import java.lang.reflect.Type
class Attachment {
lateinit var path:String
lateinit var attachmentType: attachmentType
}
enum class attachmentType {
PIC, AUDIO
}
class AttachmentConvert {
private val gson = Gson()
@TypeConverter
fun objectToString(list: List<Attachment>): String {
return gson.toJson(list)
}
@TypeConverter
fun stringToObject(json: String?): List<Attachment> {
val listType: Type = object : TypeToken<List<Attachment>>() {}.type
return gson.fromJson(json, listType)
}
}

View File

@@ -1,8 +1,10 @@
package com.navinfo.vivo.db.dao.entity
package com.navinfo.volvo.db.dao.entity
import androidx.room.Entity
import androidx.room.PrimaryKey
import androidx.room.TypeConverters
@TypeConverters(AttachmentConvert::class)
@Entity(tableName = "message")
class Message(
@PrimaryKey(autoGenerate = true)

View File

@@ -1,7 +1,6 @@
package com.navinfo.vivo.db.dao.entity
package com.navinfo.volvo.db.dao.entity
import androidx.room.PrimaryKey
import java.net.IDN
class User(
@PrimaryKey()

View File

@@ -0,0 +1,13 @@
package com.navinfo.volvo.ui
import android.graphics.Color
import androidx.core.text.buildSpannedString
import androidx.core.text.color
import com.google.android.material.textfield.TextInputLayout
fun TextInputLayout.markRequiredInRed() {
hint = buildSpannedString {
append(hint)// Mind the space prefix.
color(Color.RED) { append(" *") }
}
}

View File

@@ -1,4 +1,4 @@
package com.navinfo.vivo.ui.dashboard
package com.navinfo.volvo.ui.dashboard
import android.os.Bundle
import android.view.LayoutInflater
@@ -7,7 +7,7 @@ import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.navinfo.vivo.databinding.FragmentDashboardBinding
import com.navinfo.volvo.databinding.FragmentDashboardBinding
class DashboardFragment : Fragment() {

View File

@@ -1,4 +1,4 @@
package com.navinfo.vivo.ui.dashboard
package com.navinfo.volvo.ui.dashboard
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData

View File

@@ -1,4 +1,4 @@
package com.navinfo.vivo.ui.home
package com.navinfo.volvo.ui.home
import android.os.Bundle
import android.view.LayoutInflater
@@ -7,7 +7,11 @@ import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.navinfo.vivo.databinding.FragmentHomeBinding
import androidx.navigation.Navigation
import com.navinfo.volvo.R
import com.navinfo.volvo.databinding.FragmentHomeBinding
import com.navinfo.volvo.db.dao.entity.Message
import com.navinfo.volvo.ui.message.ObtainMessageViewModel
class HomeFragment : Fragment() {
@@ -24,13 +28,20 @@ class HomeFragment : Fragment() {
): View {
val homeViewModel =
ViewModelProvider(this).get(HomeViewModel::class.java)
val obtainMessageViewModel = ViewModelProvider(requireActivity()).get(ObtainMessageViewModel::class.java)
_binding = FragmentHomeBinding.inflate(inflater, container, false)
val root: View = binding.root
val textView: TextView = binding.textHome
val textView: TextView = binding.tvNewMessage
textView.setOnClickListener {
val message = Message(1, "新建标题", "", "", "", 0, "1", "2", mutableListOf())
obtainMessageViewModel.setCurrentMessage(message)
// 跳转到新建Message的Fragment
Navigation.findNavController(it).navigate(R.id.home_2_obtain_message)
}
homeViewModel.text.observe(viewLifecycleOwner) {
textView.text = it
}
return root
}

View File

@@ -1,4 +1,4 @@
package com.navinfo.vivo.ui.home
package com.navinfo.volvo.ui.home
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData

View File

@@ -0,0 +1,68 @@
package com.navinfo.volvo.ui.message
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import com.gredicer.datetimepicker.DateTimePickerFragment
import com.navinfo.volvo.databinding.FragmentObtainMessageBinding
import com.navinfo.volvo.ui.markRequiredInRed
class ObtainMessageFragment: Fragment() {
private var _binding: FragmentObtainMessageBinding? = null
private val obtainMessageViewModel by lazy {
ViewModelProvider(requireActivity()).get(ObtainMessageViewModel::class.java)
}
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentObtainMessageBinding.inflate(inflater, container, false)
val root: View = binding.root
obtainMessageViewModel?.getMessageLiveData()?.observe(
viewLifecycleOwner, Observer {
// 初始化界面显示内容
if(it.title!=null)
binding.tvMessageTitle?.setText(it.title)
if (it.sendDate!=null) {
binding.btnSendTime.setText(it.sendDate)
}
}
)
initView()
return root
}
fun initView() {
// 设置问候信息提示的红色星号
binding.tiLayoutTitle.markRequiredInRed()
// 设置点击按钮选择发送时间
binding.btnSendTime.setOnClickListener {
val dialog = DateTimePickerFragment.newInstance().mode(0)
dialog.listener = object : DateTimePickerFragment.OnClickListener {
override fun onClickListener(selectTime: String) {
obtainMessageViewModel.updateMessageSendTime(selectTime)
}
}
dialog.show(parentFragmentManager, "SelectSendTime")
}
// 点击按钮选择拍照
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@@ -0,0 +1,66 @@
package com.navinfo.volvo.ui.message
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.liveData
import com.navinfo.volvo.db.dao.entity.Message
import com.navinfo.volvo.db.dao.entity.attachmentType
class ObtainMessageViewModel: ViewModel() {
private val msgLiveData: MutableLiveData<Message> by lazy {
MutableLiveData<Message>()
}
fun setCurrentMessage(msg: Message) {
msgLiveData.postValue(msg)
}
fun getMessageLiveData(): MutableLiveData<Message> {
return msgLiveData
}
// 更新消息标题
fun updateMessageTitle(title: String) {
this.msgLiveData.value?.title = title
this.msgLiveData.postValue(this.msgLiveData.value)
}
// 更新消息附件中的照片文件
fun updateMessagePic(picUrl: String) {
for (attachment in this.msgLiveData.value!!.attachment) {
if (attachment.attachmentType == attachmentType.PIC) {
attachment.path = picUrl
}
}
this.msgLiveData.postValue(this.msgLiveData.value)
}
// 更新消息附件中的录音文件
fun updateMessageAudio(audioUrl: String) {
for (attachment in this.msgLiveData.value!!.attachment) {
if (attachment.attachmentType == attachmentType.AUDIO) {
attachment.path = audioUrl
}
}
this.msgLiveData.postValue(this.msgLiveData.value)
}
// 更新发送人
fun updateMessageSendFrom(sendFrom: String) {
this.msgLiveData.value?.fromId = sendFrom
this.msgLiveData.postValue(this.msgLiveData.value)
}
// 更新接收人
fun updateMessageSendTo(sendTo: String) {
this.msgLiveData.value?.toId = sendTo
this.msgLiveData.postValue(this.msgLiveData.value)
}
// 更新发件时间
fun updateMessageSendTime(sendTime: String) {
this.msgLiveData.value?.sendDate = sendTime
this.msgLiveData.postValue(this.msgLiveData.value)
}
}

View File

@@ -1,4 +1,4 @@
package com.navinfo.vivo.ui.notifications
package com.navinfo.volvo.ui.notifications
import android.os.Bundle
import android.view.LayoutInflater
@@ -7,7 +7,7 @@ import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.navinfo.vivo.databinding.FragmentNotificationsBinding
import com.navinfo.volvo.databinding.FragmentNotificationsBinding
class NotificationsFragment : Fragment() {

View File

@@ -1,4 +1,4 @@
package com.navinfo.vivo.ui.notifications
package com.navinfo.volvo.ui.notifications
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData