Forráskód Böngészése

完善批量更新联系人逻辑

carlos 3 éve
szülő
commit
222fb26bc2

BIN
XPContactProvider.apk


+ 2 - 2
app/src/main/java/com/xplora/contactprovider/dao/ContactDao.kt

@@ -8,10 +8,10 @@ interface ContactDao {
     @Query("SELECT * FROM contact")
     fun query(): Cursor
 
-    @Query("SELECT * FROM contact WHERE id=:id")
+    @Query("SELECT * FROM contact WHERE _id=:id")
     fun queryById(id: Long): ContactInfo
 
-    @Query("SELECT * FROM contact WHERE id=:id")
+    @Query("SELECT * FROM contact WHERE _id=:id")
     fun queryByIdForApp(id: Long): Cursor
 
     @Insert(onConflict = OnConflictStrategy.REPLACE)

+ 27 - 0
app/src/main/java/com/xplora/contactprovider/provider/WatchContactProvider.kt

@@ -15,10 +15,15 @@ import com.xplora.contactprovider.dao.ContactInfo
 class WatchContactProvider : ContentProvider() {
     companion object {
         private const val AUTHORITIES = "com.xplora.WatchContactProvider"
+        private const val CONTENT_URI = "content://$AUTHORITIES"
         const val CONTACT_DIR = 0
         const val CONTACT_ITEM = 1
+        const val CONTACT_MULTI = 2
 
         const val TABLE_NAME_CONTACT = "contact"
+        const val TABLE_NAME_CONTACT_MULTI = "contact_multi"
+
+        private val CONTACT_TABLE_URI = Uri.parse("$CONTENT_URI/$TABLE_NAME_CONTACT")!!
     }
 
     private var db: ContactDatabase? = null
@@ -27,6 +32,7 @@ class WatchContactProvider : ContentProvider() {
         val matcher = UriMatcher(UriMatcher.NO_MATCH)
         matcher.addURI(AUTHORITIES, TABLE_NAME_CONTACT, CONTACT_DIR)
         matcher.addURI(AUTHORITIES, "$TABLE_NAME_CONTACT/#", CONTACT_ITEM)
+        matcher.addURI(AUTHORITIES, TABLE_NAME_CONTACT_MULTI, CONTACT_MULTI)
         matcher
     }
 
@@ -110,6 +116,27 @@ class WatchContactProvider : ContentProvider() {
                 context!!.contentResolver.notifyChange(ContentUris.withAppendedId(uri, id), null)
                 result
             }
+            CONTACT_MULTI -> {
+                val dao = db.contactDao()
+                val keyList = contentValues!!.keySet().toList()
+                for (i in keyList.indices) {
+                    when (contentValues.getAsString(keyList[i])) {
+                        "insert" -> {
+                            val info = Gson().fromJson(keyList[i], ContactInfo::class.java)
+                            dao.insert(info)
+                        }
+                        "update" -> {
+                            val info = Gson().fromJson(keyList[i], ContactInfo::class.java)
+                            dao.update(info)
+                        }
+                        "delete" -> {
+                            dao.delete(ContactInfo(keyList[i].toLong()))
+                        }
+                    }
+                }
+                context!!.contentResolver.notifyChange(CONTACT_TABLE_URI, null)
+                keyList.size
+            }
             else -> 0
         }
     } ?: 0