Add exception catching for BlockedNumberContract methods used by Telecom.
The content resolver can throw in some instances when using the blocked
number provider. Rather than crashing all of telecom, adding exception
handling to provide graceful fallback in these cases.
Test: Compile / build
Bug: 74965829
Merged-In: Iae4c2dfc912e0d2a4194deb62568ee2f78ce4e22
Change-Id: Iae4c2dfc912e0d2a4194deb62568ee2f78ce4e22
(cherry picked from commit b408ebe557)
This commit is contained in:
@@ -19,6 +19,7 @@ import android.annotation.WorkerThread;
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.telecom.Log;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -261,9 +262,16 @@ public class BlockedNumberContract {
|
||||
*/
|
||||
@WorkerThread
|
||||
public static boolean isBlocked(Context context, String phoneNumber) {
|
||||
final Bundle res = context.getContentResolver().call(
|
||||
AUTHORITY_URI, METHOD_IS_BLOCKED, phoneNumber, null);
|
||||
return res != null && res.getBoolean(RES_NUMBER_IS_BLOCKED, false);
|
||||
try {
|
||||
final Bundle res = context.getContentResolver().call(
|
||||
AUTHORITY_URI, METHOD_IS_BLOCKED, phoneNumber, null);
|
||||
return res != null && res.getBoolean(RES_NUMBER_IS_BLOCKED, false);
|
||||
} catch (NullPointerException | IllegalArgumentException ex) {
|
||||
// The content resolver can throw an NPE or IAE; we don't want to crash Telecom if
|
||||
// either of these happen.
|
||||
Log.w(null, "isBlocked: provider not ready.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -297,9 +305,16 @@ public class BlockedNumberContract {
|
||||
* @return {@code true} if the current user can block numbers.
|
||||
*/
|
||||
public static boolean canCurrentUserBlockNumbers(Context context) {
|
||||
final Bundle res = context.getContentResolver().call(
|
||||
AUTHORITY_URI, METHOD_CAN_CURRENT_USER_BLOCK_NUMBERS, null, null);
|
||||
return res != null && res.getBoolean(RES_CAN_BLOCK_NUMBERS, false);
|
||||
try {
|
||||
final Bundle res = context.getContentResolver().call(
|
||||
AUTHORITY_URI, METHOD_CAN_CURRENT_USER_BLOCK_NUMBERS, null, null);
|
||||
return res != null && res.getBoolean(RES_CAN_BLOCK_NUMBERS, false);
|
||||
} catch (NullPointerException | IllegalArgumentException ex) {
|
||||
// The content resolver can throw an NPE or IAE; we don't want to crash Telecom if
|
||||
// either of these happen.
|
||||
Log.w(null, "canCurrentUserBlockNumbers: provider not ready.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -368,8 +383,14 @@ public class BlockedNumberContract {
|
||||
* the provider unless {@link #endBlockSuppression(Context)} is called.
|
||||
*/
|
||||
public static void notifyEmergencyContact(Context context) {
|
||||
context.getContentResolver().call(
|
||||
AUTHORITY_URI, METHOD_NOTIFY_EMERGENCY_CONTACT, null, null);
|
||||
try {
|
||||
context.getContentResolver().call(
|
||||
AUTHORITY_URI, METHOD_NOTIFY_EMERGENCY_CONTACT, null, null);
|
||||
} catch (NullPointerException | IllegalArgumentException ex) {
|
||||
// The content resolver can throw an NPE or IAE; we don't want to crash Telecom if
|
||||
// either of these happen.
|
||||
Log.w(null, "notifyEmergencyContact: provider not ready.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -394,9 +415,16 @@ public class BlockedNumberContract {
|
||||
*/
|
||||
public static boolean shouldSystemBlockNumber(Context context, String phoneNumber,
|
||||
Bundle extras) {
|
||||
final Bundle res = context.getContentResolver().call(
|
||||
AUTHORITY_URI, METHOD_SHOULD_SYSTEM_BLOCK_NUMBER, phoneNumber, extras);
|
||||
return res != null && res.getBoolean(RES_NUMBER_IS_BLOCKED, false);
|
||||
try {
|
||||
final Bundle res = context.getContentResolver().call(
|
||||
AUTHORITY_URI, METHOD_SHOULD_SYSTEM_BLOCK_NUMBER, phoneNumber, extras);
|
||||
return res != null && res.getBoolean(RES_NUMBER_IS_BLOCKED, false);
|
||||
} catch (NullPointerException | IllegalArgumentException ex) {
|
||||
// The content resolver can throw an NPE or IAE; we don't want to crash Telecom if
|
||||
// either of these happen.
|
||||
Log.w(null, "shouldSystemBlockNumber: provider not ready.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -416,9 +444,16 @@ public class BlockedNumberContract {
|
||||
* @return {@code true} if should show emergency call notification. {@code false} otherwise.
|
||||
*/
|
||||
public static boolean shouldShowEmergencyCallNotification(Context context) {
|
||||
final Bundle res = context.getContentResolver().call(
|
||||
AUTHORITY_URI, METHOD_SHOULD_SHOW_EMERGENCY_CALL_NOTIFICATION, null, null);
|
||||
return res != null && res.getBoolean(RES_SHOW_EMERGENCY_CALL_NOTIFICATION, false);
|
||||
try {
|
||||
final Bundle res = context.getContentResolver().call(
|
||||
AUTHORITY_URI, METHOD_SHOULD_SHOW_EMERGENCY_CALL_NOTIFICATION, null, null);
|
||||
return res != null && res.getBoolean(RES_SHOW_EMERGENCY_CALL_NOTIFICATION, false);
|
||||
} catch (NullPointerException | IllegalArgumentException ex) {
|
||||
// The content resolver can throw an NPE or IAE; we don't want to crash Telecom if
|
||||
// either of these happen.
|
||||
Log.w(null, "shouldShowEmergencyCallNotification: provider not ready.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -436,9 +471,16 @@ public class BlockedNumberContract {
|
||||
public static boolean getEnhancedBlockSetting(Context context, String key) {
|
||||
Bundle extras = new Bundle();
|
||||
extras.putString(EXTRA_ENHANCED_SETTING_KEY, key);
|
||||
final Bundle res = context.getContentResolver().call(
|
||||
AUTHORITY_URI, METHOD_GET_ENHANCED_BLOCK_SETTING, null, extras);
|
||||
return res != null && res.getBoolean(RES_ENHANCED_SETTING_IS_ENABLED, false);
|
||||
try {
|
||||
final Bundle res = context.getContentResolver().call(
|
||||
AUTHORITY_URI, METHOD_GET_ENHANCED_BLOCK_SETTING, null, extras);
|
||||
return res != null && res.getBoolean(RES_ENHANCED_SETTING_IS_ENABLED, false);
|
||||
} catch (NullPointerException | IllegalArgumentException ex) {
|
||||
// The content resolver can throw an NPE or IAE; we don't want to crash Telecom if
|
||||
// either of these happen.
|
||||
Log.w(null, "getEnhancedBlockSetting: provider not ready.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user