aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com/android/internal/telephony/ServiceStateTracker.java
diff options
context:
space:
mode:
authorRobert Greenwalt <rgreenwalt@google.com>2016-06-09 16:25:50 -0700
committerRobert Greenwalt <rgreenwalt@google.com>2016-06-22 11:29:00 -0700
commit8c751b4ec57a6f2a7702d9ee003b0ec721c2ebac (patch)
treed41a48a9a2ec10e63f4b991b0f029f95d3641048 /src/java/com/android/internal/telephony/ServiceStateTracker.java
parent236825dc0c194f441c2b5196c5c964db7fe5e541 (diff)
downloadandroid_frameworks_opt_telephony-8c751b4ec57a6f2a7702d9ee003b0ec721c2ebac.tar.gz
android_frameworks_opt_telephony-8c751b4ec57a6f2a7702d9ee003b0ec721c2ebac.tar.bz2
android_frameworks_opt_telephony-8c751b4ec57a6f2a7702d9ee003b0ec721c2ebac.zip
Add a Carrier-config specific ratcheter of RATs.
Only reports transitions to higher RATs within a given family. Reset when we move to a new cell. Avoids costly propogation of RAT flapping within the family, for example every outgoing data pops us into a higher RAT and idle time pops us back down. bug:27360321 Change-Id: Ifd219eda701eb2c87a8b6798d919f71fab804f5d
Diffstat (limited to 'src/java/com/android/internal/telephony/ServiceStateTracker.java')
-rw-r--r--src/java/com/android/internal/telephony/ServiceStateTracker.java24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index 147036464..c5cf95ca0 100644
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -274,6 +274,9 @@ public class ServiceStateTracker extends Handler {
private final SstSubscriptionsChangedListener mOnSubscriptionsChangedListener =
new SstSubscriptionsChangedListener();
+
+ private final RatRatcheter mRatRatcheter;
+
private class SstSubscriptionsChangedListener extends OnSubscriptionsChangedListener {
public final AtomicInteger mPreviousSubId =
new AtomicInteger(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
@@ -484,13 +487,10 @@ public class ServiceStateTracker extends Handler {
private String mCurrentCarrier = null;
public ServiceStateTracker(GsmCdmaPhone phone, CommandsInterface ci) {
- initOnce(phone, ci);
- updatePhoneType();
- }
-
- private void initOnce(GsmCdmaPhone phone, CommandsInterface ci) {
mPhone = phone;
mCi = ci;
+
+ mRatRatcheter = new RatRatcheter(mPhone);
mVoiceCapable = mPhone.getContext().getResources().getBoolean(
com.android.internal.R.bool.config_voice_capable);
mUiccController = UiccController.getInstance();
@@ -540,6 +540,8 @@ public class ServiceStateTracker extends Handler {
mEventLog = new TelephonyEventLog(mPhone.getPhoneId());
mPhone.notifyOtaspChanged(OTASP_UNINITIALIZED);
+
+ updatePhoneType();
}
@VisibleForTesting
@@ -2541,6 +2543,17 @@ public class ServiceStateTracker extends Handler {
boolean hasVoiceRegStateChanged =
mSS.getVoiceRegState() != mNewSS.getVoiceRegState();
+ boolean hasLocationChanged = !mNewCellLoc.equals(mCellLoc);
+
+ // ratchet the new tech up through it's rat family but don't drop back down
+ // until cell change
+ if (hasLocationChanged == false) {
+ mNewSS.setRilVoiceRadioTechnology(mRatRatcheter.ratchetRat(
+ mSS.getRilVoiceRadioTechnology(), mNewSS.getRilVoiceRadioTechnology()));
+ mNewSS.setRilDataRadioTechnology(mRatRatcheter.ratchetRat(
+ mSS.getRilDataRadioTechnology(), mNewSS.getRilDataRadioTechnology()));
+ }
+
boolean hasRilVoiceRadioTechnologyChanged =
mSS.getRilVoiceRadioTechnology() != mNewSS.getRilVoiceRadioTechnology();
@@ -2557,7 +2570,6 @@ public class ServiceStateTracker extends Handler {
boolean hasDataRoamingOff = mSS.getDataRoaming() && !mNewSS.getDataRoaming();
- boolean hasLocationChanged = !mNewCellLoc.equals(mCellLoc);
TelephonyManager tm =
(TelephonyManager) mPhone.getContext().getSystemService(Context.TELEPHONY_SERVICE);