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

Commit f65af671 authored by Pengquan Meng's avatar Pengquan Meng
Browse files

Fix out of index issue for telephonyMetrics

Phone process will crash if the second sim(with phone id 1) update was sent
before the sim(with phone id 0). This change fix the issue.

Bug: 127532537
Test: manual test
Change-Id: I3278313b9f4f9217a162eb725719901f44fb9968
parent 3b28d713
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.internal.telephony.metrics;
import static com.android.internal.telephony.nano.TelephonyProto.ImsCapabilities;
import static com.android.internal.telephony.nano.TelephonyProto.ImsConnectionState;
import static com.android.internal.telephony.nano.TelephonyProto.RilDataCall;
import static com.android.internal.telephony.nano.TelephonyProto.SimState;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.CarrierIdMatching;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.CarrierKeyChange;
@@ -30,6 +31,7 @@ import static com.android.internal.telephony.nano.TelephonyProto.TelephonyServic
import static com.android.internal.telephony.nano.TelephonyProto.TelephonySettings;

import android.os.SystemClock;
import android.telephony.TelephonyManager;
import android.util.SparseArray;

import com.android.internal.telephony.nano.TelephonyProto.ActiveSubscriptionInfo;
@@ -37,6 +39,8 @@ import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.DataSwi
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.OnDemandDataSwitch;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.Type;

import java.util.Arrays;

public class TelephonyEventBuilder {
    private final TelephonyEvent mEvent = new TelephonyEvent();

@@ -147,12 +151,16 @@ public class TelephonyEventBuilder {

    /** Set and build SIM state change event. */
    public TelephonyEventBuilder setSimStateChange(SparseArray<Integer> simStates) {
        int phoneCount = TelephonyManager.getDefault().getPhoneCount();
        mEvent.simState = new int[phoneCount];
        Arrays.fill(mEvent.simState, SimState.SIM_STATE_UNKNOWN);
        mEvent.type = Type.SIM_STATE_CHANGED;
        mEvent.simState = new int[simStates.size()];
        for (int i = 0; i < simStates.size(); i++) {
            int key = simStates.keyAt(i);
            if (0 <= key && key < phoneCount) {
                mEvent.simState[key] = simStates.get(key);
            }
        }
        return this;
    }