package com.openfarmanager.android.filesystem.actions; import android.content.Context; import android.net.Uri; import android.provider.DocumentsContract; import com.openfarmanager.android.App; import com.openfarmanager.android.model.TaskStatusEnum; import com.openfarmanager.android.model.exeptions.SdcardPermissionException; import com.openfarmanager.android.utils.StorageUtils; import com.openfarmanager.android.utils.SystemUtils; import org.apache.commons.io.FileDeleteStrategy; import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import static com.openfarmanager.android.model.TaskStatusEnum.*; /** * author: vnamashko */ public class DeleteTask extends FileActionTask { public DeleteTask(Context context, int invokedOnPanel, List<File> items) { super(context, invokedOnPanel, items); } @Override protected TaskStatusEnum doInBackground(Void... voids) { if (mItems.size() == 0) { return OK; } FileDeleteStrategy strategy = FileDeleteStrategy.FORCE; List<File> items = new ArrayList<>(mItems); String sdCardPath = SystemUtils.getExternalStorage(mItems.get(0).getParent()); if (StorageUtils.checkUseStorageApi(sdCardPath)) { try { Uri baseUri = StorageUtils.checkForPermissionAndGetBaseUri(); for (File file : items) { Uri uri = StorageUtils.getDestinationFileUri(baseUri, sdCardPath, file.getAbsolutePath()); mDoneSize += FileUtils.sizeOf(file); if (!DocumentsContract.deleteDocument(App.sInstance.getContentResolver(), uri)) { return ERROR_DELETE_FILE; } updateProgress(); } return OK; } catch (SdcardPermissionException e) { return ERROR_STORAGE_PERMISSION_REQUIRED; } catch (Exception e) { return ERROR_DELETE_FILE; } } else { for (File file : items) { if (isCancelled()) { break; } try { if (file.getParentFile().canWrite()) { mDoneSize += FileUtils.sizeOf(file); strategy.delete(file); } else { RootTask.delete(file); } updateProgress(); } catch (NullPointerException e) { return ERROR_FILE_NOT_EXISTS; } catch (IOException e) { return ERROR_DELETE_FILE; } catch (Exception e) { return ERROR_DELETE_FILE; } } } return OK; } }