From de0a2fe5fc732499126f3a31242d085f02701fda Mon Sep 17 00:00:00 2001 From: squallzhjch Date: Thu, 5 Jan 2023 16:28:42 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0databinding=E7=9A=84?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20=E5=A2=9E=E5=8A=A0paging=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 16 +++- app/src/main/AndroidManifest.xml | 2 +- .../volvo/database/dao/GreetingMessageDao.kt | 10 ++- .../volvo/database/entity/GreetingMessage.kt | 5 +- .../navinfo/volvo/di/module/DatabaseModule.kt | 3 +- .../di/module/DatabaseRepositoryModule.kt | 15 ++++ .../volvo/di/module/NetworkDataModule.kt | 15 ---- .../di/module/NetworkRepositoryModule.kt | 15 ++++ .../volvo/di/module/NetworkUtilModule.kt | 4 +- .../volvo/di/module/ViewModelModule.kt | 12 ++- .../repository/database/DatabaseRepository.kt | 12 +++ .../database/DatabaseRepositoryImp.kt | 23 ++++++ .../NetworkRepository.kt} | 7 +- .../NetworkRepositoryImp.kt} | 13 +-- .../{service => network}/NetworkService.kt | 2 +- .../java/com/navinfo/volvo/ui/MainActivity.kt | 5 +- .../volvo/ui/adapter/MessageAdapter.kt | 54 ------------- .../volvo/ui/fragments/home/HomeAdapter.kt | 81 +++++++++++++++++++ .../{MessageFragment.kt => HomeFragment.kt} | 65 +++++++-------- .../volvo/ui/fragments/home/HomeViewModel.kt | 57 +++++++++++++ .../ui/fragments/home/MessageViewModel.kt | 48 ----------- .../ui/fragments/home/RecLoadStateAdapter.kt | 51 ++++++++++++ app/src/main/res/layout/adapter_home.xml | 67 +++++++++++++++ app/src/main/res/layout/adapter_message.xml | 54 ------------- app/src/main/res/layout/fragment_home.xml | 26 ++++-- app/src/main/res/layout/fragment_login.xml | 2 +- app/src/main/res/menu/bottom_nav_menu.xml | 2 +- .../main/res/navigation/mobile_navigation.xml | 6 +- 28 files changed, 427 insertions(+), 245 deletions(-) create mode 100644 app/src/main/java/com/navinfo/volvo/di/module/DatabaseRepositoryModule.kt delete mode 100644 app/src/main/java/com/navinfo/volvo/di/module/NetworkDataModule.kt create mode 100644 app/src/main/java/com/navinfo/volvo/di/module/NetworkRepositoryModule.kt create mode 100644 app/src/main/java/com/navinfo/volvo/repository/database/DatabaseRepository.kt create mode 100644 app/src/main/java/com/navinfo/volvo/repository/database/DatabaseRepositoryImp.kt rename app/src/main/java/com/navinfo/volvo/repository/{NetworkDataSource.kt => network/NetworkRepository.kt} (76%) rename app/src/main/java/com/navinfo/volvo/repository/{NetworkDataSourceImp.kt => network/NetworkRepositoryImp.kt} (75%) rename app/src/main/java/com/navinfo/volvo/repository/{service => network}/NetworkService.kt (90%) delete mode 100644 app/src/main/java/com/navinfo/volvo/ui/adapter/MessageAdapter.kt create mode 100644 app/src/main/java/com/navinfo/volvo/ui/fragments/home/HomeAdapter.kt rename app/src/main/java/com/navinfo/volvo/ui/fragments/home/{MessageFragment.kt => HomeFragment.kt} (64%) create mode 100644 app/src/main/java/com/navinfo/volvo/ui/fragments/home/HomeViewModel.kt delete mode 100644 app/src/main/java/com/navinfo/volvo/ui/fragments/home/MessageViewModel.kt create mode 100644 app/src/main/java/com/navinfo/volvo/ui/fragments/home/RecLoadStateAdapter.kt create mode 100644 app/src/main/res/layout/adapter_home.xml delete mode 100644 app/src/main/res/layout/adapter_message.xml diff --git a/app/build.gradle b/app/build.gradle index b09493a..24ff887 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,6 +2,7 @@ plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'kotlin-android' + id 'kotlin-parcelize' id 'kotlin-kapt' id 'dagger.hilt.android.plugin' // id 'com.google.dagger.hilt.android' @@ -61,14 +62,17 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'com.google.android.material:material:1.7.0' implementation "androidx.compose.material3:material3:1.0.0-alpha04" + + //布局 implementation 'androidx.constraintlayout:constraintlayout:2.1.4' - + //生命周期 implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.1' implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1' implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1" implementation "androidx.lifecycle:lifecycle-common-java8:2.4.1" + //导航 implementation 'androidx.navigation:navigation-fragment-ktx:2.4.1' implementation 'androidx.navigation:navigation-ui-ktx:2.4.1' @@ -76,7 +80,7 @@ dependencies { androidTestImplementation 'androidx.test.ext:junit:1.1.4' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0' - //room + //room 数据库相关 implementation 'com.tencent.wcdb:room:1.1-19' // 代替 room-runtime,同时也不需要再引用 wcdb-android api 'androidx.sqlite:sqlite:2.2.0' implementation 'androidx.room:room-runtime:2.4.3' @@ -86,6 +90,10 @@ dependencies { kapt 'android.arch.persistence.room:compiler:1.1.1'// compiler 需要用 room 的 kapt 'androidx.room:room-compiler:2.4.3' kapt 'androidx.room:room-ktx:2.4.3' + //分页加载 + implementation "androidx.room:room-paging:2.4.3" + implementation "androidx.paging:paging-runtime-ktx:3.1.1" + androidTestImplementation "android.arch.persistence.room:testing:1.1.1" // implementation "android.arch.lifecycle:extensions:1.1.1" // annotationProcessor "android.arch.lifecycle:compiler:1.1.1" @@ -96,6 +104,8 @@ dependencies { implementation 'me.rosuh:AndroidFilePicker:0.8.2' // 时间选择器 https://github.com/Gredicer/datetimepicker implementation 'com.github.Gredicer:datetimepicker:V1.0.0' + + //带侧滑的自定义列表 implementation 'com.yanzhenjie.recyclerview:x:1.3.2' // implementation 'androidx.appcompat:appcompat:1.5.1' @@ -139,6 +149,8 @@ dependencies { implementation("com.github.bumptech.glide:glide:4.11.0") { exclude group: "com.android.support" } + + } kapt { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 10c7156..12e07c6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,7 +21,7 @@ android:configChanges="locale" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" - android:icon="@mipmap/ic_launcher" + android:icon="@mipmap/volvo_logo_small" android:requestLegacyExternalStorage="true" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" diff --git a/app/src/main/java/com/navinfo/volvo/database/dao/GreetingMessageDao.kt b/app/src/main/java/com/navinfo/volvo/database/dao/GreetingMessageDao.kt index 479d490..ccae7c7 100644 --- a/app/src/main/java/com/navinfo/volvo/database/dao/GreetingMessageDao.kt +++ b/app/src/main/java/com/navinfo/volvo/database/dao/GreetingMessageDao.kt @@ -1,19 +1,27 @@ package com.navinfo.volvo.database.dao +import androidx.paging.PagingSource import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import com.navinfo.volvo.database.entity.GreetingMessage +import kotlinx.coroutines.flow.Flow @Dao interface GreetingMessageDao { @Insert(onConflict = OnConflictStrategy.REPLACE) fun insert(vararg check: GreetingMessage) + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insert(list: List) + @Query("SELECT * FROM GreetingMessage where id =:id") fun findCheckManagerById(id: Long): GreetingMessage? @Query("SELECT * FROM GreetingMessage") - fun findList(): List + fun findAllByFlow(): Flow> + + @Query("SELECT * FROM GreetingMessage") + fun findAllByDataSource(): PagingSource } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/database/entity/GreetingMessage.kt b/app/src/main/java/com/navinfo/volvo/database/entity/GreetingMessage.kt index 4f6f5a8..cf1841f 100644 --- a/app/src/main/java/com/navinfo/volvo/database/entity/GreetingMessage.kt +++ b/app/src/main/java/com/navinfo/volvo/database/entity/GreetingMessage.kt @@ -1,8 +1,10 @@ package com.navinfo.volvo.database.entity +import android.os.Parcelable import androidx.room.Entity import androidx.room.PrimaryKey import androidx.room.TypeConverters +import kotlinx.android.parcel.Parcelize import org.jetbrains.annotations.NotNull @Entity(tableName = "GreetingMessage") @@ -40,5 +42,4 @@ data class GreetingMessage @JvmOverloads constructor( * 附件列表 */ var attachment: MutableList = mutableListOf() -) { -} +) diff --git a/app/src/main/java/com/navinfo/volvo/di/module/DatabaseModule.kt b/app/src/main/java/com/navinfo/volvo/di/module/DatabaseModule.kt index 2a302b3..424cd1f 100644 --- a/app/src/main/java/com/navinfo/volvo/di/module/DatabaseModule.kt +++ b/app/src/main/java/com/navinfo/volvo/di/module/DatabaseModule.kt @@ -5,6 +5,7 @@ import androidx.room.Room import com.navinfo.volvo.database.AppDatabase import com.navinfo.volvo.database.dao.GreetingMessageDao import com.navinfo.volvo.database.dao.UserDao +import com.navinfo.volvo.utils.SystemConstant import com.tencent.wcdb.database.SQLiteCipherSpec import com.tencent.wcdb.room.db.WCDBOpenHelperFactory import dagger.Module @@ -31,7 +32,7 @@ class DatabaseModule { .writeAheadLoggingEnabled(true) // enable WAL mode, remove if not needed .asyncCheckpointEnabled(true); // enable asynchronous checkpoint, remove if not needed - return Room.databaseBuilder(context, AppDatabase::class.java, "NavinfoVolvoDb") + return Room.databaseBuilder(context, AppDatabase::class.java, "${SystemConstant.ROOT_PATH}/NavinfoVolvoDb.db") // [WCDB] Specify open helper to use WCDB database implementation instead // of the Android framework. diff --git a/app/src/main/java/com/navinfo/volvo/di/module/DatabaseRepositoryModule.kt b/app/src/main/java/com/navinfo/volvo/di/module/DatabaseRepositoryModule.kt new file mode 100644 index 0000000..e14a35a --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/di/module/DatabaseRepositoryModule.kt @@ -0,0 +1,15 @@ +package com.navinfo.volvo.di.module + +import com.navinfo.volvo.repository.database.DatabaseRepository +import com.navinfo.volvo.repository.database.DatabaseRepositoryImp +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent + +@InstallIn(SingletonComponent::class) +@Module +abstract class DatabaseRepositoryModule { + @Binds + abstract fun bingDatabaseRepository(databaseRepositoryImp: DatabaseRepositoryImp): DatabaseRepository +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/di/module/NetworkDataModule.kt b/app/src/main/java/com/navinfo/volvo/di/module/NetworkDataModule.kt deleted file mode 100644 index 367df08..0000000 --- a/app/src/main/java/com/navinfo/volvo/di/module/NetworkDataModule.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.navinfo.volvo.di.module - -import com.navinfo.volvo.repository.NetworkDataSource -import com.navinfo.volvo.repository.NetworkDataSourceImp -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent - -@InstallIn(SingletonComponent::class) -@Module -abstract class NetworkDataModule { - @Binds - abstract fun bindNetworkData(networkDataSourceImp: NetworkDataSourceImp): NetworkDataSource -} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/di/module/NetworkRepositoryModule.kt b/app/src/main/java/com/navinfo/volvo/di/module/NetworkRepositoryModule.kt new file mode 100644 index 0000000..df1d17f --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/di/module/NetworkRepositoryModule.kt @@ -0,0 +1,15 @@ +package com.navinfo.volvo.di.module + +import com.navinfo.volvo.repository.network.NetworkRepository +import com.navinfo.volvo.repository.network.NetworkRepositoryImp +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent + +@InstallIn(SingletonComponent::class) +@Module +abstract class NetworkRepositoryModule { + @Binds + abstract fun bindNetworkRepository(networkRepositoryImp: NetworkRepositoryImp): NetworkRepository +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/di/module/NetworkUtilModule.kt b/app/src/main/java/com/navinfo/volvo/di/module/NetworkUtilModule.kt index f7acb9a..6e0212e 100644 --- a/app/src/main/java/com/navinfo/volvo/di/module/NetworkUtilModule.kt +++ b/app/src/main/java/com/navinfo/volvo/di/module/NetworkUtilModule.kt @@ -4,7 +4,7 @@ import android.app.Application import android.content.Context import com.google.gson.Gson import com.navinfo.volvo.Constant -import com.navinfo.volvo.repository.service.NetworkService +import com.navinfo.volvo.repository.network.NetworkService import com.navinfo.volvo.tools.GsonUtil import dagger.Lazy import dagger.Module @@ -15,7 +15,6 @@ import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory -import java.util.concurrent.TimeUnit import javax.inject.Singleton @@ -101,4 +100,5 @@ class NetworkUtilModule { fun provideNetworkService(retrofit: Retrofit): NetworkService { return retrofit.create(NetworkService::class.java) } + } diff --git a/app/src/main/java/com/navinfo/volvo/di/module/ViewModelModule.kt b/app/src/main/java/com/navinfo/volvo/di/module/ViewModelModule.kt index 49a7be3..36cea4c 100644 --- a/app/src/main/java/com/navinfo/volvo/di/module/ViewModelModule.kt +++ b/app/src/main/java/com/navinfo/volvo/di/module/ViewModelModule.kt @@ -3,8 +3,9 @@ package com.navinfo.volvo.di.module import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import com.navinfo.volvo.di.key.ViewModelKey -import com.navinfo.volvo.ui.fragments.home.MessageViewModel +import com.navinfo.volvo.ui.fragments.home.HomeViewModel import com.navinfo.volvo.ui.fragments.login.LoginViewModel +import com.navinfo.volvo.ui.fragments.message.ObtainMessageViewModel import dagger.Binds import dagger.Module import dagger.hilt.InstallIn @@ -25,6 +26,11 @@ abstract class ViewModelModule { @IntoMap @Binds - @ViewModelKey(MessageViewModel::class) - abstract fun bindMessageFragmentViewModel(viewModel: MessageViewModel): ViewModel + @ViewModelKey(HomeViewModel::class) + abstract fun bindMessageFragmentViewModel(viewModel: HomeViewModel): ViewModel + + @IntoMap + @Binds + @ViewModelKey(ObtainMessageViewModel::class) + abstract fun bindObtainMessageFragmentViewModel(viewModel: ObtainMessageViewModel): ViewModel } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/repository/database/DatabaseRepository.kt b/app/src/main/java/com/navinfo/volvo/repository/database/DatabaseRepository.kt new file mode 100644 index 0000000..eb9fe90 --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/repository/database/DatabaseRepository.kt @@ -0,0 +1,12 @@ +package com.navinfo.volvo.repository.database + +import androidx.paging.PagingData +import com.navinfo.volvo.database.entity.GreetingMessage +import kotlinx.coroutines.flow.Flow + +/** + * 数据库操作接口 + */ +interface DatabaseRepository { + fun getMessageByPaging(): Flow> +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/repository/database/DatabaseRepositoryImp.kt b/app/src/main/java/com/navinfo/volvo/repository/database/DatabaseRepositoryImp.kt new file mode 100644 index 0000000..77948d0 --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/repository/database/DatabaseRepositoryImp.kt @@ -0,0 +1,23 @@ +package com.navinfo.volvo.repository.database + +import androidx.paging.Pager +import androidx.paging.PagingConfig +import androidx.paging.PagingData +import com.navinfo.volvo.database.dao.GreetingMessageDao +import com.navinfo.volvo.database.entity.GreetingMessage +import kotlinx.coroutines.flow.Flow +import javax.inject.Inject + +class DatabaseRepositoryImp @Inject constructor( + private val messageDao: GreetingMessageDao +) : DatabaseRepository { + companion object { + const val PAGE_SIZE = 20 + } + + override fun getMessageByPaging(): Flow> { + return Pager(PagingConfig(PAGE_SIZE)) { + messageDao.findAllByDataSource() + }.flow + } +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/repository/NetworkDataSource.kt b/app/src/main/java/com/navinfo/volvo/repository/network/NetworkRepository.kt similarity index 76% rename from app/src/main/java/com/navinfo/volvo/repository/NetworkDataSource.kt rename to app/src/main/java/com/navinfo/volvo/repository/network/NetworkRepository.kt index dddf32f..b03fde5 100644 --- a/app/src/main/java/com/navinfo/volvo/repository/NetworkDataSource.kt +++ b/app/src/main/java/com/navinfo/volvo/repository/network/NetworkRepository.kt @@ -1,10 +1,13 @@ -package com.navinfo.volvo.repository +package com.navinfo.volvo.repository.network import com.navinfo.volvo.http.DefaultResponse import com.navinfo.volvo.model.messagelist.NetworkMessageListPost import com.navinfo.volvo.model.messagelist.NetworkMessageListResponse import com.navinfo.volvo.util.NetResult -interface NetworkDataSource { +/** + * 网络访问接口 + */ +interface NetworkRepository { suspend fun getCardList(message: NetworkMessageListPost): NetResult> } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/repository/NetworkDataSourceImp.kt b/app/src/main/java/com/navinfo/volvo/repository/network/NetworkRepositoryImp.kt similarity index 75% rename from app/src/main/java/com/navinfo/volvo/repository/NetworkDataSourceImp.kt rename to app/src/main/java/com/navinfo/volvo/repository/network/NetworkRepositoryImp.kt index 2d662bb..bbdea93 100644 --- a/app/src/main/java/com/navinfo/volvo/repository/NetworkDataSourceImp.kt +++ b/app/src/main/java/com/navinfo/volvo/repository/network/NetworkRepositoryImp.kt @@ -1,13 +1,10 @@ -package com.navinfo.volvo.repository +package com.navinfo.volvo.repository.network -import com.navinfo.volvo.database.AppDatabase import com.navinfo.volvo.database.dao.GreetingMessageDao import com.navinfo.volvo.di.scope.IoDispatcher -import com.navinfo.volvo.database.entity.GreetingMessage import com.navinfo.volvo.http.DefaultResponse import com.navinfo.volvo.model.messagelist.NetworkMessageListPost import com.navinfo.volvo.model.messagelist.NetworkMessageListResponse -import com.navinfo.volvo.repository.service.NetworkService import com.navinfo.volvo.tools.GsonUtil import com.navinfo.volvo.util.NetResult import kotlinx.coroutines.CoroutineDispatcher @@ -17,11 +14,11 @@ import okhttp3.RequestBody.Companion.toRequestBody import javax.inject.Inject -class NetworkDataSourceImp @Inject constructor( +class NetworkRepositoryImp @Inject constructor( private val netWorkService: NetworkService, private val messageDao: GreetingMessageDao, @IoDispatcher private val ioDispatcher: CoroutineDispatcher -) : NetworkDataSource { +) : NetworkRepository { override suspend fun getCardList(message: NetworkMessageListPost): NetResult> = withContext(ioDispatcher) { @@ -31,9 +28,7 @@ class NetworkDataSourceImp @Inject constructor( val result = netWorkService.queryCardListByApp(stringBody) if (result.isSuccessful) { val body = result.body() - val list: MutableList = - listOf(body!!.data!!.rows) as MutableList - messageDao.insert(*list.map { it }.toTypedArray()) + messageDao.insert(body!!.data!!.rows) NetResult.Success(body) } else { NetResult.Success(null) diff --git a/app/src/main/java/com/navinfo/volvo/repository/service/NetworkService.kt b/app/src/main/java/com/navinfo/volvo/repository/network/NetworkService.kt similarity index 90% rename from app/src/main/java/com/navinfo/volvo/repository/service/NetworkService.kt rename to app/src/main/java/com/navinfo/volvo/repository/network/NetworkService.kt index 208ce28..b211c41 100644 --- a/app/src/main/java/com/navinfo/volvo/repository/service/NetworkService.kt +++ b/app/src/main/java/com/navinfo/volvo/repository/network/NetworkService.kt @@ -1,4 +1,4 @@ -package com.navinfo.volvo.repository.service +package com.navinfo.volvo.repository.network import com.navinfo.volvo.http.DefaultResponse import com.navinfo.volvo.model.messagelist.NetworkMessageListResponse diff --git a/app/src/main/java/com/navinfo/volvo/ui/MainActivity.kt b/app/src/main/java/com/navinfo/volvo/ui/MainActivity.kt index bd5f4b8..24889ba 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/MainActivity.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/MainActivity.kt @@ -1,7 +1,6 @@ package com.navinfo.volvo.ui import android.content.DialogInterface -import android.content.Intent import android.os.Bundle import android.view.View import android.widget.Toast @@ -85,13 +84,13 @@ class MainActivity : AppCompatActivity() { val navController = findNavController(R.id.nav_host_fragment_activity_main) val appBarConfiguration = AppBarConfiguration( setOf( - R.id.navigation_message, R.id.navigation_dashboard, R.id.navigation_notifications, + R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications, ) ) setupActionBarWithNavController(navController, appBarConfiguration) navView.setupWithNavController(navController) navController.addOnDestinationChangedListener { controller, destination, arguments -> - if (destination.id == R.id.navigation_message + if (destination.id == R.id.navigation_home || destination.id == R.id.navigation_dashboard || destination.id == R.id.navigation_notifications || destination.id == R.id.navigation_obtain_message diff --git a/app/src/main/java/com/navinfo/volvo/ui/adapter/MessageAdapter.kt b/app/src/main/java/com/navinfo/volvo/ui/adapter/MessageAdapter.kt deleted file mode 100644 index cb7525c..0000000 --- a/app/src/main/java/com/navinfo/volvo/ui/adapter/MessageAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.navinfo.volvo.ui.adapter - -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.navinfo.volvo.R -import com.navinfo.volvo.database.entity.GreetingMessage - -class MessageAdapter : RecyclerView.Adapter() { - - var itemList: MutableList = mutableListOf() - - fun addItem(message: GreetingMessage) { - itemList.add(message) - notifyItemInserted(itemList.size - 1) - } - - fun setItem(messageList: MutableList){ - itemList = messageList - notifyDataSetChanged() - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { - val view = - LayoutInflater.from(parent.context).inflate(R.layout.adapter_message, parent, false) - var viewHolder = MyViewHolder(view) - viewHolder.itemView.setOnClickListener { - - } - return viewHolder - } - - override fun onBindViewHolder(holder: MyViewHolder, position: Int) { - val message = itemList[position] - holder.toName.text = message.toWho - holder.messageText.text = message.name - holder.sendTime.text = message.sendDate - } - - override fun getItemCount(): Int { - return itemList.size - } - - inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - var image: ImageView = itemView.findViewById(R.id.message_head_icon) - var toName: TextView = itemView.findViewById(R.id.message_to_username) - var sendTime: TextView = itemView.findViewById(R.id.message_send_time) - var status: TextView = itemView.findViewById(R.id.message_status) - var messageText: TextView = itemView.findViewById(R.id.message_text) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/home/HomeAdapter.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/home/HomeAdapter.kt new file mode 100644 index 0000000..398faf6 --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/home/HomeAdapter.kt @@ -0,0 +1,81 @@ +package com.navinfo.volvo.ui.fragments.home + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.databinding.DataBindingUtil +import androidx.fragment.app.Fragment +import androidx.paging.PagingDataAdapter +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.navinfo.volvo.R +import com.navinfo.volvo.database.entity.GreetingMessage +import com.navinfo.volvo.databinding.AdapterHomeBinding + +class HomeAdapter(fragment: Fragment) : + PagingDataAdapter(DiffCallback()) { + + val fragment = fragment +// var itemList = ArrayList() +// +// fun addItem(message: GreetingMessage) { +// itemList.add(message) +// notifyItemInserted(itemList.size - 1) +// } +// +// fun setItems(messageList: List) { +// itemList.clear() +// itemList.addAll(messageList) +// notifyDataSetChanged() +// } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { + val mDataBinding: AdapterHomeBinding = + DataBindingUtil.inflate( + LayoutInflater.from(fragment.context), + R.layout.adapter_home, + parent, + false + ) + return MyViewHolder(mDataBinding) + } + + override fun onBindViewHolder(holder: MyViewHolder, position: Int) { + holder.onBind(position) + } + +// override fun getItemCount(): Int { +// return itemList.size +// } + + inner class MyViewHolder(private val mDataBinding: AdapterHomeBinding) : + RecyclerView.ViewHolder(mDataBinding.root) { + fun onBind(position: Int) { + var row = getItem(position) + mDataBinding.greetingMessage = row + Glide.with(fragment) + .asBitmap().fitCenter() + .load(row!!.imageUrl) + .placeholder(R.mipmap.volvo_logo_small) + .error(R.mipmap.volvo_logo_small) + .into(mDataBinding.messageHeadIcon) + } + + } + + class DiffCallback : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: GreetingMessage, newItem: GreetingMessage): Boolean { + return oldItem.uuid == newItem.uuid + } + + override fun areContentsTheSame( + oldItem: GreetingMessage, + newItem: GreetingMessage + ): Boolean { + return oldItem == newItem + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/home/MessageFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/home/HomeFragment.kt similarity index 64% rename from app/src/main/java/com/navinfo/volvo/ui/fragments/home/MessageFragment.kt rename to app/src/main/java/com/navinfo/volvo/ui/fragments/home/HomeFragment.kt index 33b9dc2..cd5cfe2 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/fragments/home/MessageFragment.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/home/HomeFragment.kt @@ -4,50 +4,44 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.databinding.DataBindingUtil import androidx.fragment.app.viewModels -import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import com.navinfo.volvo.R import com.navinfo.volvo.databinding.FragmentHomeBinding import com.navinfo.volvo.tools.DisplayUtil import com.navinfo.volvo.ui.BaseFragment -import com.navinfo.volvo.ui.adapter.MessageAdapter -import com.navinfo.volvo.ui.fragments.message.ObtainMessageViewModel import com.yanzhenjie.recyclerview.* import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch @AndroidEntryPoint -class MessageFragment : BaseFragment(), OnItemClickListener, OnItemMenuClickListener { +class HomeFragment : BaseFragment(), OnItemClickListener, OnItemMenuClickListener { - private var _binding: FragmentHomeBinding? = null + private val viewModel by viewModels { viewModelFactoryProvider } - // This property is only valid between onCreateView and - // onDestroyView. - private val binding get() = _binding!! - - private val viewModel by viewModels { viewModelFactoryProvider } + private lateinit var messageAdapter: HomeAdapter + private lateinit var mDataBinding: FragmentHomeBinding override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { -// val homeViewModel = -// ViewModelProvider(this)[MessageViewModel::class.java] -// val obtainMessageViewModel = -// ViewModelProvider(requireActivity()).get(ObtainMessageViewModel::class.java) - - _binding = FragmentHomeBinding.inflate(inflater, container, false) - val root: View = binding.root + mDataBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false) + mDataBinding.lifecycleOwner = this initView() - return root + return mDataBinding.root } private fun initView() { - val recyclerview: SwipeRecyclerView = binding.homeMessageRecyclerview + mDataBinding.homeViewModel = viewModel + messageAdapter = HomeAdapter(this) + val recyclerview: SwipeRecyclerView = mDataBinding.homeRecyclerview recyclerview.adapter = null //先设置null,否则会报错 //创建菜单选项 //注意:使用滑动菜单不能开启滑动删除,否则只有滑动删除没有滑动菜单 @@ -71,34 +65,37 @@ class MessageFragment : BaseFragment(), OnItemClickListener, OnItemMenuClickList rightMenu.addMenuItem(shareItem) } val layoutManager = LinearLayoutManager(context) - val adapter = MessageAdapter() + recyclerview.layoutManager = layoutManager recyclerview.addItemDecoration(DividerItemDecoration(context, layoutManager.orientation)) recyclerview.setSwipeMenuCreator(mSwipeMenuCreator) recyclerview.setOnItemClickListener(this) - recyclerview.useDefaultLoadMore() - recyclerview.setLoadMoreListener { - +// recyclerview.useDefaultLoadMore() +// recyclerview.setLoadMoreListener { +// +// } + lifecycleScope.launch { + viewModel.messageList.collectLatest { + messageAdapter.submitData(it) + } } - recyclerview.adapter = adapter -// homeViewModel.getMessageList().observe(viewLifecycleOwner, Observer { contacts -> -// adapter.setItem(contacts) -// }) +// messageAdapter.withLoadStateFooter( +// footer = RecLoadStateAdapter { messageAdapter.retry() } +// ) + +// messageAdapter.withLoadStateHeader() + recyclerview.adapter = messageAdapter + } override fun onStart() { super.onStart() - getMessageList() - } - - private fun getMessageList() { - viewModel.getMessageList() + viewModel.getNetMessageList() } override fun onDestroyView() { super.onDestroyView() - _binding = null } override fun onItemClick(view: View?, adapterPosition: Int) { diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/home/HomeViewModel.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/home/HomeViewModel.kt new file mode 100644 index 0000000..ac68d39 --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/home/HomeViewModel.kt @@ -0,0 +1,57 @@ +package com.navinfo.volvo.ui.fragments.home + +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import androidx.paging.PagingData +import com.navinfo.volvo.database.dao.GreetingMessageDao +import com.navinfo.volvo.database.entity.GreetingMessage +import com.navinfo.volvo.model.messagelist.NetworkMessageListPost +import com.navinfo.volvo.repository.database.DatabaseRepository +import com.navinfo.volvo.repository.network.NetworkRepository +import com.navinfo.volvo.util.NetResult +import com.navinfo.volvo.util.asLiveData +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.launch +import javax.inject.Inject + +class HomeViewModel @Inject constructor( + private val netRepository: NetworkRepository, + private val dataRepository: DatabaseRepository +) : ViewModel() { + + private val _isLoading = MutableLiveData() + val isLoading = _isLoading.asLiveData() + +// private val _messageList = MutableLiveData>() +// val messageList = _messageList.asLiveData() + + + val messageList: Flow> + get() = dataRepository.getMessageByPaging() + + + fun getNetMessageList() { + _isLoading.postValue(true) + viewModelScope.launch { + val messagePost = NetworkMessageListPost(who = "", toWho = "") + when (val result = netRepository.getCardList(messagePost)) { + is NetResult.Success -> { + _isLoading.value = false +// if (result.data != null) { +// val list = (result.data.data as NetworkMessageListResponse).rows +// _messageList.value = list +// } + } + + is NetResult.Error -> { + _isLoading.value = false + } + is NetResult.Loading -> { + _isLoading.postValue(true) + } + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/home/MessageViewModel.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/home/MessageViewModel.kt deleted file mode 100644 index c65fd8f..0000000 --- a/app/src/main/java/com/navinfo/volvo/ui/fragments/home/MessageViewModel.kt +++ /dev/null @@ -1,48 +0,0 @@ -package com.navinfo.volvo.ui.fragments.home - -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import com.navinfo.volvo.database.entity.GreetingMessage -import com.navinfo.volvo.model.messagelist.NetworkMessageListPost -import com.navinfo.volvo.model.messagelist.NetworkMessageListResponse -import com.navinfo.volvo.repository.NetworkDataSource -import com.navinfo.volvo.util.NetResult -import com.navinfo.volvo.util.asLiveData -import kotlinx.coroutines.launch -import javax.inject.Inject - -class MessageViewModel @Inject constructor( - private val repository: NetworkDataSource -) : ViewModel() { - - private val _isLoading = MutableLiveData() - val isLoading = _isLoading.asLiveData() - - private val _messageList = MutableLiveData>() - val messageList = _messageList.asLiveData() - - fun getMessageList() { - _isLoading.postValue(true) - viewModelScope.launch { - val messagePost = NetworkMessageListPost(who = "北京测试", toWho = "volvo测试") - when (val result = repository.getCardList(messagePost)) { - is NetResult.Success -> { - _isLoading.value = false - if (result.data != null) { - val list = (result.data.data as NetworkMessageListResponse).rows - _messageList.value = list - } - } - - is NetResult.Error -> { - _isLoading.value = false - } - is NetResult.Loading -> { - _isLoading.postValue(true) - } - } - } - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/home/RecLoadStateAdapter.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/home/RecLoadStateAdapter.kt new file mode 100644 index 0000000..034840f --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/home/RecLoadStateAdapter.kt @@ -0,0 +1,51 @@ +//package com.navinfo.volvo.ui.fragments.home +// +//import android.view.LayoutInflater +//import android.view.View +//import android.view.ViewGroup +//import androidx.core.view.isVisible +//import androidx.paging.LoadState +//import androidx.paging.LoadStateAdapter +//import androidx.recyclerview.widget.RecyclerView +//import com.example.picsapp.R +//import com.example.picsapp.databinding.LoadStateViewBinding +// +//class RecLoadStateAdapter( +// private val retry: () -> Unit +//) : LoadStateAdapter() { +// +// override fun onCreateViewHolder(parent: ViewGroup, loadState: LoadState): LoadStateViewHolder { +// +// val binding = LoadStateViewBinding +// .inflate(LayoutInflater.from(parent.context), parent, false) +// +// return LoadStateViewHolder(binding) +// } +// +// override fun onBindViewHolder(holder: LoadStateViewHolder, loadState: LoadState) { +// holder.onBind(loadState) +// +// } +// +// +// +// inner class LoadStateViewHolder(private val binding: LoadStateViewBinding) : RecyclerView.ViewHolder(binding.root){ +// fun onBind(loadState: LoadState) { +// val progress = binding.loadStateProgress +// val btnRetry = binding.loadStateRetry +// val txtErrorMessage = binding.loadStateErrorMessage +// +// btnRetry.isVisible = loadState !is LoadState.Loading +// txtErrorMessage.isVisible = loadState !is LoadState.Loading +// progress.isVisible = loadState is LoadState.Loading +// +// if (loadState is LoadState.Error){ +// txtErrorMessage.text = loadState.error.localizedMessage +// } +// +// btnRetry.setOnClickListener { +// retry.invoke() +// } +// } +// } +//} \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_home.xml b/app/src/main/res/layout/adapter_home.xml new file mode 100644 index 0000000..78e7b4e --- /dev/null +++ b/app/src/main/res/layout/adapter_home.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_message.xml b/app/src/main/res/layout/adapter_message.xml deleted file mode 100644 index 0137030..0000000 --- a/app/src/main/res/layout/adapter_message.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 5f95163..6e92011 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -1,10 +1,20 @@ - - + xmlns:tools="http://schemas.android.com/tools"> + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_login.xml b/app/src/main/res/layout/fragment_login.xml index 30aec55..6a7d09f 100644 --- a/app/src/main/res/layout/fragment_login.xml +++ b/app/src/main/res/layout/fragment_login.xml @@ -11,7 +11,7 @@ android:id="@+id/login_fragment_logo" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@mipmap/ic_launcher" + android:src="@mipmap/volvo_logo_small" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml index 1de2fe3..9274e30 100644 --- a/app/src/main/res/menu/bottom_nav_menu.xml +++ b/app/src/main/res/menu/bottom_nav_menu.xml @@ -2,7 +2,7 @@ From e569ab4a82cafc35401f0c32cfc3108757fc3dba Mon Sep 17 00:00:00 2001 From: squallzhjch Date: Fri, 6 Jan 2023 13:46:55 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=9C=AA=E8=AF=BB=E6=8F=90=E7=A4=BA=E6=B0=94=E6=B3=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/navinfo/volvo/MyApplication.kt | 3 -- .../volvo/database/dao/GreetingMessageDao.kt | 39 +++++++++++----- .../volvo/database/entity/GreetingMessage.kt | 5 +- .../volvo/di/module/ViewModelModule.kt | 8 ++++ .../database/DatabaseRepositoryImp.kt | 5 +- .../network/NetworkRepositoryImp.kt | 4 +- .../java/com/navinfo/volvo/ui/BaseActivity.kt | 11 +++++ .../java/com/navinfo/volvo/ui/MainActivity.kt | 28 ++++++++++- .../navinfo/volvo/ui/MainActivityViewModel.kt | 17 +++++++ .../volvo/ui/{ => fragments}/BaseFragment.kt | 2 +- .../volvo/ui/fragments/home/HomeFragment.kt | 20 ++++---- .../volvo/ui/fragments/login/LoginFragment.kt | 5 +- .../message/ObtainMessageViewModel.kt | 33 +++++++++---- app/src/main/res/drawable/shape_circular.xml | 9 ++++ app/src/main/res/layout/adapter_home.xml | 37 +++++++++++---- app/src/main/res/layout/fragment_home.xml | 46 +++++++++++++------ app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 18 files changed, 210 insertions(+), 66 deletions(-) create mode 100644 app/src/main/java/com/navinfo/volvo/ui/BaseActivity.kt create mode 100644 app/src/main/java/com/navinfo/volvo/ui/MainActivityViewModel.kt rename app/src/main/java/com/navinfo/volvo/ui/{ => fragments}/BaseFragment.kt (85%) create mode 100644 app/src/main/res/drawable/shape_circular.xml diff --git a/app/src/main/java/com/navinfo/volvo/MyApplication.kt b/app/src/main/java/com/navinfo/volvo/MyApplication.kt index 05e3780..d076fd5 100644 --- a/app/src/main/java/com/navinfo/volvo/MyApplication.kt +++ b/app/src/main/java/com/navinfo/volvo/MyApplication.kt @@ -5,7 +5,4 @@ import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp open class MyApplication : Application() { - override fun onCreate() { - super.onCreate() - } } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/database/dao/GreetingMessageDao.kt b/app/src/main/java/com/navinfo/volvo/database/dao/GreetingMessageDao.kt index ccae7c7..5d87e0c 100644 --- a/app/src/main/java/com/navinfo/volvo/database/dao/GreetingMessageDao.kt +++ b/app/src/main/java/com/navinfo/volvo/database/dao/GreetingMessageDao.kt @@ -1,27 +1,42 @@ package com.navinfo.volvo.database.dao import androidx.paging.PagingSource -import androidx.room.Dao -import androidx.room.Insert -import androidx.room.OnConflictStrategy -import androidx.room.Query +import androidx.room.* import com.navinfo.volvo.database.entity.GreetingMessage import kotlinx.coroutines.flow.Flow @Dao interface GreetingMessageDao { - @Insert(onConflict = OnConflictStrategy.REPLACE) - fun insert(vararg check: GreetingMessage) - @Insert(onConflict = OnConflictStrategy.REPLACE) - fun insert(list: List) + @Insert + fun insert(message: GreetingMessage): Long - @Query("SELECT * FROM GreetingMessage where id =:id") - fun findCheckManagerById(id: Long): GreetingMessage? + @Update(onConflict = OnConflictStrategy.REPLACE) + fun update(message: GreetingMessage) - @Query("SELECT * FROM GreetingMessage") - fun findAllByFlow(): Flow> + @Query("SELECT count(id) FROM GreetingMessage WHERE read = 0") + fun countUnreadByFlow(): Flow + + /** + * 分页查询 + */ @Query("SELECT * FROM GreetingMessage") fun findAllByDataSource(): PagingSource + + /** + * 检查某条数据是否存在 + */ + @Query("SELECT id From GreetingMessage WHERE id = :id LIMIT 1") + fun getMessageId(id: Long): Long + + @Transaction + suspend fun insertOrUpdate(list: List) { + for (message in list) { + val id = getMessageId(message.id) + if (id == 0L) { + insert(message) + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/database/entity/GreetingMessage.kt b/app/src/main/java/com/navinfo/volvo/database/entity/GreetingMessage.kt index cf1841f..4bca705 100644 --- a/app/src/main/java/com/navinfo/volvo/database/entity/GreetingMessage.kt +++ b/app/src/main/java/com/navinfo/volvo/database/entity/GreetingMessage.kt @@ -11,7 +11,7 @@ import org.jetbrains.annotations.NotNull @TypeConverters(AttachmentConverters::class) data class GreetingMessage @JvmOverloads constructor( @PrimaryKey(autoGenerate = true) - var uuid:Long = 0, + var uuid: Long = 0, var id: Long = 0, var searchValue: String? = "", var createBy: String? = "", @@ -41,5 +41,6 @@ data class GreetingMessage @JvmOverloads constructor( /** * 附件列表 */ - var attachment: MutableList = mutableListOf() + var attachment: MutableList = mutableListOf(), + var read: Boolean = false, ) diff --git a/app/src/main/java/com/navinfo/volvo/di/module/ViewModelModule.kt b/app/src/main/java/com/navinfo/volvo/di/module/ViewModelModule.kt index 36cea4c..ec45c18 100644 --- a/app/src/main/java/com/navinfo/volvo/di/module/ViewModelModule.kt +++ b/app/src/main/java/com/navinfo/volvo/di/module/ViewModelModule.kt @@ -3,6 +3,7 @@ package com.navinfo.volvo.di.module import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import com.navinfo.volvo.di.key.ViewModelKey +import com.navinfo.volvo.ui.MainActivityViewModel import com.navinfo.volvo.ui.fragments.home.HomeViewModel import com.navinfo.volvo.ui.fragments.login.LoginViewModel import com.navinfo.volvo.ui.fragments.message.ObtainMessageViewModel @@ -19,6 +20,11 @@ abstract class ViewModelModule { @Binds abstract fun bindViewModelFactory(viewModelFactory: ViewModelFactory): ViewModelProvider.Factory + @IntoMap + @Binds + @ViewModelKey(MainActivityViewModel::class) + abstract fun bindMainViewModel(viewModel: MainActivityViewModel): ViewModel + @IntoMap @Binds @ViewModelKey(LoginViewModel::class) @@ -33,4 +39,6 @@ abstract class ViewModelModule { @Binds @ViewModelKey(ObtainMessageViewModel::class) abstract fun bindObtainMessageFragmentViewModel(viewModel: ObtainMessageViewModel): ViewModel + + } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/repository/database/DatabaseRepositoryImp.kt b/app/src/main/java/com/navinfo/volvo/repository/database/DatabaseRepositoryImp.kt index 77948d0..fcbba0d 100644 --- a/app/src/main/java/com/navinfo/volvo/repository/database/DatabaseRepositoryImp.kt +++ b/app/src/main/java/com/navinfo/volvo/repository/database/DatabaseRepositoryImp.kt @@ -3,13 +3,15 @@ package com.navinfo.volvo.repository.database import androidx.paging.Pager import androidx.paging.PagingConfig import androidx.paging.PagingData +import com.navinfo.volvo.database.AppDatabase import com.navinfo.volvo.database.dao.GreetingMessageDao import com.navinfo.volvo.database.entity.GreetingMessage import kotlinx.coroutines.flow.Flow import javax.inject.Inject class DatabaseRepositoryImp @Inject constructor( - private val messageDao: GreetingMessageDao + private val messageDao: GreetingMessageDao, + private val database: AppDatabase ) : DatabaseRepository { companion object { const val PAGE_SIZE = 20 @@ -20,4 +22,5 @@ class DatabaseRepositoryImp @Inject constructor( messageDao.findAllByDataSource() }.flow } + } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/repository/network/NetworkRepositoryImp.kt b/app/src/main/java/com/navinfo/volvo/repository/network/NetworkRepositoryImp.kt index bbdea93..5fd1e2f 100644 --- a/app/src/main/java/com/navinfo/volvo/repository/network/NetworkRepositoryImp.kt +++ b/app/src/main/java/com/navinfo/volvo/repository/network/NetworkRepositoryImp.kt @@ -28,7 +28,9 @@ class NetworkRepositoryImp @Inject constructor( val result = netWorkService.queryCardListByApp(stringBody) if (result.isSuccessful) { val body = result.body() - messageDao.insert(body!!.data!!.rows) + if(body!!.data != null && body.data!!.rows != null){ + messageDao.insertOrUpdate(body.data!!.rows) + } NetResult.Success(body) } else { NetResult.Success(null) diff --git a/app/src/main/java/com/navinfo/volvo/ui/BaseActivity.kt b/app/src/main/java/com/navinfo/volvo/ui/BaseActivity.kt new file mode 100644 index 0000000..77c1577 --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/ui/BaseActivity.kt @@ -0,0 +1,11 @@ +package com.navinfo.volvo.ui + +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import javax.inject.Inject + +abstract class BaseActivity : AppCompatActivity() { + @Inject + lateinit var viewModelFactoryProvider: ViewModelProvider.Factory +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/ui/MainActivity.kt b/app/src/main/java/com/navinfo/volvo/ui/MainActivity.kt index 24889ba..276c772 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/MainActivity.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/MainActivity.kt @@ -4,7 +4,11 @@ import android.content.DialogInterface import android.os.Bundle import android.view.View import android.widget.Toast +import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.viewModelScope import androidx.navigation.findNavController import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.setupActionBarWithNavController @@ -30,18 +34,23 @@ import com.navinfo.volvo.R import com.navinfo.volvo.databinding.ActivityMainBinding import com.navinfo.volvo.utils.SystemConstant import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch +import javax.inject.Inject @AndroidEntryPoint -class MainActivity : AppCompatActivity() { +class MainActivity : BaseActivity() { private lateinit var binding: ActivityMainBinding + private val viewModel by viewModels { viewModelFactoryProvider } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) - setupNavigation() + XXPermissions.with(this) // 申请单个权限 @@ -61,6 +70,7 @@ class MainActivity : AppCompatActivity() { } // 在SD卡创建项目目录 createRootFolder() + setupNavigation() } override fun onDenied(permissions: MutableList, never: Boolean) { @@ -89,6 +99,20 @@ class MainActivity : AppCompatActivity() { ) setupActionBarWithNavController(navController, appBarConfiguration) navView.setupWithNavController(navController) + + lifecycleScope.launch{ + viewModel.getUnreadCount().collect { + runOnUiThread{ + if(it == 0L){ + navView.removeBadge(R.id.navigation_home) + }else{ + var badge = navView.getOrCreateBadge(R.id.navigation_home); + badge.number = it.toInt() + } + } + } + } + navController.addOnDestinationChangedListener { controller, destination, arguments -> if (destination.id == R.id.navigation_home || destination.id == R.id.navigation_dashboard diff --git a/app/src/main/java/com/navinfo/volvo/ui/MainActivityViewModel.kt b/app/src/main/java/com/navinfo/volvo/ui/MainActivityViewModel.kt new file mode 100644 index 0000000..b0ffafe --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/ui/MainActivityViewModel.kt @@ -0,0 +1,17 @@ +package com.navinfo.volvo.ui + +import androidx.lifecycle.ViewModel +import androidx.paging.PagingData +import com.navinfo.volvo.database.dao.GreetingMessageDao +import com.navinfo.volvo.database.entity.GreetingMessage +import kotlinx.coroutines.flow.Flow +import javax.inject.Inject + +class MainActivityViewModel @Inject constructor( + private val messageDao: GreetingMessageDao, +) : ViewModel() { + + + fun getUnreadCount(): Flow = messageDao.countUnreadByFlow() + +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/ui/BaseFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/BaseFragment.kt similarity index 85% rename from app/src/main/java/com/navinfo/volvo/ui/BaseFragment.kt rename to app/src/main/java/com/navinfo/volvo/ui/fragments/BaseFragment.kt index bf288d6..b112973 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/BaseFragment.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/BaseFragment.kt @@ -1,4 +1,4 @@ -package com.navinfo.volvo.ui +package com.navinfo.volvo.ui.fragments import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/home/HomeFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/home/HomeFragment.kt index cd5cfe2..d78a6e7 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/fragments/home/HomeFragment.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/home/HomeFragment.kt @@ -12,7 +12,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.navinfo.volvo.R import com.navinfo.volvo.databinding.FragmentHomeBinding import com.navinfo.volvo.tools.DisplayUtil -import com.navinfo.volvo.ui.BaseFragment +import com.navinfo.volvo.ui.fragments.BaseFragment import com.yanzhenjie.recyclerview.* import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.collectLatest @@ -21,27 +21,30 @@ import kotlinx.coroutines.launch @AndroidEntryPoint class HomeFragment : BaseFragment(), OnItemClickListener, OnItemMenuClickListener { + private var _binding: FragmentHomeBinding? = null + // This property is only valid between onCreateView and + // onDestroyView. + private val binding get() = _binding!! + private val viewModel by viewModels { viewModelFactoryProvider } private lateinit var messageAdapter: HomeAdapter - private lateinit var mDataBinding: FragmentHomeBinding override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { - mDataBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false) - mDataBinding.lifecycleOwner = this + _binding = FragmentHomeBinding.inflate(inflater, container, false) + val root: View = binding.root initView() - return mDataBinding.root + return root } - private fun initView() { - mDataBinding.homeViewModel = viewModel +// mDataBinding.homeViewModel = viewModel messageAdapter = HomeAdapter(this) - val recyclerview: SwipeRecyclerView = mDataBinding.homeRecyclerview + val recyclerview: SwipeRecyclerView = binding.homeRecyclerview recyclerview.adapter = null //先设置null,否则会报错 //创建菜单选项 //注意:使用滑动菜单不能开启滑动删除,否则只有滑动删除没有滑动菜单 @@ -96,6 +99,7 @@ class HomeFragment : BaseFragment(), OnItemClickListener, OnItemMenuClickListene override fun onDestroyView() { super.onDestroyView() + _binding = null } override fun onItemClick(view: View?, adapterPosition: Int) { diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/login/LoginFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/login/LoginFragment.kt index 35250a0..ae95127 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/fragments/login/LoginFragment.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/login/LoginFragment.kt @@ -4,14 +4,11 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels -import androidx.navigation.Navigation -import androidx.navigation.findNavController import androidx.navigation.fragment.findNavController import com.navinfo.volvo.R import com.navinfo.volvo.databinding.FragmentLoginBinding -import com.navinfo.volvo.ui.BaseFragment +import com.navinfo.volvo.ui.fragments.BaseFragment import dagger.hilt.android.AndroidEntryPoint diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageViewModel.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageViewModel.kt index 863132d..82dc8a3 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageViewModel.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageViewModel.kt @@ -13,9 +13,10 @@ import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File import java.util.* +import javax.inject.Inject -class ObtainMessageViewModel: ViewModel() { +class ObtainMessageViewModel @Inject constructor() : ViewModel() { private val msgLiveData: MutableLiveData by lazy { MutableLiveData() } @@ -40,7 +41,7 @@ class ObtainMessageViewModel: ViewModel() { for (attachment in this.msgLiveData.value!!.attachment) { if (attachment.attachmentType == AttachmentType.PIC) { - if (picUrl==null||picUrl.isEmpty()) { + if (picUrl == null || picUrl.isEmpty()) { this.msgLiveData.value!!.attachment.remove(attachment) } else { attachment.pathUrl = picUrl @@ -48,8 +49,14 @@ class ObtainMessageViewModel: ViewModel() { hasPic = true } } - if (!hasPic&&picUrl!=null) { - this.msgLiveData.value!!.attachment.add(Attachment(UUID.randomUUID().toString(), picUrl, AttachmentType.PIC)) + if (!hasPic && picUrl != null) { + this.msgLiveData.value!!.attachment.add( + Attachment( + UUID.randomUUID().toString(), + picUrl, + AttachmentType.PIC + ) + ) } this.msgLiveData.postValue(this.msgLiveData.value) } @@ -59,7 +66,7 @@ class ObtainMessageViewModel: ViewModel() { var hasAudio = false for (attachment in this.msgLiveData.value!!.attachment) { if (attachment.attachmentType == AttachmentType.AUDIO) { - if (audioUrl==null||audioUrl.isEmpty()) { + if (audioUrl == null || audioUrl.isEmpty()) { this.msgLiveData.value!!.attachment.remove(attachment) } else { attachment.pathUrl = audioUrl @@ -67,8 +74,14 @@ class ObtainMessageViewModel: ViewModel() { hasAudio = true } } - if (!hasAudio&&audioUrl!=null) { - this.msgLiveData.value!!.attachment.add(Attachment(UUID.randomUUID().toString(), audioUrl, AttachmentType.AUDIO)) + if (!hasAudio && audioUrl != null) { + this.msgLiveData.value!!.attachment.add( + Attachment( + UUID.randomUUID().toString(), + audioUrl, + AttachmentType.AUDIO + ) + ) } this.msgLiveData.postValue(this.msgLiveData.value) } @@ -97,7 +110,11 @@ class ObtainMessageViewModel: ViewModel() { try { val requestFile: RequestBody = RequestBody.create("multipart/form-data".toMediaTypeOrNull(), attachmentFile) - val body = MultipartBody.Part.createFormData("picture", attachmentFile.getName(), requestFile) + val body = MultipartBody.Part.createFormData( + "picture", + attachmentFile.getName(), + requestFile + ) val result = NavinfoVolvoCall.getApi().uploadAttachment(body) XLog.d(result.code) if (result.code == 200) { // 请求成功 diff --git a/app/src/main/res/drawable/shape_circular.xml b/app/src/main/res/drawable/shape_circular.xml new file mode 100644 index 0000000..dcbbd79 --- /dev/null +++ b/app/src/main/res/drawable/shape_circular.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_home.xml b/app/src/main/res/layout/adapter_home.xml index 78e7b4e..7a24c31 100644 --- a/app/src/main/res/layout/adapter_home.xml +++ b/app/src/main/res/layout/adapter_home.xml @@ -1,5 +1,6 @@ - @@ -15,6 +16,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> + + + + app:layout_constraintRight_toLeftOf="@id/message_send_time" + app:layout_constraintTop_toTopOf="@id/message_head_icon" /> + app:layout_constraintLeft_toRightOf="@id/message_head_icon" + app:layout_constraintRight_toLeftOf="@id/message_status" /> @@ -60,7 +79,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="8dp" - android:text="@{greetingMessage.status,default=消息状态}" + android:text="@{greetingMessage.status,default=消息状态很长的文字}" app:layout_constraintBottom_toBottomOf="@id/message_head_icon" app:layout_constraintEnd_toEndOf="parent" /> diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 6e92011..d8365c6 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -1,20 +1,40 @@ - + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".ui.fragments.home.HomeFragment"> - + - - - - + + - + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginTop="10dp" + android:paddingLeft="5dp" + android:paddingRight="5dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toBottomOf="@id/home_search" /> + + + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 6f9bd6f..4e6668a 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -1,6 +1,6 @@ NavinfoVolvo - Home + 问候 Dashboard Notifications 删除 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 919f896..aaba65a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,6 +1,6 @@ NavinfoVolvo - Home + Message Dashboard Notifications Del From 07838d2699800503a9108dfc575094a83451edac Mon Sep 17 00:00:00 2001 From: squallzhjch Date: Fri, 6 Jan 2023 13:47:29 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=9C=AA=E8=AF=BB=E6=8F=90=E7=A4=BA=E6=B0=94=E6=B3=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/colors.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 547a263..744bd08 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -9,4 +9,5 @@ #FFFFFFFF #FFFF0000 #5E5E5E + #D2CACA \ No newline at end of file From 67da1662791682061c84c3b017a8e2e56b97d6a4 Mon Sep 17 00:00:00 2001 From: squallzhjch Date: Fri, 6 Jan 2023 14:17:33 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../volvo/database/dao/GreetingMessageDao.kt | 2 ++ .../java/com/navinfo/volvo/ui/MainActivity.kt | 22 +++++++++---------- .../volvo/ui/fragments/login/LoginFragment.kt | 1 - .../message/ObtainMessageFragment.kt | 1 + .../message/ObtainMessageViewModel.kt | 3 ++- app/src/main/res/layout/fragment_home.xml | 1 - app/src/main/res/menu/bottom_nav_menu.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 11 +++++++++- app/src/main/res/values/strings.xml | 2 +- 9 files changed, 28 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/navinfo/volvo/database/dao/GreetingMessageDao.kt b/app/src/main/java/com/navinfo/volvo/database/dao/GreetingMessageDao.kt index 5d87e0c..981cea3 100644 --- a/app/src/main/java/com/navinfo/volvo/database/dao/GreetingMessageDao.kt +++ b/app/src/main/java/com/navinfo/volvo/database/dao/GreetingMessageDao.kt @@ -36,6 +36,8 @@ interface GreetingMessageDao { val id = getMessageId(message.id) if (id == 0L) { insert(message) + }else{ + update(message) } } } diff --git a/app/src/main/java/com/navinfo/volvo/ui/MainActivity.kt b/app/src/main/java/com/navinfo/volvo/ui/MainActivity.kt index 276c772..e4fce06 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/MainActivity.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/MainActivity.kt @@ -1,14 +1,12 @@ package com.navinfo.volvo.ui import android.content.DialogInterface +import android.content.Intent import android.os.Bundle import android.view.View import android.widget.Toast import androidx.activity.viewModels -import androidx.appcompat.app.AppCompatActivity -import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope -import androidx.lifecycle.viewModelScope import androidx.navigation.findNavController import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.setupActionBarWithNavController @@ -32,12 +30,10 @@ import com.hjq.permissions.Permission import com.hjq.permissions.XXPermissions import com.navinfo.volvo.R import com.navinfo.volvo.databinding.ActivityMainBinding +import com.navinfo.volvo.ui.message.MessageActivity import com.navinfo.volvo.utils.SystemConstant import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.flow.collect -import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch -import javax.inject.Inject @AndroidEntryPoint class MainActivity : BaseActivity() { @@ -100,12 +96,12 @@ class MainActivity : BaseActivity() { setupActionBarWithNavController(navController, appBarConfiguration) navView.setupWithNavController(navController) - lifecycleScope.launch{ + lifecycleScope.launch { viewModel.getUnreadCount().collect { - runOnUiThread{ - if(it == 0L){ + runOnUiThread { + if (it == 0L) { navView.removeBadge(R.id.navigation_home) - }else{ + } else { var badge = navView.getOrCreateBadge(R.id.navigation_home); badge.number = it.toInt() } @@ -117,7 +113,6 @@ class MainActivity : BaseActivity() { if (destination.id == R.id.navigation_home || destination.id == R.id.navigation_dashboard || destination.id == R.id.navigation_notifications - || destination.id == R.id.navigation_obtain_message ) { runOnUiThread { navView.visibility = View.VISIBLE @@ -130,6 +125,11 @@ class MainActivity : BaseActivity() { } } } + binding.newMessageFab.setOnClickListener { +// val intent: Intent = Intent(this@MainActivity, MessageActivity::class.java) +// startActivity(intent) + navController.navigate(R.id.navigation_obtain_message) + } } override fun onSupportNavigateUp() = diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/login/LoginFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/login/LoginFragment.kt index ae95127..a605eb0 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/fragments/login/LoginFragment.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/login/LoginFragment.kt @@ -29,7 +29,6 @@ class LoginFragment : BaseFragment() { container: ViewGroup?, savedInstanceState: Bundle? ): View { - viewBinding = FragmentLoginBinding.inflate(inflater, container, false) val root: View = binding.root binding.loginFragmentRegisterButton.setOnClickListener { diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageFragment.kt index b564afc..425c81b 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageFragment.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageFragment.kt @@ -512,6 +512,7 @@ class ObtainMessageFragment: Fragment() { obtainMessageViewModel.insertCardByApp() } else { obtainMessageViewModel.updateCardByApp() + } } } diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageViewModel.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageViewModel.kt index 3f4eb0c..0658e7d 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageViewModel.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageViewModel.kt @@ -22,9 +22,10 @@ import okhttp3.RequestBody import java.io.File import java.io.FileInputStream import java.util.* +import javax.inject.Inject -class ObtainMessageViewModel: ViewModel() { +class ObtainMessageViewModel @Inject constructor(): ViewModel() { private val msgLiveData: MutableLiveData by lazy { MutableLiveData() } diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index d8365c6..9660c83 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -24,7 +24,6 @@ + android:title="我的" /> \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 4e6668a..3e0fd35 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -1,9 +1,18 @@ - NavinfoVolvo + VolvoMessage 问候 Dashboard Notifications 删除 分享 我的 + SecondActivity + + First Fragment + Second Fragment + Next + Previous + + Hello first fragment + Hello second fragment. Arg: %1$s \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aaba65a..1c985c8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,5 @@ - NavinfoVolvo + VolvoMessage Message Dashboard Notifications From 64972c3c881ceb9f5387a781b4f4d72c757cc69c Mon Sep 17 00:00:00 2001 From: squallzhjch Date: Fri, 6 Jan 2023 16:04:43 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=AB=96=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1 + .../volvo/database/dao/GreetingMessageDao.kt | 2 +- .../java/com/navinfo/volvo/model/LoginUser.kt | 9 ++ .../volvo/ui/fragments/login/LoginFragment.kt | 26 ++-- .../ui/fragments/login/LoginViewModel.kt | 8 +- .../message/ObtainMessageFragment.kt | 11 +- app/src/main/res/layout/fragment_login.xml | 138 ++++++++++-------- .../main/res/navigation/mobile_navigation.xml | 13 +- 8 files changed, 116 insertions(+), 92 deletions(-) create mode 100644 app/src/main/java/com/navinfo/volvo/model/LoginUser.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e62f29e..d539e1e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -34,6 +34,7 @@ android:name=".ui.message.MessageActivity" android:exported="false" android:label="@string/title_activity_second" + android:screenOrientation="portrait" android:theme="@style/Theme.NavinfoVolvo.NoActionBar"> /** diff --git a/app/src/main/java/com/navinfo/volvo/model/LoginUser.kt b/app/src/main/java/com/navinfo/volvo/model/LoginUser.kt new file mode 100644 index 0000000..1c55d05 --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/model/LoginUser.kt @@ -0,0 +1,9 @@ +package com.navinfo.volvo.model + +/** + * 登录用户信息 + */ +data class LoginUser( + var name: String, + var password: String +) \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/login/LoginFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/login/LoginFragment.kt index a605eb0..e921ce5 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/fragments/login/LoginFragment.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/login/LoginFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.databinding.DataBindingUtil import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import com.navinfo.volvo.R @@ -16,11 +17,8 @@ import dagger.hilt.android.AndroidEntryPoint class LoginFragment : BaseFragment() { // private var loginViewModel:LoginViewModel by viewModel(get()) - private var viewBinding: FragmentLoginBinding? = null + private lateinit var viewBinding: FragmentLoginBinding - // This property is only valid between onCreateView and - // onDestroyView. - private val binding get() = viewBinding!! private val viewModel by viewModels { viewModelFactoryProvider } @@ -29,19 +27,21 @@ class LoginFragment : BaseFragment() { container: ViewGroup?, savedInstanceState: Bundle? ): View { - viewBinding = FragmentLoginBinding.inflate(inflater, container, false) - val root: View = binding.root - binding.loginFragmentRegisterButton.setOnClickListener { + viewBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_login, container, false) + viewBinding.lifecycleOwner = this + initView() + return viewBinding.root + } + + private fun initView() { + viewBinding.loginFragmentRegisterButton.setOnClickListener { + } - binding.loginFragmentLoginButton.setOnClickListener { + viewBinding.loginFragmentLoginButton.setOnClickListener { +// viewModel.login(viewBinding.loginFragmentUserLayout) findNavController().navigate(R.id.action_login_to_home) } - return root } - override fun onDestroyView() { - viewBinding = null - super.onDestroyView() - } } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/login/LoginViewModel.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/login/LoginViewModel.kt index ef6d19a..8f47282 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/fragments/login/LoginViewModel.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/login/LoginViewModel.kt @@ -6,14 +6,12 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.navinfo.volvo.database.AppDatabase import com.navinfo.volvo.database.entity.User +import com.navinfo.volvo.util.SharedPreferenceHelper import javax.inject.Inject -class LoginViewModel @Inject constructor(private val dataBase: AppDatabase) : ViewModel() { +class LoginViewModel @Inject constructor(private val sharedPreferenceHelper: SharedPreferenceHelper) : ViewModel() { - private val _user = MutableLiveData().apply { - - } - val user: LiveData = _user +// val user: LiveData = _user fun liveDataOnclick(view: View) { diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageFragment.kt index 90dfee1..dc94c35 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageFragment.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageFragment.kt @@ -2,7 +2,6 @@ package com.navinfo.volvo.ui.fragments.message import android.content.DialogInterface import android.graphics.Paint -import android.net.Uri import android.os.Bundle import android.text.TextUtils import android.view.LayoutInflater @@ -16,18 +15,13 @@ import android.widget.ArrayAdapter import android.widget.Toast import androidx.core.widget.addTextChangedListener import androidx.fragment.app.Fragment -import androidx.fragment.app.viewModels import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.Navigation import androidx.navigation.fragment.findNavController -import com.bumptech.glide.Glide -import com.bumptech.glide.load.engine.DiskCacheStrategy import com.easytools.tools.DateUtils -import com.easytools.tools.DeviceUtils import com.easytools.tools.DisplayUtils import com.easytools.tools.FileIOUtils -import com.easytools.tools.FileUtils import com.easytools.tools.ResourceUtils import com.easytools.tools.ToastUtils import com.elvishew.xlog.XLog @@ -54,7 +48,6 @@ import top.zibin.luban.Luban import top.zibin.luban.OnCompressListener import java.io.File import java.io.FileInputStream -import java.io.FileOutputStream import java.util.* @@ -177,7 +170,7 @@ class ObtainMessageFragment: Fragment() { obtainMessageViewModel.updateMessageAudio("") } - val sendToArray = mutableListOf("绑定车辆1(LYVXFEFEXNL754427)") + val sendToArray = mutableListOf("LYVXFEFEXNL754427") binding.edtSendTo.adapter = ArrayAdapter(context!!, android.R.layout.simple_dropdown_item_1line, android.R.id.text1, sendToArray) binding.edtSendTo.onItemSelectedListener = object: OnItemSelectedListener { @@ -535,7 +528,7 @@ class ObtainMessageFragment: Fragment() { val confirmCallback = object: ObtainMessageViewModel.MyConfirmCallback { override fun onSucess() { - findNavController().navigate(R.id.navi) + findNavController().navigate(R.id.navigation_home) } } diff --git a/app/src/main/res/layout/fragment_login.xml b/app/src/main/res/layout/fragment_login.xml index 6a7d09f..6829329 100644 --- a/app/src/main/res/layout/fragment_login.xml +++ b/app/src/main/res/layout/fragment_login.xml @@ -1,78 +1,90 @@ - + xmlns:tools="http://schemas.android.com/tools"> + + + - - - + android:layout_height="match_parent" + tools:context="com.navinfo.volvo.ui.fragments.login.LoginFragment"> - + + - + android:layout_marginLeft="20dp" + android:layout_marginRight="20dp" + android:scrollbarAlwaysDrawHorizontalTrack="true" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.4"> - + + - - + android:layout_marginLeft="20dp" + android:layout_marginRight="20dp" + app:layout_constraintTop_toBottomOf="@id/login_fragment_user_layout"> - + + - + - \ No newline at end of file + + + + \ 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 cece6d9..83fe244 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -48,5 +48,16 @@ android:id="@+id/navigation_obtain_message" android:name="com.navinfo.volvo.ui.fragments.message.ObtainMessageFragment" android:label="问候编辑" - tools:layout="@layout/fragment_obtain_message" /> + tools:layout="@layout/fragment_obtain_message" > + + + \ No newline at end of file