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.
fork-5.53.8
AsamK 2021-02-04 17:24:29 +01:00 zatwierdzone przez Cody Henthorne
rodzic e0128e7e31
commit 341a31da00
1 zmienionych plików z 6 dodań i 0 usunięć

Wyświetl plik

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