Merge "Revert "Implement NetworkRequestsState atom"" into main am: a8062d9ed0 am: d9fd46027b

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/2890276

Change-Id: I873acbc8a1005cd44556475e507de2cd0b6a288c
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/service/src/com/android/metrics/NetworkRequestStateInfo.java b/service/src/com/android/metrics/NetworkRequestStateInfo.java
deleted file mode 100644
index e3e172a..0000000
--- a/service/src/com/android/metrics/NetworkRequestStateInfo.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.metrics;
-
-import static com.android.server.ConnectivityStatsLog.NETWORK_REQUEST_STATE_CHANGED__STATE__NETWORK_REQUEST_STATE_RECEIVED;
-import static com.android.server.ConnectivityStatsLog.NETWORK_REQUEST_STATE_CHANGED__STATE__NETWORK_REQUEST_STATE_REMOVED;
-import static com.android.server.ConnectivityStatsLog.NETWORK_REQUEST_STATE_CHANGED__STATE__NETWORK_REQUEST_STATE_UNKNOWN;
-
-import android.net.NetworkCapabilities;
-import android.net.NetworkRequest;
-import android.os.SystemClock;
-
-import com.android.net.module.util.BitUtils;
-
-
-class NetworkRequestStateInfo {
-    private final NetworkRequest mNetworkRequest;
-    private final long mNetworkRequestReceivedTime;
-
-    private enum NetworkRequestState {
-        RECEIVED,
-        REMOVED
-    }
-    private NetworkRequestState mNetworkRequestState;
-    private int mNetworkRequestDurationMillis;
-    private final Dependencies mDependencies;
-
-    NetworkRequestStateInfo(NetworkRequest networkRequest,
-            Dependencies deps) {
-        mDependencies = deps;
-        mNetworkRequest = networkRequest;
-        mNetworkRequestReceivedTime = mDependencies.getElapsedRealtime();
-        mNetworkRequestDurationMillis = 0;
-        mNetworkRequestState = NetworkRequestState.RECEIVED;
-    }
-
-    public void setNetworkRequestRemoved() {
-        mNetworkRequestState = NetworkRequestState.REMOVED;
-        mNetworkRequestDurationMillis = (int) (
-                mDependencies.getElapsedRealtime() - mNetworkRequestReceivedTime);
-    }
-
-    public int getNetworkRequestStateStatsType() {
-        if (mNetworkRequestState == NetworkRequestState.RECEIVED) {
-            return NETWORK_REQUEST_STATE_CHANGED__STATE__NETWORK_REQUEST_STATE_RECEIVED;
-        } else if (mNetworkRequestState == NetworkRequestState.REMOVED) {
-            return NETWORK_REQUEST_STATE_CHANGED__STATE__NETWORK_REQUEST_STATE_REMOVED;
-        } else {
-            return NETWORK_REQUEST_STATE_CHANGED__STATE__NETWORK_REQUEST_STATE_UNKNOWN;
-        }
-    }
-
-    public int getRequestId() {
-        return mNetworkRequest.requestId;
-    }
-
-    public int getPackageUid() {
-        return mNetworkRequest.networkCapabilities.getRequestorUid();
-    }
-
-    public int getTransportTypes() {
-        return (int) BitUtils.packBits(mNetworkRequest.networkCapabilities.getTransportTypes());
-    }
-
-    public boolean getNetCapabilityNotMetered() {
-        return mNetworkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
-    }
-
-    public boolean getNetCapabilityInternet() {
-        return mNetworkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
-    }
-
-    public int getNetworkRequestDurationMillis() {
-        return mNetworkRequestDurationMillis;
-    }
-
-    /** Dependency class */
-    public static class Dependencies {
-        // Returns a timestamp with the time base of SystemClock.elapsedRealtime to keep durations
-        // relative to start time and avoid timezone change, including time spent in deep sleep.
-        public long getElapsedRealtime() {
-            return SystemClock.elapsedRealtime();
-        }
-    }
-}
diff --git a/service/src/com/android/metrics/NetworkRequestStateStatsMetrics.java b/service/src/com/android/metrics/NetworkRequestStateStatsMetrics.java
deleted file mode 100644
index 361ad22..0000000
--- a/service/src/com/android/metrics/NetworkRequestStateStatsMetrics.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.metrics;
-
-import static com.android.server.ConnectivityStatsLog.NETWORK_REQUEST_STATE_CHANGED;
-
-import android.annotation.NonNull;
-import android.net.NetworkRequest;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.Looper;
-import android.os.Message;
-import android.os.SystemClock;
-import android.util.Log;
-import android.util.SparseArray;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.server.ConnectivityStatsLog;
-
-/**
- * A Connectivity Service helper class to push atoms capturing network requests have been received
- * and removed and its metadata.
- *
- * Atom events are logged in the ConnectivityStatsLog. Network request id: network request metadata
- * hashmap is stored to calculate network request duration when it is removed.
- *
- * Note that this class is not thread-safe. The instance of the class needs to be
- * synchronized in the callers when being used in multiple threads.
- */
-public class NetworkRequestStateStatsMetrics {
-
-    private static final String TAG = "NetworkRequestStateStatsMetrics";
-    private static final int MSG_NETWORK_REQUEST_STATE_CHANGED = 0;
-
-    // 1 second internal is suggested by experiment team
-    private static final int ATOM_INTERVAL_MS = 1000;
-    private final SparseArray<NetworkRequestStateInfo> mNetworkRequestsActive;
-
-    private final Handler mStatsLoggingHandler;
-
-    private final Dependencies mDependencies;
-
-    private final NetworkRequestStateInfo.Dependencies mNRStateInfoDeps;
-
-    public NetworkRequestStateStatsMetrics() {
-        this(new Dependencies(), new NetworkRequestStateInfo.Dependencies());
-    }
-
-    @VisibleForTesting
-    NetworkRequestStateStatsMetrics(Dependencies deps,
-            NetworkRequestStateInfo.Dependencies nrStateInfoDeps) {
-        mNetworkRequestsActive = new SparseArray<>();
-        mDependencies = deps;
-        mNRStateInfoDeps = nrStateInfoDeps;
-        HandlerThread handlerThread = mDependencies.makeHandlerThread(TAG);
-        handlerThread.start();
-        mStatsLoggingHandler = new StatsLoggingHandler(handlerThread.getLooper());
-    }
-
-    /**
-     * Register network request receive event, push RECEIVE atom
-     *
-     * @param networkRequest network request received
-     */
-    public void onNetworkRequestReceived(NetworkRequest networkRequest) {
-        if (mNetworkRequestsActive.contains(networkRequest.requestId)) {
-            Log.w(TAG, "Received already registered network request, id = "
-                    + networkRequest.requestId);
-        } else {
-            Log.d(TAG, "Registered nr with ID = " + networkRequest.requestId
-                    + ", package_uid = " + networkRequest.networkCapabilities.getRequestorUid());
-            NetworkRequestStateInfo networkRequestStateInfo = new NetworkRequestStateInfo(
-                    networkRequest, mNRStateInfoDeps);
-            mNetworkRequestsActive.put(networkRequest.requestId, networkRequestStateInfo);
-            mStatsLoggingHandler.sendMessage(
-                    Message.obtain(
-                            mStatsLoggingHandler,
-                            MSG_NETWORK_REQUEST_STATE_CHANGED,
-                            networkRequestStateInfo));
-        }
-    }
-
-    /**
-     * Register network request remove event, push REMOVE atom
-     *
-     * @param networkRequest network request removed
-     */
-    public void onNetworkRequestRemoved(NetworkRequest networkRequest) {
-        NetworkRequestStateInfo networkRequestStateInfo = mNetworkRequestsActive.get(
-                networkRequest.requestId);
-        if (networkRequestStateInfo == null) {
-            Log.w(TAG, "This NR hasn't been registered. NR id = " + networkRequest.requestId);
-        } else {
-            Log.d(TAG, "Removed nr with ID = " + networkRequest.requestId);
-
-            mNetworkRequestsActive.remove(networkRequest.requestId);
-            networkRequestStateInfo.setNetworkRequestRemoved();
-            mStatsLoggingHandler.sendMessage(
-                    Message.obtain(
-                            mStatsLoggingHandler,
-                            MSG_NETWORK_REQUEST_STATE_CHANGED,
-                            networkRequestStateInfo));
-
-        }
-    }
-
-    /** Dependency class */
-    public static class Dependencies {
-        /**
-         * Creates a thread with provided tag.
-         *
-         * @param tag for the thread.
-         */
-        public HandlerThread makeHandlerThread(@NonNull final String tag) {
-            return new HandlerThread(tag);
-        }
-
-        /**
-         * Sleeps the thread for provided intervalMs millis.
-         *
-         * @param intervalMs number of millis for the thread sleep.
-         */
-        public void threadSleep(int intervalMs) {
-            try {
-                Thread.sleep(intervalMs);
-            } catch (InterruptedException e) {
-                Log.w(TAG, "Cool down interrupted!", e);
-            }
-        }
-
-        /**
-         * Writes a NETWORK_REQUEST_STATE_CHANGED event to ConnectivityStatsLog.
-         *
-         * @param networkRequestStateInfo NetworkRequestStateInfo containing network request info.
-         */
-        public void writeStats(NetworkRequestStateInfo networkRequestStateInfo) {
-            ConnectivityStatsLog.write(
-                    NETWORK_REQUEST_STATE_CHANGED,
-                    networkRequestStateInfo.getPackageUid(),
-                    networkRequestStateInfo.getTransportTypes(),
-                    networkRequestStateInfo.getNetCapabilityNotMetered(),
-                    networkRequestStateInfo.getNetCapabilityInternet(),
-                    networkRequestStateInfo.getNetworkRequestStateStatsType(),
-                    networkRequestStateInfo.getNetworkRequestDurationMillis());
-        }
-    }
-
-    private class StatsLoggingHandler extends Handler {
-        private static final String TAG = "NetworkRequestsStateStatsLoggingHandler";
-        private long mLastLogTime = 0;
-
-        StatsLoggingHandler(Looper looper) {
-            super(looper);
-        }
-
-        private void checkStatsLoggingTimeout() {
-            // Cool down before next execution. Required by atom logging frequency.
-            long now = SystemClock.elapsedRealtime();
-            if (now - mLastLogTime < ATOM_INTERVAL_MS) {
-                mDependencies.threadSleep(ATOM_INTERVAL_MS);
-            }
-            mLastLogTime = now;
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            NetworkRequestStateInfo loggingInfo;
-            switch (msg.what) {
-                case MSG_NETWORK_REQUEST_STATE_CHANGED:
-                    checkStatsLoggingTimeout();
-                    loggingInfo = (NetworkRequestStateInfo) msg.obj;
-                    mDependencies.writeStats(loggingInfo);
-                    break;
-                default: // fall out
-            }
-        }
-    }
-}
diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java
index 3b31ed2..7339d08 100755
--- a/service/src/com/android/server/ConnectivityService.java
+++ b/service/src/com/android/server/ConnectivityService.java
@@ -281,7 +281,6 @@
 import com.android.metrics.NetworkDescription;
 import com.android.metrics.NetworkList;
 import com.android.metrics.NetworkRequestCount;
-import com.android.metrics.NetworkRequestStateStatsMetrics;
 import com.android.metrics.RequestCountForType;
 import com.android.modules.utils.BasicShellCommandHandler;
 import com.android.modules.utils.build.SdkLevel;
@@ -942,8 +941,6 @@
 
     private final IpConnectivityLog mMetricsLog;
 
-    private final NetworkRequestStateStatsMetrics mNetworkRequestStateStatsMetrics;
-
     @GuardedBy("mBandwidthRequests")
     private final SparseArray<Integer> mBandwidthRequests = new SparseArray<>(10);
 
@@ -1425,19 +1422,6 @@
         }
 
         /**
-         * @see NetworkRequestStateStatsMetrics
-         */
-        public NetworkRequestStateStatsMetrics makeNetworkRequestStateStatsMetrics(
-                Context context) {
-            // We currently have network requests metric for Watch devices only
-            if (context.getPackageManager().hasSystemFeature(FEATURE_WATCH)) {
-                return  new NetworkRequestStateStatsMetrics();
-            } else {
-                return null;
-            }
-        }
-
-        /**
          * @see BatteryStatsManager
          */
         public void reportNetworkInterfaceForTransports(Context context, String iface,
@@ -1670,7 +1654,6 @@
                 new RequestInfoPerUidCounter(MAX_NETWORK_REQUESTS_PER_SYSTEM_UID - 1);
 
         mMetricsLog = logger;
-        mNetworkRequestStateStatsMetrics = mDeps.makeNetworkRequestStateStatsMetrics(mContext);
         final NetworkRequest defaultInternetRequest = createDefaultRequest();
         mDefaultRequest = new NetworkRequestInfo(
                 Process.myUid(), defaultInternetRequest, null,
@@ -5341,8 +5324,6 @@
                             updateSignalStrengthThresholds(network, "REGISTER", req);
                         }
                     }
-                } else if (req.isRequest() && mNetworkRequestStateStatsMetrics != null) {
-                    mNetworkRequestStateStatsMetrics.onNetworkRequestReceived(req);
                 }
             }
 
@@ -5560,8 +5541,6 @@
             }
             if (req.isListen()) {
                 removeListenRequestFromNetworks(req);
-            } else if (req.isRequest() && mNetworkRequestStateStatsMetrics != null) {
-                mNetworkRequestStateStatsMetrics.onNetworkRequestRemoved(req);
             }
         }
         nri.unlinkDeathRecipient();
diff --git a/tests/unit/java/com/android/metrics/NetworkRequestStateInfoTest.java b/tests/unit/java/com/android/metrics/NetworkRequestStateInfoTest.java
deleted file mode 100644
index 5709ed1..0000000
--- a/tests/unit/java/com/android/metrics/NetworkRequestStateInfoTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.metrics;
-
-import static com.android.server.ConnectivityStatsLog.NETWORK_REQUEST_STATE_CHANGED__STATE__NETWORK_REQUEST_STATE_RECEIVED;
-import static com.android.server.ConnectivityStatsLog.NETWORK_REQUEST_STATE_CHANGED__STATE__NETWORK_REQUEST_STATE_REMOVED;
-
-import static org.junit.Assert.assertEquals;
-
-import android.net.NetworkCapabilities;
-import android.net.NetworkRequest;
-import android.os.Build;
-
-import com.android.testutils.DevSdkIgnoreRule;
-import com.android.testutils.DevSdkIgnoreRunner;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-
-@RunWith(DevSdkIgnoreRunner.class)
-@DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.R)
-public class NetworkRequestStateInfoTest {
-
-    @Mock
-    private NetworkRequestStateInfo.Dependencies mDependencies;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-    }
-    @Test
-    public void testSetNetworkRequestRemoved() {
-        final long nrStartTime = 1L;
-        final long nrEndTime = 101L;
-
-        NetworkRequest notMeteredWifiNetworkRequest = new NetworkRequest(
-                new NetworkCapabilities()
-                        .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
-                        .setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED, true),
-                0, 1, NetworkRequest.Type.REQUEST
-        );
-
-        // This call will be used to calculate NR received time
-        Mockito.when(mDependencies.getElapsedRealtime()).thenReturn(nrStartTime);
-        NetworkRequestStateInfo mNetworkRequestStateInfo = new NetworkRequestStateInfo(
-                notMeteredWifiNetworkRequest, mDependencies);
-
-        // This call will be used to calculate NR removed time
-        Mockito.when(mDependencies.getElapsedRealtime()).thenReturn(nrEndTime);
-        mNetworkRequestStateInfo.setNetworkRequestRemoved();
-        assertEquals(
-                nrEndTime - nrStartTime,
-                mNetworkRequestStateInfo.getNetworkRequestDurationMillis());
-        assertEquals(mNetworkRequestStateInfo.getNetworkRequestStateStatsType(),
-                NETWORK_REQUEST_STATE_CHANGED__STATE__NETWORK_REQUEST_STATE_REMOVED);
-    }
-
-    @Test
-    public void testCheckInitialState() {
-        NetworkRequestStateInfo mNetworkRequestStateInfo = new NetworkRequestStateInfo(
-                new NetworkRequest(new NetworkCapabilities(), 0, 1, NetworkRequest.Type.REQUEST),
-                mDependencies);
-        assertEquals(mNetworkRequestStateInfo.getNetworkRequestStateStatsType(),
-                NETWORK_REQUEST_STATE_CHANGED__STATE__NETWORK_REQUEST_STATE_RECEIVED);
-    }
-}
diff --git a/tests/unit/java/com/android/metrics/NetworkRequestStateStatsMetricsTest.java b/tests/unit/java/com/android/metrics/NetworkRequestStateStatsMetricsTest.java
deleted file mode 100644
index 17a0719..0000000
--- a/tests/unit/java/com/android/metrics/NetworkRequestStateStatsMetricsTest.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.metrics;
-
-
-import static com.android.server.ConnectivityStatsLog.NETWORK_REQUEST_STATE_CHANGED__STATE__NETWORK_REQUEST_STATE_RECEIVED;
-import static com.android.server.ConnectivityStatsLog.NETWORK_REQUEST_STATE_CHANGED__STATE__NETWORK_REQUEST_STATE_REMOVED;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.clearInvocations;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-import android.net.NetworkCapabilities;
-import android.net.NetworkRequest;
-import android.os.HandlerThread;
-
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import com.android.testutils.HandlerUtils;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-
-@RunWith(AndroidJUnit4.class)
-public class NetworkRequestStateStatsMetricsTest {
-    @Mock
-    private NetworkRequestStateStatsMetrics.Dependencies mNRStateStatsDeps;
-    @Mock
-    private NetworkRequestStateInfo.Dependencies mNRStateInfoDeps;
-    @Captor
-    private ArgumentCaptor<NetworkRequestStateInfo> mNetworkRequestStateInfoCaptor;
-    private NetworkRequestStateStatsMetrics mNetworkRequestStateStatsMetrics;
-    private HandlerThread mHandlerThread;
-    private static final int TEST_REQUEST_ID = 10;
-    private static final int TEST_PACKAGE_UID = 20;
-    private static final int TIMEOUT_MS = 30_000;
-    private static final NetworkRequest NOT_METERED_WIFI_NETWORK_REQUEST = new NetworkRequest(
-            new NetworkCapabilities()
-                    .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
-                    .setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED, true)
-                    .setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, false)
-                    .setRequestorUid(TEST_PACKAGE_UID),
-            0, TEST_REQUEST_ID, NetworkRequest.Type.REQUEST
-    );
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-        mHandlerThread = new HandlerThread("NetworkRequestStateStatsMetrics");
-        Mockito.when(mNRStateStatsDeps.makeHandlerThread("NetworkRequestStateStatsMetrics"))
-                .thenReturn(mHandlerThread);
-        mNetworkRequestStateStatsMetrics = new NetworkRequestStateStatsMetrics(
-                mNRStateStatsDeps, mNRStateInfoDeps);
-    }
-
-    @Test
-    public void testNetworkRequestReceivedRemoved() {
-        final long nrStartTime = 1L;
-        final long nrEndTime = 101L;
-        // This call will be used to calculate NR received time
-        Mockito.when(mNRStateInfoDeps.getElapsedRealtime()).thenReturn(nrStartTime);
-        mNetworkRequestStateStatsMetrics.onNetworkRequestReceived(NOT_METERED_WIFI_NETWORK_REQUEST);
-        HandlerUtils.waitForIdle(mHandlerThread, TIMEOUT_MS);
-
-        verify(mNRStateStatsDeps, times(1))
-                .writeStats(mNetworkRequestStateInfoCaptor.capture());
-
-        NetworkRequestStateInfo nrStateInfoSent = mNetworkRequestStateInfoCaptor.getValue();
-        assertEquals(NETWORK_REQUEST_STATE_CHANGED__STATE__NETWORK_REQUEST_STATE_RECEIVED,
-                nrStateInfoSent.getNetworkRequestStateStatsType());
-        assertEquals(NOT_METERED_WIFI_NETWORK_REQUEST.requestId, nrStateInfoSent.getRequestId());
-        assertEquals(TEST_PACKAGE_UID, nrStateInfoSent.getPackageUid());
-        assertEquals(1 << NetworkCapabilities.TRANSPORT_WIFI, nrStateInfoSent.getTransportTypes());
-        assertTrue(nrStateInfoSent.getNetCapabilityNotMetered());
-        assertFalse(nrStateInfoSent.getNetCapabilityInternet());
-        assertEquals(0, nrStateInfoSent.getNetworkRequestDurationMillis());
-
-        clearInvocations(mNRStateStatsDeps);
-        // This call will be used to calculate NR removed time
-        Mockito.when(mNRStateInfoDeps.getElapsedRealtime()).thenReturn(nrEndTime);
-        mNetworkRequestStateStatsMetrics.onNetworkRequestRemoved(NOT_METERED_WIFI_NETWORK_REQUEST);
-        HandlerUtils.waitForIdle(mHandlerThread, TIMEOUT_MS);
-
-        verify(mNRStateStatsDeps, times(1))
-                .writeStats(mNetworkRequestStateInfoCaptor.capture());
-
-        nrStateInfoSent = mNetworkRequestStateInfoCaptor.getValue();
-        assertEquals(NETWORK_REQUEST_STATE_CHANGED__STATE__NETWORK_REQUEST_STATE_REMOVED,
-                nrStateInfoSent.getNetworkRequestStateStatsType());
-        assertEquals(NOT_METERED_WIFI_NETWORK_REQUEST.requestId, nrStateInfoSent.getRequestId());
-        assertEquals(TEST_PACKAGE_UID, nrStateInfoSent.getPackageUid());
-        assertEquals(1 << NetworkCapabilities.TRANSPORT_WIFI, nrStateInfoSent.getTransportTypes());
-        assertTrue(nrStateInfoSent.getNetCapabilityNotMetered());
-        assertFalse(nrStateInfoSent.getNetCapabilityInternet());
-        assertEquals(nrEndTime - nrStartTime, nrStateInfoSent.getNetworkRequestDurationMillis());
-    }
-
-    @Test
-    public void testUnreceivedNetworkRequestRemoved() {
-        mNetworkRequestStateStatsMetrics.onNetworkRequestRemoved(NOT_METERED_WIFI_NETWORK_REQUEST);
-        HandlerUtils.waitForIdle(mHandlerThread, TIMEOUT_MS);
-        verify(mNRStateStatsDeps, never())
-                .writeStats(any(NetworkRequestStateInfo.class));
-    }
-
-    @Test
-    public void testExistingNetworkRequestReceived() {
-        mNetworkRequestStateStatsMetrics.onNetworkRequestReceived(NOT_METERED_WIFI_NETWORK_REQUEST);
-        HandlerUtils.waitForIdle(mHandlerThread, TIMEOUT_MS);
-        verify(mNRStateStatsDeps, times(1))
-                .writeStats(any(NetworkRequestStateInfo.class));
-
-        clearInvocations(mNRStateStatsDeps);
-        mNetworkRequestStateStatsMetrics.onNetworkRequestReceived(NOT_METERED_WIFI_NETWORK_REQUEST);
-        HandlerUtils.waitForIdle(mHandlerThread, TIMEOUT_MS);
-        verify(mNRStateStatsDeps, never())
-                .writeStats(any(NetworkRequestStateInfo.class));
-
-    }
-}
diff --git a/tests/unit/java/com/android/server/connectivityservice/CSNetworkRequestStateStatsMetricsTests.kt b/tests/unit/java/com/android/server/connectivityservice/CSNetworkRequestStateStatsMetricsTests.kt
deleted file mode 100644
index 35f8ae5..0000000
--- a/tests/unit/java/com/android/server/connectivityservice/CSNetworkRequestStateStatsMetricsTests.kt
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server
-
-import android.net.NetworkCapabilities
-import android.net.NetworkRequest
-import android.os.Build
-import android.os.Process
-import com.android.testutils.DevSdkIgnoreRule
-import com.android.testutils.DevSdkIgnoreRunner
-import com.android.testutils.TestableNetworkCallback
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.Mockito.argThat
-import org.mockito.Mockito.clearInvocations
-import org.mockito.Mockito.never
-import org.mockito.Mockito.verify
-
-@RunWith(DevSdkIgnoreRunner::class)
-@DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.R)
-class CSNetworkRequestStateStatsMetricsTests : CSTest() {
-    private val CELL_INTERNET_NOT_METERED_NC = NetworkCapabilities.Builder()
-            .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
-            .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
-            .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
-            .build().setRequestorUidAndPackageName(Process.myUid(), context.getPackageName())
-
-    private val CELL_INTERNET_NOT_METERED_NR = NetworkRequest.Builder()
-            .setCapabilities(CELL_INTERNET_NOT_METERED_NC).build()
-
-    @Before
-    fun setup() {
-        waitForIdle()
-        clearInvocations(networkRequestStateStatsMetrics)
-    }
-
-    @Test
-    fun testRequestTypeNRProduceMetrics() {
-        cm.requestNetwork(CELL_INTERNET_NOT_METERED_NR, TestableNetworkCallback())
-        waitForIdle()
-
-        verify(networkRequestStateStatsMetrics).onNetworkRequestReceived(
-                argThat{req -> req.networkCapabilities.equals(
-                        CELL_INTERNET_NOT_METERED_NR.networkCapabilities)})
-    }
-
-    @Test
-    fun testListenTypeNRProduceNoMetrics() {
-        cm.registerNetworkCallback(CELL_INTERNET_NOT_METERED_NR, TestableNetworkCallback())
-        waitForIdle()
-        verify(networkRequestStateStatsMetrics, never()).onNetworkRequestReceived(any())
-    }
-
-    @Test
-    fun testRemoveRequestTypeNRProduceMetrics() {
-        val cb = TestableNetworkCallback()
-        cm.requestNetwork(CELL_INTERNET_NOT_METERED_NR, cb)
-
-        waitForIdle()
-        clearInvocations(networkRequestStateStatsMetrics)
-
-        cm.unregisterNetworkCallback(cb)
-        waitForIdle()
-        verify(networkRequestStateStatsMetrics).onNetworkRequestRemoved(
-                argThat{req -> req.networkCapabilities.equals(
-                        CELL_INTERNET_NOT_METERED_NR.networkCapabilities)})
-    }
-}
diff --git a/tests/unit/java/com/android/server/connectivityservice/base/CSTest.kt b/tests/unit/java/com/android/server/connectivityservice/base/CSTest.kt
index 5c9a762..958c4f2 100644
--- a/tests/unit/java/com/android/server/connectivityservice/base/CSTest.kt
+++ b/tests/unit/java/com/android/server/connectivityservice/base/CSTest.kt
@@ -54,7 +54,6 @@
 import androidx.test.platform.app.InstrumentationRegistry
 import com.android.internal.app.IBatteryStats
 import com.android.internal.util.test.BroadcastInterceptingContext
-import com.android.metrics.NetworkRequestStateStatsMetrics
 import com.android.modules.utils.build.SdkLevel
 import com.android.net.module.util.ArrayTrackRecord
 import com.android.networkstack.apishim.common.UnsupportedApiLevelException
@@ -158,7 +157,6 @@
     val netd = mock<INetd>()
     val bpfNetMaps = mock<BpfNetMaps>()
     val clatCoordinator = mock<ClatCoordinator>()
-    val networkRequestStateStatsMetrics = mock<NetworkRequestStateStatsMetrics>()
     val proxyTracker = ProxyTracker(context, mock<Handler>(), 16 /* EVENT_PROXY_HAS_CHANGED */)
     val alarmManager = makeMockAlarmManager()
     val systemConfigManager = makeMockSystemConfigManager()
@@ -199,9 +197,6 @@
                 MultinetworkPolicyTracker(c, h, r,
                         MultinetworkPolicyTrackerTestDependencies(connResources.get()))
 
-        override fun makeNetworkRequestStateStatsMetrics(c: Context) =
-                this@CSTest.networkRequestStateStatsMetrics
-
         // All queried features must be mocked, because the test cannot hold the
         // READ_DEVICE_CONFIG permission and device config utils use static methods for
         // checking permissions.