From 6f82aadcb9a0c8513c76201023cef6b4ee74303e Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 1 Feb 2018 23:54:36 +0100 Subject: [PATCH] store the local account type in shared prefs --- .../contacts/activities/MainActivity.kt | 25 +++++++++++++++++++ .../contacts/helpers/Config.kt | 4 +++ .../contacts/helpers/Constants.kt | 1 + .../contacts/helpers/ContactsHelper.kt | 23 +++++++++++++++++ 4 files changed, 53 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt index 8bbd46cd..4fe8fa9c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt @@ -51,6 +51,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { setContentView(R.layout.activity_main) appLaunched() setupTabColors() + storeLocalAccountType() handlePermission(PERMISSION_READ_CONTACTS) { if (it) { @@ -214,6 +215,30 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { } } + private fun storeLocalAccountType() { + if (config.localAccountType == "-1") { + // some manufacturer contact account types from https://stackoverflow.com/a/44802016/1967672 + val localAccountTypes = arrayListOf("vnd.sec.contact.phone", + "com.htc.android.pcsc", + "com.sonyericsson.localcontacts", + "com.lge.sync", + "com.lge.phone", + "vnd.tmobileus.contact.phone", + "com.android.huawei.phone", + "Local Phone Account") + + ContactsHelper(this).getContactTypes { + var localAccountType = "" + it.forEach { + if (localAccountTypes.contains(it)) { + localAccountType = it + } + } + config.localAccountType = localAccountType + } + } + } + private fun getOtherViewPagerItem(used: Int) = if (used == 1) 0 else 1 private fun initFragments() { diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Config.kt index 77b8ca32..707a9c23 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Config.kt @@ -43,4 +43,8 @@ class Config(context: Context) : BaseConfig(context) { var lastUsedViewPagerPage: Int get() = prefs.getInt(LAST_USED_VIEW_PAGER_PAGE, 0) set(lastUsedViewPagerPage) = prefs.edit().putInt(LAST_USED_VIEW_PAGER_PAGE, lastUsedViewPagerPage).apply() + + var localAccountType: String + get() = prefs.getString(LOCAL_ACCOUNT_TYPE, "-1") + set(localAccountType) = prefs.edit().putString(LOCAL_ACCOUNT_TYPE, localAccountType).apply() } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt index 9bbcb459..441289db 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt @@ -10,6 +10,7 @@ const val DISPLAY_CONTACT_SOURCES = "display_contact_sources" const val START_NAME_WITH_SURNAME = "start_name_with_surname" const val LAST_USED_CONTACT_SOURCE = "last_used_contact_source" const val LAST_USED_VIEW_PAGER_PAGE = "last_used_view_pager_page" +const val LOCAL_ACCOUNT_TYPE = "local_account_type" const val CONTACT_ID = "contact_id" diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt index be32e742..bad36eb1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt @@ -252,6 +252,29 @@ class ContactsHelper(val activity: BaseSimpleActivity) { }.start() } + fun getContactTypes(callback: (ArrayList) -> Unit) { + val accounts = HashSet() + Thread { + val uri = ContactsContract.RawContacts.CONTENT_URI + val projection = arrayOf(ContactsContract.RawContacts.ACCOUNT_TYPE) + + var cursor: Cursor? = null + try { + cursor = activity.contentResolver.query(uri, projection, null, null, null) + if (cursor?.moveToFirst() == true) { + do { + val type = cursor.getStringValue(ContactsContract.RawContacts.ACCOUNT_TYPE) ?: continue + accounts.add(type) + } while (cursor.moveToNext()) + } + } finally { + cursor?.close() + } + + callback(ArrayList(accounts)) + }.start() + } + private fun getContactSourceType(accountName: String): String { if (accountName.isEmpty()) { return ""