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:
		| @@ -4,16 +4,14 @@ import androidx.room.TypeConverter | ||||
| import com.google.gson.Gson | ||||
| import com.google.gson.reflect.TypeToken | ||||
| import com.simplemobiletools.commons.models.PhoneNumber | ||||
| import com.simplemobiletools.contacts.pro.models.Address | ||||
| import com.simplemobiletools.contacts.pro.models.Email | ||||
| import com.simplemobiletools.contacts.pro.models.Event | ||||
| import com.simplemobiletools.contacts.pro.models.IM | ||||
| import com.simplemobiletools.contacts.pro.models.* | ||||
|  | ||||
| class Converters { | ||||
|     private val gson = Gson() | ||||
|     private val longType = object : TypeToken<List<Long>>() {}.type | ||||
|     private val stringType = object : TypeToken<List<String>>() {}.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 addressType = object : TypeToken<List<Address>>() {}.type | ||||
|     private val eventType = object : TypeToken<List<Event>>() {}.type | ||||
| @@ -31,8 +29,23 @@ class Converters { | ||||
|     @TypeConverter | ||||
|     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 | ||||
|     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 | ||||
|     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) | ||||
		Reference in New Issue
	
	Block a user