Merge "API Review cleanups." am: f2a5615087 am: 1ce250aaea

Change-Id: I4944712c81c87749d5f15ec90e2feb85619fecc5
This commit is contained in:
Automerger Merge Worker
2020-02-13 18:35:15 +00:00
9 changed files with 146 additions and 55 deletions

View File

@@ -43685,7 +43685,7 @@ package android.telecom {
field public static final int DIRECTION_INCOMING = 0; // 0x0 field public static final int DIRECTION_INCOMING = 0; // 0x0
field public static final int DIRECTION_OUTGOING = 1; // 0x1 field public static final int DIRECTION_OUTGOING = 1; // 0x1
field public static final int DIRECTION_UNKNOWN = -1; // 0xffffffff field public static final int DIRECTION_UNKNOWN = -1; // 0xffffffff
field public static final int PROPERTY_ASSISTED_DIALING_USED = 512; // 0x200 field public static final int PROPERTY_ASSISTED_DIALING = 512; // 0x200
field public static final int PROPERTY_CONFERENCE = 1; // 0x1 field public static final int PROPERTY_CONFERENCE = 1; // 0x1
field public static final int PROPERTY_EMERGENCY_CALLBACK_MODE = 4; // 0x4 field public static final int PROPERTY_EMERGENCY_CALLBACK_MODE = 4; // 0x4
field public static final int PROPERTY_ENTERPRISE_CALL = 32; // 0x20 field public static final int PROPERTY_ENTERPRISE_CALL = 32; // 0x20
@@ -43774,7 +43774,8 @@ package android.telecom {
method public final java.util.List<android.telecom.Connection> getConferenceableConnections(); method public final java.util.List<android.telecom.Connection> getConferenceableConnections();
method public final int getConnectionCapabilities(); method public final int getConnectionCapabilities();
method public final int getConnectionProperties(); method public final int getConnectionProperties();
method public final long getConnectionTime(); method public final long getConnectionStartElapsedRealtimeMillis();
method @IntRange(from=0) public final long getConnectionTime();
method public final java.util.List<android.telecom.Connection> getConnections(); method public final java.util.List<android.telecom.Connection> getConnections();
method public final android.telecom.DisconnectCause getDisconnectCause(); method public final android.telecom.DisconnectCause getDisconnectCause();
method public final android.os.Bundle getExtras(); method public final android.os.Bundle getExtras();
@@ -43804,8 +43805,9 @@ package android.telecom {
method public final void setConferenceableConnections(java.util.List<android.telecom.Connection>); method public final void setConferenceableConnections(java.util.List<android.telecom.Connection>);
method public final void setConnectionCapabilities(int); method public final void setConnectionCapabilities(int);
method public final void setConnectionProperties(int); method public final void setConnectionProperties(int);
method public final void setConnectionStartElapsedRealTime(long); method @Deprecated public final void setConnectionStartElapsedRealTime(long);
method public final void setConnectionTime(long); method public final void setConnectionStartElapsedRealtimeMillis(long);
method public final void setConnectionTime(@IntRange(from=0) long);
method public final void setDialing(); method public final void setDialing();
method public final void setDisconnected(android.telecom.DisconnectCause); method public final void setDisconnected(android.telecom.DisconnectCause);
method public final void setExtras(@Nullable android.os.Bundle); method public final void setExtras(@Nullable android.os.Bundle);
@@ -43965,7 +43967,7 @@ package android.telecom {
field public static final String EXTRA_IS_RTT_AUDIO_PRESENT = "android.telecom.extra.IS_RTT_AUDIO_PRESENT"; field public static final String EXTRA_IS_RTT_AUDIO_PRESENT = "android.telecom.extra.IS_RTT_AUDIO_PRESENT";
field public static final String EXTRA_LAST_FORWARDED_NUMBER = "android.telecom.extra.LAST_FORWARDED_NUMBER"; field public static final String EXTRA_LAST_FORWARDED_NUMBER = "android.telecom.extra.LAST_FORWARDED_NUMBER";
field public static final String EXTRA_SIP_INVITE = "android.telecom.extra.SIP_INVITE"; field public static final String EXTRA_SIP_INVITE = "android.telecom.extra.SIP_INVITE";
field public static final int PROPERTY_ASSISTED_DIALING_USED = 512; // 0x200 field public static final int PROPERTY_ASSISTED_DIALING = 512; // 0x200
field public static final int PROPERTY_HAS_CDMA_VOICE_PRIVACY = 32; // 0x20 field public static final int PROPERTY_HAS_CDMA_VOICE_PRIVACY = 32; // 0x20
field public static final int PROPERTY_HIGH_DEF_AUDIO = 4; // 0x4 field public static final int PROPERTY_HIGH_DEF_AUDIO = 4; // 0x4
field public static final int PROPERTY_IS_EXTERNAL_CALL = 16; // 0x10 field public static final int PROPERTY_IS_EXTERNAL_CALL = 16; // 0x10

View File

@@ -8253,27 +8253,26 @@ package android.telecom {
public abstract class Conference extends android.telecom.Conferenceable { public abstract class Conference extends android.telecom.Conferenceable {
method @Deprecated public final android.telecom.AudioState getAudioState(); method @Deprecated public final android.telecom.AudioState getAudioState();
method @Deprecated public final long getConnectTimeMillis(); method @Deprecated public final long getConnectTimeMillis();
method public final long getConnectionStartElapsedRealTime();
method public android.telecom.Connection getPrimaryConnection(); method public android.telecom.Connection getPrimaryConnection();
method @NonNull public final String getTelecomCallId(); method @NonNull public final String getTelecomCallId();
method @Deprecated public void onAudioStateChanged(android.telecom.AudioState); method @Deprecated public void onAudioStateChanged(android.telecom.AudioState);
method public final void setAddress(@NonNull android.net.Uri, int); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setAddress(@NonNull android.net.Uri, int);
method public final void setCallerDisplayName(@NonNull String, int); method public final void setCallerDisplayName(@NonNull String, int);
method public void setConferenceState(boolean); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setConferenceState(boolean);
method @Deprecated public final void setConnectTimeMillis(long); method @Deprecated public final void setConnectTimeMillis(long);
} }
public abstract class Connection extends android.telecom.Conferenceable { public abstract class Connection extends android.telecom.Conferenceable {
method @Deprecated public final android.telecom.AudioState getAudioState(); method @Deprecated public final android.telecom.AudioState getAudioState();
method public final long getConnectElapsedTimeMillis(); method @IntRange(from=0) public final long getConnectTimeMillis();
method public final long getConnectTimeMillis(); method public final long getConnectionStartElapsedRealtimeMillis();
method @Nullable public android.telecom.PhoneAccountHandle getPhoneAccountHandle(); method @Nullable public android.telecom.PhoneAccountHandle getPhoneAccountHandle();
method @Nullable public final String getTelecomCallId(); method @Nullable public final String getTelecomCallId();
method @Deprecated public void onAudioStateChanged(android.telecom.AudioState); method @Deprecated public void onAudioStateChanged(android.telecom.AudioState);
method public final void resetConnectionTime(); method public final void resetConnectionTime();
method public void setCallDirection(int); method public void setCallDirection(int);
method public final void setConnectTimeMillis(long); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setConnectTimeMillis(@IntRange(from=0) long);
method public final void setConnectionStartElapsedRealTime(long); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setConnectionStartElapsedRealtimeMillis(long);
method public void setPhoneAccountHandle(@NonNull android.telecom.PhoneAccountHandle); method public void setPhoneAccountHandle(@NonNull android.telecom.PhoneAccountHandle);
method public void setTelecomCallId(@NonNull String); method public void setTelecomCallId(@NonNull String);
field public static final int CAPABILITY_CONFERENCE_HAS_NO_CHILDREN = 2097152; // 0x200000 field public static final int CAPABILITY_CONFERENCE_HAS_NO_CHILDREN = 2097152; // 0x200000
@@ -8425,7 +8424,7 @@ package android.telecom {
} }
public static class PhoneAccount.Builder { public static class PhoneAccount.Builder {
method @NonNull public android.telecom.PhoneAccount.Builder setGroupId(@NonNull String); method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telecom.PhoneAccount.Builder setGroupId(@NonNull String);
} }
public class PhoneAccountSuggestionService extends android.app.Service { public class PhoneAccountSuggestionService extends android.app.Service {
@@ -8500,7 +8499,7 @@ package android.telecom {
method public int getCallState(); method public int getCallState();
method public android.telecom.PhoneAccountHandle getConnectionManager(); method public android.telecom.PhoneAccountHandle getConnectionManager();
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getCurrentTtyMode(); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getCurrentTtyMode();
method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getDefaultDialerPackage(int); method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getDefaultDialerPackage(@NonNull android.os.UserHandle);
method @Deprecated public android.content.ComponentName getDefaultPhoneApp(); method @Deprecated public android.content.ComponentName getDefaultPhoneApp();
method public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsForPackage(); method public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsForPackage();
method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsSupportingScheme(String); method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsSupportingScheme(String);

View File

@@ -3005,23 +3005,22 @@ package android.telecom {
} }
public abstract class Conference extends android.telecom.Conferenceable { public abstract class Conference extends android.telecom.Conferenceable {
method public final long getConnectionStartElapsedRealTime();
method public android.telecom.Connection getPrimaryConnection(); method public android.telecom.Connection getPrimaryConnection();
method @NonNull public final String getTelecomCallId(); method @NonNull public final String getTelecomCallId();
method public final void setAddress(@NonNull android.net.Uri, int); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setAddress(@NonNull android.net.Uri, int);
method public final void setCallerDisplayName(@NonNull String, int); method public final void setCallerDisplayName(@NonNull String, int);
method public void setConferenceState(boolean); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setConferenceState(boolean);
} }
public abstract class Connection extends android.telecom.Conferenceable { public abstract class Connection extends android.telecom.Conferenceable {
method public final long getConnectElapsedTimeMillis(); method @IntRange(from=0) public final long getConnectTimeMillis();
method public final long getConnectTimeMillis(); method public final long getConnectionStartElapsedRealtimeMillis();
method @Nullable public android.telecom.PhoneAccountHandle getPhoneAccountHandle(); method @Nullable public android.telecom.PhoneAccountHandle getPhoneAccountHandle();
method @Nullable public final String getTelecomCallId(); method @Nullable public final String getTelecomCallId();
method public final void resetConnectionTime(); method public final void resetConnectionTime();
method public void setCallDirection(int); method public void setCallDirection(int);
method public final void setConnectTimeMillis(long); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setConnectTimeMillis(@IntRange(from=0) long);
method public final void setConnectionStartElapsedRealTime(long); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setConnectionStartElapsedRealtimeMillis(long);
method public void setPhoneAccountHandle(@NonNull android.telecom.PhoneAccountHandle); method public void setPhoneAccountHandle(@NonNull android.telecom.PhoneAccountHandle);
method public void setTelecomCallId(@NonNull String); method public void setTelecomCallId(@NonNull String);
field public static final int CAPABILITY_CONFERENCE_HAS_NO_CHILDREN = 2097152; // 0x200000 field public static final int CAPABILITY_CONFERENCE_HAS_NO_CHILDREN = 2097152; // 0x200000
@@ -3053,7 +3052,7 @@ package android.telecom {
} }
public static class PhoneAccount.Builder { public static class PhoneAccount.Builder {
method @NonNull public android.telecom.PhoneAccount.Builder setGroupId(@NonNull String); method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telecom.PhoneAccount.Builder setGroupId(@NonNull String);
} }
public class PhoneAccountSuggestionService extends android.app.Service { public class PhoneAccountSuggestionService extends android.app.Service {
@@ -3067,7 +3066,7 @@ package android.telecom {
public class TelecomManager { public class TelecomManager {
method @NonNull @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public java.util.List<android.telecom.PhoneAccountHandle> getCallCapablePhoneAccounts(boolean); method @NonNull @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public java.util.List<android.telecom.PhoneAccountHandle> getCallCapablePhoneAccounts(boolean);
method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public int getCurrentTtyMode(); method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public int getCurrentTtyMode();
method @Nullable @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getDefaultDialerPackage(int); method @Nullable @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getDefaultDialerPackage(@NonNull android.os.UserHandle);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean isInEmergencyCall(); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean isInEmergencyCall();
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUserSelectedOutgoingPhoneAccount(@Nullable android.telecom.PhoneAccountHandle); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUserSelectedOutgoingPhoneAccount(@Nullable android.telecom.PhoneAccountHandle);
field public static final int TTY_MODE_FULL = 1; // 0x1 field public static final int TTY_MODE_FULL = 1; // 0x1

View File

@@ -546,7 +546,7 @@ public final class Call {
* *
* @see TelecomManager#EXTRA_USE_ASSISTED_DIALING * @see TelecomManager#EXTRA_USE_ASSISTED_DIALING
*/ */
public static final int PROPERTY_ASSISTED_DIALING_USED = 0x00000200; public static final int PROPERTY_ASSISTED_DIALING = 0x00000200;
/** /**
* Indicates that the call is an RTT call. Use {@link #getRttCall()} to get the * Indicates that the call is an RTT call. Use {@link #getRttCall()} to get the
@@ -754,7 +754,7 @@ public final class Call {
if (hasProperty(properties, PROPERTY_HAS_CDMA_VOICE_PRIVACY)) { if (hasProperty(properties, PROPERTY_HAS_CDMA_VOICE_PRIVACY)) {
builder.append(" PROPERTY_HAS_CDMA_VOICE_PRIVACY"); builder.append(" PROPERTY_HAS_CDMA_VOICE_PRIVACY");
} }
if (hasProperty(properties, PROPERTY_ASSISTED_DIALING_USED)) { if (hasProperty(properties, PROPERTY_ASSISTED_DIALING)) {
builder.append(" PROPERTY_ASSISTED_DIALING_USED"); builder.append(" PROPERTY_ASSISTED_DIALING_USED");
} }
if (hasProperty(properties, PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL)) { if (hasProperty(properties, PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL)) {

View File

@@ -16,8 +16,13 @@
package android.telecom; package android.telecom;
import static android.Manifest.permission.MODIFY_PHONE_STATE;
import android.annotation.ElapsedRealtimeLong;
import android.annotation.IntRange;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi; import android.annotation.SystemApi;
import android.annotation.TestApi; import android.annotation.TestApi;
import android.net.Uri; import android.net.Uri;
@@ -632,12 +637,12 @@ public abstract class Conference extends Conferenceable {
* Should be specified in wall-clock time returned by {@link System#currentTimeMillis()}. * Should be specified in wall-clock time returned by {@link System#currentTimeMillis()}.
* <p> * <p>
* When setting the connection time, you should always set the connection elapsed time via * When setting the connection time, you should always set the connection elapsed time via
* {@link #setConnectionStartElapsedRealTime(long)} to ensure the duration is reflected. * {@link #setConnectionStartElapsedRealtimeMillis(long)} to ensure the duration is reflected.
* *
* @param connectionTimeMillis The connection time, in milliseconds, as returned by * @param connectionTimeMillis The connection time, in milliseconds, as returned by
* {@link System#currentTimeMillis()}. * {@link System#currentTimeMillis()}.
*/ */
public final void setConnectionTime(long connectionTimeMillis) { public final void setConnectionTime(@IntRange(from = 0) long connectionTimeMillis) {
mConnectTimeMillis = connectionTimeMillis; mConnectTimeMillis = connectionTimeMillis;
} }
@@ -653,8 +658,28 @@ public abstract class Conference extends Conferenceable {
* *
* @param connectionStartElapsedRealTime The connection time, as measured by * @param connectionStartElapsedRealTime The connection time, as measured by
* {@link SystemClock#elapsedRealtime()}. * {@link SystemClock#elapsedRealtime()}.
* @deprecated use {@link #setConnectionStartElapsedRealtimeMillis(long)} instead.
*/ */
@Deprecated
public final void setConnectionStartElapsedRealTime(long connectionStartElapsedRealTime) { public final void setConnectionStartElapsedRealTime(long connectionStartElapsedRealTime) {
setConnectionStartElapsedRealtimeMillis(connectionStartElapsedRealTime);
}
/**
* Sets the start time of the {@link Conference} which is the basis for the determining the
* duration of the {@link Conference}.
* <p>
* You should use a value returned by {@link SystemClock#elapsedRealtime()} to ensure that time
* zone changes do not impact the conference duration.
* <p>
* When setting this, you should also set the connection time via
* {@link #setConnectionTime(long)}.
*
* @param connectionStartElapsedRealTime The connection time, as measured by
* {@link SystemClock#elapsedRealtime()}.
*/
public final void setConnectionStartElapsedRealtimeMillis(
@ElapsedRealtimeLong long connectionStartElapsedRealTime) {
mConnectionStartElapsedRealTime = connectionStartElapsedRealTime; mConnectionStartElapsedRealTime = connectionStartElapsedRealTime;
} }
@@ -675,7 +700,7 @@ public abstract class Conference extends Conferenceable {
* *
* @return The time at which the {@code Conference} was connected. * @return The time at which the {@code Conference} was connected.
*/ */
public final long getConnectionTime() { public final @IntRange(from = 0) long getConnectionTime() {
return mConnectTimeMillis; return mConnectTimeMillis;
} }
@@ -692,11 +717,8 @@ public abstract class Conference extends Conferenceable {
* has no general use other than to the Telephony framework. * has no general use other than to the Telephony framework.
* *
* @return The elapsed time at which the {@link Conference} was connected. * @return The elapsed time at which the {@link Conference} was connected.
* @hide
*/ */
@SystemApi public final @ElapsedRealtimeLong long getConnectionStartElapsedRealtimeMillis() {
@TestApi
public final long getConnectionStartElapsedRealTime() {
return mConnectionStartElapsedRealTime; return mConnectionStartElapsedRealTime;
} }
@@ -994,6 +1016,7 @@ public abstract class Conference extends Conferenceable {
*/ */
@SystemApi @SystemApi
@TestApi @TestApi
@RequiresPermission(MODIFY_PHONE_STATE)
public void setConferenceState(boolean isConference) { public void setConferenceState(boolean isConference) {
for (Listener l : mListeners) { for (Listener l : mListeners) {
l.onConferenceStateChanged(this, isConference); l.onConferenceStateChanged(this, isConference);
@@ -1014,6 +1037,7 @@ public abstract class Conference extends Conferenceable {
*/ */
@SystemApi @SystemApi
@TestApi @TestApi
@RequiresPermission(MODIFY_PHONE_STATE)
public final void setAddress(@NonNull Uri address, public final void setAddress(@NonNull Uri address,
@TelecomManager.Presentation int presentation) { @TelecomManager.Presentation int presentation) {
Log.d(this, "setAddress %s", address); Log.d(this, "setAddress %s", address);
@@ -1120,12 +1144,52 @@ public abstract class Conference extends Conferenceable {
} }
/** /**
* Sends an event associated with this {@code Conference} with associated event extras to the * Sends an event associated with this {@link Conference} with associated event extras to the
* {@link InCallService} (note: this is identical in concept to * {@link InCallService}.
* {@link Connection#sendConnectionEvent(String, Bundle)}). * <p>
* @see Connection#sendConnectionEvent(String, Bundle) * Connection events are used to communicate point in time information from a
* {@link ConnectionService} to an {@link InCallService} implementation. An example of a
* custom connection event includes notifying the UI when a WIFI call has been handed over to
* LTE, which the InCall UI might use to inform the user that billing charges may apply. The
* Android Telephony framework will send the {@link Connection#EVENT_MERGE_COMPLETE}
* connection event when a call to {@link Call#mergeConference()} has completed successfully.
* <p>
* Events are exposed to {@link InCallService} implementations via
* {@link Call.Callback#onConnectionEvent(Call, String, Bundle)}.
* <p>
* No assumptions should be made as to how an In-Call UI or service will handle these events.
* The {@link ConnectionService} must assume that the In-Call UI could even chose to ignore
* some events altogether.
* <p>
* Events should be fully qualified (e.g. {@code com.example.event.MY_EVENT}) to avoid
* conflicts between {@link ConnectionService} implementations. Further, custom
* {@link ConnectionService} implementations shall not re-purpose events in the
* {@code android.*} namespace, nor shall they define new event types in this namespace. When
* defining a custom event type, ensure the contents of the extras {@link Bundle} is clearly
* defined. Extra keys for this bundle should be named similar to the event type (e.g.
* {@code com.example.extra.MY_EXTRA}).
* <p>
* When defining events and the associated extras, it is important to keep their behavior
* consistent when the associated {@link ConnectionService} is updated. Support for deprecated
* events/extras should me maintained to ensure backwards compatibility with older
* {@link InCallService} implementations which were built to support the older behavior.
* <p>
* Expected connection events from the Telephony stack are:
* <p>
* <ul>
* <li>{@link Connection#EVENT_CALL_HOLD_FAILED} with {@code null} {@code extras} when the
* {@link Conference} could not be held.</li>
* <li>{@link Connection#EVENT_MERGE_START} with {@code null} {@code extras} when a new
* call is being merged into the conference.</li>
* <li>{@link Connection#EVENT_MERGE_COMPLETE} with {@code null} {@code extras} a new call
* has completed being merged into the conference.</li>
* <li>{@link Connection#EVENT_CALL_MERGE_FAILED} with {@code null} {@code extras} a new
* call has failed to merge into the conference (the dialer app can determine which call
* failed to merge based on the fact that the call still exists outside of the conference
* at the end of the merge process).</li>
* </ul>
* *
* @param event The connection event. * @param event The conference event.
* @param extras Optional bundle containing extra information associated with the event. * @param extras Optional bundle containing extra information associated with the event.
*/ */
public void sendConferenceEvent(@NonNull String event, @Nullable Bundle extras) { public void sendConferenceEvent(@NonNull String event, @Nullable Bundle extras) {

View File

@@ -16,9 +16,14 @@
package android.telecom; package android.telecom;
import static android.Manifest.permission.MODIFY_PHONE_STATE;
import android.annotation.ElapsedRealtimeLong;
import android.annotation.IntDef; import android.annotation.IntDef;
import android.annotation.IntRange;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi; import android.annotation.SystemApi;
import android.annotation.TestApi; import android.annotation.TestApi;
import android.app.Notification; import android.app.Notification;
@@ -480,7 +485,7 @@ public abstract class Connection extends Conferenceable {
* *
* @see TelecomManager#EXTRA_USE_ASSISTED_DIALING * @see TelecomManager#EXTRA_USE_ASSISTED_DIALING
*/ */
public static final int PROPERTY_ASSISTED_DIALING_USED = 1 << 9; public static final int PROPERTY_ASSISTED_DIALING = 1 << 9;
/** /**
* Set by the framework to indicate that the network has identified a Connection as an emergency * Set by the framework to indicate that the network has identified a Connection as an emergency
@@ -2117,19 +2122,24 @@ public abstract class Connection extends Conferenceable {
*/ */
@SystemApi @SystemApi
@TestApi @TestApi
public final long getConnectTimeMillis() { public final @IntRange(from = 0) long getConnectTimeMillis() {
return mConnectTimeMillis; return mConnectTimeMillis;
} }
/** /**
* Retrieves the connection start time of the {@link Connection}, if specified. A value of * Retrieves the connection start time of the {@link Connection}, if specified. A value of
* {@link Conference#CONNECT_TIME_NOT_SPECIFIED} indicates that Telecom should determine the * {@link Conference#CONNECT_TIME_NOT_SPECIFIED} indicates that Telecom should determine the
* start time of the conference. * start time of the connection.
* <p> * <p>
* Based on the value of {@link SystemClock#elapsedRealtime()}, which ensures that wall-clock * Based on the value of {@link SystemClock#elapsedRealtime()}, which ensures that wall-clock
* changes do not impact the call duration. * changes do not impact the call duration.
* <p> * <p>
* Used internally in Telephony when migrating conference participant data for IMS conferences. * Used internally in Telephony when migrating conference participant data for IMS conferences.
* <p>
* The value returned is the same one set using
* {@link #setConnectionStartElapsedRealtimeMillis(long)}. This value is never updated from
* the Telecom framework, so no permission enforcement occurs when retrieving the value with
* this method.
* *
* @return The time at which the {@link Connection} was connected. * @return The time at which the {@link Connection} was connected.
* *
@@ -2137,7 +2147,7 @@ public abstract class Connection extends Conferenceable {
*/ */
@SystemApi @SystemApi
@TestApi @TestApi
public final long getConnectElapsedTimeMillis() { public final @ElapsedRealtimeLong long getConnectionStartElapsedRealtimeMillis() {
return mConnectElapsedTimeMillis; return mConnectElapsedTimeMillis;
} }
@@ -2558,6 +2568,9 @@ public abstract class Connection extends Conferenceable {
* Sets the time at which a call became active on this Connection. This is set only * Sets the time at which a call became active on this Connection. This is set only
* when a conference call becomes active on this connection. * when a conference call becomes active on this connection.
* <p> * <p>
* This time corresponds to the date/time of connection and is stored in the call log in
* {@link android.provider.CallLog.Calls#DATE}.
* <p>
* Used by telephony to maintain calls associated with an IMS Conference. * Used by telephony to maintain calls associated with an IMS Conference.
* *
* @param connectTimeMillis The connection time, in milliseconds. Should be set using a value * @param connectTimeMillis The connection time, in milliseconds. Should be set using a value
@@ -2567,7 +2580,8 @@ public abstract class Connection extends Conferenceable {
*/ */
@SystemApi @SystemApi
@TestApi @TestApi
public final void setConnectTimeMillis(long connectTimeMillis) { @RequiresPermission(MODIFY_PHONE_STATE)
public final void setConnectTimeMillis(@IntRange(from = 0) long connectTimeMillis) {
mConnectTimeMillis = connectTimeMillis; mConnectTimeMillis = connectTimeMillis;
} }
@@ -2575,15 +2589,23 @@ public abstract class Connection extends Conferenceable {
* Sets the time at which a call became active on this Connection. This is set only * Sets the time at which a call became active on this Connection. This is set only
* when a conference call becomes active on this connection. * when a conference call becomes active on this connection.
* <p> * <p>
* This time is used to establish the duration of a call. It uses
* {@link SystemClock#elapsedRealtime()} to ensure that the call duration is not impacted by
* time zone changes during a call. The difference between the current
* {@link SystemClock#elapsedRealtime()} and the value set at the connection start time is used
* to populate {@link android.provider.CallLog.Calls#DURATION} in the call log.
* <p>
* Used by telephony to maintain calls associated with an IMS Conference. * Used by telephony to maintain calls associated with an IMS Conference.
*
* @param connectElapsedTimeMillis The connection time, in milliseconds. Stored in the format * @param connectElapsedTimeMillis The connection time, in milliseconds. Stored in the format
* {@link SystemClock#elapsedRealtime()}. * {@link SystemClock#elapsedRealtime()}.
*
* @hide * @hide
*/ */
@SystemApi @SystemApi
@TestApi @TestApi
public final void setConnectionStartElapsedRealTime(long connectElapsedTimeMillis) { @RequiresPermission(MODIFY_PHONE_STATE)
public final void setConnectionStartElapsedRealtimeMillis(
@ElapsedRealtimeLong long connectElapsedTimeMillis) {
mConnectElapsedTimeMillis = connectElapsedTimeMillis; mConnectElapsedTimeMillis = connectElapsedTimeMillis;
} }

View File

@@ -18,7 +18,6 @@ package android.telecom;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SdkConstant; import android.annotation.SdkConstant;
import android.annotation.SystemApi; import android.annotation.SystemApi;
import android.app.Service; import android.app.Service;
@@ -1808,7 +1807,7 @@ public abstract class ConnectionService extends Service {
null : conference.getVideoProvider().getInterface(), null : conference.getVideoProvider().getInterface(),
conference.getVideoState(), conference.getVideoState(),
conference.getConnectTimeMillis(), conference.getConnectTimeMillis(),
conference.getConnectionStartElapsedRealTime(), conference.getConnectionStartElapsedRealtimeMillis(),
conference.getStatusHints(), conference.getStatusHints(),
conference.getExtras(), conference.getExtras(),
conference.getAddress(), conference.getAddress(),
@@ -1914,7 +1913,7 @@ public abstract class ConnectionService extends Service {
connection.isRingbackRequested(), connection.isRingbackRequested(),
connection.getAudioModeIsVoip(), connection.getAudioModeIsVoip(),
connection.getConnectTimeMillis(), connection.getConnectTimeMillis(),
connection.getConnectElapsedTimeMillis(), connection.getConnectionStartElapsedRealtimeMillis(),
connection.getStatusHints(), connection.getStatusHints(),
connection.getDisconnectCause(), connection.getDisconnectCause(),
createIdList(connection.getConferenceables()), createIdList(connection.getConferenceables()),
@@ -2415,7 +2414,7 @@ public abstract class ConnectionService extends Service {
null : conference.getVideoProvider().getInterface(), null : conference.getVideoProvider().getInterface(),
conference.getVideoState(), conference.getVideoState(),
conference.getConnectTimeMillis(), conference.getConnectTimeMillis(),
conference.getConnectionStartElapsedRealTime(), conference.getConnectionStartElapsedRealtimeMillis(),
conference.getStatusHints(), conference.getStatusHints(),
conference.getExtras(), conference.getExtras(),
conference.getAddress(), conference.getAddress(),
@@ -2506,7 +2505,7 @@ public abstract class ConnectionService extends Service {
connection.isRingbackRequested(), connection.isRingbackRequested(),
connection.getAudioModeIsVoip(), connection.getAudioModeIsVoip(),
connection.getConnectTimeMillis(), connection.getConnectTimeMillis(),
connection.getConnectElapsedTimeMillis(), connection.getConnectionStartElapsedRealtimeMillis(),
connection.getStatusHints(), connection.getStatusHints(),
connection.getDisconnectCause(), connection.getDisconnectCause(),
emptyList, emptyList,

View File

@@ -16,7 +16,10 @@
package android.telecom; package android.telecom;
import static android.Manifest.permission.MODIFY_PHONE_STATE;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi; import android.annotation.SystemApi;
import android.annotation.TestApi; import android.annotation.TestApi;
import android.content.Intent; import android.content.Intent;
@@ -605,7 +608,8 @@ public final class PhoneAccount implements Parcelable {
* time. By default, there is no group Id for a {@link PhoneAccount} (an empty String). Only * time. By default, there is no group Id for a {@link PhoneAccount} (an empty String). Only
* grouped {@link PhoneAccount}s with the same {@link ConnectionService} can be replaced. * grouped {@link PhoneAccount}s with the same {@link ConnectionService} can be replaced.
* <p> * <p>
* Note: This is an API specific to the Telephony stack. * Note: This is an API specific to the Telephony stack; the group Id will be ignored for
* callers not holding the correct permission.
* *
* @param groupId The group Id of the {@link PhoneAccount} that will replace any other * @param groupId The group Id of the {@link PhoneAccount} that will replace any other
* registered {@link PhoneAccount} in Telecom with the same Group Id. * registered {@link PhoneAccount} in Telecom with the same Group Id.
@@ -614,6 +618,7 @@ public final class PhoneAccount implements Parcelable {
*/ */
@SystemApi @SystemApi
@TestApi @TestApi
@RequiresPermission(MODIFY_PHONE_STATE)
public @NonNull Builder setGroupId(@NonNull String groupId) { public @NonNull Builder setGroupId(@NonNull String groupId) {
if (groupId != null) { if (groupId != null) {
mGroupId = groupId; mGroupId = groupId;

View File

@@ -802,8 +802,8 @@ public class TelecomManager {
* automatically add dialing prefixes when placing international calls. * automatically add dialing prefixes when placing international calls.
* <p> * <p>
* Setting this extra on the outgoing call extras will cause the * Setting this extra on the outgoing call extras will cause the
* {@link Connection#PROPERTY_ASSISTED_DIALING_USED} property and * {@link Connection#PROPERTY_ASSISTED_DIALING} property and
* {@link Call.Details#PROPERTY_ASSISTED_DIALING_USED} property to be set on the * {@link Call.Details#PROPERTY_ASSISTED_DIALING} property to be set on the
* {@link Connection}/{@link Call} in question. When the call is logged to the call log, the * {@link Connection}/{@link Call} in question. When the call is logged to the call log, the
* {@link android.provider.CallLog.Calls#FEATURES_ASSISTED_DIALING_USED} call feature is set to * {@link android.provider.CallLog.Calls#FEATURES_ASSISTED_DIALING_USED} call feature is set to
* indicate that assisted dialing was used for the call. * indicate that assisted dialing was used for the call.
@@ -1368,7 +1368,7 @@ public class TelecomManager {
/** /**
* Used to determine the currently selected default dialer package for a specific user. * Used to determine the currently selected default dialer package for a specific user.
* *
* @param userId the user id to query the default dialer package for. * @param userHandle the user id to query the default dialer package for.
* @return package name for the default dialer package or null if no package has been * @return package name for the default dialer package or null if no package has been
* selected as the default dialer. * selected as the default dialer.
* @hide * @hide
@@ -1376,10 +1376,11 @@ public class TelecomManager {
@SystemApi @SystemApi
@TestApi @TestApi
@RequiresPermission(READ_PRIVILEGED_PHONE_STATE) @RequiresPermission(READ_PRIVILEGED_PHONE_STATE)
public @Nullable String getDefaultDialerPackage(int userId) { public @Nullable String getDefaultDialerPackage(@NonNull UserHandle userHandle) {
try { try {
if (isServiceConnected()) { if (isServiceConnected()) {
return getTelecomService().getDefaultDialerPackageForUser(userId); return getTelecomService().getDefaultDialerPackageForUser(
userHandle.getIdentifier());
} }
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(TAG, "RemoteException attempting to get the default dialer package name.", e); Log.e(TAG, "RemoteException attempting to get the default dialer package name.", e);