Dynamically check for permission denials
Don't crash when performing certain operations that the
dialer might not have permissions to execute:
* Access voicemail provider
* Certain TelecomManager methods
Add a class TelecomUtil that checks for permissions/default
dialer status, and handles the privileged operations
appropriately.
Bug: 20266292
Change-Id: Ibe8a85440b9ca20169b5ce3be24d1a385caaebb6
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index 7a23944..0a295c4 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -66,6 +66,7 @@
import com.android.dialer.util.AsyncTaskExecutors;
import com.android.dialer.util.CallIntentUtil;
import com.android.dialer.util.DialerUtils;
+import com.android.dialer.util.TelecomUtil;
import com.android.dialer.voicemail.VoicemailPlaybackFragment;
import com.android.dialer.voicemail.VoicemailStatusHelper;
import com.android.dialer.voicemail.VoicemailStatusHelper.StatusMessage;
@@ -307,7 +308,8 @@
final int numIds = ids == null ? 0 : ids.length;
final Uri[] uris = new Uri[numIds];
for (int index = 0; index < numIds; ++index) {
- uris[index] = ContentUris.withAppendedId(Calls.CONTENT_URI_WITH_VOICEMAIL, ids[index]);
+ uris[index] = ContentUris.withAppendedId(
+ TelecomUtil.getCallLogUri(CallDetailActivity.this), ids[index]);
}
return uris;
}
@@ -670,7 +672,8 @@
new AsyncTask<Void, Void, Void>() {
@Override
public Void doInBackground(Void... params) {
- getContentResolver().delete(Calls.CONTENT_URI_WITH_VOICEMAIL,
+ getContentResolver().delete(
+ TelecomUtil.getCallLogUri(CallDetailActivity.this),
Calls._ID + " IN (" + callIds + ")", null);
return null;
}