From ea692d190b5caa68b62c437daeff87c2bfb96b22 Mon Sep 17 00:00:00 2001
From: xiaoyan <xiaoyan159@163.com>
Date: Tue, 27 Dec 2022 16:04:30 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E8=AF=A6=E6=83=85=E7=95=8C=E9=9D=A2?=
 =?UTF-8?q?=E6=96=B0=E5=A2=9E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .idea/.name                                   |   1 -
 app/build.gradle                              |  10 +-
 .../ExampleInstrumentedTest.kt                |   4 +-
 app/src/main/AndroidManifest.xml              |   2 +-
 .../navinfo/vivo/db/dao/entity/Attachment.kt  |   4 -
 .../java/com/navinfo/vivo/ui/ViewExtend.kt    |  15 -
 .../vivo/ui/message/ObtainMessageFragment.kt  |  43 ---
 .../vivo/ui/message/ObtainMessageViewModel.kt |   6 -
 .../navinfo/{vivo => volvo}/MainActivity.kt   |   7 +-
 .../db/dao/MapLifeDataBase.java               |   4 +-
 .../{vivo => volvo}/db/dao/MessageDao.kt      |   4 +-
 .../navinfo/volvo/db/dao/entity/Attachment.kt |  30 ++
 .../{vivo => volvo}/db/dao/entity/Message.kt  |   4 +-
 .../{vivo => volvo}/db/dao/entity/User.kt     |   3 +-
 .../java/com/navinfo/volvo/ui/ViewExtend.kt   |  13 +
 .../ui/dashboard/DashboardFragment.kt         |   4 +-
 .../ui/dashboard/DashboardViewModel.kt        |   2 +-
 .../{vivo => volvo}/ui/home/HomeFragment.kt   |  19 +-
 .../{vivo => volvo}/ui/home/HomeViewModel.kt  |   2 +-
 .../volvo/ui/message/ObtainMessageFragment.kt |  68 +++++
 .../ui/message/ObtainMessageViewModel.kt      |  66 +++++
 .../ui/notifications/NotificationsFragment.kt |   4 +-
 .../notifications/NotificationsViewModel.kt   |   2 +-
 .../drawable/ic_baseline_access_time_24.xml   |   6 +
 .../drawable/ic_baseline_audio_file_24.xml    |   5 +
 .../res/drawable/ic_baseline_camera_24.xml    |   5 +
 .../ic_baseline_fiber_manual_record_24.xml    |   5 +
 .../drawable/ic_baseline_image_search_24.xml  |   5 +
 .../main/res/drawable/ic_baseline_mail_24.xml |   5 +
 .../drawable/selector_bg_4_round_corner.xml   |   8 +
 .../res/drawable/shape_bg_4_round_corner.xml  |  21 ++
 .../shape_bg_4_round_corner_default.xml       |  21 ++
 app/src/main/res/layout/activity_main.xml     |   5 +-
 app/src/main/res/layout/fragment_home.xml     |   2 +-
 .../res/layout/fragment_obtain_message.xml    | 267 ++++++++++++++++--
 .../main/res/navigation/mobile_navigation.xml |  19 +-
 app/src/main/res/values-night/themes.xml      |   2 +-
 app/src/main/res/values/strings.xml           |   2 +-
 app/src/main/res/values/styles.xml            |   6 +
 app/src/main/res/values/themes.xml            |   2 +-
 .../{vivo => volvo}/ExampleUnitTest.kt        |   2 +-
 settings.gradle                               |   2 +-
 42 files changed, 582 insertions(+), 125 deletions(-)
 delete mode 100644 .idea/.name
 rename app/src/androidTest/java/com/navinfo/{vivo => volvo}/ExampleInstrumentedTest.kt (86%)
 delete mode 100644 app/src/main/java/com/navinfo/vivo/db/dao/entity/Attachment.kt
 delete mode 100644 app/src/main/java/com/navinfo/vivo/ui/ViewExtend.kt
 delete mode 100644 app/src/main/java/com/navinfo/vivo/ui/message/ObtainMessageFragment.kt
 delete mode 100644 app/src/main/java/com/navinfo/vivo/ui/message/ObtainMessageViewModel.kt
 rename app/src/main/java/com/navinfo/{vivo => volvo}/MainActivity.kt (83%)
 rename app/src/main/java/com/navinfo/{vivo => volvo}/db/dao/MapLifeDataBase.java (98%)
 rename app/src/main/java/com/navinfo/{vivo => volvo}/db/dao/MessageDao.kt (83%)
 create mode 100644 app/src/main/java/com/navinfo/volvo/db/dao/entity/Attachment.kt
 rename app/src/main/java/com/navinfo/{vivo => volvo}/db/dao/entity/Message.kt (84%)
 rename app/src/main/java/com/navinfo/{vivo => volvo}/db/dao/entity/User.kt (69%)
 create mode 100644 app/src/main/java/com/navinfo/volvo/ui/ViewExtend.kt
 rename app/src/main/java/com/navinfo/{vivo => volvo}/ui/dashboard/DashboardFragment.kt (91%)
 rename app/src/main/java/com/navinfo/{vivo => volvo}/ui/dashboard/DashboardViewModel.kt (88%)
 rename app/src/main/java/com/navinfo/{vivo => volvo}/ui/home/HomeFragment.kt (56%)
 rename app/src/main/java/com/navinfo/{vivo => volvo}/ui/home/HomeViewModel.kt (89%)
 create mode 100644 app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageFragment.kt
 create mode 100644 app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageViewModel.kt
 rename app/src/main/java/com/navinfo/{vivo => volvo}/ui/notifications/NotificationsFragment.kt (91%)
 rename app/src/main/java/com/navinfo/{vivo => volvo}/ui/notifications/NotificationsViewModel.kt (87%)
 create mode 100644 app/src/main/res/drawable/ic_baseline_access_time_24.xml
 create mode 100644 app/src/main/res/drawable/ic_baseline_audio_file_24.xml
 create mode 100644 app/src/main/res/drawable/ic_baseline_camera_24.xml
 create mode 100644 app/src/main/res/drawable/ic_baseline_fiber_manual_record_24.xml
 create mode 100644 app/src/main/res/drawable/ic_baseline_image_search_24.xml
 create mode 100644 app/src/main/res/drawable/ic_baseline_mail_24.xml
 create mode 100644 app/src/main/res/drawable/selector_bg_4_round_corner.xml
 create mode 100644 app/src/main/res/drawable/shape_bg_4_round_corner.xml
 create mode 100644 app/src/main/res/drawable/shape_bg_4_round_corner_default.xml
 create mode 100644 app/src/main/res/values/styles.xml
 rename app/src/test/java/com/navinfo/{vivo => volvo}/ExampleUnitTest.kt (92%)

diff --git a/.idea/.name b/.idea/.name
deleted file mode 100644
index 818e88c..0000000
--- a/.idea/.name
+++ /dev/null
@@ -1 +0,0 @@
-NavinfoVivo
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b15943a..cb0c65a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -6,11 +6,11 @@ apply plugin: 'kotlin-android'
 apply plugin: 'kotlin-kapt'
 //apply plugin: 'realm-android'
 android {
-    namespace 'com.navinfo.vivo'
+    namespace 'com.navinfo.volvo'
     compileSdk 32
 
     defaultConfig {
-        applicationId "com.navinfo.vivo"
+        applicationId "com.navinfo.volvo"
         minSdk 24
         targetSdk 32
         versionCode 1
@@ -44,6 +44,7 @@ android {
     }
     buildFeatures {
         viewBinding true
+        dataBinding true
     }
 }
 
@@ -58,6 +59,7 @@ dependencies {
     implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1'
     implementation 'androidx.navigation:navigation-fragment-ktx:2.4.1'
     implementation 'androidx.navigation:navigation-ui-ktx:2.4.1'
+    implementation 'com.google.code.gson:gson:2.10'
     testImplementation 'junit:junit:4.13.2'
     androidTestImplementation 'androidx.test.ext:junit:1.1.4'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
@@ -75,4 +77,8 @@ dependencies {
 //    implementation "android.arch.lifecycle:extensions:1.1.1"
 //    annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
     implementation 'com.tencent.wcdb:wcdb-android:1.1-19'
+    // 文件选择器 https://github.com/rosuH/AndroidFilePicker/blob/master/README_CN.md
+    implementation 'me.rosuh:AndroidFilePicker:0.8.2'
+    // 时间选择器 https://github.com/Gredicer/datetimepicker
+    implementation 'com.github.Gredicer:datetimepicker:V1.0.0'
 }
\ No newline at end of file
diff --git a/app/src/androidTest/java/com/navinfo/vivo/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/navinfo/volvo/ExampleInstrumentedTest.kt
similarity index 86%
rename from app/src/androidTest/java/com/navinfo/vivo/ExampleInstrumentedTest.kt
rename to app/src/androidTest/java/com/navinfo/volvo/ExampleInstrumentedTest.kt
index f16bf01..5d650bd 100644
--- a/app/src/androidTest/java/com/navinfo/vivo/ExampleInstrumentedTest.kt
+++ b/app/src/androidTest/java/com/navinfo/volvo/ExampleInstrumentedTest.kt
@@ -1,4 +1,4 @@
-package com.navinfo.vivo
+package com.navinfo.volvo
 
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -19,6 +19,6 @@ class ExampleInstrumentedTest {
     fun useAppContext() {
         // Context of the app under test.
         val appContext = InstrumentationRegistry.getInstrumentation().targetContext
-        assertEquals("com.navinfo.vivo", appContext.packageName)
+        assertEquals("com.navinfo.volvo", appContext.packageName)
     }
 }
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ee1abf..deae353 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,7 +10,7 @@
         android:label="@string/app_name"
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
-        android:theme="@style/Theme.NavinfoVivo"
+        android:theme="@style/Theme.NavinfoVolvo"
         tools:targetApi="31">
         <activity
             android:name=".MainActivity"
diff --git a/app/src/main/java/com/navinfo/vivo/db/dao/entity/Attachment.kt b/app/src/main/java/com/navinfo/vivo/db/dao/entity/Attachment.kt
deleted file mode 100644
index 862769b..0000000
--- a/app/src/main/java/com/navinfo/vivo/db/dao/entity/Attachment.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.navinfo.vivo.db.dao.entity
-
-class Attachment {
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/vivo/ui/ViewExtend.kt b/app/src/main/java/com/navinfo/vivo/ui/ViewExtend.kt
deleted file mode 100644
index b675d64..0000000
--- a/app/src/main/java/com/navinfo/vivo/ui/ViewExtend.kt
+++ /dev/null
@@ -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.
-        }
-    }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/vivo/ui/message/ObtainMessageFragment.kt b/app/src/main/java/com/navinfo/vivo/ui/message/ObtainMessageFragment.kt
deleted file mode 100644
index ad58f41..0000000
--- a/app/src/main/java/com/navinfo/vivo/ui/message/ObtainMessageFragment.kt
+++ /dev/null
@@ -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
-    }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/vivo/ui/message/ObtainMessageViewModel.kt b/app/src/main/java/com/navinfo/vivo/ui/message/ObtainMessageViewModel.kt
deleted file mode 100644
index 81681f1..0000000
--- a/app/src/main/java/com/navinfo/vivo/ui/message/ObtainMessageViewModel.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.navinfo.vivo.ui.message
-
-import androidx.lifecycle.ViewModel
-
-class ObtainMessageViewModel: ViewModel() {
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/vivo/MainActivity.kt b/app/src/main/java/com/navinfo/volvo/MainActivity.kt
similarity index 83%
rename from app/src/main/java/com/navinfo/vivo/MainActivity.kt
rename to app/src/main/java/com/navinfo/volvo/MainActivity.kt
index d947a69..429cf49 100644
--- a/app/src/main/java/com/navinfo/vivo/MainActivity.kt
+++ b/app/src/main/java/com/navinfo/volvo/MainActivity.kt
@@ -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)
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/vivo/db/dao/MapLifeDataBase.java b/app/src/main/java/com/navinfo/volvo/db/dao/MapLifeDataBase.java
similarity index 98%
rename from app/src/main/java/com/navinfo/vivo/db/dao/MapLifeDataBase.java
rename to app/src/main/java/com/navinfo/volvo/db/dao/MapLifeDataBase.java
index 64698d8..ec4e1ac 100644
--- a/app/src/main/java/com/navinfo/vivo/db/dao/MapLifeDataBase.java
+++ b/app/src/main/java/com/navinfo/volvo/db/dao/MapLifeDataBase.java
@@ -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;
 
diff --git a/app/src/main/java/com/navinfo/vivo/db/dao/MessageDao.kt b/app/src/main/java/com/navinfo/volvo/db/dao/MessageDao.kt
similarity index 83%
rename from app/src/main/java/com/navinfo/vivo/db/dao/MessageDao.kt
rename to app/src/main/java/com/navinfo/volvo/db/dao/MessageDao.kt
index 80f5cee..c4618a2 100644
--- a/app/src/main/java/com/navinfo/vivo/db/dao/MessageDao.kt
+++ b/app/src/main/java/com/navinfo/volvo/db/dao/MessageDao.kt
@@ -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 {
diff --git a/app/src/main/java/com/navinfo/volvo/db/dao/entity/Attachment.kt b/app/src/main/java/com/navinfo/volvo/db/dao/entity/Attachment.kt
new file mode 100644
index 0000000..0994bdf
--- /dev/null
+++ b/app/src/main/java/com/navinfo/volvo/db/dao/entity/Attachment.kt
@@ -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)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/vivo/db/dao/entity/Message.kt b/app/src/main/java/com/navinfo/volvo/db/dao/entity/Message.kt
similarity index 84%
rename from app/src/main/java/com/navinfo/vivo/db/dao/entity/Message.kt
rename to app/src/main/java/com/navinfo/volvo/db/dao/entity/Message.kt
index d356ad3..7c299ad 100644
--- a/app/src/main/java/com/navinfo/vivo/db/dao/entity/Message.kt
+++ b/app/src/main/java/com/navinfo/volvo/db/dao/entity/Message.kt
@@ -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)
diff --git a/app/src/main/java/com/navinfo/vivo/db/dao/entity/User.kt b/app/src/main/java/com/navinfo/volvo/db/dao/entity/User.kt
similarity index 69%
rename from app/src/main/java/com/navinfo/vivo/db/dao/entity/User.kt
rename to app/src/main/java/com/navinfo/volvo/db/dao/entity/User.kt
index b2329ee..c1a5569 100644
--- a/app/src/main/java/com/navinfo/vivo/db/dao/entity/User.kt
+++ b/app/src/main/java/com/navinfo/volvo/db/dao/entity/User.kt
@@ -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()
diff --git a/app/src/main/java/com/navinfo/volvo/ui/ViewExtend.kt b/app/src/main/java/com/navinfo/volvo/ui/ViewExtend.kt
new file mode 100644
index 0000000..bcea92a
--- /dev/null
+++ b/app/src/main/java/com/navinfo/volvo/ui/ViewExtend.kt
@@ -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(" *") }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/vivo/ui/dashboard/DashboardFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/dashboard/DashboardFragment.kt
similarity index 91%
rename from app/src/main/java/com/navinfo/vivo/ui/dashboard/DashboardFragment.kt
rename to app/src/main/java/com/navinfo/volvo/ui/dashboard/DashboardFragment.kt
index 1ce55d1..9dda29c 100644
--- a/app/src/main/java/com/navinfo/vivo/ui/dashboard/DashboardFragment.kt
+++ b/app/src/main/java/com/navinfo/volvo/ui/dashboard/DashboardFragment.kt
@@ -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() {
 
diff --git a/app/src/main/java/com/navinfo/vivo/ui/dashboard/DashboardViewModel.kt b/app/src/main/java/com/navinfo/volvo/ui/dashboard/DashboardViewModel.kt
similarity index 88%
rename from app/src/main/java/com/navinfo/vivo/ui/dashboard/DashboardViewModel.kt
rename to app/src/main/java/com/navinfo/volvo/ui/dashboard/DashboardViewModel.kt
index d040254..647da35 100644
--- a/app/src/main/java/com/navinfo/vivo/ui/dashboard/DashboardViewModel.kt
+++ b/app/src/main/java/com/navinfo/volvo/ui/dashboard/DashboardViewModel.kt
@@ -1,4 +1,4 @@
-package com.navinfo.vivo.ui.dashboard
+package com.navinfo.volvo.ui.dashboard
 
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
diff --git a/app/src/main/java/com/navinfo/vivo/ui/home/HomeFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/home/HomeFragment.kt
similarity index 56%
rename from app/src/main/java/com/navinfo/vivo/ui/home/HomeFragment.kt
rename to app/src/main/java/com/navinfo/volvo/ui/home/HomeFragment.kt
index 51b0759..9988424 100644
--- a/app/src/main/java/com/navinfo/vivo/ui/home/HomeFragment.kt
+++ b/app/src/main/java/com/navinfo/volvo/ui/home/HomeFragment.kt
@@ -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
     }
diff --git a/app/src/main/java/com/navinfo/vivo/ui/home/HomeViewModel.kt b/app/src/main/java/com/navinfo/volvo/ui/home/HomeViewModel.kt
similarity index 89%
rename from app/src/main/java/com/navinfo/vivo/ui/home/HomeViewModel.kt
rename to app/src/main/java/com/navinfo/volvo/ui/home/HomeViewModel.kt
index 3e57040..a816b95 100644
--- a/app/src/main/java/com/navinfo/vivo/ui/home/HomeViewModel.kt
+++ b/app/src/main/java/com/navinfo/volvo/ui/home/HomeViewModel.kt
@@ -1,4 +1,4 @@
-package com.navinfo.vivo.ui.home
+package com.navinfo.volvo.ui.home
 
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
diff --git a/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageFragment.kt
new file mode 100644
index 0000000..d90d8cf
--- /dev/null
+++ b/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageFragment.kt
@@ -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
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageViewModel.kt b/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageViewModel.kt
new file mode 100644
index 0000000..bb7f275
--- /dev/null
+++ b/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageViewModel.kt
@@ -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)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/vivo/ui/notifications/NotificationsFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/notifications/NotificationsFragment.kt
similarity index 91%
rename from app/src/main/java/com/navinfo/vivo/ui/notifications/NotificationsFragment.kt
rename to app/src/main/java/com/navinfo/volvo/ui/notifications/NotificationsFragment.kt
index 924ccc8..80b8a27 100644
--- a/app/src/main/java/com/navinfo/vivo/ui/notifications/NotificationsFragment.kt
+++ b/app/src/main/java/com/navinfo/volvo/ui/notifications/NotificationsFragment.kt
@@ -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() {
 
diff --git a/app/src/main/java/com/navinfo/vivo/ui/notifications/NotificationsViewModel.kt b/app/src/main/java/com/navinfo/volvo/ui/notifications/NotificationsViewModel.kt
similarity index 87%
rename from app/src/main/java/com/navinfo/vivo/ui/notifications/NotificationsViewModel.kt
rename to app/src/main/java/com/navinfo/volvo/ui/notifications/NotificationsViewModel.kt
index 4f0881c..92a3e47 100644
--- a/app/src/main/java/com/navinfo/vivo/ui/notifications/NotificationsViewModel.kt
+++ b/app/src/main/java/com/navinfo/volvo/ui/notifications/NotificationsViewModel.kt
@@ -1,4 +1,4 @@
-package com.navinfo.vivo.ui.notifications
+package com.navinfo.volvo.ui.notifications
 
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
diff --git a/app/src/main/res/drawable/ic_baseline_access_time_24.xml b/app/src/main/res/drawable/ic_baseline_access_time_24.xml
new file mode 100644
index 0000000..bdf91f9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_access_time_24.xml
@@ -0,0 +1,6 @@
+<vector android:height="24dp" android:tint="#000000"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8z"/>
+    <path android:fillColor="@android:color/white" android:pathData="M12.5,7H11v6l5.25,3.15 0.75,-1.23 -4.5,-2.67z"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_baseline_audio_file_24.xml b/app/src/main/res/drawable/ic_baseline_audio_file_24.xml
new file mode 100644
index 0000000..5496fb8
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_audio_file_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#000000"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M14,2H6C4.9,2 4.01,2.9 4.01,4L4,20c0,1.1 0.89,2 1.99,2H18c1.1,0 2,-0.9 2,-2V8L14,2zM16,13h-3v3.75c0,1.24 -1.01,2.25 -2.25,2.25S8.5,17.99 8.5,16.75c0,-1.24 1.01,-2.25 2.25,-2.25c0.46,0 0.89,0.14 1.25,0.38V11h4V13zM13,9V3.5L18.5,9H13z"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_baseline_camera_24.xml b/app/src/main/res/drawable/ic_baseline_camera_24.xml
new file mode 100644
index 0000000..4a77cd1
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_camera_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#000000"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M9.4,10.5l4.77,-8.26C13.47,2.09 12.75,2 12,2c-2.4,0 -4.6,0.85 -6.32,2.25l3.66,6.35 0.06,-0.1zM21.54,9c-0.92,-2.92 -3.15,-5.26 -6,-6.34L11.88,9h9.66zM21.8,10h-7.49l0.29,0.5 4.76,8.25C21,16.97 22,14.61 22,12c0,-0.69 -0.07,-1.35 -0.2,-2zM8.54,12l-3.9,-6.75C3.01,7.03 2,9.39 2,12c0,0.69 0.07,1.35 0.2,2h7.49l-1.15,-2zM2.46,15c0.92,2.92 3.15,5.26 6,6.34L12.12,15L2.46,15zM13.73,15l-3.9,6.76c0.7,0.15 1.42,0.24 2.17,0.24 2.4,0 4.6,-0.85 6.32,-2.25l-3.66,-6.35 -0.93,1.6z"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_baseline_fiber_manual_record_24.xml b/app/src/main/res/drawable/ic_baseline_fiber_manual_record_24.xml
new file mode 100644
index 0000000..57fc55c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_fiber_manual_record_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#000000"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M12,12m-8,0a8,8 0,1 1,16 0a8,8 0,1 1,-16 0"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_baseline_image_search_24.xml b/app/src/main/res/drawable/ic_baseline_image_search_24.xml
new file mode 100644
index 0000000..d797b73
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_image_search_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#000000"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M18,13v7L4,20L4,6h5.02c0.05,-0.71 0.22,-1.38 0.48,-2L4,4c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2v-5l-2,-2zM16.5,18h-11l2.75,-3.53 1.96,2.36 2.75,-3.54zM19.3,8.89c0.44,-0.7 0.7,-1.51 0.7,-2.39C20,4.01 17.99,2 15.5,2S11,4.01 11,6.5s2.01,4.5 4.49,4.5c0.88,0 1.7,-0.26 2.39,-0.7L21,13.42 22.42,12 19.3,8.89zM15.5,9C14.12,9 13,7.88 13,6.5S14.12,4 15.5,4 18,5.12 18,6.5 16.88,9 15.5,9z"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_baseline_mail_24.xml b/app/src/main/res/drawable/ic_baseline_mail_24.xml
new file mode 100644
index 0000000..f0abc2d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_mail_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#000000"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M20,4L4,4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM20,8l-8,5 -8,-5L4,6l8,5 8,-5v2z"/>
+</vector>
diff --git a/app/src/main/res/drawable/selector_bg_4_round_corner.xml b/app/src/main/res/drawable/selector_bg_4_round_corner.xml
new file mode 100644
index 0000000..497f712
--- /dev/null
+++ b/app/src/main/res/drawable/selector_bg_4_round_corner.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/shape_bg_4_round_corner" android:state_pressed="true"></item>
+    <item android:drawable="@drawable/shape_bg_4_round_corner" android:state_selected="true"></item>
+    <item android:drawable="@drawable/shape_bg_4_round_corner" android:state_pressed="true"></item>
+    <item android:drawable="@drawable/shape_bg_4_round_corner" android:state_checked="true"></item>
+    <item android:drawable="@drawable/shape_bg_4_round_corner_default" ></item>
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_bg_4_round_corner.xml b/app/src/main/res/drawable/shape_bg_4_round_corner.xml
new file mode 100644
index 0000000..a03b6b2
--- /dev/null
+++ b/app/src/main/res/drawable/shape_bg_4_round_corner.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <!--设置圆角-->
+    <!--  按顺序分别对应:左下角的角度、右下角的角度、左上角的角度、右上角的角度-->
+    <corners
+        android:bottomLeftRadius="@dimen/default_widget_padding"
+        android:bottomRightRadius="@dimen/default_widget_padding"
+        android:topLeftRadius="@dimen/default_widget_padding"
+        android:topRightRadius="@dimen/default_widget_padding" />
+    <!--设置圆角背景色-->
+<!--    <solid android:color="@color/white" />-->
+    <!--  设置边框大小与背景色-->
+    <stroke
+        android:width="1px"
+        android:color="@color/purple_200" />
+    <padding android:bottom="@dimen/default_widget_padding"
+        android:left="@dimen/default_widget_padding"
+        android:right="@dimen/default_widget_padding"
+        android:top="@dimen/default_widget_padding">
+    </padding>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_bg_4_round_corner_default.xml b/app/src/main/res/drawable/shape_bg_4_round_corner_default.xml
new file mode 100644
index 0000000..d65ddff
--- /dev/null
+++ b/app/src/main/res/drawable/shape_bg_4_round_corner_default.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <!--设置圆角-->
+    <!--  按顺序分别对应:左下角的角度、右下角的角度、左上角的角度、右上角的角度-->
+    <corners
+        android:bottomLeftRadius="@dimen/default_widget_padding"
+        android:bottomRightRadius="@dimen/default_widget_padding"
+        android:topLeftRadius="@dimen/default_widget_padding"
+        android:topRightRadius="@dimen/default_widget_padding" />
+    <!--设置圆角背景色-->
+<!--    <solid android:color="@color/white" />-->
+    <!--  设置边框大小与背景色-->
+    <stroke
+        android:width="1px"
+        android:color="@color/black" />
+    <padding android:bottom="@dimen/default_widget_padding"
+        android:left="@dimen/default_widget_padding"
+        android:right="@dimen/default_widget_padding"
+        android:top="@dimen/default_widget_padding">
+    </padding>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 06ea6ca..9012e8f 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -3,8 +3,7 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/container"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:paddingTop="?attr/actionBarSize">
+    android:layout_height="match_parent">
 
     <com.google.android.material.bottomnavigation.BottomNavigationView
         android:id="@+id/nav_view"
@@ -22,7 +21,7 @@
         android:id="@+id/nav_host_fragment_activity_main"
         android:name="androidx.navigation.fragment.NavHostFragment"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
+        android:layout_height="0dp"
         app:defaultNavHost="true"
         app:layout_constraintBottom_toTopOf="@id/nav_view"
         app:layout_constraintLeft_toLeftOf="parent"
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index c299bd2..f119357 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -7,7 +7,7 @@
     tools:context=".ui.home.HomeFragment">
 
     <TextView
-        android:id="@+id/text_home"
+        android:id="@+id/tv_new_message"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginStart="8dp"
diff --git a/app/src/main/res/layout/fragment_obtain_message.xml b/app/src/main/res/layout/fragment_obtain_message.xml
index a72a899..e6817cf 100644
--- a/app/src/main/res/layout/fragment_obtain_message.xml
+++ b/app/src/main/res/layout/fragment_obtain_message.xml
@@ -1,36 +1,271 @@
 <?xml version="1.0" encoding="utf-8"?>
-
-<ScrollView
+<androidx.constraintlayout.widget.ConstraintLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:overScrollMode="never"
-    android:scrollbars="none">
-    <androidx.constraintlayout.widget.ConstraintLayout
+    android:padding="@dimen/activity_default_padding"
+    tools:context=".ui.message.ObtainMessageFragment">
+    <ScrollView
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:padding="@dimen/activity_default_padding"
-        tools:context=".ui.message.ObtainMessageFragment">
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:overScrollMode="never"
+        android:scrollbars="none">
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
             <com.google.android.material.textfield.TextInputLayout
+                android:id="@+id/ti_layout_title"
                 style="@style/Widget.Material3.TextInputLayout.OutlinedBox"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                app:hint="问候名称:"
-                app:errorEnabled="true"
+                android:layout_margin="@dimen/default_widget_padding"
                 app:counterEnabled="true"
                 app:counterMaxLength="10"
-                app:startIconDrawable="@drawable/ic_home_black_24dp"
-                app:layout_constraintRight_toRightOf="parent"
+                app:errorEnabled="true"
+                android:hint="问候信息"
                 app:layout_constraintLeft_toLeftOf="parent"
-                app:layout_constraintTop_toTopOf="parent">
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:startIconDrawable="@drawable/ic_baseline_mail_24">
 
                 <com.google.android.material.textfield.TextInputEditText
+                    android:id="@+id/tv_message_title"
                     android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:hint="问候名称"/>
+                    android:layout_height="wrap_content" />
             </com.google.android.material.textfield.TextInputLayout>
 
-    </androidx.constraintlayout.widget.ConstraintLayout>
-</ScrollView>
\ No newline at end of file
+            <com.google.android.material.textview.MaterialTextView
+                android:id="@+id/label_message_subtitle"
+                style="@style/TextAppearance.AppCompat.Subhead"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="问候信息"
+                app:layout_constraintTop_toBottomOf="@id/ti_layout_title"></com.google.android.material.textview.MaterialTextView>
+
+            <com.google.android.material.divider.MaterialDivider
+                android:id="@+id/div_message"
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:layout_marginVertical="@dimen/default_widget_padding"
+                app:layout_constraintTop_toBottomOf="@id/label_message_subtitle"></com.google.android.material.divider.MaterialDivider>
+
+            <LinearLayout
+                android:id="@+id/layer_message_info"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="vertical"
+                android:padding="@dimen/default_widget_padding"
+                app:layout_constraintTop_toBottomOf="@id/div_message">
+
+                <LinearLayout
+                    style="@style/default_line"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:gravity="center_vertical"
+                    android:orientation="horizontal">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="*"
+                        android:textColor="@color/red"></TextView>
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="上传图片:"></TextView>
+
+                    <com.google.android.material.button.MaterialButton
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        style="@style/Widget.Material3.Button.ElevatedButton"
+                        app:icon="@drawable/ic_baseline_camera_24"
+                        android:text="点击拍照"
+                        android:padding="@dimen/default_widget_padding"></com.google.android.material.button.MaterialButton>
+                    <Space
+                        android:layout_width="@dimen/default_widget_padding"
+                        android:layout_height="wrap_content"></Space>
+                    <com.google.android.material.button.MaterialButton
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        style="@style/Widget.Material3.Button.ElevatedButton"
+                        app:icon="@drawable/ic_baseline_image_search_24"
+                        android:text="相册选择"
+                        android:padding="@dimen/default_widget_padding"></com.google.android.material.button.MaterialButton>
+                </LinearLayout>
+
+                <LinearLayout
+                    style="@style/default_line"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:gravity="center_vertical"
+                    android:orientation="horizontal">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="*"
+                        android:textColor="@color/red"></TextView>
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="上传音频:"></TextView>
+
+                    <com.google.android.material.button.MaterialButton
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        style="@style/Widget.Material3.Button.ElevatedButton"
+                        app:icon="@drawable/ic_baseline_fiber_manual_record_24"
+                        android:text="长按录音"
+                        android:padding="@dimen/default_widget_padding"></com.google.android.material.button.MaterialButton>
+                    <Space
+                        android:layout_width="@dimen/default_widget_padding"
+                        android:layout_height="wrap_content"></Space>
+                    <com.google.android.material.button.MaterialButton
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        style="@style/Widget.Material3.Button.ElevatedButton"
+                        app:icon="@drawable/ic_baseline_audio_file_24"
+                        android:text="音频选择"
+                        android:padding="@dimen/default_widget_padding"></com.google.android.material.button.MaterialButton>
+                </LinearLayout>
+            </LinearLayout>
+
+            <com.google.android.material.textview.MaterialTextView
+                android:id="@+id/label_send_info"
+                style="@style/TextAppearance.AppCompat.Subhead"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="发送信息"
+                app:layout_constraintTop_toBottomOf="@id/layer_message_info"></com.google.android.material.textview.MaterialTextView>
+
+            <com.google.android.material.divider.MaterialDivider
+                android:id="@+id/div_send_info"
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:layout_marginVertical="@dimen/default_widget_padding"
+                app:layout_constraintTop_toBottomOf="@id/label_send_info"></com.google.android.material.divider.MaterialDivider>
+
+            <LinearLayout
+                android:id="@+id/layer_send_info"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="vertical"
+                android:padding="@dimen/default_widget_padding"
+                app:layout_constraintTop_toBottomOf="@id/div_send_info">
+
+                <LinearLayout
+                    style="@style/default_line"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:gravity="center_vertical"
+                    android:orientation="horizontal">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="*"
+                        android:textColor="@color/red"></TextView>
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="我是谁:"></TextView>
+
+                    <androidx.appcompat.widget.AppCompatEditText
+                        android:id="@+id/edt_send_from"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:background="@drawable/selector_bg_4_round_corner">
+                    </androidx.appcompat.widget.AppCompatEditText>
+                </LinearLayout>
+
+                <LinearLayout
+                    style="@style/default_line"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:gravity="center_vertical"
+                    android:orientation="horizontal">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="*"
+                        android:textColor="@color/red"></TextView>
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="发给谁:"></TextView>
+
+                    <androidx.appcompat.widget.AppCompatEditText
+                        android:id="@+id/edt_send_to"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:background="@drawable/selector_bg_4_round_corner">
+                    </androidx.appcompat.widget.AppCompatEditText>
+                </LinearLayout>
+
+                <LinearLayout
+                    style="@style/default_line"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:gravity="center_vertical"
+                    android:orientation="horizontal">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="*"
+                        android:textColor="@color/red"></TextView>
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="发送时间:"></TextView>
+
+                    <com.google.android.material.button.MaterialButton
+                        android:id="@+id/btn_send_time"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        style="@style/Widget.Material3.Button.ElevatedButton"
+                        app:icon="@drawable/ic_baseline_access_time_24"
+                        android:text="现在"
+                        android:padding="@dimen/default_widget_padding"></com.google.android.material.button.MaterialButton>
+                </LinearLayout>
+
+            </LinearLayout>
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+    </ScrollView>
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        app:layout_constraintBottom_toBottomOf="parent">
+
+        <com.google.android.material.button.MaterialButton
+            style="@style/Widget.Material3.Button.ElevatedButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:text="取消"></com.google.android.material.button.MaterialButton>
+
+        <Space
+            android:layout_width="@dimen/default_widget_padding"
+            android:layout_height="wrap_content"></Space>
+
+        <com.google.android.material.button.MaterialButton
+            style="@style/Widget.Material3.Button"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:text="确认提交"></com.google.android.material.button.MaterialButton>
+    </LinearLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml
index 2b4cd1d..4da7628 100644
--- a/app/src/main/res/navigation/mobile_navigation.xml
+++ b/app/src/main/res/navigation/mobile_navigation.xml
@@ -7,19 +7,30 @@
 
     <fragment
         android:id="@+id/navigation_home"
-        android:name="com.navinfo.vivo.ui.home.HomeFragment"
+        android:name="com.navinfo.volvo.ui.home.HomeFragment"
         android:label="@string/title_home"
-        tools:layout="@layout/fragment_home" />
+        tools:layout="@layout/fragment_home" >
+        <action android:id="@+id/home_2_obtain_message"
+            app:destination="@id/navigation_obtain_message">
+
+        </action>
+    </fragment>
 
     <fragment
         android:id="@+id/navigation_dashboard"
-        android:name="com.navinfo.vivo.ui.dashboard.DashboardFragment"
+        android:name="com.navinfo.volvo.ui.dashboard.DashboardFragment"
         android:label="@string/title_dashboard"
         tools:layout="@layout/fragment_dashboard" />
 
     <fragment
         android:id="@+id/navigation_notifications"
-        android:name="com.navinfo.vivo.ui.notifications.NotificationsFragment"
+        android:name="com.navinfo.volvo.ui.notifications.NotificationsFragment"
         android:label="@string/title_notifications"
         tools:layout="@layout/fragment_notifications" />
+
+    <fragment
+        android:id="@+id/navigation_obtain_message"
+        android:name="com.navinfo.volvo.ui.message.ObtainMessageFragment"
+        android:label="问候编辑"
+        tools:layout="@layout/fragment_obtain_message" />
 </navigation>
\ No newline at end of file
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
index 12394cb..aada80e 100644
--- a/app/src/main/res/values-night/themes.xml
+++ b/app/src/main/res/values-night/themes.xml
@@ -1,6 +1,6 @@
 <resources xmlns:tools="http://schemas.android.com/tools">
     <!-- Base application theme. -->
-    <style name="Theme.NavinfoVivo" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
+    <style name="Theme.NavinfoVolvo" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
         <!-- Primary brand color. -->
         <item name="colorPrimary">@color/purple_200</item>
         <item name="colorPrimaryVariant">@color/purple_700</item>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 628fdfe..e29f70b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
 <resources>
-    <string name="app_name">NavinfoVivo</string>
+    <string name="app_name">NavinfoVolvo</string>
     <string name="title_home">Home</string>
     <string name="title_dashboard">Dashboard</string>
     <string name="title_notifications">Notifications</string>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..229464f
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <style name="default_line">
+        <item name="android:padding">@dimen/default_widget_padding</item>
+    </style>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index e307879..146ed17 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,6 +1,6 @@
 <resources xmlns:tools="http://schemas.android.com/tools">
     <!-- Base application theme. -->
-    <style name="Theme.NavinfoVivo" parent="Theme.Material3.DayNight.NoActionBar">
+    <style name="Theme.NavinfoVolvo" parent="Theme.Material3.DayNight.NoActionBar">
         <!-- Primary brand color. -->
         <item name="colorPrimary">@color/purple_500</item>
         <item name="colorPrimaryVariant">@color/purple_700</item>
diff --git a/app/src/test/java/com/navinfo/vivo/ExampleUnitTest.kt b/app/src/test/java/com/navinfo/volvo/ExampleUnitTest.kt
similarity index 92%
rename from app/src/test/java/com/navinfo/vivo/ExampleUnitTest.kt
rename to app/src/test/java/com/navinfo/volvo/ExampleUnitTest.kt
index 5e88705..fc7791d 100644
--- a/app/src/test/java/com/navinfo/vivo/ExampleUnitTest.kt
+++ b/app/src/test/java/com/navinfo/volvo/ExampleUnitTest.kt
@@ -1,4 +1,4 @@
-package com.navinfo.vivo
+package com.navinfo.volvo
 
 import org.junit.Test
 
diff --git a/settings.gradle b/settings.gradle
index 7dd811e..d7635cb 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -24,5 +24,5 @@ dependencyResolutionManagement {
         mavenCentral()
     }
 }
-rootProject.name = "NavinfoVivo"
+rootProject.name = "NavinfoVolvo"
 include ':app'