Merge "Update docs and ensure PHONE_STATE is more predictable for unknown numbers."

This commit is contained in:
Treehugger Robot
2018-08-16 15:22:23 +00:00
committed by Gerrit Code Review
2 changed files with 26 additions and 10 deletions

View File

@@ -1588,10 +1588,10 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
// Wakeup apps for the (SUBSCRIPTION_)PHONE_STATE broadcast.
intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
// Create a version of the intent with the number always populated.
Intent intentWithPhoneNumber = new Intent(intent);
if (!TextUtils.isEmpty(incomingNumber)) {
intentWithPhoneNumber.putExtra(TelephonyManager.EXTRA_INCOMING_NUMBER, incomingNumber);
}
intentWithPhoneNumber.putExtra(TelephonyManager.EXTRA_INCOMING_NUMBER, incomingNumber);
// Send broadcast twice, once for apps that have PRIVILEGED permission and once for those
// that have the runtime one
mContext.sendBroadcastAsUser(intentWithPhoneNumber, UserHandle.ALL,

View File

@@ -335,11 +335,18 @@ public class TelephonyManager {
* <p>
* The {@link #EXTRA_STATE} extra indicates the new call state.
* If a receiving app has {@link android.Manifest.permission#READ_CALL_LOG} permission, a second
* extra {@link #EXTRA_INCOMING_NUMBER} provides the phone number for incoming and outoing calls
* as a String. Note: If the receiving app has
* extra {@link #EXTRA_INCOMING_NUMBER} provides the phone number for incoming and outgoing
* calls as a String.
* <p>
* If the receiving app has
* {@link android.Manifest.permission#READ_CALL_LOG} and
* {@link android.Manifest.permission#READ_PHONE_STATE} permission, it will receive the
* broadcast twice; one with the phone number and another without it.
* broadcast twice; one with the {@link #EXTRA_INCOMING_NUMBER} populated with the phone number,
* and another with it blank. Due to the nature of broadcasts, you cannot assume the order
* in which these broadcasts will arrive, however you are guaranteed to receive two in this
* case. Apps which are interested in the {@link #EXTRA_INCOMING_NUMBER} can ignore the
* broadcasts where {@link #EXTRA_INCOMING_NUMBER} is not present in the extras (e.g. where
* {@link Intent#hasExtra(String)} returns {@code false}).
* <p class="note">
* This was a {@link android.content.Context#sendStickyBroadcast sticky}
* broadcast in version 1.0, but it is no longer sticky.
@@ -488,10 +495,19 @@ public class TelephonyManager {
public static final String EXTRA_STATE_OFFHOOK = PhoneConstants.State.OFFHOOK.toString();
/**
* The lookup key used with the {@link #ACTION_PHONE_STATE_CHANGED} broadcast
* for a String containing the incoming phone number.
* Only valid when the new call state is RINGING.
*
* Extra key used with the {@link #ACTION_PHONE_STATE_CHANGED} broadcast
* for a String containing the incoming or outgoing phone number.
* <p>
* This extra is only populated for receivers of the {@link #ACTION_PHONE_STATE_CHANGED}
* broadcast which have been granted the {@link android.Manifest.permission#READ_CALL_LOG} and
* {@link android.Manifest.permission#READ_PHONE_STATE} permissions.
* <p>
* For incoming calls, the phone number is only guaranteed to be populated when the
* {@link #EXTRA_STATE} changes from {@link #EXTRA_STATE_IDLE} to {@link #EXTRA_STATE_RINGING}.
* If the incoming caller is from an unknown number, the extra will be populated with an empty
* string.
* For outgoing calls, the phone number is only guaranteed to be populated when the
* {@link #EXTRA_STATE} changes from {@link #EXTRA_STATE_IDLE} to {@link #EXTRA_STATE_OFFHOOK}.
* <p class="note">
* Retrieve with
* {@link android.content.Intent#getStringExtra(String)}.