@@ -38,6 +38,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
3838 private val COL_COMPANY = " company"
3939 private val COL_JOB_POSITION = " job_position"
4040 private val COL_GROUPS = " groups"
41+ private val COL_WEBSITES = " websites"
4142
4243 private val GROUPS_TABLE_NAME = " groups"
4344 private val COL_TITLE = " title"
@@ -47,7 +48,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
4748 private val mDb = writableDatabase
4849
4950 companion object {
50- private const val DB_VERSION = 4
51+ private const val DB_VERSION = 5
5152 const val DB_NAME = " contacts.db"
5253 var dbInstance: DBHelper ? = null
5354 var gson = Gson ()
@@ -63,7 +64,8 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
6364 override fun onCreate (db : SQLiteDatabase ) {
6465 db.execSQL(" CREATE TABLE $CONTACTS_TABLE_NAME ($COL_ID INTEGER PRIMARY KEY AUTOINCREMENT, $COL_FIRST_NAME TEXT, $COL_MIDDLE_NAME TEXT, " +
6566 " $COL_SURNAME TEXT, $COL_PHOTO BLOB, $COL_PHONE_NUMBERS TEXT, $COL_EMAILS TEXT, $COL_EVENTS TEXT, $COL_STARRED INTEGER, " +
66- " $COL_ADDRESSES TEXT, $COL_NOTES TEXT, $COL_GROUPS TEXT, $COL_PREFIX TEXT, $COL_SUFFIX TEXT, $COL_COMPANY TEXT, $COL_JOB_POSITION TEXT)" )
67+ " $COL_ADDRESSES TEXT, $COL_NOTES TEXT, $COL_GROUPS TEXT, $COL_PREFIX TEXT, $COL_SUFFIX TEXT, $COL_COMPANY TEXT, $COL_JOB_POSITION TEXT," +
68+ " $COL_WEBSITES TEXT)" )
6769
6870 // start autoincrement ID from FIRST_CONTACT_ID to avoid conflicts
6971 db.execSQL(" REPLACE INTO sqlite_sequence (name, seq) VALUES ('$CONTACTS_TABLE_NAME ', $FIRST_CONTACT_ID )" )
@@ -88,6 +90,10 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
8890 db.execSQL(" ALTER TABLE $CONTACTS_TABLE_NAME ADD COLUMN $COL_COMPANY TEXT DEFAULT ''" )
8991 db.execSQL(" ALTER TABLE $CONTACTS_TABLE_NAME ADD COLUMN $COL_JOB_POSITION TEXT DEFAULT ''" )
9092 }
93+
94+ if (oldVersion < 5 ) {
95+ db.execSQL(" ALTER TABLE $CONTACTS_TABLE_NAME ADD COLUMN $COL_WEBSITES TEXT DEFAULT ''" )
96+ }
9197 }
9298
9399 private fun createGroupsTable (db : SQLiteDatabase ) {
@@ -134,6 +140,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
134140 put(COL_GROUPS , gson.toJson(contact.groups.map { it.id }))
135141 put(COL_COMPANY , contact.organization.company)
136142 put(COL_JOB_POSITION , contact.organization.jobPosition)
143+ put(COL_WEBSITES , gson.toJson(contact.websites))
137144
138145 if (contact.photoUri.isNotEmpty()) {
139146 put(COL_PHOTO , getPhotoByteArray(contact.photoUri))
@@ -242,13 +249,14 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
242249 val storedGroups = ContactsHelper (activity).getStoredGroups()
243250 val contacts = ArrayList <Contact >()
244251 val projection = arrayOf(COL_ID , COL_PREFIX , COL_FIRST_NAME , COL_MIDDLE_NAME , COL_SURNAME , COL_SUFFIX , COL_PHONE_NUMBERS , COL_EMAILS ,
245- COL_EVENTS , COL_STARRED , COL_PHOTO , COL_ADDRESSES , COL_NOTES , COL_GROUPS , COL_COMPANY , COL_JOB_POSITION )
252+ COL_EVENTS , COL_STARRED , COL_PHOTO , COL_ADDRESSES , COL_NOTES , COL_GROUPS , COL_COMPANY , COL_JOB_POSITION , COL_WEBSITES )
246253
247254 val phoneNumbersToken = object : TypeToken <List <PhoneNumber >>() {}.type
248255 val emailsToken = object : TypeToken <List <Email >>() {}.type
249256 val addressesToken = object : TypeToken <List <Address >>() {}.type
250257 val eventsToken = object : TypeToken <List <Event >>() {}.type
251258 val groupIdsToken = object : TypeToken <List <Long >>() {}.type
259+ val websitesToken = object : TypeToken <List <String >>() {}.type
252260
253261 val cursor = mDb.query(CONTACTS_TABLE_NAME , projection, selection, selectionArgs, null , null , null )
254262 cursor.use {
@@ -295,7 +303,9 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
295303 val jobPosition = cursor.getStringValue(COL_JOB_POSITION )
296304 val organization = Organization (company, jobPosition)
297305
298- val websites = ArrayList <String >()
306+ val websitesJson = cursor.getStringValue(COL_WEBSITES )
307+ val websites = if (websitesJson == " []" ) ArrayList () else gson.fromJson<ArrayList <String >>(websitesJson, websitesToken)
308+ ? : ArrayList (1 )
299309
300310 val contact = Contact (id, prefix, firstName, middleName, surname, suffix, " " , phoneNumbers, emails, addresses, events,
301311 SMT_PRIVATE , starred, id, " " , photo, notes, groups, organization, websites)
0 commit comments