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

Commit 8398bb2b authored by Hui Wang's avatar Hui Wang
Browse files

Enable telecom metrics pulled atoms callback

Flag: com.android.server.telecom.flags.telecom_metrics_support
Bug: 374335916
Test: atest TelecomUnitTests:TelecomMetricsControllerTest
Change-Id: Ie85c4d0222b3f26fc40707e730eaa59718399e2d
parent 26b000fa
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ android_library {
        "androidx.annotation_annotation",
        "androidx.core_core",
        "telecom_flags_core_java_lib",
        "modules-utils-handlerexecutor",
    ],
    resource_dirs: ["res"],
    proto: {
+16 −1
Original line number Diff line number Diff line
@@ -30,6 +30,8 @@ import android.util.StatsEvent;

import androidx.annotation.VisibleForTesting;

import com.android.modules.utils.HandlerExecutor;

import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -122,10 +124,23 @@ public class TelecomMetricsController implements StatsManager.StatsPullAtomCallb

    @VisibleForTesting
    public void registerAtom(int tag, TelecomPulledAtom atom) {
        final StatsManager statsManager = mContext.getSystemService(StatsManager.class);
        if (statsManager != null) {
            statsManager.setPullAtomCallback(tag, null, new HandlerExecutor(atom), this);
            mStats.put(tag, atom);
        } else {
            Log.w(TAG, "Unable to register the pulled atom as StatsManager is null");
        }
    }

    public void destroy() {
        final StatsManager statsManager = mContext.getSystemService(StatsManager.class);
        if (statsManager != null) {
            mStats.forEach((tag, stat) -> statsManager.clearPullAtomCallback(tag));
        } else {
            Log.w(TAG, "Unable to clear pulled atoms as StatsManager is null");
        }

        mStats.clear();
        mHandlerThread.quitSafely();
    }
+6 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.app.AppOpsManager;
import android.app.NotificationManager;
import android.app.StatsManager;
import android.app.StatusBarManager;
import android.app.UiModeManager;
import android.app.role.RoleManager;
@@ -258,6 +259,8 @@ public class ComponentContextFixture implements TestFixture<Context> {
                    return mAccessibilityManager;
                case Context.BLOCKED_NUMBERS_SERVICE:
                    return mBlockedNumbersManager;
                case Context.STATS_MANAGER_SERVICE:
                    return mStatsManager;
                default:
                    return null;
            }
@@ -303,6 +306,8 @@ public class ComponentContextFixture implements TestFixture<Context> {
                return Context.BLOCKED_NUMBERS_SERVICE;
            } else if (svcClass == AppOpsManager.class) {
                return Context.APP_OPS_SERVICE;
            } else if (svcClass == StatsManager.class) {
                return Context.STATS_MANAGER_SERVICE;
            }
            throw new UnsupportedOperationException(svcClass.getName());
        }
@@ -644,6 +649,7 @@ public class ComponentContextFixture implements TestFixture<Context> {
    private final PermissionInfo mPermissionInfo = mock(PermissionInfo.class);
    private final SensorPrivacyManager mSensorPrivacyManager = mock(SensorPrivacyManager.class);
    private final List<BroadcastReceiver> mBroadcastReceivers = new ArrayList<>();
    private final StatsManager mStatsManager = mock(StatsManager.class);

    private TelecomManager mTelecomManager = mock(TelecomManager.class);
    private BlockedNumbersManager mBlockedNumbersManager = mock(BlockedNumbersManager.class);
+13 −1
Original line number Diff line number Diff line
@@ -21,8 +21,11 @@ import static com.android.server.telecom.TelecomStatsLog.TELECOM_API_STATS;
import static com.android.server.telecom.TelecomStatsLog.TELECOM_ERROR_STATS;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyObject;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

import android.app.StatsManager;
@@ -119,18 +122,27 @@ public class TelecomMetricsControllerTest extends TelecomTestCase {
    }

    @Test
    public void testRegisterAtomIsSameInstance() {
    public void testRegisterAtom() {
        StatsManager statsManager = mContext.getSystemService(StatsManager.class);
        ApiStats stats = mock(ApiStats.class);

        mTelecomMetricsController.registerAtom(TELECOM_API_STATS, stats);

        verify(statsManager, times(1)).setPullAtomCallback(eq(TELECOM_API_STATS), anyObject(),
                anyObject(), eq(mTelecomMetricsController));
        assertThat(mTelecomMetricsController.getStats().get(TELECOM_API_STATS))
                .isSameInstanceAs(stats);
    }

    @Test
    public void testDestroy() {
        StatsManager statsManager = mContext.getSystemService(StatsManager.class);
        mTelecomMetricsController.destroy();

        verify(statsManager, times(1)).clearPullAtomCallback(eq(CALL_AUDIO_ROUTE_STATS));
        verify(statsManager, times(1)).clearPullAtomCallback(eq(CALL_STATS));
        verify(statsManager, times(1)).clearPullAtomCallback(eq(TELECOM_API_STATS));
        verify(statsManager, times(1)).clearPullAtomCallback(eq(TELECOM_ERROR_STATS));
        assertThat(mTelecomMetricsController.getStats()).isEmpty();
    }