summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/QualifiedNetworksService/src/com/android/telephony/qns/RestrictManager.java35
-rw-r--r--services/QualifiedNetworksService/tests/src/com/android/telephony/qns/RestrictManagerTest.java79
2 files changed, 104 insertions, 10 deletions
diff --git a/services/QualifiedNetworksService/src/com/android/telephony/qns/RestrictManager.java b/services/QualifiedNetworksService/src/com/android/telephony/qns/RestrictManager.java
index 64c3aa7..aefa469 100644
--- a/services/QualifiedNetworksService/src/com/android/telephony/qns/RestrictManager.java
+++ b/services/QualifiedNetworksService/src/com/android/telephony/qns/RestrictManager.java
@@ -139,6 +139,8 @@ class RestrictManager {
private static final int[] ignorableRestrictionsOnSingleRat =
new int[] {
RESTRICT_TYPE_GUARDING,
+ //Ignore throttling restriction at single RAT, let FWK control throttling.
+ RESTRICT_TYPE_THROTTLING,
RESTRICT_TYPE_RTP_LOW_QUALITY,
RESTRICT_TYPE_RESTRICT_IWLAN_IN_CALL,
RESTRICT_TYPE_FALLBACK_TO_WWAN_IMS_REGI_FAIL,
@@ -373,6 +375,15 @@ class RestrictManager {
}
}
+ boolean isRestrictionExpired(long elapsedRealTime) {
+ if (mReleaseTime != 0 && (mReleaseTime - elapsedRealTime < 0)) {
+ Log.d(mLogTag, restrictTypeToString(mRestrictType) + " was expired."
+ + "release time:" + mReleaseTime + ", now:" + elapsedRealTime);
+ return true;
+ }
+ return false;
+ }
+
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
@@ -397,20 +408,28 @@ class RestrictManager {
class RestrictInfo {
private int mTransportMode; // AccessNetworkConstants.TRANSPORT_TYPE_WWAN;
- private HashMap<Integer, Restriction> mRestrictionMap = new HashMap<>();
+ private Map<Integer, Restriction> mRestrictionMap = new ConcurrentHashMap<>();
RestrictInfo(int transportMode) {
mTransportMode = transportMode;
}
- HashMap<Integer, Restriction> getRestrictionMap() {
+ Map<Integer, Restriction> getRestrictionMap() {
return mRestrictionMap;
}
boolean isRestricted() {
+ checkUpExpirationTime();
return mRestrictionMap.size() != 0;
}
+ private void checkUpExpirationTime() {
+ if (mRestrictionMap.size() > 0) {
+ long now = QnsUtils.getSystemElapsedRealTime();
+ mRestrictionMap.entrySet().removeIf(e -> e.getValue().isRestrictionExpired(now));
+ }
+ }
+
/**
* This method returns if the restriction info has given restriction type.
*
@@ -673,7 +692,7 @@ class RestrictManager {
if ((reason & 1 << QnsConstants.RTP_LOW_QUALITY_REASON_NO_RTP) != 0) {
releaseRestriction(QnsUtils.getOtherTransportType(mTransportType),
RESTRICT_TYPE_GUARDING, true);
- HashMap<Integer, Restriction> restrictionMap = mRestrictInfos
+ Map<Integer, Restriction> restrictionMap = mRestrictInfos
.get(QnsUtils.getOtherTransportType(mTransportType))
.getRestrictionMap();
Restriction restrictionOtherSide = restrictionMap.get(
@@ -1134,7 +1153,7 @@ class RestrictManager {
int currGuardingTransport = QnsUtils.getOtherTransportType(mTransportType);
if (mRestrictInfos.get(currGuardingTransport) == null) return;
- HashMap<Integer, Restriction> restrictionMap =
+ Map<Integer, Restriction> restrictionMap =
mRestrictInfos.get(currGuardingTransport).getRestrictionMap();
Restriction restriction = restrictionMap.get(RESTRICT_TYPE_GUARDING);
@@ -1192,7 +1211,7 @@ class RestrictManager {
void addRestriction(int transport, Restriction restrictObj, long timeMillis) {
boolean needNotify = false;
- HashMap<Integer, Restriction> restrictionMap =
+ Map<Integer, Restriction> restrictionMap =
mRestrictInfos.get(transport).getRestrictionMap();
Restriction restriction = restrictionMap.get(restrictObj.mRestrictType);
Log.d(
@@ -1236,7 +1255,7 @@ class RestrictManager {
void addRestriction(int transport, int type, int[] releaseEvents, long timeMillis) {
boolean needNotify = false;
- HashMap<Integer, Restriction> restrictionMap =
+ Map<Integer, Restriction> restrictionMap =
mRestrictInfos.get(transport).getRestrictionMap();
Restriction restriction = restrictionMap.get(type);
Log.d(
@@ -1284,7 +1303,7 @@ class RestrictManager {
void releaseRestriction(int transport, int type, boolean skipNotify) {
boolean needNotify = false;
- HashMap<Integer, Restriction> restrictionMap =
+ Map<Integer, Restriction> restrictionMap =
mRestrictInfos.get(transport).getRestrictionMap();
Restriction restriction = restrictionMap.get(type);
Log.d(
@@ -1312,7 +1331,7 @@ class RestrictManager {
void processReleaseEvent(int transportType, int event) {
ArrayList<Integer> releaseList = new ArrayList<>();
- HashMap<Integer, Restriction> restrictMap =
+ Map<Integer, Restriction> restrictMap =
mRestrictInfos.get(transportType).getRestrictionMap();
Log.d(
mLogTag,
diff --git a/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/RestrictManagerTest.java b/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/RestrictManagerTest.java
index ddc193a..b63a950 100644
--- a/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/RestrictManagerTest.java
+++ b/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/RestrictManagerTest.java
@@ -433,6 +433,79 @@ public class RestrictManagerTest extends QnsTest {
}
@Test
+ public void testCheckExpiredTime() {
+ assertFalse(mRestrictManager.isRestricted(AccessNetworkConstants.TRANSPORT_TYPE_WWAN));
+ assertFalse(mRestrictManager.isRestricted(AccessNetworkConstants.TRANSPORT_TYPE_WWAN));
+ long now = SystemClock.elapsedRealtime();
+ long throttleTime = now + 600000;
+ mRestrictManager.addRestriction(
+ AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
+ RESTRICT_TYPE_RTP_LOW_QUALITY,
+ sReleaseEventMap.get(RESTRICT_TYPE_RTP_LOW_QUALITY),
+ DEFAULT_RESTRICT_WITH_LOW_RTP_QUALITY_TIME);
+ mRestrictManager.notifyThrottling(
+ true, throttleTime, AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
+ assertTrue(
+ mRestrictManager.hasRestrictionType(
+ AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
+ RESTRICT_TYPE_RTP_LOW_QUALITY));
+ assertTrue(
+ mRestrictManager.hasRestrictionType(
+ AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
+ RESTRICT_TYPE_THROTTLING));
+ lenient().when(QnsUtils.getSystemElapsedRealTime()).thenReturn(now + 3000);
+ assertTrue(mRestrictManager.isRestricted(AccessNetworkConstants.TRANSPORT_TYPE_WWAN));
+
+ lenient().when(QnsUtils.getSystemElapsedRealTime()).thenReturn(now + 100000);
+ assertTrue(mRestrictManager.isRestricted(AccessNetworkConstants.TRANSPORT_TYPE_WWAN));
+ assertFalse(
+ mRestrictManager.hasRestrictionType(
+ AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
+ RESTRICT_TYPE_RTP_LOW_QUALITY));
+ assertTrue(
+ mRestrictManager.hasRestrictionType(
+ AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
+ RESTRICT_TYPE_THROTTLING));
+ lenient().when(QnsUtils.getSystemElapsedRealTime()).thenReturn(now + 700000);
+ assertFalse(mRestrictManager.isRestricted(AccessNetworkConstants.TRANSPORT_TYPE_WWAN));
+ assertFalse(
+ mRestrictManager.hasRestrictionType(
+ AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
+ RESTRICT_TYPE_THROTTLING));
+
+ mRestrictManager.addRestriction(
+ AccessNetworkConstants.TRANSPORT_TYPE_WLAN,
+ RESTRICT_TYPE_RESTRICT_IWLAN_IN_CALL,
+ sReleaseEventMap.get(RESTRICT_TYPE_RESTRICT_IWLAN_IN_CALL),
+ 0);
+ mRestrictManager.notifyThrottling(
+ true, throttleTime, AccessNetworkConstants.TRANSPORT_TYPE_WLAN);
+ assertTrue(
+ mRestrictManager.hasRestrictionType(
+ AccessNetworkConstants.TRANSPORT_TYPE_WLAN,
+ RESTRICT_TYPE_RESTRICT_IWLAN_IN_CALL));
+ assertTrue(
+ mRestrictManager.hasRestrictionType(
+ AccessNetworkConstants.TRANSPORT_TYPE_WLAN,
+ RESTRICT_TYPE_THROTTLING));
+ lenient().when(QnsUtils.getSystemElapsedRealTime()).thenReturn(now + 3000);
+ assertTrue(mRestrictManager.isRestricted(AccessNetworkConstants.TRANSPORT_TYPE_WLAN));
+ lenient().when(QnsUtils.getSystemElapsedRealTime()).thenReturn(now + 700000);
+ assertTrue(mRestrictManager.isRestricted(AccessNetworkConstants.TRANSPORT_TYPE_WLAN));
+ assertTrue(
+ mRestrictManager.hasRestrictionType(
+ AccessNetworkConstants.TRANSPORT_TYPE_WLAN,
+ RESTRICT_TYPE_RESTRICT_IWLAN_IN_CALL));
+ assertFalse(
+ mRestrictManager.hasRestrictionType(
+ AccessNetworkConstants.TRANSPORT_TYPE_WLAN,
+ RESTRICT_TYPE_THROTTLING));
+ mRestrictManager.releaseRestriction(
+ AccessNetworkConstants.TRANSPORT_TYPE_WLAN, RESTRICT_TYPE_RESTRICT_IWLAN_IN_CALL);
+ assertFalse(mRestrictManager.isRestricted(AccessNetworkConstants.TRANSPORT_TYPE_WLAN));
+ }
+
+ @Test
public void testWwanToWlanGuardingOnHandoverStart() {
DataConnectionStatusTracker.DataConnectionChangedInfo dcInfo =
new DataConnectionStatusTracker.DataConnectionChangedInfo(
@@ -1178,8 +1251,8 @@ public class RestrictManagerTest extends QnsTest {
DEFAULT_GUARDING_TIME);
mRestrictManager.addRestriction(
AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
- RESTRICT_TYPE_THROTTLING,
- sReleaseEventMap.get(RESTRICT_TYPE_THROTTLING),
+ RESTRICT_TYPE_RESTRICT_IWLAN_CS_CALL,
+ sReleaseEventMap.get(RESTRICT_TYPE_RESTRICT_IWLAN_CS_CALL),
600000);
mRestrictManager.addRestriction(
AccessNetworkConstants.TRANSPORT_TYPE_WLAN,
@@ -1209,6 +1282,8 @@ public class RestrictManagerTest extends QnsTest {
mRestrictManager.notifyThrottling(false, 0, AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
mRestrictManager.processReleaseEvent(
AccessNetworkConstants.TRANSPORT_TYPE_WLAN, RELEASE_EVENT_DISCONNECT);
+ mRestrictManager.releaseRestriction(
+ AccessNetworkConstants.TRANSPORT_TYPE_WWAN, RESTRICT_TYPE_RESTRICT_IWLAN_CS_CALL);
assertFalse(mRestrictManager.isRestricted(AccessNetworkConstants.TRANSPORT_TYPE_WLAN));
assertFalse(mRestrictManager.isRestricted(AccessNetworkConstants.TRANSPORT_TYPE_WWAN));
}