diff options
author | Robert Greenwalt <rgreenwalt@google.com> | 2016-06-09 16:25:50 -0700 |
---|---|---|
committer | Robert Greenwalt <rgreenwalt@google.com> | 2016-06-22 11:29:00 -0700 |
commit | 8c751b4ec57a6f2a7702d9ee003b0ec721c2ebac (patch) | |
tree | d41a48a9a2ec10e63f4b991b0f029f95d3641048 /src/java/com/android/internal/telephony/ServiceStateTracker.java | |
parent | 236825dc0c194f441c2b5196c5c964db7fe5e541 (diff) | |
download | android_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.java | 24 |
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); |