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

Commit 6d279f59 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 5892339 from 5d22d5a4 to qt-qpr1-release

Change-Id: I9936afe2ddc1d82cdd413f6076e630074b3dd209
parents 4adf63e7 5d22d5a4
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@ message TelecomLog {

  // Hardware revision (EVT, DVT, PVT etc.)
  optional string hardware_revision = 3;

  // Carrier ID that the device is associated to
  optional int32 carrier_id = 4;
}

message LogSessionTiming {
+30 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.server.telecom;

import android.content.Context;
import android.os.SystemProperties;

import android.telecom.Connection;
@@ -23,6 +24,8 @@ import android.telecom.DisconnectCause;
import android.telecom.Logging.EventManager;
import android.telecom.ParcelableCallAnalytics;
import android.telecom.TelecomAnalytics;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.util.Base64;
import android.telecom.Log;

@@ -37,10 +40,12 @@ import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.PriorityQueue;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.stream.Collectors;
@@ -628,7 +633,7 @@ public class Analytics {
        return new TelecomAnalytics(sessionTimings, calls);
    }

    public static void dumpToEncodedProto(PrintWriter pw, String[] args) {
    public static void dumpToEncodedProto(Context context, PrintWriter pw, String[] args) {
        TelecomLogClass.TelecomLog result = new TelecomLogClass.TelecomLog();

        synchronized (sLock) {
@@ -642,6 +647,7 @@ public class Analytics {
                            .setTimeMillis(timing.getTime()))
                    .toArray(TelecomLogClass.LogSessionTiming[]::new);
            result.setHardwareRevision(SystemProperties.get("ro.boot.revision", ""));
            result.setCarrierId(getCarrierId(context));
            if (args.length > 1 && CLEAR_ANALYTICS_ARG.equals(args[1])) {
                sCallIdToInfo.clear();
                sSessionTimings.clear();
@@ -652,6 +658,29 @@ public class Analytics {
        pw.write(encodedProto);
    }

    private static int getCarrierId(Context context) {
        SubscriptionManager subscriptionManager =
                context.getSystemService(SubscriptionManager.class);
        List<SubscriptionInfo> subInfos = subscriptionManager.getActiveSubscriptionInfoList();
        if (subInfos == null) {
            return -1;
        }
        return subInfos.stream()
                .max(Comparator.comparing(Analytics::scoreSubscriptionInfo))
                .map(SubscriptionInfo::getCarrierId).orElse(-1);
    }

    // Copied over from Telephony's server-side logic for consistency
    private static int scoreSubscriptionInfo(SubscriptionInfo subInfo) {
        final int scoreCarrierId = 0b100;
        final int scoreNotOpportunistic = 0b010;
        final int scoreSlot0 = 0b001;

        return ((subInfo.getCarrierId() >= 0) ? scoreCarrierId : 0)
                + (subInfo.isOpportunistic() ? 0 : scoreNotOpportunistic)
                + ((subInfo.getSimSlotIndex() == 0) ? scoreSlot0 : 0);
    }

    public static void dump(IndentingPrintWriter writer) {
        synchronized (sLock) {
            int prefixLength = CallsManager.TELECOM_CALL_ID_PREFIX.length();
+4 −1
Original line number Diff line number Diff line
@@ -1376,10 +1376,13 @@ public class TelecomServiceImpl {
                return;
            }


            if (args.length > 0 && Analytics.ANALYTICS_DUMPSYS_ARG.equals(args[0])) {
                Analytics.dumpToEncodedProto(writer, args);
                Binder.withCleanCallingIdentity(() ->
                        Analytics.dumpToEncodedProto(mContext, writer, args));
                return;
            }

            boolean isTimeLineView = (args.length > 0 && TIME_LINE_ARG.equalsIgnoreCase(args[0]));

            final IndentingPrintWriter pw = new IndentingPrintWriter(writer, "  ");
+29 −4
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.os.Build;
@@ -39,6 +40,8 @@ import android.telecom.TelecomAnalytics;
import android.telecom.TelecomManager;
import android.telecom.VideoCallImpl;
import android.telecom.VideoProfile;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.test.suitebuilder.annotation.MediumTest;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.Base64;
@@ -60,6 +63,7 @@ import org.junit.runners.JUnit4;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
@@ -70,10 +74,16 @@ import java.util.concurrent.TimeUnit;

@RunWith(JUnit4.class)
public class AnalyticsTests extends TelecomSystemTest {
    private SubscriptionManager mSubscriptionManager;

    @Override
    @Before
    public void setUp() throws Exception {
        super.setUp();
        // this is a mock
        mSubscriptionManager = mContext.getSystemService(SubscriptionManager.class);
        when(mSubscriptionManager.getActiveSubscriptionInfoList())
                .thenReturn(Collections.emptyList());
    }

    @Override
@@ -253,7 +263,7 @@ public class AnalyticsTests extends TelecomSystemTest {

        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        Analytics.dumpToEncodedProto(pw, new String[]{});
        Analytics.dumpToEncodedProto(mContext, pw, new String[]{});
        TelecomLogClass.TelecomLog analyticsProto =
                TelecomLogClass.TelecomLog.parseFrom(Base64.decode(sw.toString(), Base64.DEFAULT));

@@ -300,6 +310,7 @@ public class AnalyticsTests extends TelecomSystemTest {
    @Test
    public void testAnalyticsDumpToProto() throws Exception {
        Analytics.reset();
        setupCarrierIds();
        IdPair testCall = startAndMakeActiveIncomingCall(
                "650-555-1212",
                mPhoneAccountA0.getAccountHandle(),
@@ -311,10 +322,11 @@ public class AnalyticsTests extends TelecomSystemTest {

        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        Analytics.dumpToEncodedProto(pw, new String[]{});
        Analytics.dumpToEncodedProto(mContext, pw, new String[]{});
        TelecomLogClass.TelecomLog analyticsProto =
                TelecomLogClass.TelecomLog.parseFrom(Base64.decode(sw.toString(), Base64.DEFAULT));

        assertEquals(1, analyticsProto.getCarrierId());
        assertEquals(1, analyticsProto.callLogs.length);
        TelecomLogClass.CallLog callLog = analyticsProto.callLogs[0];

@@ -413,7 +425,7 @@ public class AnalyticsTests extends TelecomSystemTest {

        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        Analytics.dumpToEncodedProto(pw, new String[]{});
        Analytics.dumpToEncodedProto(mContext, pw, new String[]{});
        TelecomLogClass.TelecomLog analyticsProto =
                TelecomLogClass.TelecomLog.parseFrom(Base64.decode(sw.toString(), Base64.DEFAULT));

@@ -432,7 +444,7 @@ public class AnalyticsTests extends TelecomSystemTest {

        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        Analytics.dumpToEncodedProto(pw, new String[]{});
        Analytics.dumpToEncodedProto(mContext, pw, new String[]{});
        TelecomLogClass.TelecomLog analyticsProto =
                TelecomLogClass.TelecomLog.parseFrom(Base64.decode(sw.toString(), Base64.DEFAULT));

@@ -445,4 +457,17 @@ public class AnalyticsTests extends TelecomSystemTest {
    private void assertIsRoundedToOneSigFig(long x) {
        assertEquals(x, Analytics.roundToOneSigFig(x));
    }

    private void setupCarrierIds() {
        SubscriptionInfo subInfo1 = mock(SubscriptionInfo.class);
        SubscriptionInfo subInfo2 = mock(SubscriptionInfo.class);
        when(subInfo1.getCarrierId()).thenReturn(1);
        when(subInfo2.getCarrierId()).thenReturn(2);
        when(subInfo1.isOpportunistic()).thenReturn(false);
        when(subInfo2.isOpportunistic()).thenReturn(true);
        when(subInfo1.getSimSlotIndex()).thenReturn(0);
        when(subInfo2.getSimSlotIndex()).thenReturn(1);
        when(mSubscriptionManager.getActiveSubscriptionInfoList())
                .thenReturn(Arrays.asList(subInfo2, subInfo1));
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -212,6 +212,8 @@ public class ComponentContextFixture implements TestFixture<Context> {
                return Context.TELEPHONY_SERVICE;
            } else if (svcClass == CarrierConfigManager.class) {
                return Context.CARRIER_CONFIG_SERVICE;
            } else if (svcClass == SubscriptionManager.class) {
                return Context.TELEPHONY_SUBSCRIPTION_SERVICE;
            }
            throw new UnsupportedOperationException();
        }