diff --git a/res/apks/contentprovider/TradefedContentProvider.apk b/res/apks/contentprovider/TradefedContentProvider.apk
index 49472b2..22a4569 100644
--- a/res/apks/contentprovider/TradefedContentProvider.apk
+++ b/res/apks/contentprovider/TradefedContentProvider.apk
Binary files differ
diff --git a/src/com/android/tradefed/device/NativeDevice.java b/src/com/android/tradefed/device/NativeDevice.java
index 77fb786..184dfd5 100644
--- a/src/com/android/tradefed/device/NativeDevice.java
+++ b/src/com/android/tradefed/device/NativeDevice.java
@@ -1141,6 +1141,15 @@
     /** {@inheritDoc} */
     @Override
     public void deleteFile(String deviceFilePath) throws DeviceNotAvailableException {
+        if (deviceFilePath.startsWith(SD_CARD)) {
+            ContentProviderHandler handler = getContentProvider();
+            if (handler != null) {
+                if (handler.deleteFile(deviceFilePath)) {
+                    return;
+                }
+            }
+        }
+        // Fallback to the direct command if content provider is unsuccessful
         executeShellCommand(String.format("rm -rf \"%s\"", deviceFilePath));
     }
 
diff --git a/util-apps/ContentProvider/hostsidetests/src/com/android/tradefed/contentprovider/ContentProviderTest.java b/util-apps/ContentProvider/hostsidetests/src/com/android/tradefed/contentprovider/ContentProviderTest.java
index 597a355..8b56fc7 100644
--- a/util-apps/ContentProvider/hostsidetests/src/com/android/tradefed/contentprovider/ContentProviderTest.java
+++ b/util-apps/ContentProvider/hostsidetests/src/com/android/tradefed/contentprovider/ContentProviderTest.java
@@ -30,6 +30,8 @@
 import org.junit.runner.RunWith;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
 
 /** Host tests for the Tradefed Content Provider. */
 @RunWith(DeviceJUnit4ClassRunner.class)
@@ -38,6 +40,7 @@
 
     private ContentProviderHandler mHandler;
     private String mCurrentUserStoragePath;
+    private List<String> mToBeDeleted = new ArrayList<>();
 
     @Before
     public void setUp() throws Exception {
@@ -52,13 +55,19 @@
         if (mHandler != null) {
             mHandler.tearDown();
         }
+        for (String delete : mToBeDeleted) {
+            getDevice().deleteFile(delete);
+        }
+        mToBeDeleted.clear();
     }
 
     @Test
     public void testPushFile() throws Exception {
         File tmpFile = FileUtil.createTempFile("tmpFileToPush", ".txt");
         try {
-            boolean res = mHandler.pushFile(tmpFile, "/sdcard/" + tmpFile.getName());
+            String devicePath = "/sdcard/" + tmpFile.getName();
+            mToBeDeleted.add(devicePath);
+            boolean res = mHandler.pushFile(tmpFile, devicePath);
             assertTrue(res);
             assertTrue(getDevice().doesFileExist(mCurrentUserStoragePath + tmpFile.getName()));
         } finally {
@@ -66,6 +75,23 @@
         }
     }
 
+    /** Test that we can delete a file via Content Provider. */
+    @Test
+    public void testDeleteFile() throws Exception {
+        File tmpFile = FileUtil.createTempFile("tmpFileToPush", ".txt");
+        try {
+            String devicePath = "/sdcard/" + tmpFile.getName();
+            // Push the file first
+            boolean res = mHandler.pushFile(tmpFile, devicePath);
+            assertTrue(res);
+            assertTrue(getDevice().doesFileExist(mCurrentUserStoragePath + tmpFile.getName()));
+            // Attempt to delete it.
+            assertTrue(mHandler.deleteFile(devicePath));
+        } finally {
+            FileUtil.deleteFile(tmpFile);
+        }
+    }
+
     @Test
     public void testPullFile() throws Exception {
         String fileContent = "some test content";
diff --git a/util-apps/ContentProvider/main/java/android/tradefed/contentprovider/ManagedFileContentProvider.java b/util-apps/ContentProvider/main/java/android/tradefed/contentprovider/ManagedFileContentProvider.java
index cb08e6f..c82b736 100644
--- a/util-apps/ContentProvider/main/java/android/tradefed/contentprovider/ManagedFileContentProvider.java
+++ b/util-apps/ContentProvider/main/java/android/tradefed/contentprovider/ManagedFileContentProvider.java
@@ -157,13 +157,11 @@
     @Override
     public int delete(
             @NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
-        ContentValues values = mFileTracker.remove(uri);
-        if (values == null) {
-            return 0;
-        }
+        // Stop Tracking the File of directory if it was tracked and delete it from the disk
+        mFileTracker.remove(uri);
         File file = getFileForUri(uri);
         int num = recursiveDelete(file);
-        return 1;
+        return num;
     }
 
     @Override
