diff --git a/src/java/com/android/internal/telephony/LinkCapacityEstimate.java b/src/java/com/android/internal/telephony/LinkCapacityEstimate.java
deleted file mode 100644
index 7bca5cd..0000000
--- a/src/java/com/android/internal/telephony/LinkCapacityEstimate.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2018 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.internal.telephony;
-
-/**
- * Link Bandwidth Information from the Radio
- */
-public class LinkCapacityEstimate {
-    /** Any field that is not reported shall be set to INVALID */
-    public static final int INVALID = -1;
-
-    /** LCE is active; Deprecated in HAL 1.2 */
-    public static final int STATUS_ACTIVE = 0;
-
-    /** LCE is suspended; Deprecated in HAL 1.2 */
-    public static final int STATUS_SUSPENDED = 1;
-
-    /** Downlink radio link capacity in kbps. In case of a dual connected network,
-     * this includes capacity of both primary and secondary */
-    public final int downlinkCapacityKbps;
-
-    /** Uplink radio link capacity; added in HAL 1.2. In case of a dual connected network,
-     * this includes capacity of both primary and secondary */
-    public final int uplinkCapacityKbps;
-
-    /** Downlink radio link capacity of secondary network in kbps */
-    public final int secondaryDownlinkCapacityKbps;
-
-    /** Uplink radio link capacity of secondary network in kbps */
-    public final int secondaryUplinkCapacityKbps;
-
-    /** Confidence of the downlink estimate as a percentage [1, 100]; deprecated in HAL 1.2 */
-    public final int confidence;
-
-    /** Status of the LCE; deprecated in HAL 1.2 */
-    public final int status; // either STATUS_ACTIVE, STATUS_SUSPENDED, or INVALID
-
-    /** Constructor matching the estimate in Radio HAL v1.0 */
-    public LinkCapacityEstimate(int downlinkCapacityKbps, int confidence, int status) {
-        this.downlinkCapacityKbps = downlinkCapacityKbps;
-        this.confidence = confidence;
-        this.status = status;
-        this.uplinkCapacityKbps = INVALID;
-        this.secondaryDownlinkCapacityKbps = INVALID;
-        this.secondaryUplinkCapacityKbps = INVALID;
-    }
-
-    /** Constructor matching the estimate in Radio HAL v1.2 */
-    public LinkCapacityEstimate(int downlinkCapacityKbps, int uplinkCapacityKbps) {
-        this.downlinkCapacityKbps = downlinkCapacityKbps;
-        this.uplinkCapacityKbps = uplinkCapacityKbps;
-        this.confidence = INVALID;
-        this.status = INVALID;
-        this.secondaryDownlinkCapacityKbps = INVALID;
-        this.secondaryUplinkCapacityKbps = INVALID;
-    }
-
-    /** Constructor matching the estimate in Radio HAL v1.6 */
-    public LinkCapacityEstimate(int downlinkCapacityKbps, int uplinkCapacityKbps,
-            int secondaryDownlinkCapacityKbps, int secondaryUplinkCapacityKbps) {
-        this.downlinkCapacityKbps = downlinkCapacityKbps;
-        this.uplinkCapacityKbps = uplinkCapacityKbps;
-        this.confidence = INVALID;
-        this.status = INVALID;
-        this.secondaryDownlinkCapacityKbps = secondaryDownlinkCapacityKbps;
-        this.secondaryUplinkCapacityKbps = secondaryUplinkCapacityKbps;
-    }
-
-    @Override
-    public String toString() {
-        return new StringBuilder()
-                .append("{downlinkCapacityKbps=")
-                .append(downlinkCapacityKbps)
-                .append(", uplinkCapacityKbps=")
-                .append(uplinkCapacityKbps)
-                .append(", confidence=")
-                .append(confidence)
-                .append(", status=")
-                .append(status)
-                .append("{secondaryDownlinkCapacityKbps=")
-                .append(secondaryDownlinkCapacityKbps)
-                .append(", secondaryUplinkCapacityKbps=")
-                .append(secondaryUplinkCapacityKbps)
-                .toString();
-    }
-}
