Add a test for CP delete files

Add the CP logic to #deleteFile and a test for it to make
it sure we don't break it.

Bug: 123529934
Test: unit tests
atest TradefedContentProviderHostTest
Bug: 123528776

Change-Id: I8cbf340b7ab7487cafe0674f01e48f45fb5db8d9
Merged-In: I8cbf340b7ab7487cafe0674f01e48f45fb5db8d9
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