mirror of
https://github.com/SimpleMobileTools/Simple-Contacts.git
synced 2025-06-05 21:59:27 +02:00
properly handle migrating to no longer minified PhoneNumber
This commit is contained in:
parent
82643fdafb
commit
b4e420c443
@ -4,16 +4,14 @@ import androidx.room.TypeConverter
|
|||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.google.gson.reflect.TypeToken
|
import com.google.gson.reflect.TypeToken
|
||||||
import com.simplemobiletools.commons.models.PhoneNumber
|
import com.simplemobiletools.commons.models.PhoneNumber
|
||||||
import com.simplemobiletools.contacts.pro.models.Address
|
import com.simplemobiletools.contacts.pro.models.*
|
||||||
import com.simplemobiletools.contacts.pro.models.Email
|
|
||||||
import com.simplemobiletools.contacts.pro.models.Event
|
|
||||||
import com.simplemobiletools.contacts.pro.models.IM
|
|
||||||
|
|
||||||
class Converters {
|
class Converters {
|
||||||
private val gson = Gson()
|
private val gson = Gson()
|
||||||
private val longType = object : TypeToken<List<Long>>() {}.type
|
private val longType = object : TypeToken<List<Long>>() {}.type
|
||||||
private val stringType = object : TypeToken<List<String>>() {}.type
|
private val stringType = object : TypeToken<List<String>>() {}.type
|
||||||
private val numberType = object : TypeToken<List<PhoneNumber>>() {}.type
|
private val numberType = object : TypeToken<List<PhoneNumber>>() {}.type
|
||||||
|
private val numberConverterType = object : TypeToken<List<PhoneNumberConverter>>() {}.type
|
||||||
private val emailType = object : TypeToken<List<Email>>() {}.type
|
private val emailType = object : TypeToken<List<Email>>() {}.type
|
||||||
private val addressType = object : TypeToken<List<Address>>() {}.type
|
private val addressType = object : TypeToken<List<Address>>() {}.type
|
||||||
private val eventType = object : TypeToken<List<Event>>() {}.type
|
private val eventType = object : TypeToken<List<Event>>() {}.type
|
||||||
@ -31,8 +29,23 @@ class Converters {
|
|||||||
@TypeConverter
|
@TypeConverter
|
||||||
fun longListToJson(list: ArrayList<Long>) = gson.toJson(list)
|
fun longListToJson(list: ArrayList<Long>) = gson.toJson(list)
|
||||||
|
|
||||||
|
// some hacky converting is needed since PhoneNumber model has been added to proguard rules, but obfuscated json was stored in database
|
||||||
|
// convert [{"a":"678910","b":2,"c":"","d":"678910","e":false}] to PhoneNumber(value=678910, type=2, label=, normalizedNumber=678910, isPrimary=false)
|
||||||
@TypeConverter
|
@TypeConverter
|
||||||
fun jsonToPhoneNumberList(value: String) = gson.fromJson<ArrayList<PhoneNumber>>(value, numberType)
|
fun jsonToPhoneNumberList(value: String): ArrayList<PhoneNumber> {
|
||||||
|
val numbers = gson.fromJson<ArrayList<PhoneNumber>>(value, numberType)
|
||||||
|
return if (numbers.any { it.value == null }) {
|
||||||
|
val phoneNumbers = ArrayList<PhoneNumber>()
|
||||||
|
val numberConverters = gson.fromJson<ArrayList<PhoneNumberConverter>>(value, numberConverterType)
|
||||||
|
numberConverters.forEach { converter ->
|
||||||
|
val phoneNumber = PhoneNumber(converter.a, converter.b, converter.c, converter.d, converter.e)
|
||||||
|
phoneNumbers.add(phoneNumber)
|
||||||
|
}
|
||||||
|
phoneNumbers
|
||||||
|
} else {
|
||||||
|
numbers
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@TypeConverter
|
@TypeConverter
|
||||||
fun phoneNumberListToJson(list: ArrayList<PhoneNumber>) = gson.toJson(list)
|
fun phoneNumberListToJson(list: ArrayList<PhoneNumber>) = gson.toJson(list)
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
package com.simplemobiletools.contacts.pro.models
|
||||||
|
|
||||||
|
// need for hacky parsing of no longer minified PhoneNumber model in Converters.kt
|
||||||
|
data class PhoneNumberConverter(var a: String, var b: Int, var c: String, var d: String, var e: Boolean = false)
|
Loading…
x
Reference in New Issue
Block a user