From 8b4502e9d913cdb367e5c429081447842bd6823b Mon Sep 17 00:00:00 2001 From: Daniel Bright Date: Wed, 2 Sep 2020 17:10:54 -0700 Subject: [PATCH] Add Handover Failure Mode to Radio Hal On a handover request failure, the modem can now determine whether or not to fallback. There is also the option to revert to the legacy logic. Following the legacy logic is the default behavior. Test: FrameworkTelephonyTests Bug: 161572465 Change-Id: I194aca34131301a3507ad3ba99be278cbf6fa87b --- Android.bp | 3 ++- api/system-current.txt | 10 +++++----- non-updatable-api/system-current.txt | 10 +++++----- telephony/api/system-current.txt | 10 +++++----- .../telephony/data/DataCallResponse.java | 20 ++++++++++--------- 5 files changed, 28 insertions(+), 25 deletions(-) diff --git a/Android.bp b/Android.bp index eacf57ccd38c7..7c577395b4bdc 100644 --- a/Android.bp +++ b/Android.bp @@ -474,6 +474,7 @@ java_library { "android.hardware.radio-V1.3-java", "android.hardware.radio-V1.4-java", "android.hardware.radio-V1.5-java", + "android.hardware.radio-V1.6-java", "android.hardware.thermal-V1.0-java-constants", "android.hardware.thermal-V1.0-java", "android.hardware.thermal-V1.1-java", @@ -1345,7 +1346,7 @@ droidstubs { }, libs: [ "framework-annotations-lib", - "android.hardware.radio-V1.5-java", + "android.hardware.radio-V1.6-java", ], check_api: { current: { diff --git a/api/system-current.txt b/api/system-current.txt index 308da7ce30638..bbedb1556fe8b 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -11543,11 +11543,11 @@ package android.telephony.data { method public int getSuggestedRetryTime(); method public void writeToParcel(android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator CREATOR; - field public static final int HANDOVER_FAILURE_MODE_DO_FALLBACK = 2; // 0x2 - field public static final int HANDOVER_FAILURE_MODE_LEGACY = 1; // 0x1 - field public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_HANDOVER = 3; // 0x3 - field public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_SETUP_NORMAL = 4; // 0x4 - field public static final int HANDOVER_FAILURE_MODE_UNKNOWN = 0; // 0x0 + field public static final int HANDOVER_FAILURE_MODE_DO_FALLBACK = 1; // 0x1 + field public static final int HANDOVER_FAILURE_MODE_LEGACY = 0; // 0x0 + field public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_HANDOVER = 2; // 0x2 + field public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_SETUP_NORMAL = 3; // 0x3 + field public static final int HANDOVER_FAILURE_MODE_UNKNOWN = -1; // 0xffffffff field public static final int LINK_STATUS_ACTIVE = 2; // 0x2 field public static final int LINK_STATUS_DORMANT = 1; // 0x1 field public static final int LINK_STATUS_INACTIVE = 0; // 0x0 diff --git a/non-updatable-api/system-current.txt b/non-updatable-api/system-current.txt index 7f95e1a35b859..4e8e5de9d85f7 100644 --- a/non-updatable-api/system-current.txt +++ b/non-updatable-api/system-current.txt @@ -10407,11 +10407,11 @@ package android.telephony.data { method public int getSuggestedRetryTime(); method public void writeToParcel(android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator CREATOR; - field public static final int HANDOVER_FAILURE_MODE_DO_FALLBACK = 2; // 0x2 - field public static final int HANDOVER_FAILURE_MODE_LEGACY = 1; // 0x1 - field public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_HANDOVER = 3; // 0x3 - field public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_SETUP_NORMAL = 4; // 0x4 - field public static final int HANDOVER_FAILURE_MODE_UNKNOWN = 0; // 0x0 + field public static final int HANDOVER_FAILURE_MODE_DO_FALLBACK = 1; // 0x1 + field public static final int HANDOVER_FAILURE_MODE_LEGACY = 0; // 0x0 + field public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_HANDOVER = 2; // 0x2 + field public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_SETUP_NORMAL = 3; // 0x3 + field public static final int HANDOVER_FAILURE_MODE_UNKNOWN = -1; // 0xffffffff field public static final int LINK_STATUS_ACTIVE = 2; // 0x2 field public static final int LINK_STATUS_DORMANT = 1; // 0x1 field public static final int LINK_STATUS_INACTIVE = 0; // 0x0 diff --git a/telephony/api/system-current.txt b/telephony/api/system-current.txt index ec8e8e7910e87..5a94225b78f78 100644 --- a/telephony/api/system-current.txt +++ b/telephony/api/system-current.txt @@ -900,11 +900,11 @@ package android.telephony.data { method public int getSuggestedRetryTime(); method public void writeToParcel(android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator CREATOR; - field public static final int HANDOVER_FAILURE_MODE_DO_FALLBACK = 2; // 0x2 - field public static final int HANDOVER_FAILURE_MODE_LEGACY = 1; // 0x1 - field public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_HANDOVER = 3; // 0x3 - field public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_SETUP_NORMAL = 4; // 0x4 - field public static final int HANDOVER_FAILURE_MODE_UNKNOWN = 0; // 0x0 + field public static final int HANDOVER_FAILURE_MODE_DO_FALLBACK = 1; // 0x1 + field public static final int HANDOVER_FAILURE_MODE_LEGACY = 0; // 0x0 + field public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_HANDOVER = 2; // 0x2 + field public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_SETUP_NORMAL = 3; // 0x3 + field public static final int HANDOVER_FAILURE_MODE_UNKNOWN = -1; // 0xffffffff field public static final int LINK_STATUS_ACTIVE = 2; // 0x2 field public static final int LINK_STATUS_DORMANT = 1; // 0x1 field public static final int LINK_STATUS_INACTIVE = 0; // 0x0 diff --git a/telephony/java/android/telephony/data/DataCallResponse.java b/telephony/java/android/telephony/data/DataCallResponse.java index 5ead8decdb630..39859b1e4fdb0 100644 --- a/telephony/java/android/telephony/data/DataCallResponse.java +++ b/telephony/java/android/telephony/data/DataCallResponse.java @@ -80,33 +80,33 @@ public final class DataCallResponse implements Parcelable { /** * Data handover failure mode is unknown. */ - public static final int HANDOVER_FAILURE_MODE_UNKNOWN = 0; + public static final int HANDOVER_FAILURE_MODE_UNKNOWN = -1; /** * Perform fallback to the source data transport on data handover failure using * the legacy logic, which is fallback if the fail cause is * {@link DataFailCause#HANDOFF_PREFERENCE_CHANGED}. */ - public static final int HANDOVER_FAILURE_MODE_LEGACY = 1; + public static final int HANDOVER_FAILURE_MODE_LEGACY = 0; /** * Perform fallback to the source data transport on data handover failure. */ - public static final int HANDOVER_FAILURE_MODE_DO_FALLBACK = 2; + public static final int HANDOVER_FAILURE_MODE_DO_FALLBACK = 1; /** * Do not perform fallback to the source data transport on data handover failure. - * Frameworks should keep retrying handover by sending + * Framework will retry setting up a new data connection by sending * {@link DataService#REQUEST_REASON_HANDOVER} request to the underlying {@link DataService}. */ - public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_HANDOVER = 3; + public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_HANDOVER = 2; /** * Do not perform fallback to the source transport on data handover failure. - * Frameworks should retry setup a new data connection by sending + * Framework will retry setting up a new data connection by sending * {@link DataService#REQUEST_REASON_NORMAL} request to the underlying {@link DataService}. */ - public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_SETUP_NORMAL = 4; + public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_SETUP_NORMAL = 3; private final @DataFailureCause int mCause; private final int mSuggestedRetryTime; @@ -332,6 +332,7 @@ public final class DataCallResponse implements Parcelable { .append(" mtu=").append(getMtu()) .append(" mtuV4=").append(getMtuV4()) .append(" mtuV6=").append(getMtuV6()) + .append(" handoverFailureMode=").append(getHandoverFailureMode()) .append("}"); return sb.toString(); } @@ -361,14 +362,15 @@ public final class DataCallResponse implements Parcelable { && mPcscfAddresses.containsAll(other.mPcscfAddresses) && mMtu == other.mMtu && mMtuV4 == other.mMtuV4 - && mMtuV6 == other.mMtuV6; + && mMtuV6 == other.mMtuV6 + && mHandoverFailureMode == other.mHandoverFailureMode; } @Override public int hashCode() { return Objects.hash(mCause, mSuggestedRetryTime, mId, mLinkStatus, mProtocolType, mInterfaceName, mAddresses, mDnsAddresses, mGatewayAddresses, mPcscfAddresses, - mMtu, mMtuV4, mMtuV6); + mMtu, mMtuV4, mMtuV6, mHandoverFailureMode); } @Override