Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2020-11-04 21:01:07 +0300
committerStefan Niedermann <info@niedermann.it>2020-11-04 21:01:07 +0300
commitd971a59c0f0785113d0971551c40a01f5b7b2c2b (patch)
tree0079db19e84c8ec55a642788ef6ad2f5708a7f87 /app/src/main/java/it/niedermann
parent400559de73c827e45ba80f100dadee874530fb13 (diff)
Fix contacts lookup
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it/niedermann')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/AbstractPickerAdapter.java14
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactAdapter.java26
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);
}