Loading proto/src/persist_atoms.proto +1 −0 Original line number Diff line number Diff line Loading @@ -378,6 +378,7 @@ message CellularServiceState { optional bool is_emergency_only = 10; optional bool is_internet_pdn_up = 11; optional int32 fold_state = 12; optional bool override_voice_service = 13; // Internal use only optional int64 last_used_millis = 10001; Loading src/java/com/android/internal/telephony/GsmCdmaPhone.java +1 −0 Original line number Diff line number Diff line Loading @@ -680,6 +680,7 @@ public class GsmCdmaPhone extends Phone { mTelecomVoiceServiceStateOverride = newOverride; if (changed && mSST != null) { mSST.onTelecomVoiceServiceStateOverrideChanged(); mSST.getServiceStateStats().onVoiceServiceStateOverrideChanged(hasService); } } Loading src/java/com/android/internal/telephony/metrics/MetricsCollector.java +2 −1 Original line number Diff line number Diff line Loading @@ -923,7 +923,8 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback { roundAndConvertMillisToSeconds(state.totalTimeMillis), state.isEmergencyOnly, state.isInternetPdnUp, state.foldState); state.foldState, state.overrideVoiceService); } private static StatsEvent buildStatsEvent(VoiceCallRatUsage usage) { Loading src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java +2 −1 Original line number Diff line number Diff line Loading @@ -1709,7 +1709,8 @@ public class PersistAtomsStorage { && state.carrierId == key.carrierId && state.isEmergencyOnly == key.isEmergencyOnly && state.isInternetPdnUp == key.isInternetPdnUp && state.foldState == key.foldState) { && state.foldState == key.foldState && state.overrideVoiceService == key.overrideVoiceService) { return state; } } Loading src/java/com/android/internal/telephony/metrics/ServiceStateStats.java +24 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import com.android.internal.telephony.nano.PersistAtomsProto.CellularServiceStat import com.android.telephony.Rlog; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; /** Tracks service state duration and switch metrics for each phone. */ Loading @@ -54,6 +55,7 @@ public class ServiceStateStats extends DataNetworkControllerCallback { private final AtomicReference<TimestampedServiceState> mLastState = new AtomicReference<>(new TimestampedServiceState(null, 0L)); private final AtomicBoolean mOverrideVoiceService = new AtomicBoolean(false); private final Phone mPhone; private final PersistAtomsStorage mStorage; private final DeviceStateHelper mDeviceStateHelper; Loading Loading @@ -127,6 +129,7 @@ public class ServiceStateStats extends DataNetworkControllerCallback { newState.isEmergencyOnly = isEmergencyOnly(serviceState); newState.isInternetPdnUp = isInternetPdnUp(mPhone); newState.foldState = mDeviceStateHelper.getFoldState(); newState.overrideVoiceService = mOverrideVoiceService.get(); TimestampedServiceState prevState = mLastState.getAndSet(new TimestampedServiceState(newState, now)); addServiceStateAndSwitch( Loading Loading @@ -154,6 +157,26 @@ public class ServiceStateStats extends DataNetworkControllerCallback { } } /** Updates override state for voice service state when voice calling capability changes */ public void onVoiceServiceStateOverrideChanged(boolean override) { if (override == mOverrideVoiceService.get()) { return; } mOverrideVoiceService.set(override); final long now = getTimeMillis(); TimestampedServiceState lastState = mLastState.getAndUpdate( state -> { if (state.mServiceState == null) { return new TimestampedServiceState(null, now); } CellularServiceState newServiceState = copyOf(state.mServiceState); newServiceState.overrideVoiceService = mOverrideVoiceService.get(); return new TimestampedServiceState(newServiceState, now); }); addServiceState(lastState, now); } private void addServiceState(TimestampedServiceState prevState, long now) { addServiceStateAndSwitch(prevState, now, null); } Loading Loading @@ -275,6 +298,7 @@ public class ServiceStateStats extends DataNetworkControllerCallback { copy.isEmergencyOnly = state.isEmergencyOnly; copy.isInternetPdnUp = state.isInternetPdnUp; copy.foldState = state.foldState; copy.overrideVoiceService = state.overrideVoiceService; return copy; } Loading Loading
proto/src/persist_atoms.proto +1 −0 Original line number Diff line number Diff line Loading @@ -378,6 +378,7 @@ message CellularServiceState { optional bool is_emergency_only = 10; optional bool is_internet_pdn_up = 11; optional int32 fold_state = 12; optional bool override_voice_service = 13; // Internal use only optional int64 last_used_millis = 10001; Loading
src/java/com/android/internal/telephony/GsmCdmaPhone.java +1 −0 Original line number Diff line number Diff line Loading @@ -680,6 +680,7 @@ public class GsmCdmaPhone extends Phone { mTelecomVoiceServiceStateOverride = newOverride; if (changed && mSST != null) { mSST.onTelecomVoiceServiceStateOverrideChanged(); mSST.getServiceStateStats().onVoiceServiceStateOverrideChanged(hasService); } } Loading
src/java/com/android/internal/telephony/metrics/MetricsCollector.java +2 −1 Original line number Diff line number Diff line Loading @@ -923,7 +923,8 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback { roundAndConvertMillisToSeconds(state.totalTimeMillis), state.isEmergencyOnly, state.isInternetPdnUp, state.foldState); state.foldState, state.overrideVoiceService); } private static StatsEvent buildStatsEvent(VoiceCallRatUsage usage) { Loading
src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java +2 −1 Original line number Diff line number Diff line Loading @@ -1709,7 +1709,8 @@ public class PersistAtomsStorage { && state.carrierId == key.carrierId && state.isEmergencyOnly == key.isEmergencyOnly && state.isInternetPdnUp == key.isInternetPdnUp && state.foldState == key.foldState) { && state.foldState == key.foldState && state.overrideVoiceService == key.overrideVoiceService) { return state; } } Loading
src/java/com/android/internal/telephony/metrics/ServiceStateStats.java +24 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import com.android.internal.telephony.nano.PersistAtomsProto.CellularServiceStat import com.android.telephony.Rlog; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; /** Tracks service state duration and switch metrics for each phone. */ Loading @@ -54,6 +55,7 @@ public class ServiceStateStats extends DataNetworkControllerCallback { private final AtomicReference<TimestampedServiceState> mLastState = new AtomicReference<>(new TimestampedServiceState(null, 0L)); private final AtomicBoolean mOverrideVoiceService = new AtomicBoolean(false); private final Phone mPhone; private final PersistAtomsStorage mStorage; private final DeviceStateHelper mDeviceStateHelper; Loading Loading @@ -127,6 +129,7 @@ public class ServiceStateStats extends DataNetworkControllerCallback { newState.isEmergencyOnly = isEmergencyOnly(serviceState); newState.isInternetPdnUp = isInternetPdnUp(mPhone); newState.foldState = mDeviceStateHelper.getFoldState(); newState.overrideVoiceService = mOverrideVoiceService.get(); TimestampedServiceState prevState = mLastState.getAndSet(new TimestampedServiceState(newState, now)); addServiceStateAndSwitch( Loading Loading @@ -154,6 +157,26 @@ public class ServiceStateStats extends DataNetworkControllerCallback { } } /** Updates override state for voice service state when voice calling capability changes */ public void onVoiceServiceStateOverrideChanged(boolean override) { if (override == mOverrideVoiceService.get()) { return; } mOverrideVoiceService.set(override); final long now = getTimeMillis(); TimestampedServiceState lastState = mLastState.getAndUpdate( state -> { if (state.mServiceState == null) { return new TimestampedServiceState(null, now); } CellularServiceState newServiceState = copyOf(state.mServiceState); newServiceState.overrideVoiceService = mOverrideVoiceService.get(); return new TimestampedServiceState(newServiceState, now); }); addServiceState(lastState, now); } private void addServiceState(TimestampedServiceState prevState, long now) { addServiceStateAndSwitch(prevState, now, null); } Loading Loading @@ -275,6 +298,7 @@ public class ServiceStateStats extends DataNetworkControllerCallback { copy.isEmergencyOnly = state.isEmergencyOnly; copy.isInternetPdnUp = state.isInternetPdnUp; copy.foldState = state.foldState; copy.overrideVoiceService = state.overrideVoiceService; return copy; } Loading