add prefix/suffix/organization to contacts stored locally
This commit is contained in:
parent
bde0ad34ea
commit
fea917e41c
|
@ -23,9 +23,11 @@ import com.simplemobiletools.contacts.models.*
|
|||
class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(context, DB_NAME, null, DB_VERSION) {
|
||||
private val CONTACTS_TABLE_NAME = "contacts"
|
||||
private val COL_ID = "id"
|
||||
private val COL_PREFIX = "prefix"
|
||||
private val COL_FIRST_NAME = "first_name"
|
||||
private val COL_MIDDLE_NAME = "middle_name"
|
||||
private val COL_SURNAME = "surname"
|
||||
private val COL_SUFFIX = "suffix"
|
||||
private val COL_PHOTO = "photo"
|
||||
private val COL_PHONE_NUMBERS = "phone_numbers"
|
||||
private val COL_EMAILS = "emails"
|
||||
|
@ -33,6 +35,8 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||
private val COL_STARRED = "starred"
|
||||
private val COL_ADDRESSES = "addresses"
|
||||
private val COL_NOTES = "notes"
|
||||
private val COL_COMPANY = "company"
|
||||
private val COL_JOB_POSITION = "job_position"
|
||||
private val COL_GROUPS = "groups"
|
||||
|
||||
private val GROUPS_TABLE_NAME = "groups"
|
||||
|
@ -43,7 +47,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||
private val mDb = writableDatabase
|
||||
|
||||
companion object {
|
||||
private const val DB_VERSION = 3
|
||||
private const val DB_VERSION = 4
|
||||
const val DB_NAME = "contacts.db"
|
||||
var dbInstance: DBHelper? = null
|
||||
|
||||
|
@ -58,7 +62,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||
override fun onCreate(db: SQLiteDatabase) {
|
||||
db.execSQL("CREATE TABLE $CONTACTS_TABLE_NAME ($COL_ID INTEGER PRIMARY KEY AUTOINCREMENT, $COL_FIRST_NAME TEXT, $COL_MIDDLE_NAME TEXT, " +
|
||||
"$COL_SURNAME TEXT, $COL_PHOTO BLOB, $COL_PHONE_NUMBERS TEXT, $COL_EMAILS TEXT, $COL_EVENTS TEXT, $COL_STARRED INTEGER, " +
|
||||
"$COL_ADDRESSES TEXT, $COL_NOTES TEXT, $COL_GROUPS TEXT)")
|
||||
"$COL_ADDRESSES TEXT, $COL_NOTES TEXT, $COL_GROUPS TEXT, $COL_PREFIX TEXT, $COL_SUFFIX TEXT, $COL_COMPANY TEXT, $COL_JOB_POSITION TEXT)")
|
||||
|
||||
// start autoincrement ID from FIRST_CONTACT_ID to avoid conflicts
|
||||
db.execSQL("REPLACE INTO sqlite_sequence (name, seq) VALUES ('$CONTACTS_TABLE_NAME', $FIRST_CONTACT_ID)")
|
||||
|
@ -76,6 +80,13 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||
createGroupsTable(db)
|
||||
db.execSQL("ALTER TABLE $CONTACTS_TABLE_NAME ADD COLUMN $COL_GROUPS TEXT DEFAULT ''")
|
||||
}
|
||||
|
||||
if (oldVersion < 4) {
|
||||
db.execSQL("ALTER TABLE $CONTACTS_TABLE_NAME ADD COLUMN $COL_PREFIX TEXT DEFAULT ''")
|
||||
db.execSQL("ALTER TABLE $CONTACTS_TABLE_NAME ADD COLUMN $COL_SUFFIX TEXT DEFAULT ''")
|
||||
db.execSQL("ALTER TABLE $CONTACTS_TABLE_NAME ADD COLUMN $COL_COMPANY TEXT DEFAULT ''")
|
||||
db.execSQL("ALTER TABLE $CONTACTS_TABLE_NAME ADD COLUMN $COL_JOB_POSITION TEXT DEFAULT ''")
|
||||
}
|
||||
}
|
||||
|
||||
private fun createGroupsTable(db: SQLiteDatabase) {
|
||||
|
@ -108,9 +119,11 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||
|
||||
private fun fillContactValues(contact: Contact): ContentValues {
|
||||
return ContentValues().apply {
|
||||
put(COL_PREFIX, contact.prefix)
|
||||
put(COL_FIRST_NAME, contact.firstName)
|
||||
put(COL_MIDDLE_NAME, contact.middleName)
|
||||
put(COL_SURNAME, contact.surname)
|
||||
put(COL_SUFFIX, contact.suffix)
|
||||
put(COL_PHONE_NUMBERS, Gson().toJson(contact.phoneNumbers))
|
||||
put(COL_EMAILS, Gson().toJson(contact.emails))
|
||||
put(COL_ADDRESSES, Gson().toJson(contact.addresses))
|
||||
|
@ -118,6 +131,8 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||
put(COL_STARRED, contact.starred)
|
||||
put(COL_NOTES, contact.notes)
|
||||
put(COL_GROUPS, Gson().toJson(contact.groups.map { it.id }))
|
||||
put(COL_COMPANY, contact.organization.company)
|
||||
put(COL_JOB_POSITION, contact.organization.jobPosition)
|
||||
|
||||
if (contact.photoUri.isNotEmpty()) {
|
||||
put(COL_PHOTO, getPhotoByteArray(contact.photoUri))
|
||||
|
@ -166,7 +181,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||
|
||||
fun deleteGroup(id: Long) = deleteGroups(arrayOf(id.toString()))
|
||||
|
||||
fun deleteGroups(ids: Array<String>) {
|
||||
private fun deleteGroups(ids: Array<String>) {
|
||||
val args = TextUtils.join(", ", ids)
|
||||
val selection = "$GROUPS_TABLE_NAME.$COL_ID IN ($args)"
|
||||
mDb.delete(GROUPS_TABLE_NAME, selection, null)
|
||||
|
@ -209,7 +224,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||
}
|
||||
}
|
||||
|
||||
fun updateContactGroups(contact: Contact, groupIds: ArrayList<Long>) {
|
||||
private fun updateContactGroups(contact: Contact, groupIds: ArrayList<Long>) {
|
||||
val contactValues = fillContactGroupValues(groupIds)
|
||||
val selection = "$COL_ID = ?"
|
||||
val selectionArgs = arrayOf(contact.id.toString())
|
||||
|
@ -222,21 +237,20 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
fun getContacts(activity: BaseSimpleActivity, selection: String? = null, selectionArgs: Array<String>? = null): ArrayList<Contact> {
|
||||
val storedGroups = ContactsHelper(activity).getStoredGroups()
|
||||
val contacts = ArrayList<Contact>()
|
||||
val projection = arrayOf(COL_ID, COL_FIRST_NAME, COL_MIDDLE_NAME, COL_SURNAME, COL_PHONE_NUMBERS, COL_EMAILS, COL_EVENTS, COL_STARRED,
|
||||
COL_PHOTO, COL_ADDRESSES, COL_NOTES, COL_GROUPS)
|
||||
val projection = arrayOf(COL_ID, COL_PREFIX, COL_FIRST_NAME, COL_MIDDLE_NAME, COL_SURNAME, COL_SUFFIX, COL_PHONE_NUMBERS, COL_EMAILS,
|
||||
COL_EVENTS, COL_STARRED, COL_PHOTO, COL_ADDRESSES, COL_NOTES, COL_GROUPS, COL_COMPANY, COL_JOB_POSITION)
|
||||
val cursor = mDb.query(CONTACTS_TABLE_NAME, projection, selection, selectionArgs, null, null, null)
|
||||
cursor.use {
|
||||
while (cursor.moveToNext()) {
|
||||
val id = cursor.getIntValue(COL_ID)
|
||||
val prefix = ""
|
||||
val prefix = cursor.getStringValue(COL_PREFIX)
|
||||
val firstName = cursor.getStringValue(COL_FIRST_NAME)
|
||||
val middleName = cursor.getStringValue(COL_MIDDLE_NAME)
|
||||
val surname = cursor.getStringValue(COL_SURNAME)
|
||||
val suffix = ""
|
||||
val suffix = cursor.getStringValue(COL_SUFFIX)
|
||||
|
||||
val phoneNumbersJson = cursor.getStringValue(COL_PHONE_NUMBERS)
|
||||
val phoneNumbersToken = object : TypeToken<List<PhoneNumber>>() {}.type
|
||||
|
@ -269,7 +283,9 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||
val groupIds = Gson().fromJson<ArrayList<Long>>(groupIdsJson, groupIdsToken) ?: ArrayList(1)
|
||||
val groups = storedGroups.filter { groupIds.contains(it.id) } as ArrayList<Group>
|
||||
|
||||
val organization = Organization("", "")
|
||||
val company = cursor.getStringValue(COL_COMPANY)
|
||||
val jobPosition = cursor.getStringValue(COL_JOB_POSITION)
|
||||
val organization = Organization(company, jobPosition)
|
||||
|
||||
val contact = Contact(id, prefix, firstName, middleName, surname, suffix, "", phoneNumbers, emails, addresses, events,
|
||||
SMT_PRIVATE, starred, id, "", photo, notes, groups, organization)
|
||||
|
|
Loading…
Reference in New Issue