diff options
author | Stefan Niedermann <info@niedermann.it> | 2020-11-04 21:01:07 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2020-11-04 21:01:07 +0300 |
commit | d971a59c0f0785113d0971551c40a01f5b7b2c2b (patch) | |
tree | 0079db19e84c8ec55a642788ef6ad2f5708a7f87 /app/src/main/java/it/niedermann/nextcloud/deck | |
parent | 400559de73c827e45ba80f100dadee874530fb13 (diff) |
Fix contacts lookup
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck')
2 files changed, 13 insertions, 27 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/AbstractPickerAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/AbstractPickerAdapter.java index c3810b8c6..483f546bf 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/AbstractPickerAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/AbstractPickerAdapter.java @@ -9,17 +9,12 @@ import android.net.Uri; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; -import java.util.Arrays; import java.util.Objects; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.function.Consumer; -import static android.database.Cursor.FIELD_TYPE_BLOB; -import static android.database.Cursor.FIELD_TYPE_FLOAT; import static android.database.Cursor.FIELD_TYPE_INTEGER; -import static android.database.Cursor.FIELD_TYPE_NULL; -import static android.database.Cursor.FIELD_TYPE_STRING; import static androidx.recyclerview.widget.RecyclerView.NO_ID; /** @@ -72,17 +67,10 @@ public abstract class AbstractPickerAdapter<T extends RecyclerView.ViewHolder> e @Override public long getItemId(int position) { if (cursor.moveToPosition(position - 1)) { + //noinspection SwitchStatementWithTooFewBranches switch (columnIndexType) { case FIELD_TYPE_INTEGER: return cursor.getLong(columnIndex); - case FIELD_TYPE_NULL: - return NO_ID; - case FIELD_TYPE_FLOAT: - return String.valueOf(cursor.getFloat(columnIndex)).hashCode(); - case FIELD_TYPE_STRING: - return cursor.getString(columnIndex).hashCode(); - case FIELD_TYPE_BLOB: - return Arrays.hashCode(cursor.getBlob(columnIndex)); default: throw new IllegalStateException("Unknown type for columnIndex \"" + columnIndex + "\": " + columnIndexType); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactAdapter.java index 32df573bd..ba6eeb6c6 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactAdapter.java @@ -1,6 +1,5 @@ package it.niedermann.nextcloud.deck.ui.card.attachments.picker; -import android.content.ContentUris; import android.content.Context; import android.database.Cursor; import android.graphics.Bitmap; @@ -30,14 +29,17 @@ import static android.provider.ContactsContract.Contacts.CONTENT_LOOKUP_URI; import static android.provider.ContactsContract.Contacts.CONTENT_URI; import static android.provider.ContactsContract.Contacts.DISPLAY_NAME; import static android.provider.ContactsContract.Contacts.SORT_KEY_PRIMARY; +import static android.provider.ContactsContract.Contacts._ID; public class ContactAdapter extends AbstractPickerAdapter<RecyclerView.ViewHolder> { + private final int lookupKeyColumnIndex; private final int displayNameColumnIndex; public ContactAdapter(@NonNull Context context, @NonNull Consumer<Uri> onSelect, @NonNull Runnable onSelectPicker) { - super(context, onSelect, onSelectPicker, CONTENT_URI, LOOKUP_KEY, new String[]{LOOKUP_KEY, DISPLAY_NAME}, SORT_KEY_PRIMARY); + super(context, onSelect, onSelectPicker, CONTENT_URI, _ID, new String[]{_ID, LOOKUP_KEY, DISPLAY_NAME}, SORT_KEY_PRIMARY); + lookupKeyColumnIndex = cursor.getColumnIndex(LOOKUP_KEY); displayNameColumnIndex = cursor.getColumnIndex(DISPLAY_NAME); notifyItemRangeInserted(0, getItemCount()); } @@ -65,30 +67,26 @@ public class ContactAdapter extends AbstractPickerAdapter<RecyclerView.ViewHolde case VIEW_TYPE_ITEM: { bindExecutor.execute(() -> { final ContactItemViewHolder viewHolder = (ContactItemViewHolder) holder; - final long id = getItemId(position); + cursor.moveToPosition(position - 1); final String displayName = cursor.getString(displayNameColumnIndex); - try (InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(contentResolver, Uri.withAppendedPath(CONTENT_LOOKUP_URI, cursor.getString(columnIndex)))) { + final String lookupKey = cursor.getString(lookupKeyColumnIndex); + try (InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(contentResolver, Uri.withAppendedPath(CONTENT_LOOKUP_URI, lookupKey))) { final Bitmap thumbnail = BitmapFactory.decodeStream(inputStream); String contactInformation = ""; - final String lookupKey = cursor.getString(columnIndex); - final Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[]{NUMBER}, LOOKUP_KEY + " = ?", new String[]{lookupKey}, null); - if (phoneCursor != null) { - if (phoneCursor.moveToFirst()) { + try (final Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[]{NUMBER}, LOOKUP_KEY + " = ?", new String[]{lookupKey}, null)) { + if (phoneCursor != null && phoneCursor.moveToFirst()) { contactInformation = phoneCursor.getString(phoneCursor.getColumnIndex(NUMBER)); } - phoneCursor.close(); } if (TextUtils.isEmpty(contactInformation)) { - final Cursor emailCursor = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, new String[]{DATA}, LOOKUP_KEY + " = ?", new String[]{lookupKey}, null); - if (emailCursor != null) { - if (emailCursor.moveToFirst()) { + try (final Cursor emailCursor = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, new String[]{DATA}, LOOKUP_KEY + " = ?", new String[]{lookupKey}, null)) { + if (emailCursor != null && emailCursor.moveToFirst()) { contactInformation = emailCursor.getString(emailCursor.getColumnIndex(DATA)); } - emailCursor.close(); } } final String finalContactInformation = contactInformation; - new Handler(Looper.getMainLooper()).post(() -> viewHolder.bind(ContentUris.withAppendedId(CONTENT_LOOKUP_URI, id), thumbnail, displayName, finalContactInformation, onSelect)); + new Handler(Looper.getMainLooper()).post(() -> viewHolder.bind(Uri.withAppendedPath(CONTENT_LOOKUP_URI, lookupKey), thumbnail, displayName, finalContactInformation, onSelect)); } catch (IOException ignored) { new Handler(Looper.getMainLooper()).post(viewHolder::bindError); } |