diff --git a/app/build.gradle b/app/build.gradle index 93a2907..b09493a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -136,7 +136,7 @@ dependencies { // 日志工具 https://github.com/elvishew/xLog/blob/master/README_ZH.md implementation 'com.elvishew:xlog:1.10.1' //加载图片的依赖包 - implementation ("com.github.bumptech.glide:glide:4.11.0") { + implementation("com.github.bumptech.glide:glide:4.11.0") { exclude group: "com.android.support" } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0423065..10c7156 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,5 +53,4 @@ android:value="" /> - \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/database/AppDatabase.kt b/app/src/main/java/com/navinfo/volvo/database/AppDatabase.kt index 0f288af..4b5f880 100644 --- a/app/src/main/java/com/navinfo/volvo/database/AppDatabase.kt +++ b/app/src/main/java/com/navinfo/volvo/database/AppDatabase.kt @@ -2,19 +2,19 @@ package com.navinfo.volvo.database import androidx.room.Database import androidx.room.RoomDatabase -import com.navinfo.volvo.database.dao.MessageDao +import com.navinfo.volvo.database.dao.GreetingMessageDao import com.navinfo.volvo.database.dao.UserDao -import com.navinfo.volvo.model.Attachment -import com.navinfo.volvo.model.Message -import com.navinfo.volvo.model.User +import com.navinfo.volvo.database.entity.Attachment +import com.navinfo.volvo.database.entity.GreetingMessage +import com.navinfo.volvo.database.entity.User @Database( - entities = [Message::class, Attachment::class, User::class], + entities = [GreetingMessage::class, Attachment::class, User::class], version = 1, exportSchema = false ) abstract class AppDatabase : RoomDatabase() { - abstract fun getMessageDao(): MessageDao + abstract fun getMessageDao(): GreetingMessageDao abstract fun getUserDao(): UserDao } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/database/MapLifeDataBase.java b/app/src/main/java/com/navinfo/volvo/database/MapLifeDataBase.java index 857125f..f1ebae1 100644 --- a/app/src/main/java/com/navinfo/volvo/database/MapLifeDataBase.java +++ b/app/src/main/java/com/navinfo/volvo/database/MapLifeDataBase.java @@ -1,191 +1,191 @@ -package com.navinfo.volvo.database; - - -import android.content.Context; - -import androidx.annotation.NonNull; -import androidx.room.Database; -import androidx.room.Room; -import androidx.room.RoomDatabase; -import androidx.sqlite.db.SupportSQLiteDatabase; -import androidx.sqlite.db.SupportSQLiteOpenHelper; - -import com.navinfo.volvo.database.dao.MessageDao; -import com.navinfo.volvo.database.dao.UserDao; -import com.navinfo.volvo.model.Message; -import com.navinfo.volvo.model.Attachment; -import com.navinfo.volvo.model.User; -import com.tencent.wcdb.database.SQLiteCipherSpec; -import com.tencent.wcdb.database.SQLiteDatabase; - -import com.tencent.wcdb.room.db.WCDBOpenHelperFactory; - -import android.os.AsyncTask; -import android.util.Log; - -import com.tencent.wcdb.repair.BackupKit; -import com.tencent.wcdb.repair.RecoverKit; -import com.tencent.wcdb.room.db.WCDBDatabase; - -@Database(entities = {Message.class, Attachment.class, User.class}, version = 1, exportSchema = false) -public abstract class MapLifeDataBase extends RoomDatabase { - // marking the instance as volatile to ensure atomic access to the variable - /** - * 数据库单例对象 - */ - private static volatile MapLifeDataBase INSTANCE; - - /** - * 要素数据库类 - */ - public abstract MessageDao getMessageDao(); - - public abstract UserDao getUserDao(); - - /** - * 数据库秘钥 - */ - private final static String DB_PASSWORD = "123456"; - - public static MapLifeDataBase getDatabase(final Context context, final String name) { - if (INSTANCE == null) { - synchronized (MapLifeDataBase.class) { - if (INSTANCE == null) { - // [WCDB] To use Room library with WCDB, pass a WCDBOpenHelper factory object - // to the database builder with .openHelperFactory(...). In the factory object, - // you can specify passphrase and cipher options to open or create encrypted - // database, as well as optimization options like asynchronous checkpoint. - SQLiteCipherSpec cipherSpec = new SQLiteCipherSpec() - .setPageSize(1024) - .setSQLCipherVersion(3); - WCDBOpenHelperFactory factory = new WCDBOpenHelperFactory() - .passphrase(DB_PASSWORD.getBytes()) // passphrase to the database, remove this line for plain-text - .cipherSpec(cipherSpec) // cipher to use, remove for default settings - .writeAheadLoggingEnabled(true) // enable WAL mode, remove if not needed - .asyncCheckpointEnabled(true); // enable asynchronous checkpoint, remove if not needed - - INSTANCE = Room.databaseBuilder(context.getApplicationContext(), MapLifeDataBase.class, name) - - // [WCDB] Specify open helper to use WCDB database implementation instead - // of the Android framework. - .openHelperFactory((SupportSQLiteOpenHelper.Factory) factory) - - // Wipes and rebuilds instead of migrating if no Migration object. - // Migration is not part of this codelab. - .fallbackToDestructiveMigration().addCallback(sRoomDatabaseCallback).build(); - } - } - } - return INSTANCE; - } - - /** - * Override the onOpen method to populate the database. - * For this sample, we clear the database every time it is created or opened. - *

- * If you want to populate the database only when the database is created for the 1st time, - * override RoomDatabase.Callback()#onCreate - */ - private static Callback sRoomDatabaseCallback = new Callback() { - - @Override - public void onOpen(@NonNull SupportSQLiteDatabase db) { - super.onOpen(db); - // If you want to keep the data through app restarts, - // comment out the following line. - new PopulateDbAsync(INSTANCE).execute(); - } - }; - - /** - * Populate the database in the background. - * If you want to start with more words, just add them. - */ - private static class PopulateDbAsync extends AsyncTask { - - private final MessageDao messageDao; - - PopulateDbAsync(MapLifeDataBase db) { - messageDao = db.getMessageDao(); - } - - @Override - protected Void doInBackground(final Void... params) { - // Start the app with a clean database every time. - // Not needed if you only populate on creation. - //mDao.deleteAll(); - Log.e("qj", "doInBackground"); - return null; - } - } - - /** - * 数据恢复 - */ - protected boolean recoverData() { - if (INSTANCE != null) { - SQLiteDatabase sqlite = ((WCDBDatabase) INSTANCE.getOpenHelper().getWritableDatabase()).getInnerDatabase(); - RecoverKit recover = new RecoverKit(sqlite, // 要恢复到的目标 DB - sqlite.getPath() + "-backup", // 备份文件 - DB_PASSWORD.getBytes() // 加密备份文件的密钥,非 DB 密钥 - ); - int result = recover.run(false); // fatal 参数传 false 表示遇到错误忽略并继续, - // 若传 true 遇到错误则中止并返回 FAILED - switch (result) { - case RecoverKit.RESULT_OK: - /* 成功 */ - Log.e("qj", "sRoomDatabaseCallback==RecoverKit成功"); - return true; - case RecoverKit.RESULT_CANCELED: /* 取消操作 */ - Log.e("qj", "sRoomDatabaseCallback==RecoverKit取消操作"); - break; - case RecoverKit.RESULT_FAILED: /* 失败 */ - Log.e("qj", "sRoomDatabaseCallback==RecoverKit失败"); - break; - - } - - recover.release(); - } - - return false; - } - - /** - * 备份数据 - */ - protected boolean backup() { - Log.e("qj", "sRoomDatabaseCallback===backup==start"); - if (INSTANCE != null) { - //备份文件 - SQLiteDatabase sqlite = ((WCDBDatabase) INSTANCE.getOpenHelper().getWritableDatabase()).getInnerDatabase(); - BackupKit backup = new BackupKit(sqlite, // 要备份的 DB - sqlite.getPath() + "-backup", // 备份文件 - "123456".getBytes(), // 加密备份文件的密钥,非 DB 密钥 - 0, null); - int result = backup.run(); - switch (result) { - case BackupKit.RESULT_OK: - /* 成功 */ - Log.e("qj", "sRoomDatabaseCallback==成功"); - return true; - case BackupKit.RESULT_CANCELED: - /* 取消操作 */ - Log.e("qj", "sRoomDatabaseCallback==取消操作"); - break; - case BackupKit.RESULT_FAILED: - /* 失败 */ - Log.e("qj", "sRoomDatabaseCallback==失败"); - break; - } - - backup.release(); - } - Log.e("qj", "sRoomDatabaseCallback===backup==end"); - return false; - } - - protected void release() { - INSTANCE = null; - } -} +//package com.navinfo.volvo.database; +// +// +//import android.content.Context; +// +//import androidx.annotation.NonNull; +//import androidx.room.Database; +//import androidx.room.Room; +//import androidx.room.RoomDatabase; +//import androidx.sqlite.db.SupportSQLiteDatabase; +//import androidx.sqlite.db.SupportSQLiteOpenHelper; +// +//import com.navinfo.volvo.database.dao.MessageDao; +//import com.navinfo.volvo.database.dao.UserDao; +//import com.navinfo.volvo.database.entity.Message; +//import com.navinfo.volvo.database.entity.Attachment; +//import com.navinfo.volvo.database.entity.User; +//import com.tencent.wcdb.database.SQLiteCipherSpec; +//import com.tencent.wcdb.database.SQLiteDatabase; +// +//import com.tencent.wcdb.room.db.WCDBOpenHelperFactory; +// +//import android.os.AsyncTask; +//import android.util.Log; +// +//import com.tencent.wcdb.repair.BackupKit; +//import com.tencent.wcdb.repair.RecoverKit; +//import com.tencent.wcdb.room.db.WCDBDatabase; +// +//@Database(entities = {Message.class, Attachment.class, User.class}, version = 1, exportSchema = false) +//public abstract class MapLifeDataBase extends RoomDatabase { +// // marking the instance as volatile to ensure atomic access to the variable +// /** +// * 数据库单例对象 +// */ +// private static volatile MapLifeDataBase INSTANCE; +// +// /** +// * 要素数据库类 +// */ +// public abstract MessageDao getMessageDao(); +// +// public abstract UserDao getUserDao(); +// +// /** +// * 数据库秘钥 +// */ +// private final static String DB_PASSWORD = "123456"; +// +// public static MapLifeDataBase getDatabase(final Context context, final String name) { +// if (INSTANCE == null) { +// synchronized (MapLifeDataBase.class) { +// if (INSTANCE == null) { +// // [WCDB] To use Room library with WCDB, pass a WCDBOpenHelper factory object +// // to the database builder with .openHelperFactory(...). In the factory object, +// // you can specify passphrase and cipher options to open or create encrypted +// // database, as well as optimization options like asynchronous checkpoint. +// SQLiteCipherSpec cipherSpec = new SQLiteCipherSpec() +// .setPageSize(1024) +// .setSQLCipherVersion(3); +// WCDBOpenHelperFactory factory = new WCDBOpenHelperFactory() +// .passphrase(DB_PASSWORD.getBytes()) // passphrase to the database, remove this line for plain-text +// .cipherSpec(cipherSpec) // cipher to use, remove for default settings +// .writeAheadLoggingEnabled(true) // enable WAL mode, remove if not needed +// .asyncCheckpointEnabled(true); // enable asynchronous checkpoint, remove if not needed +// +// INSTANCE = Room.databaseBuilder(context.getApplicationContext(), MapLifeDataBase.class, name) +// +// // [WCDB] Specify open helper to use WCDB database implementation instead +// // of the Android framework. +// .openHelperFactory((SupportSQLiteOpenHelper.Factory) factory) +// +// // Wipes and rebuilds instead of migrating if no Migration object. +// // Migration is not part of this codelab. +// .fallbackToDestructiveMigration().addCallback(sRoomDatabaseCallback).build(); +// } +// } +// } +// return INSTANCE; +// } +// +// /** +// * Override the onOpen method to populate the database. +// * For this sample, we clear the database every time it is created or opened. +// *

+// * If you want to populate the database only when the database is created for the 1st time, +// * override RoomDatabase.Callback()#onCreate +// */ +// private static Callback sRoomDatabaseCallback = new Callback() { +// +// @Override +// public void onOpen(@NonNull SupportSQLiteDatabase db) { +// super.onOpen(db); +// // If you want to keep the data through app restarts, +// // comment out the following line. +// new PopulateDbAsync(INSTANCE).execute(); +// } +// }; +// +// /** +// * Populate the database in the background. +// * If you want to start with more words, just add them. +// */ +// private static class PopulateDbAsync extends AsyncTask { +// +// private final MessageDao messageDao; +// +// PopulateDbAsync(MapLifeDataBase db) { +// messageDao = db.getMessageDao(); +// } +// +// @Override +// protected Void doInBackground(final Void... params) { +// // Start the app with a clean database every time. +// // Not needed if you only populate on creation. +// //mDao.deleteAll(); +// Log.e("qj", "doInBackground"); +// return null; +// } +// } +// +// /** +// * 数据恢复 +// */ +// protected boolean recoverData() { +// if (INSTANCE != null) { +// SQLiteDatabase sqlite = ((WCDBDatabase) INSTANCE.getOpenHelper().getWritableDatabase()).getInnerDatabase(); +// RecoverKit recover = new RecoverKit(sqlite, // 要恢复到的目标 DB +// sqlite.getPath() + "-backup", // 备份文件 +// DB_PASSWORD.getBytes() // 加密备份文件的密钥,非 DB 密钥 +// ); +// int result = recover.run(false); // fatal 参数传 false 表示遇到错误忽略并继续, +// // 若传 true 遇到错误则中止并返回 FAILED +// switch (result) { +// case RecoverKit.RESULT_OK: +// /* 成功 */ +// Log.e("qj", "sRoomDatabaseCallback==RecoverKit成功"); +// return true; +// case RecoverKit.RESULT_CANCELED: /* 取消操作 */ +// Log.e("qj", "sRoomDatabaseCallback==RecoverKit取消操作"); +// break; +// case RecoverKit.RESULT_FAILED: /* 失败 */ +// Log.e("qj", "sRoomDatabaseCallback==RecoverKit失败"); +// break; +// +// } +// +// recover.release(); +// } +// +// return false; +// } +// +// /** +// * 备份数据 +// */ +// protected boolean backup() { +// Log.e("qj", "sRoomDatabaseCallback===backup==start"); +// if (INSTANCE != null) { +// //备份文件 +// SQLiteDatabase sqlite = ((WCDBDatabase) INSTANCE.getOpenHelper().getWritableDatabase()).getInnerDatabase(); +// BackupKit backup = new BackupKit(sqlite, // 要备份的 DB +// sqlite.getPath() + "-backup", // 备份文件 +// "123456".getBytes(), // 加密备份文件的密钥,非 DB 密钥 +// 0, null); +// int result = backup.run(); +// switch (result) { +// case BackupKit.RESULT_OK: +// /* 成功 */ +// Log.e("qj", "sRoomDatabaseCallback==成功"); +// return true; +// case BackupKit.RESULT_CANCELED: +// /* 取消操作 */ +// Log.e("qj", "sRoomDatabaseCallback==取消操作"); +// break; +// case BackupKit.RESULT_FAILED: +// /* 失败 */ +// Log.e("qj", "sRoomDatabaseCallback==失败"); +// break; +// } +// +// backup.release(); +// } +// Log.e("qj", "sRoomDatabaseCallback===backup==end"); +// return false; +// } +// +// protected void release() { +// INSTANCE = null; +// } +//} 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 new file mode 100644 index 0000000..479d490 --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/database/dao/GreetingMessageDao.kt @@ -0,0 +1,19 @@ +package com.navinfo.volvo.database.dao + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import com.navinfo.volvo.database.entity.GreetingMessage + +@Dao +interface GreetingMessageDao { + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insert(vararg check: GreetingMessage) + + @Query("SELECT * FROM GreetingMessage where id =:id") + fun findCheckManagerById(id: Long): GreetingMessage? + + @Query("SELECT * FROM GreetingMessage") + fun findList(): List +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/database/dao/MessageDao.kt b/app/src/main/java/com/navinfo/volvo/database/dao/MessageDao.kt deleted file mode 100644 index fa60d36..0000000 --- a/app/src/main/java/com/navinfo/volvo/database/dao/MessageDao.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.navinfo.volvo.database.dao - -import androidx.room.Dao -import androidx.room.Insert -import androidx.room.OnConflictStrategy -import androidx.room.Query -import com.navinfo.volvo.model.Message - -@Dao -interface MessageDao { - @Insert(onConflict = OnConflictStrategy.REPLACE) - fun insert(vararg check: Message) - - @Query("SELECT * FROM Message where id =:id") - fun findCheckManagerById(id: Long): Message? - - @Query("SELECT * FROM Message") - fun findList(): List -} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/database/dao/UserDao.kt b/app/src/main/java/com/navinfo/volvo/database/dao/UserDao.kt index fdbd156..4057662 100644 --- a/app/src/main/java/com/navinfo/volvo/database/dao/UserDao.kt +++ b/app/src/main/java/com/navinfo/volvo/database/dao/UserDao.kt @@ -3,7 +3,7 @@ package com.navinfo.volvo.database.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy -import com.navinfo.volvo.model.User +import com.navinfo.volvo.database.entity.User @Dao interface UserDao { diff --git a/app/src/main/java/com/navinfo/volvo/model/Attachment.kt b/app/src/main/java/com/navinfo/volvo/database/entity/Attachment.kt similarity index 95% rename from app/src/main/java/com/navinfo/volvo/model/Attachment.kt rename to app/src/main/java/com/navinfo/volvo/database/entity/Attachment.kt index fefa2b3..4e226d4 100644 --- a/app/src/main/java/com/navinfo/volvo/model/Attachment.kt +++ b/app/src/main/java/com/navinfo/volvo/database/entity/Attachment.kt @@ -1,4 +1,4 @@ -package com.navinfo.volvo.model +package com.navinfo.volvo.database.entity import androidx.room.Entity import androidx.room.PrimaryKey @@ -8,7 +8,7 @@ import com.navinfo.volvo.tools.GsonUtil @Entity(tableName = "Attachment") data class Attachment( - @PrimaryKey() + @PrimaryKey var id: String, var pathUrl: String, var attachmentType: AttachmentType 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 new file mode 100644 index 0000000..4f6f5a8 --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/database/entity/GreetingMessage.kt @@ -0,0 +1,44 @@ +package com.navinfo.volvo.database.entity + +import androidx.room.Entity +import androidx.room.PrimaryKey +import androidx.room.TypeConverters +import org.jetbrains.annotations.NotNull + +@Entity(tableName = "GreetingMessage") +@TypeConverters(AttachmentConverters::class) +data class GreetingMessage @JvmOverloads constructor( + @PrimaryKey(autoGenerate = true) + var uuid:Long = 0, + var id: Long = 0, + var searchValue: String? = "", + var createBy: String? = "", + var createTime: String? = "", + var updateBy: String? = "", + var updateTime: String? = "", + var remark: String? = "", + var name: String? = "", + var imageUrl: String? = "", + var mediaUrl: String? = "", + var who: String? = "", + var toWho: String? = "", + var sendDate: String? = "", + var status: String? = "", + var isSkip: String? = "", + var skipUrl: String? = "", + var startTime: String? = "", + var endTime: String? = "", + var sendVehicle: String? = "", + var sendSex: String? = "", + var sendAge: String? = "", + var sendNum: String? = "", + var sendVins: String? = "", + var sendType: String? = "", + var del: String? = "", + var version: String? = "", + /** + * 附件列表 + */ + var attachment: MutableList = mutableListOf() +) { +} diff --git a/app/src/main/java/com/navinfo/volvo/model/User.kt b/app/src/main/java/com/navinfo/volvo/database/entity/User.kt similarity index 93% rename from app/src/main/java/com/navinfo/volvo/model/User.kt rename to app/src/main/java/com/navinfo/volvo/database/entity/User.kt index 80a6c7a..1816bd4 100644 --- a/app/src/main/java/com/navinfo/volvo/model/User.kt +++ b/app/src/main/java/com/navinfo/volvo/database/entity/User.kt @@ -1,4 +1,4 @@ -package com.navinfo.volvo.model +package com.navinfo.volvo.database.entity import androidx.room.Entity import androidx.room.PrimaryKey @@ -7,8 +7,6 @@ import androidx.room.TypeConverters import com.google.gson.reflect.TypeToken import com.navinfo.volvo.tools.GsonUtil import org.jetbrains.annotations.NotNull -import java.time.LocalDateTime -import java.time.LocalTime import javax.inject.Inject @Entity(tableName = "User") 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 bd2582e..2a302b3 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 @@ -3,7 +3,7 @@ package com.navinfo.volvo.di.module import android.content.Context import androidx.room.Room import com.navinfo.volvo.database.AppDatabase -import com.navinfo.volvo.database.dao.MessageDao +import com.navinfo.volvo.database.dao.GreetingMessageDao import com.navinfo.volvo.database.dao.UserDao import com.tencent.wcdb.database.SQLiteCipherSpec import com.tencent.wcdb.room.db.WCDBOpenHelperFactory @@ -45,7 +45,7 @@ class DatabaseModule { @Singleton @Provides - fun provideMessageDao(database: AppDatabase): MessageDao { + fun provideMessageDao(database: AppDatabase): GreetingMessageDao { return database.getMessageDao() } diff --git a/app/src/main/java/com/navinfo/volvo/http/DefaultResponse.kt b/app/src/main/java/com/navinfo/volvo/http/DefaultResponse.kt index 891d756..fc19aa9 100644 --- a/app/src/main/java/com/navinfo/volvo/http/DefaultResponse.kt +++ b/app/src/main/java/com/navinfo/volvo/http/DefaultResponse.kt @@ -2,6 +2,6 @@ package com.navinfo.volvo.http class DefaultResponse { var code: Int = 0 - var message: String = "" + var msg: String = "" var data: T? = null } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoCall.kt b/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoCall.kt index 3e1bf0c..3efa75b 100644 --- a/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoCall.kt +++ b/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoCall.kt @@ -1,10 +1,7 @@ package com.navinfo.volvo.http -import com.navinfo.volvo.db.dao.entity.Attachment import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory -import retrofit2.create -import java.io.File class NavinfoVolvoCall { companion object { diff --git a/app/src/main/java/com/navinfo/volvo/model/Message.kt b/app/src/main/java/com/navinfo/volvo/model/Message.kt deleted file mode 100644 index 82c591d..0000000 --- a/app/src/main/java/com/navinfo/volvo/model/Message.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.navinfo.volvo.model - -import androidx.room.Entity -import androidx.room.PrimaryKey -import androidx.room.TypeConverters - -@Entity(tableName = "message") -@TypeConverters(AttachmentConverters::class) -data class Message @JvmOverloads constructor( - @PrimaryKey(autoGenerate = true) - var id: Long = 0, - - var netId: String = "", - /** - *标题 - */ - var title: String = "", - /** - * 信息内容 - */ - var message: String = "", - /** - * 操作时间 - */ - var optionDate: String = "", - /** - * 发送时间 - */ - var sendDate: String = "", - /** - * 信息状态 - */ - var status: Int = 1, - /** - * 发送者ID - */ - var fromId: String = "", - /** - * 接收者ID - */ - var toId: String = "", - /** - * 附件列表 - */ - var attachment: MutableList = mutableListOf() -) diff --git a/app/src/main/java/com/navinfo/volvo/model/network/NetworkPostMessage.kt b/app/src/main/java/com/navinfo/volvo/model/messagelist/NetworkMessageListPost.kt similarity index 87% rename from app/src/main/java/com/navinfo/volvo/model/network/NetworkPostMessage.kt rename to app/src/main/java/com/navinfo/volvo/model/messagelist/NetworkMessageListPost.kt index 8e452f6..91d0dd5 100644 --- a/app/src/main/java/com/navinfo/volvo/model/network/NetworkPostMessage.kt +++ b/app/src/main/java/com/navinfo/volvo/model/messagelist/NetworkMessageListPost.kt @@ -1,6 +1,6 @@ -package com.navinfo.volvo.model.network +package com.navinfo.volvo.model.messagelist -data class NetworkPostMessage( +data class NetworkMessageListPost( val name: String,//问候名称,非必填项 val who: String, //我是谁 val toWho: String, //发送给谁 diff --git a/app/src/main/java/com/navinfo/volvo/model/messagelist/NetworkMessageListResponse.kt b/app/src/main/java/com/navinfo/volvo/model/messagelist/NetworkMessageListResponse.kt new file mode 100644 index 0000000..94b7a40 --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/model/messagelist/NetworkMessageListResponse.kt @@ -0,0 +1,8 @@ +package com.navinfo.volvo.model.messagelist + +import com.navinfo.volvo.database.entity.GreetingMessage + +data class NetworkMessageListResponse( + val total: Int, + val rows: List +) \ 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/NetworkDataSource.kt index 0791642..dddf32f 100644 --- a/app/src/main/java/com/navinfo/volvo/repository/NetworkDataSource.kt +++ b/app/src/main/java/com/navinfo/volvo/repository/NetworkDataSource.kt @@ -1,9 +1,10 @@ package com.navinfo.volvo.repository -import com.navinfo.volvo.model.Message -import com.navinfo.volvo.model.network.NetworkPostMessage +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 { - suspend fun getCardList(message: NetworkPostMessage): NetResult> + 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/NetworkDataSourceImp.kt index 9bf7e4b..2d662bb 100644 --- a/app/src/main/java/com/navinfo/volvo/repository/NetworkDataSourceImp.kt +++ b/app/src/main/java/com/navinfo/volvo/repository/NetworkDataSourceImp.kt @@ -1,15 +1,17 @@ package com.navinfo.volvo.repository +import com.navinfo.volvo.database.AppDatabase +import com.navinfo.volvo.database.dao.GreetingMessageDao import com.navinfo.volvo.di.scope.IoDispatcher -import com.navinfo.volvo.model.Message -import com.navinfo.volvo.model.network.NetworkPostMessage +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 import kotlinx.coroutines.withContext -import okhttp3.FormBody -import okhttp3.MediaType import okhttp3.MediaType.Companion.toMediaType import okhttp3.RequestBody.Companion.toRequestBody import javax.inject.Inject @@ -17,17 +19,22 @@ import javax.inject.Inject class NetworkDataSourceImp @Inject constructor( private val netWorkService: NetworkService, + private val messageDao: GreetingMessageDao, @IoDispatcher private val ioDispatcher: CoroutineDispatcher ) : NetworkDataSource { - override suspend fun getCardList(message: NetworkPostMessage): NetResult> = + override suspend fun getCardList(message: NetworkMessageListPost): NetResult> = withContext(ioDispatcher) { return@withContext try { - val stringBody = GsonUtil.getInstance().toJson(message).toRequestBody("application/json;charset=utf-8".toMediaType()) + val stringBody = GsonUtil.getInstance().toJson(message) + .toRequestBody("application/json;charset=utf-8".toMediaType()) val result = netWorkService.queryCardListByApp(stringBody) if (result.isSuccessful) { - val list = result.body() - NetResult.Success(list) + val body = result.body() + val list: MutableList = + listOf(body!!.data!!.rows) as MutableList + messageDao.insert(*list.map { it }.toTypedArray()) + 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/service/NetworkService.kt index df62a9c..208ce28 100644 --- a/app/src/main/java/com/navinfo/volvo/repository/service/NetworkService.kt +++ b/app/src/main/java/com/navinfo/volvo/repository/service/NetworkService.kt @@ -1,6 +1,7 @@ package com.navinfo.volvo.repository.service -import com.navinfo.volvo.model.Message +import com.navinfo.volvo.http.DefaultResponse +import com.navinfo.volvo.model.messagelist.NetworkMessageListResponse import okhttp3.RequestBody import retrofit2.Response import retrofit2.http.Body @@ -8,5 +9,5 @@ import retrofit2.http.POST interface NetworkService { @POST("/navi/cardDelivery/queryCardListByApp") - suspend fun queryCardListByApp(@Body body: RequestBody): Response> + suspend fun queryCardListByApp(@Body body: RequestBody): Response> } \ 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 ef554b7..bd5f4b8 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/MainActivity.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/MainActivity.kt @@ -2,7 +2,6 @@ package com.navinfo.volvo.ui import android.content.DialogInterface import android.content.Intent -import android.content.DialogInterface import android.os.Bundle import android.view.View import android.widget.Toast @@ -11,10 +10,26 @@ import androidx.navigation.findNavController import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.setupActionBarWithNavController import androidx.navigation.ui.setupWithNavController +import com.easytools.tools.FileUtils +import com.elvishew.xlog.BuildConfig +import com.elvishew.xlog.LogConfiguration +import com.elvishew.xlog.LogLevel +import com.elvishew.xlog.XLog +import com.elvishew.xlog.interceptor.BlacklistTagsFilterInterceptor +import com.elvishew.xlog.printer.AndroidPrinter +import com.elvishew.xlog.printer.ConsolePrinter +import com.elvishew.xlog.printer.Printer +import com.elvishew.xlog.printer.file.FilePrinter +import com.elvishew.xlog.printer.file.backup.NeverBackupStrategy +import com.elvishew.xlog.printer.file.naming.DateFileNameGenerator import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.hjq.permissions.OnPermissionCallback +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.utils.SystemConstant import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint @@ -41,7 +56,8 @@ class MainActivity : AppCompatActivity() { override fun onGranted(permissions: MutableList, all: Boolean) { if (!all) { - Toast.makeText(this@MainActivity, "获取部分权限成功,但部分权限未正常授予", Toast.LENGTH_SHORT).show() + Toast.makeText(this@MainActivity, "获取部分权限成功,但部分权限未正常授予", Toast.LENGTH_SHORT) + .show() return } // 在SD卡创建项目目录 @@ -50,7 +66,8 @@ class MainActivity : AppCompatActivity() { override fun onDenied(permissions: MutableList, never: Boolean) { if (never) { - Toast.makeText(this@MainActivity, "永久拒绝授权,请手动授权文件读写权限", Toast.LENGTH_SHORT).show() + Toast.makeText(this@MainActivity, "永久拒绝授权,请手动授权文件读写权限", Toast.LENGTH_SHORT) + .show() // 如果是被永久拒绝就跳转到应用权限系统设置页面 XXPermissions.startPermissionActivity(this@MainActivity, permissions) } else { @@ -132,10 +149,11 @@ class MainActivity : AppCompatActivity() { val consolePrinter: Printer = ConsolePrinter() // 通过 System.out 打印日志到控制台的打印器 - val filePrinter: Printer = FilePrinter.Builder("${SystemConstant.ROOT_PATH}/Logs") // 指定保存日志文件的路径 - .fileNameGenerator(DateFileNameGenerator()) // 指定日志文件名生成器,默认为 ChangelessFileNameGenerator("log") - .backupStrategy(NeverBackupStrategy()) // 指定日志文件备份策略,默认为 FileSizeBackupStrategy(1024 * 1024) - .build() + val filePrinter: Printer = + FilePrinter.Builder("${SystemConstant.ROOT_PATH}/Logs") // 指定保存日志文件的路径 + .fileNameGenerator(DateFileNameGenerator()) // 指定日志文件名生成器,默认为 ChangelessFileNameGenerator("log") + .backupStrategy(NeverBackupStrategy()) // 指定日志文件备份策略,默认为 FileSizeBackupStrategy(1024 * 1024) + .build() XLog.init( // 初始化 XLog config, // 指定日志配置,如果不指定,会默认使用 new LogConfiguration.Builder().build() 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 index 22875d9..cb7525c 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/adapter/MessageAdapter.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/adapter/MessageAdapter.kt @@ -7,18 +7,18 @@ import android.widget.ImageView import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.navinfo.volvo.R -import com.navinfo.volvo.model.Message +import com.navinfo.volvo.database.entity.GreetingMessage class MessageAdapter : RecyclerView.Adapter() { - var itemList: MutableList = mutableListOf() + var itemList: MutableList = mutableListOf() - fun addItem(message: Message) { + fun addItem(message: GreetingMessage) { itemList.add(message) notifyItemInserted(itemList.size - 1) } - fun setItem(messageList: MutableList){ + fun setItem(messageList: MutableList){ itemList = messageList notifyDataSetChanged() } @@ -35,8 +35,8 @@ class MessageAdapter : RecyclerView.Adapter() { override fun onBindViewHolder(holder: MyViewHolder, position: Int) { val message = itemList[position] - holder.toName.text = message.fromId - holder.messageText.text = message.message + holder.toName.text = message.toWho + holder.messageText.text = message.name holder.sendTime.text = message.sendDate } diff --git a/app/src/main/java/com/navinfo/volvo/ui/camera/CameraFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/camera/CameraFragment.kt index d4d5bed..1ce309f 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/camera/CameraFragment.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/camera/CameraFragment.kt @@ -13,7 +13,7 @@ import com.easytools.tools.DateUtils import com.easytools.tools.FileUtils import com.elvishew.xlog.XLog import com.navinfo.volvo.databinding.FragmentCameraBinding -import com.navinfo.volvo.ui.message.ObtainMessageViewModel +import com.navinfo.volvo.ui.fragments.message.ObtainMessageViewModel import com.navinfo.volvo.utils.SystemConstant import com.otaliastudios.cameraview.CameraListener import com.otaliastudios.cameraview.CameraView 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 index 4bbe309..c65fd8f 100644 --- 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 @@ -3,8 +3,9 @@ package com.navinfo.volvo.ui.fragments.home import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.navinfo.volvo.model.Message -import com.navinfo.volvo.model.network.NetworkPostMessage +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 @@ -18,18 +19,18 @@ class MessageViewModel @Inject constructor( private val _isLoading = MutableLiveData() val isLoading = _isLoading.asLiveData() - private val _messageList = MutableLiveData>() + private val _messageList = MutableLiveData>() val messageList = _messageList.asLiveData() fun getMessageList() { _isLoading.postValue(true) viewModelScope.launch { - val messagePost = NetworkPostMessage(who = "北京测试", toWho = "volvo测试") + 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 + val list = (result.data.data as NetworkMessageListResponse).rows _messageList.value = list } } 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 5c02c3e..ef6d19a 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 @@ -5,7 +5,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.navinfo.volvo.database.AppDatabase -import com.navinfo.volvo.model.User +import com.navinfo.volvo.database.entity.User import javax.inject.Inject class LoginViewModel @Inject constructor(private val dataBase: AppDatabase) : ViewModel() { 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 e95182d..e34f10d 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 @@ -25,11 +25,10 @@ import com.gredicer.datetimepicker.DateTimePickerFragment import com.hjq.permissions.OnPermissionCallback import com.hjq.permissions.Permission import com.hjq.permissions.XXPermissions -import com.navinfo.volvo.R import com.navinfo.volvo.RecorderLifecycleObserver import com.navinfo.volvo.databinding.FragmentObtainMessageBinding -import com.navinfo.volvo.db.dao.entity.AttachmentType -import com.navinfo.volvo.db.dao.entity.Message +import com.navinfo.volvo.database.entity.AttachmentType +import com.navinfo.volvo.database.entity.GreetingMessage import com.navinfo.volvo.ui.markRequiredInRed import com.navinfo.volvo.utils.EasyMediaFile import com.navinfo.volvo.utils.SystemConstant @@ -65,13 +64,13 @@ class ObtainMessageFragment: Fragment() { _binding = FragmentObtainMessageBinding.inflate(inflater, container, false) val root: View = binding.root - obtainMessageViewModel.setCurrentMessage(Message()) + obtainMessageViewModel.setCurrentMessage(GreetingMessage()) obtainMessageViewModel?.getMessageLiveData()?.observe( viewLifecycleOwner, Observer { // 初始化界面显示内容 - if(it.title?.isNotEmpty() == true) - binding.tvMessageTitle?.setText(it.title) + if(it.name?.isNotEmpty() == true) + binding.tvMessageTitle?.setText(it.name) if (it.sendDate?.isNotEmpty() == true) { binding.btnSendTime.text = it.sendDate } @@ -131,7 +130,7 @@ class ObtainMessageFragment: Fragment() { android.R.layout.simple_dropdown_item_1line, android.R.id.text1, sendToArray) binding.edtSendTo.onItemSelectedListener = object: OnItemSelectedListener { override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) { - obtainMessageViewModel.getMessageLiveData().value?.toId = sendToArray[p2] + obtainMessageViewModel.getMessageLiveData().value?.toWho = sendToArray[p2] } override fun onNothingSelected(p0: AdapterView<*>?) { @@ -287,7 +286,7 @@ class ObtainMessageFragment: Fragment() { binding.btnObtainMessageConfirm.setOnClickListener { // 检查当前输入数据 val messageData = obtainMessageViewModel.getMessageLiveData().value - if (messageData?.title?.isEmpty() == true) { + if (messageData?.name?.isEmpty() == true) { val toolTipRelativeLayout = binding.ttTitle val toolTip = ToolTip() @@ -328,7 +327,7 @@ class ObtainMessageFragment: Fragment() { toolTipRelativeLayout.showToolTipForView(toolTip, binding.tvUploadPic) } - if (messageData?.fromId?.isEmpty()==true) { + if (messageData?.who?.isEmpty()==true) { val toolTipRelativeLayout = binding.ttSendFrom val toolTip = ToolTip() @@ -338,7 +337,7 @@ class ObtainMessageFragment: Fragment() { .withAnimationType(ToolTip.AnimationType.FROM_MASTER_VIEW) toolTipRelativeLayout.showToolTipForView(toolTip, binding.edtSendFrom) } - if (messageData?.toId?.isEmpty()==true) { + if (messageData?.toWho?.isEmpty()==true) { val toolTipRelativeLayout = binding.ttSendTo val toolTip = ToolTip() 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 84be5dd..863132d 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 @@ -3,12 +3,12 @@ package com.navinfo.volvo.ui.fragments.message import androidx.lifecycle.* import com.easytools.tools.ToastUtils import com.elvishew.xlog.XLog -import com.navinfo.volvo.db.dao.entity.Attachment -import com.navinfo.volvo.db.dao.entity.AttachmentType -import com.navinfo.volvo.db.dao.entity.Message +import com.navinfo.volvo.database.entity.Attachment +import com.navinfo.volvo.database.entity.AttachmentType +import com.navinfo.volvo.database.entity.GreetingMessage import com.navinfo.volvo.http.NavinfoVolvoCall import kotlinx.coroutines.launch -import okhttp3.MediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File @@ -16,21 +16,21 @@ import java.util.* class ObtainMessageViewModel: ViewModel() { - private val msgLiveData: MutableLiveData by lazy { - MutableLiveData() + private val msgLiveData: MutableLiveData by lazy { + MutableLiveData() } - fun setCurrentMessage(msg: Message) { + fun setCurrentMessage(msg: GreetingMessage) { msgLiveData.postValue(msg) } - fun getMessageLiveData(): MutableLiveData { + fun getMessageLiveData(): MutableLiveData { return msgLiveData } // 更新消息标题 fun updateMessageTitle(title: String) { - this.msgLiveData.value?.title = title + this.msgLiveData.value?.name = title this.msgLiveData.postValue(this.msgLiveData.value) } @@ -75,13 +75,13 @@ class ObtainMessageViewModel: ViewModel() { // 更新发送人 fun updateMessageSendFrom(sendFrom: String) { - this.msgLiveData.value?.fromId = sendFrom + this.msgLiveData.value?.who = sendFrom this.msgLiveData.postValue(this.msgLiveData.value) } // 更新接收人 fun updateMessageSendTo(sendTo: String) { - this.msgLiveData.value?.toId = sendTo + this.msgLiveData.value?.toWho = sendTo this.msgLiveData.postValue(this.msgLiveData.value) } @@ -96,14 +96,14 @@ class ObtainMessageViewModel: ViewModel() { viewModelScope.launch { try { val requestFile: RequestBody = - RequestBody.create(MediaType.parse("multipart/form-data"), attachmentFile) + RequestBody.create("multipart/form-data".toMediaTypeOrNull(), attachmentFile) val body = MultipartBody.Part.createFormData("picture", attachmentFile.getName(), requestFile) val result = NavinfoVolvoCall.getApi().uploadAttachment(body) XLog.d(result.code) if (result.code == 200) { // 请求成功 // 获取上传后的结果 } else { - ToastUtils.showToast(result.message) + ToastUtils.showToast(result.msg) } } catch (e: Exception) { ToastUtils.showToast(e.message)