From 341a31da0033d537a3300508bf4649e20f6ab095 Mon Sep 17 00:00:00 2001 From: AsamK Date: Thu, 4 Feb 2021 17:24:29 +0100 Subject: [PATCH] Fix crash from incoming call without contacts permission. When the device is in Do Not Disturb mode and a call comes in from a system contact, the app crashes if the user has revoked the contacts permission. The crash occurs because in Do Not Disturb mode Signal tries to check if the contact is starred. --- .../securesms/notifications/DoNotDisturbUtil.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/DoNotDisturbUtil.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/DoNotDisturbUtil.java index 5aaba4d5c..657fc7214 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/DoNotDisturbUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/DoNotDisturbUtil.java @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.notifications; +import android.Manifest; import android.app.NotificationManager; import android.content.Context; import android.database.Cursor; @@ -12,6 +13,7 @@ import androidx.annotation.WorkerThread; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.DatabaseFactory; +import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.ServiceUtil; @@ -84,6 +86,10 @@ public final class DoNotDisturbUtil { private static boolean isContactStarred(@NonNull Context context, @NonNull Recipient recipient) { if (!recipient.resolve().isSystemContact()) return false; + if (!Permissions.hasAny(context, Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS)) { + return false; + } + try (Cursor cursor = context.getContentResolver().query(recipient.resolve().getContactUri(), new String[]{ContactsContract.Contacts.STARRED}, null, null, null)) { if (cursor == null || !cursor.moveToFirst()) return false; return cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.STARRED)) == 1;