mirror of
				https://github.com/SimpleMobileTools/Simple-Contacts.git
				synced 2025-06-05 21:59:27 +02:00 
			
		
		
		
	use the helper function queryCursor at looping cursors
This commit is contained in:
		| @@ -113,25 +113,16 @@ class ContactsHelper(val context: Context) { | |||||||
|                 RawContacts.ACCOUNT_TYPE |                 RawContacts.ACCOUNT_TYPE | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|         var cursor: Cursor? = null |         context.queryCursor(uri, projection) { cursor -> | ||||||
|         try { |             val name = cursor.getStringValue(RawContacts.ACCOUNT_NAME) ?: "" | ||||||
|             cursor = context.contentResolver.query(uri, projection, null, null, null) |             val type = cursor.getStringValue(RawContacts.ACCOUNT_TYPE) ?: "" | ||||||
|             if (cursor?.moveToFirst() == true) { |             var publicName = name | ||||||
|                 do { |             if (type == TELEGRAM_PACKAGE) { | ||||||
|                     val name = cursor.getStringValue(RawContacts.ACCOUNT_NAME) ?: "" |                 publicName += " (${context.getString(R.string.telegram)})" | ||||||
|                     val type = cursor.getStringValue(RawContacts.ACCOUNT_TYPE) ?: "" |  | ||||||
|                     var publicName = name |  | ||||||
|                     if (type == TELEGRAM_PACKAGE) { |  | ||||||
|                         publicName += " (${context.getString(R.string.telegram)})" |  | ||||||
|                     } |  | ||||||
|  |  | ||||||
|                     val source = ContactSource(name, type, publicName) |  | ||||||
|                     sources.add(source) |  | ||||||
|                 } while (cursor.moveToNext()) |  | ||||||
|             } |             } | ||||||
|         } catch (e: Exception) { |  | ||||||
|         } finally { |             val source = ContactSource(name, type, publicName) | ||||||
|             cursor?.close() |             sources.add(source) | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -148,57 +139,47 @@ class ContactsHelper(val context: Context) { | |||||||
|         val selectionArgs = arrayOf(StructuredName.CONTENT_ITEM_TYPE, CommonDataKinds.Organization.CONTENT_ITEM_TYPE) |         val selectionArgs = arrayOf(StructuredName.CONTENT_ITEM_TYPE, CommonDataKinds.Organization.CONTENT_ITEM_TYPE) | ||||||
|         val sortOrder = getSortString() |         val sortOrder = getSortString() | ||||||
|  |  | ||||||
|         var cursor: Cursor? = null |         context.queryCursor(uri, projection, selection, selectionArgs, sortOrder, true) { cursor -> | ||||||
|         try { |             val accountName = cursor.getStringValue(RawContacts.ACCOUNT_NAME) ?: "" | ||||||
|             cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, sortOrder) |             val accountType = cursor.getStringValue(RawContacts.ACCOUNT_TYPE) ?: "" | ||||||
|             if (cursor?.moveToFirst() == true) { |             if (ignoredSources.contains("$accountName:$accountType")) { | ||||||
|                 do { |                 return@queryCursor | ||||||
|                     val accountName = cursor.getStringValue(RawContacts.ACCOUNT_NAME) ?: "" |  | ||||||
|                     val accountType = cursor.getStringValue(RawContacts.ACCOUNT_TYPE) ?: "" |  | ||||||
|                     if (ignoredSources.contains("$accountName:$accountType")) { |  | ||||||
|                         continue |  | ||||||
|                     } |  | ||||||
|  |  | ||||||
|                     val id = cursor.getIntValue(Data.RAW_CONTACT_ID) |  | ||||||
|                     var prefix = "" |  | ||||||
|                     var firstName = "" |  | ||||||
|                     var middleName = "" |  | ||||||
|                     var surname = "" |  | ||||||
|                     var suffix = "" |  | ||||||
|  |  | ||||||
|                     // ignore names at Organization type contacts |  | ||||||
|                     if (cursor.getStringValue(Data.MIMETYPE) == StructuredName.CONTENT_ITEM_TYPE) { |  | ||||||
|                         prefix = cursor.getStringValue(StructuredName.PREFIX) ?: "" |  | ||||||
|                         firstName = cursor.getStringValue(StructuredName.GIVEN_NAME) ?: "" |  | ||||||
|                         middleName = cursor.getStringValue(StructuredName.MIDDLE_NAME) ?: "" |  | ||||||
|                         surname = cursor.getStringValue(StructuredName.FAMILY_NAME) ?: "" |  | ||||||
|                         suffix = cursor.getStringValue(StructuredName.SUFFIX) ?: "" |  | ||||||
|                     } |  | ||||||
|  |  | ||||||
|                     val nickname = "" |  | ||||||
|                     val photoUri = cursor.getStringValue(StructuredName.PHOTO_URI) ?: "" |  | ||||||
|                     val numbers = ArrayList<PhoneNumber>()          // proper value is obtained below |  | ||||||
|                     val emails = ArrayList<Email>() |  | ||||||
|                     val addresses = ArrayList<Address>() |  | ||||||
|                     val events = ArrayList<Event>() |  | ||||||
|                     val starred = cursor.getIntValue(StructuredName.STARRED) |  | ||||||
|                     val contactId = cursor.getIntValue(Data.CONTACT_ID) |  | ||||||
|                     val thumbnailUri = cursor.getStringValue(StructuredName.PHOTO_THUMBNAIL_URI) ?: "" |  | ||||||
|                     val notes = "" |  | ||||||
|                     val groups = ArrayList<Group>() |  | ||||||
|                     val organization = Organization("", "") |  | ||||||
|                     val websites = ArrayList<String>() |  | ||||||
|                     val ims = ArrayList<IM>() |  | ||||||
|                     val contact = Contact(id, prefix, firstName, middleName, surname, suffix, nickname, photoUri, numbers, emails, addresses, |  | ||||||
|                             events, accountName, starred, contactId, thumbnailUri, null, notes, groups, organization, websites, ims) |  | ||||||
|  |  | ||||||
|                     contacts.put(id, contact) |  | ||||||
|                 } while (cursor.moveToNext()) |  | ||||||
|             } |             } | ||||||
|         } catch (e: Exception) { |  | ||||||
|             context.showErrorToast(e) |             val id = cursor.getIntValue(Data.RAW_CONTACT_ID) | ||||||
|         } finally { |             var prefix = "" | ||||||
|             cursor?.close() |             var firstName = "" | ||||||
|  |             var middleName = "" | ||||||
|  |             var surname = "" | ||||||
|  |             var suffix = "" | ||||||
|  |  | ||||||
|  |             // ignore names at Organization type contacts | ||||||
|  |             if (cursor.getStringValue(Data.MIMETYPE) == StructuredName.CONTENT_ITEM_TYPE) { | ||||||
|  |                 prefix = cursor.getStringValue(StructuredName.PREFIX) ?: "" | ||||||
|  |                 firstName = cursor.getStringValue(StructuredName.GIVEN_NAME) ?: "" | ||||||
|  |                 middleName = cursor.getStringValue(StructuredName.MIDDLE_NAME) ?: "" | ||||||
|  |                 surname = cursor.getStringValue(StructuredName.FAMILY_NAME) ?: "" | ||||||
|  |                 suffix = cursor.getStringValue(StructuredName.SUFFIX) ?: "" | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             val nickname = "" | ||||||
|  |             val photoUri = cursor.getStringValue(StructuredName.PHOTO_URI) ?: "" | ||||||
|  |             val numbers = ArrayList<PhoneNumber>()          // proper value is obtained below | ||||||
|  |             val emails = ArrayList<Email>() | ||||||
|  |             val addresses = ArrayList<Address>() | ||||||
|  |             val events = ArrayList<Event>() | ||||||
|  |             val starred = cursor.getIntValue(StructuredName.STARRED) | ||||||
|  |             val contactId = cursor.getIntValue(Data.CONTACT_ID) | ||||||
|  |             val thumbnailUri = cursor.getStringValue(StructuredName.PHOTO_THUMBNAIL_URI) ?: "" | ||||||
|  |             val notes = "" | ||||||
|  |             val groups = ArrayList<Group>() | ||||||
|  |             val organization = Organization("", "") | ||||||
|  |             val websites = ArrayList<String>() | ||||||
|  |             val ims = ArrayList<IM>() | ||||||
|  |             val contact = Contact(id, prefix, firstName, middleName, surname, suffix, nickname, photoUri, numbers, emails, addresses, | ||||||
|  |                     events, accountName, starred, contactId, thumbnailUri, null, notes, groups, organization, websites, ims) | ||||||
|  |  | ||||||
|  |             contacts.put(id, contact) | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         val phoneNumbers = getPhoneNumbers(null) |         val phoneNumbers = getPhoneNumbers(null) | ||||||
| @@ -282,29 +263,19 @@ class ContactsHelper(val context: Context) { | |||||||
|         val selection = if (contactId == null) getSourcesSelection() else "${Data.RAW_CONTACT_ID} = ?" |         val selection = if (contactId == null) getSourcesSelection() else "${Data.RAW_CONTACT_ID} = ?" | ||||||
|         val selectionArgs = if (contactId == null) getSourcesSelectionArgs() else arrayOf(contactId.toString()) |         val selectionArgs = if (contactId == null) getSourcesSelectionArgs() else arrayOf(contactId.toString()) | ||||||
|  |  | ||||||
|         var cursor: Cursor? = null |         context.queryCursor(uri, projection, selection, selectionArgs, showErrors = true) { cursor -> | ||||||
|         try { |             val id = cursor.getIntValue(Data.RAW_CONTACT_ID) | ||||||
|             cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) |             val number = cursor.getStringValue(Phone.NUMBER) ?: return@queryCursor | ||||||
|             if (cursor?.moveToFirst() == true) { |             val normalizedNumber = cursor.getStringValue(Phone.NORMALIZED_NUMBER) ?: number.normalizeNumber() | ||||||
|                 do { |             val type = cursor.getIntValue(Phone.TYPE) | ||||||
|                     val id = cursor.getIntValue(Data.RAW_CONTACT_ID) |             val label = cursor.getStringValue(Phone.LABEL) ?: "" | ||||||
|                     val number = cursor.getStringValue(Phone.NUMBER) ?: continue |  | ||||||
|                     val normalizedNumber = cursor.getStringValue(Phone.NORMALIZED_NUMBER) ?: number.normalizeNumber() |  | ||||||
|                     val type = cursor.getIntValue(Phone.TYPE) |  | ||||||
|                     val label = cursor.getStringValue(Phone.LABEL) ?: "" |  | ||||||
|  |  | ||||||
|                     if (phoneNumbers[id] == null) { |             if (phoneNumbers[id] == null) { | ||||||
|                         phoneNumbers.put(id, ArrayList()) |                 phoneNumbers.put(id, ArrayList()) | ||||||
|                     } |  | ||||||
|  |  | ||||||
|                     val phoneNumber = PhoneNumber(number, type, label, normalizedNumber) |  | ||||||
|                     phoneNumbers[id].add(phoneNumber) |  | ||||||
|                 } while (cursor.moveToNext()) |  | ||||||
|             } |             } | ||||||
|         } catch (e: Exception) { |  | ||||||
|             context.showErrorToast(e) |             val phoneNumber = PhoneNumber(number, type, label, normalizedNumber) | ||||||
|         } finally { |             phoneNumbers[id].add(phoneNumber) | ||||||
|             cursor?.close() |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return phoneNumbers |         return phoneNumbers | ||||||
| @@ -321,20 +292,10 @@ class ContactsHelper(val context: Context) { | |||||||
|         val selection = getSourcesSelection(true, contactId != null) |         val selection = getSourcesSelection(true, contactId != null) | ||||||
|         val selectionArgs = getSourcesSelectionArgs(Nickname.CONTENT_ITEM_TYPE, contactId) |         val selectionArgs = getSourcesSelectionArgs(Nickname.CONTENT_ITEM_TYPE, contactId) | ||||||
|  |  | ||||||
|         var cursor: Cursor? = null |         context.queryCursor(uri, projection, selection, selectionArgs, showErrors = true) { cursor -> | ||||||
|         try { |             val id = cursor.getIntValue(Data.RAW_CONTACT_ID) | ||||||
|             cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) |             val nickname = cursor.getStringValue(Nickname.NAME) ?: return@queryCursor | ||||||
|             if (cursor?.moveToFirst() == true) { |             nicknames.put(id, nickname) | ||||||
|                 do { |  | ||||||
|                     val id = cursor.getIntValue(Data.RAW_CONTACT_ID) |  | ||||||
|                     val nickname = cursor.getStringValue(Nickname.NAME) ?: continue |  | ||||||
|                     nicknames.put(id, nickname) |  | ||||||
|                 } while (cursor.moveToNext()) |  | ||||||
|             } |  | ||||||
|         } catch (e: Exception) { |  | ||||||
|             context.showErrorToast(e) |  | ||||||
|         } finally { |  | ||||||
|             cursor?.close() |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return nicknames |         return nicknames | ||||||
| @@ -353,27 +314,17 @@ class ContactsHelper(val context: Context) { | |||||||
|         val selection = if (contactId == null) getSourcesSelection() else "${Data.RAW_CONTACT_ID} = ?" |         val selection = if (contactId == null) getSourcesSelection() else "${Data.RAW_CONTACT_ID} = ?" | ||||||
|         val selectionArgs = if (contactId == null) getSourcesSelectionArgs() else arrayOf(contactId.toString()) |         val selectionArgs = if (contactId == null) getSourcesSelectionArgs() else arrayOf(contactId.toString()) | ||||||
|  |  | ||||||
|         var cursor: Cursor? = null |         context.queryCursor(uri, projection, selection, selectionArgs, showErrors = true) { cursor -> | ||||||
|         try { |             val id = cursor.getIntValue(Data.RAW_CONTACT_ID) | ||||||
|             cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) |             val email = cursor.getStringValue(CommonDataKinds.Email.DATA) ?: return@queryCursor | ||||||
|             if (cursor?.moveToFirst() == true) { |             val type = cursor.getIntValue(CommonDataKinds.Email.TYPE) | ||||||
|                 do { |             val label = cursor.getStringValue(CommonDataKinds.Email.LABEL) ?: "" | ||||||
|                     val id = cursor.getIntValue(Data.RAW_CONTACT_ID) |  | ||||||
|                     val email = cursor.getStringValue(CommonDataKinds.Email.DATA) ?: continue |  | ||||||
|                     val type = cursor.getIntValue(CommonDataKinds.Email.TYPE) |  | ||||||
|                     val label = cursor.getStringValue(CommonDataKinds.Email.LABEL) ?: "" |  | ||||||
|  |  | ||||||
|                     if (emails[id] == null) { |             if (emails[id] == null) { | ||||||
|                         emails.put(id, ArrayList()) |                 emails.put(id, ArrayList()) | ||||||
|                     } |  | ||||||
|  |  | ||||||
|                     emails[id]!!.add(Email(email, type, label)) |  | ||||||
|                 } while (cursor.moveToNext()) |  | ||||||
|             } |             } | ||||||
|         } catch (e: Exception) { |  | ||||||
|             context.showErrorToast(e) |             emails[id]!!.add(Email(email, type, label)) | ||||||
|         } finally { |  | ||||||
|             cursor?.close() |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return emails |         return emails | ||||||
| @@ -392,27 +343,17 @@ class ContactsHelper(val context: Context) { | |||||||
|         val selection = if (contactId == null) getSourcesSelection() else "${Data.RAW_CONTACT_ID} = ?" |         val selection = if (contactId == null) getSourcesSelection() else "${Data.RAW_CONTACT_ID} = ?" | ||||||
|         val selectionArgs = if (contactId == null) getSourcesSelectionArgs() else arrayOf(contactId.toString()) |         val selectionArgs = if (contactId == null) getSourcesSelectionArgs() else arrayOf(contactId.toString()) | ||||||
|  |  | ||||||
|         var cursor: Cursor? = null |         context.queryCursor(uri, projection, selection, selectionArgs, showErrors = true) { cursor -> | ||||||
|         try { |             val id = cursor.getIntValue(Data.RAW_CONTACT_ID) | ||||||
|             cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) |             val address = cursor.getStringValue(StructuredPostal.FORMATTED_ADDRESS) ?: return@queryCursor | ||||||
|             if (cursor?.moveToFirst() == true) { |             val type = cursor.getIntValue(StructuredPostal.TYPE) | ||||||
|                 do { |             val label = cursor.getStringValue(StructuredPostal.LABEL) ?: "" | ||||||
|                     val id = cursor.getIntValue(Data.RAW_CONTACT_ID) |  | ||||||
|                     val address = cursor.getStringValue(StructuredPostal.FORMATTED_ADDRESS) ?: continue |  | ||||||
|                     val type = cursor.getIntValue(StructuredPostal.TYPE) |  | ||||||
|                     val label = cursor.getStringValue(StructuredPostal.LABEL) ?: "" |  | ||||||
|  |  | ||||||
|                     if (addresses[id] == null) { |             if (addresses[id] == null) { | ||||||
|                         addresses.put(id, ArrayList()) |                 addresses.put(id, ArrayList()) | ||||||
|                     } |  | ||||||
|  |  | ||||||
|                     addresses[id]!!.add(Address(address, type, label)) |  | ||||||
|                 } while (cursor.moveToNext()) |  | ||||||
|             } |             } | ||||||
|         } catch (e: Exception) { |  | ||||||
|             context.showErrorToast(e) |             addresses[id]!!.add(Address(address, type, label)) | ||||||
|         } finally { |  | ||||||
|             cursor?.close() |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return addresses |         return addresses | ||||||
| @@ -431,27 +372,17 @@ class ContactsHelper(val context: Context) { | |||||||
|         val selection = getSourcesSelection(true, contactId != null) |         val selection = getSourcesSelection(true, contactId != null) | ||||||
|         val selectionArgs = getSourcesSelectionArgs(Im.CONTENT_ITEM_TYPE, contactId) |         val selectionArgs = getSourcesSelectionArgs(Im.CONTENT_ITEM_TYPE, contactId) | ||||||
|  |  | ||||||
|         var cursor: Cursor? = null |         context.queryCursor(uri, projection, selection, selectionArgs, showErrors = true) { cursor -> | ||||||
|         try { |             val id = cursor.getIntValue(Data.RAW_CONTACT_ID) | ||||||
|             cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) |             val IM = cursor.getStringValue(Im.DATA) ?: return@queryCursor | ||||||
|             if (cursor?.moveToFirst() == true) { |             val type = cursor.getIntValue(Im.PROTOCOL) | ||||||
|                 do { |             val label = cursor.getStringValue(Im.CUSTOM_PROTOCOL) ?: "" | ||||||
|                     val id = cursor.getIntValue(Data.RAW_CONTACT_ID) |  | ||||||
|                     val IM = cursor.getStringValue(Im.DATA) ?: continue |  | ||||||
|                     val type = cursor.getIntValue(Im.PROTOCOL) |  | ||||||
|                     val label = cursor.getStringValue(Im.CUSTOM_PROTOCOL) ?: "" |  | ||||||
|  |  | ||||||
|                     if (IMs[id] == null) { |             if (IMs[id] == null) { | ||||||
|                         IMs.put(id, ArrayList()) |                 IMs.put(id, ArrayList()) | ||||||
|                     } |  | ||||||
|  |  | ||||||
|                     IMs[id]!!.add(IM(IM, type, label)) |  | ||||||
|                 } while (cursor.moveToNext()) |  | ||||||
|             } |             } | ||||||
|         } catch (e: Exception) { |  | ||||||
|             context.showErrorToast(e) |             IMs[id]!!.add(IM(IM, type, label)) | ||||||
|         } finally { |  | ||||||
|             cursor?.close() |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return IMs |         return IMs | ||||||
| @@ -469,26 +400,16 @@ class ContactsHelper(val context: Context) { | |||||||
|         val selection = getSourcesSelection(true, contactId != null) |         val selection = getSourcesSelection(true, contactId != null) | ||||||
|         val selectionArgs = getSourcesSelectionArgs(CommonDataKinds.Event.CONTENT_ITEM_TYPE, contactId) |         val selectionArgs = getSourcesSelectionArgs(CommonDataKinds.Event.CONTENT_ITEM_TYPE, contactId) | ||||||
|  |  | ||||||
|         var cursor: Cursor? = null |         context.queryCursor(uri, projection, selection, selectionArgs, showErrors = true) { cursor -> | ||||||
|         try { |             val id = cursor.getIntValue(Data.RAW_CONTACT_ID) | ||||||
|             cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) |             val startDate = cursor.getStringValue(CommonDataKinds.Event.START_DATE) ?: return@queryCursor | ||||||
|             if (cursor?.moveToFirst() == true) { |             val type = cursor.getIntValue(CommonDataKinds.Event.TYPE) | ||||||
|                 do { |  | ||||||
|                     val id = cursor.getIntValue(Data.RAW_CONTACT_ID) |  | ||||||
|                     val startDate = cursor.getStringValue(CommonDataKinds.Event.START_DATE) ?: continue |  | ||||||
|                     val type = cursor.getIntValue(CommonDataKinds.Event.TYPE) |  | ||||||
|  |  | ||||||
|                     if (events[id] == null) { |             if (events[id] == null) { | ||||||
|                         events.put(id, ArrayList()) |                 events.put(id, ArrayList()) | ||||||
|                     } |  | ||||||
|  |  | ||||||
|                     events[id]!!.add(Event(startDate, type)) |  | ||||||
|                 } while (cursor.moveToNext()) |  | ||||||
|             } |             } | ||||||
|         } catch (e: Exception) { |  | ||||||
|             context.showErrorToast(e) |             events[id]!!.add(Event(startDate, type)) | ||||||
|         } finally { |  | ||||||
|             cursor?.close() |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return events |         return events | ||||||
| @@ -505,20 +426,10 @@ class ContactsHelper(val context: Context) { | |||||||
|         val selection = getSourcesSelection(true, contactId != null) |         val selection = getSourcesSelection(true, contactId != null) | ||||||
|         val selectionArgs = getSourcesSelectionArgs(Note.CONTENT_ITEM_TYPE, contactId) |         val selectionArgs = getSourcesSelectionArgs(Note.CONTENT_ITEM_TYPE, contactId) | ||||||
|  |  | ||||||
|         var cursor: Cursor? = null |         context.queryCursor(uri, projection, selection, selectionArgs, showErrors = true) { cursor -> | ||||||
|         try { |             val id = cursor.getIntValue(Data.RAW_CONTACT_ID) | ||||||
|             cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) |             val note = cursor.getStringValue(Note.NOTE) ?: return@queryCursor | ||||||
|             if (cursor?.moveToFirst() == true) { |             notes.put(id, note) | ||||||
|                 do { |  | ||||||
|                     val id = cursor.getIntValue(Data.RAW_CONTACT_ID) |  | ||||||
|                     val note = cursor.getStringValue(Note.NOTE) ?: continue |  | ||||||
|                     notes.put(id, note) |  | ||||||
|                 } while (cursor.moveToNext()) |  | ||||||
|             } |  | ||||||
|         } catch (e: Exception) { |  | ||||||
|             context.showErrorToast(e) |  | ||||||
|         } finally { |  | ||||||
|             cursor?.close() |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return notes |         return notes | ||||||
| @@ -536,26 +447,16 @@ class ContactsHelper(val context: Context) { | |||||||
|         val selection = getSourcesSelection(true, contactId != null) |         val selection = getSourcesSelection(true, contactId != null) | ||||||
|         val selectionArgs = getSourcesSelectionArgs(CommonDataKinds.Organization.CONTENT_ITEM_TYPE, contactId) |         val selectionArgs = getSourcesSelectionArgs(CommonDataKinds.Organization.CONTENT_ITEM_TYPE, contactId) | ||||||
|  |  | ||||||
|         var cursor: Cursor? = null |         context.queryCursor(uri, projection, selection, selectionArgs, showErrors = true) { cursor -> | ||||||
|         try { |             val id = cursor.getIntValue(Data.RAW_CONTACT_ID) | ||||||
|             cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) |             val company = cursor.getStringValue(CommonDataKinds.Organization.COMPANY) ?: "" | ||||||
|             if (cursor?.moveToFirst() == true) { |             val title = cursor.getStringValue(CommonDataKinds.Organization.TITLE) ?: "" | ||||||
|                 do { |             if (company.isEmpty() && title.isEmpty()) { | ||||||
|                     val id = cursor.getIntValue(Data.RAW_CONTACT_ID) |                 return@queryCursor | ||||||
|                     val company = cursor.getStringValue(CommonDataKinds.Organization.COMPANY) ?: "" |  | ||||||
|                     val title = cursor.getStringValue(CommonDataKinds.Organization.TITLE) ?: "" |  | ||||||
|                     if (company.isEmpty() && title.isEmpty()) { |  | ||||||
|                         continue |  | ||||||
|                     } |  | ||||||
|  |  | ||||||
|                     val organization = Organization(company, title) |  | ||||||
|                     organizations.put(id, organization) |  | ||||||
|                 } while (cursor.moveToNext()) |  | ||||||
|             } |             } | ||||||
|         } catch (e: Exception) { |  | ||||||
|             context.showErrorToast(e) |             val organization = Organization(company, title) | ||||||
|         } finally { |             organizations.put(id, organization) | ||||||
|             cursor?.close() |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return organizations |         return organizations | ||||||
| @@ -572,25 +473,15 @@ class ContactsHelper(val context: Context) { | |||||||
|         val selection = getSourcesSelection(true, contactId != null) |         val selection = getSourcesSelection(true, contactId != null) | ||||||
|         val selectionArgs = getSourcesSelectionArgs(Website.CONTENT_ITEM_TYPE, contactId) |         val selectionArgs = getSourcesSelectionArgs(Website.CONTENT_ITEM_TYPE, contactId) | ||||||
|  |  | ||||||
|         var cursor: Cursor? = null |         context.queryCursor(uri, projection, selection, selectionArgs, showErrors = true) { cursor -> | ||||||
|         try { |             val id = cursor.getIntValue(Data.RAW_CONTACT_ID) | ||||||
|             cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) |             val url = cursor.getStringValue(Website.URL) ?: return@queryCursor | ||||||
|             if (cursor?.moveToFirst() == true) { |  | ||||||
|                 do { |  | ||||||
|                     val id = cursor.getIntValue(Data.RAW_CONTACT_ID) |  | ||||||
|                     val url = cursor.getStringValue(Website.URL) ?: continue |  | ||||||
|  |  | ||||||
|                     if (websites[id] == null) { |             if (websites[id] == null) { | ||||||
|                         websites.put(id, ArrayList()) |                 websites.put(id, ArrayList()) | ||||||
|                     } |  | ||||||
|  |  | ||||||
|                     websites[id]!!.add(url) |  | ||||||
|                 } while (cursor.moveToNext()) |  | ||||||
|             } |             } | ||||||
|         } catch (e: Exception) { |  | ||||||
|             context.showErrorToast(e) |             websites[id]!!.add(url) | ||||||
|         } finally { |  | ||||||
|             cursor?.close() |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return websites |         return websites | ||||||
| @@ -611,26 +502,16 @@ class ContactsHelper(val context: Context) { | |||||||
|         val selection = getSourcesSelection(true, contactId != null, false) |         val selection = getSourcesSelection(true, contactId != null, false) | ||||||
|         val selectionArgs = getSourcesSelectionArgs(GroupMembership.CONTENT_ITEM_TYPE, contactId) |         val selectionArgs = getSourcesSelectionArgs(GroupMembership.CONTENT_ITEM_TYPE, contactId) | ||||||
|  |  | ||||||
|         var cursor: Cursor? = null |         context.queryCursor(uri, projection, selection, selectionArgs, showErrors = true) { cursor -> | ||||||
|         try { |             val id = cursor.getIntValue(Data.CONTACT_ID) | ||||||
|             cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) |             val newRowId = cursor.getLongValue(Data.DATA1) | ||||||
|             if (cursor?.moveToFirst() == true) { |  | ||||||
|                 do { |  | ||||||
|                     val id = cursor.getIntValue(Data.CONTACT_ID) |  | ||||||
|                     val newRowId = cursor.getLongValue(Data.DATA1) |  | ||||||
|  |  | ||||||
|                     val groupTitle = storedGroups.firstOrNull { it.id == newRowId }?.title ?: continue |             val groupTitle = storedGroups.firstOrNull { it.id == newRowId }?.title ?: return@queryCursor | ||||||
|                     val group = Group(newRowId, groupTitle) |             val group = Group(newRowId, groupTitle) | ||||||
|                     if (groups[id] == null) { |             if (groups[id] == null) { | ||||||
|                         groups.put(id, ArrayList()) |                 groups.put(id, ArrayList()) | ||||||
|                     } |  | ||||||
|                     groups[id]!!.add(group) |  | ||||||
|                 } while (cursor.moveToNext()) |  | ||||||
|             } |             } | ||||||
|         } catch (e: Exception) { |             groups[id]!!.add(group) | ||||||
|             context.showErrorToast(e) |  | ||||||
|         } finally { |  | ||||||
|             cursor?.close() |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return groups |         return groups | ||||||
| @@ -709,26 +590,16 @@ class ContactsHelper(val context: Context) { | |||||||
|         val selection = "${Groups.AUTO_ADD} = ? AND ${Groups.FAVORITES} = ?" |         val selection = "${Groups.AUTO_ADD} = ? AND ${Groups.FAVORITES} = ?" | ||||||
|         val selectionArgs = arrayOf("0", "0") |         val selectionArgs = arrayOf("0", "0") | ||||||
|  |  | ||||||
|         var cursor: Cursor? = null |         context.queryCursor(uri, projection, selection, selectionArgs, showErrors = true) { cursor -> | ||||||
|         try { |             val id = cursor.getLongValue(Groups._ID) | ||||||
|             cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) |             val title = cursor.getStringValue(Groups.TITLE) ?: return@queryCursor | ||||||
|             if (cursor?.moveToFirst() == true) { |  | ||||||
|                 do { |  | ||||||
|                     val id = cursor.getLongValue(Groups._ID) |  | ||||||
|                     val title = cursor.getStringValue(Groups.TITLE) ?: continue |  | ||||||
|  |  | ||||||
|                     val systemId = cursor.getStringValue(Groups.SYSTEM_ID) |             val systemId = cursor.getStringValue(Groups.SYSTEM_ID) | ||||||
|                     if (groups.map { it.title }.contains(title) && systemId != null) { |             if (groups.map { it.title }.contains(title) && systemId != null) { | ||||||
|                         continue |                 return@queryCursor | ||||||
|                     } |  | ||||||
|  |  | ||||||
|                     groups.add(Group(id, title)) |  | ||||||
|                 } while (cursor.moveToNext()) |  | ||||||
|             } |             } | ||||||
|         } catch (e: Exception) { |  | ||||||
|             context.showErrorToast(e) |             groups.add(Group(id, title)) | ||||||
|         } finally { |  | ||||||
|             cursor?.close() |  | ||||||
|         } |         } | ||||||
|         return groups |         return groups | ||||||
|     } |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user