Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ce1e719f authored by qingqi's avatar qingqi Committed by Qingqi Lei
Browse files

Collect connected channel number metric

Bug: 323062000
Test: Build and inpected log on device
Change-Id: If4e6c2c207715918690d9db550d66def09fa43b0
parent 3322c3ae
Loading
Loading
Loading
Loading
+64 −11
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static com.android.internal.telephony.flags.Flags.dataRatMetricEnabled;
import android.os.Handler;
import android.os.HandlerExecutor;
import android.os.HandlerThread;
import android.telephony.PhysicalChannelConfig;
import android.telephony.PreciseDataConnectionState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyCallback;
@@ -50,8 +51,10 @@ public class DataConnectionStateTracker {
    private int mSubId;
    private HashMap<Integer, PreciseDataConnectionState> mLastPreciseDataConnectionState =
            new HashMap<>();
    private PreciseDataConnectionStateListenerImpl mDataConnectionStateListener;
    private TelephonyListenerImpl mTelephonyListener;
    private int mActiveDataSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    private int mChannelCountEnum = TelephonyStatsLog
            .CONNECTED_CHANNEL_CHANGED__CONNECTED_CHANNEL_COUNT__CHANNEL_COUNT_UNSPECIFIED;

    private final SubscriptionManager.OnSubscriptionsChangedListener mSubscriptionsChangedListener =
            new SubscriptionManager.OnSubscriptionsChangedListener() {
@@ -136,15 +139,15 @@ public class DataConnectionStateTracker {
        TelephonyManager telephonyManager =
                mPhone.getContext().getSystemService(TelephonyManager.class);
        if (telephonyManager != null) {
            mDataConnectionStateListener = new PreciseDataConnectionStateListenerImpl(mExecutor);
            mDataConnectionStateListener.register(telephonyManager.createForSubscriptionId(subId));
            mTelephonyListener = new TelephonyListenerImpl(mExecutor);
            mTelephonyListener.register(telephonyManager.createForSubscriptionId(subId));
        }
    }

    private void unregisterTelephonyListener() {
        if (mDataConnectionStateListener != null) {
            mDataConnectionStateListener.unregister();
            mDataConnectionStateListener = null;
        if (mTelephonyListener != null) {
            mTelephonyListener.unregister();
            mTelephonyListener = null;
        }
    }

@@ -167,7 +170,11 @@ public class DataConnectionStateTracker {
        return sDataConnectionStateTracker.valueAt(0).mActiveDataSubId;
    }

    /** Log RAT if the active data subId changes to another subId with a different RAT */
    /**
     * Log RAT if the active data subId changes to another subId with a different RAT.
     *
     * @param subId the current active data subId
     */
    private void logRATChanges(int subId) {
        if (mSubId == subId && mActiveDataSubId != subId) {
            int newDataRat = mPhone.getServiceStateTracker()
@@ -188,13 +195,14 @@ public class DataConnectionStateTracker {
        }
    }

    private class PreciseDataConnectionStateListenerImpl extends TelephonyCallback
    private class TelephonyListenerImpl extends TelephonyCallback
            implements TelephonyCallback.PreciseDataConnectionStateListener,
            TelephonyCallback.ActiveDataSubscriptionIdListener {
            TelephonyCallback.ActiveDataSubscriptionIdListener,
            TelephonyCallback.PhysicalChannelConfigListener {
        private final Executor mExecutor;
        private TelephonyManager mTelephonyManager = null;

        PreciseDataConnectionStateListenerImpl(Executor executor) {
        TelephonyListenerImpl(Executor executor) {
            mExecutor = executor;
        }

@@ -223,8 +231,53 @@ public class DataConnectionStateTracker {
        public void onActiveDataSubscriptionIdChanged(int subId) {
            if (dataRatMetricEnabled()) {
                logRATChanges(subId);
            }
            mActiveDataSubId = subId;
        }

        @Override
        public void onPhysicalChannelConfigChanged(List<PhysicalChannelConfig> configs) {
            logChannelChange(configs);
        }

        /** Log channel number if it changes for active data subscription*/
        private void logChannelChange(List<PhysicalChannelConfig> configs) {
            int connectedChannelCount = configs.size();
            int channelCountEnum = TelephonyStatsLog
                    .CONNECTED_CHANNEL_CHANGED__CONNECTED_CHANNEL_COUNT__CHANNEL_COUNT_UNSPECIFIED;
            switch(connectedChannelCount) {
                case 0:
                    channelCountEnum = TelephonyStatsLog
                            .CONNECTED_CHANNEL_CHANGED__CONNECTED_CHANNEL_COUNT__CHANNEL_COUNT_ONE;
                    break;
                case 1:
                    channelCountEnum = TelephonyStatsLog
                            .CONNECTED_CHANNEL_CHANGED__CONNECTED_CHANNEL_COUNT__CHANNEL_COUNT_ONE;
                    break;
                case 2:
                    channelCountEnum = TelephonyStatsLog
                            .CONNECTED_CHANNEL_CHANGED__CONNECTED_CHANNEL_COUNT__CHANNEL_COUNT_TWO;
                    break;
                case 3:
                    channelCountEnum = TelephonyStatsLog
                            .CONNECTED_CHANNEL_CHANGED__CONNECTED_CHANNEL_COUNT__CHANNEL_COUNT_THREE;
                    break;
                case 4:
                    channelCountEnum = TelephonyStatsLog
                            .CONNECTED_CHANNEL_CHANGED__CONNECTED_CHANNEL_COUNT__CHANNEL_COUNT_FOUR;
                    break;
                // Greater than 4
                default:
                    channelCountEnum = TelephonyStatsLog
                            .CONNECTED_CHANNEL_CHANGED__CONNECTED_CHANNEL_COUNT__CHANNEL_COUNT_FIVE;
            }
            if (mChannelCountEnum != channelCountEnum) {
                if (mSubId != mActiveDataSubId) {
                    TelephonyStatsLog.write(TelephonyStatsLog.CONNECTED_CHANNEL_CHANGED,
                            channelCountEnum);
                }
                mChannelCountEnum = channelCountEnum;
            }
        }
    }
}