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.
This commit is contained in:
AsamK
2021-02-04 17:24:29 +01:00
committed by Cody Henthorne
parent e0128e7e31
commit 341a31da00

View File

@@ -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;