Dialer: Fix NPE with private calls
* On calls with supressed number, the uri is null resulting in a
NPE when calling getSchemeSpecificPart() on it
Change-Id: I8534583c0d8422684a46b7ef34c0c62bd8bf88f1
diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java
index 66ca448..e3b4904 100644
--- a/java/com/android/incallui/InCallPresenter.java
+++ b/java/com/android/incallui/InCallPresenter.java
@@ -21,6 +21,7 @@
import android.content.Context;
import android.content.Intent;
import android.graphics.Point;
+import android.net.Uri;
import android.os.Bundle;
import android.os.Trace;
import android.provider.BlockedNumberContract;
@@ -495,27 +496,31 @@
public void onCallAdded(final android.telecom.Call call) {
Trace.beginSection("InCallPresenter.onCallAdded");
- if (call.getDetails().hasProperty(CallCompat.Details.PROPERTY_IS_EXTERNAL_CALL)) {
+ Call.Details callDetails = call.getDetails();
+ if (callDetails.hasProperty(CallCompat.Details.PROPERTY_IS_EXTERNAL_CALL)) {
externalCallList.onCallAdded(call);
} else {
callList.onCallAdded(context, call);
}
- if (call.getDetails().getState() == Call.STATE_RINGING) {
+ if (callDetails.getState() == Call.STATE_RINGING) {
if (EmergencyCallUtil.hasRecentEmergencyCall(context)) {
return;
}
TelephonyManager tm = context.getSystemService(TelephonyManager.class);
String countryIso = tm.getSimCountryIso().toUpperCase();
- String incomingNumber = call.getDetails().getHandle().getSchemeSpecificPart();
+ Uri handle = callDetails.getHandle();
+ if (handle != null) {
+ String incomingNumber = handle.getSchemeSpecificPart();
- incomingNumber = PhoneNumberUtils.formatNumberToE164(incomingNumber, countryIso);
+ incomingNumber = PhoneNumberUtils.formatNumberToE164(incomingNumber, countryIso);
- // Check if the number is blocked, to silence the ringer.
- if (BlockedNumberContract.canCurrentUserBlockNumbers(context) &&
- BlockedNumberContract.isBlocked(context, incomingNumber)) {
- TelecomUtil.silenceRinger(context);
+ // Check if the number is blocked, to silence the ringer.
+ if (BlockedNumberContract.canCurrentUserBlockNumbers(context) &&
+ BlockedNumberContract.isBlocked(context, incomingNumber)) {
+ TelecomUtil.silenceRinger(context);
+ }
}
}