package com.openfarmanager.android.filesystem.commands; import android.annotation.TargetApi; import android.net.Uri; import android.os.Build; import android.provider.DocumentsContract; import com.openfarmanager.android.App; import com.openfarmanager.android.R; import com.openfarmanager.android.filesystem.actions.RootTask; import com.openfarmanager.android.fragments.ErrorDialog; import com.openfarmanager.android.fragments.MainPanel; import com.openfarmanager.android.utils.SystemUtils; import java.io.File; import java.io.IOException; /** * @author Vlad Namashko. */ public class CreateNewCommand extends AbstractPermissionCommand { private MainPanel mPanel; private boolean mIsCreateDirectory; private String mDestinationFileName; public CreateNewCommand(MainPanel panel) { mPanel = panel; } @Override public void execute(final Object... args) { mIsCreateDirectory = (Boolean) args[2]; mDestinationFileName = (String) args[1]; File destination = new File(mPanel.getCurrentDir(), mDestinationFileName); boolean result; try { String sdCardPath = SystemUtils.getExternalStorage(destination.getAbsolutePath()); result = sdCardPath != null && checkVersion() ? checkForPermissionAndGetDestinationUrl(sdCardPath, mPanel.getCurrentPath()) : createFileRawApi(mIsCreateDirectory, destination); } catch (IOException e) { result = false; } if (!result) { try { ErrorDialog.newInstance(App.sInstance.getString(R.string.error_cannot_create_file, mDestinationFileName)).show(mPanel.fragmentManager(), "errorDialog"); } catch (Exception e) { e.printStackTrace(); } } mPanel.invalidatePanels((MainPanel) args[0]); } private boolean createFileRawApi(boolean createDirectory, File destination) throws IOException { boolean result; File parentFile = destination.getParentFile(); if (parentFile == null) { return false; } boolean isRootRequired = !parentFile.canRead() || !parentFile.canWrite(); result = isRootRequired ? RootTask.create(destination, createDirectory) : createDirectory ? destination.mkdir() : destination.createNewFile(); return result; } @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override protected boolean executeCommand(Uri uri) { Uri fileUri = DocumentsContract.createDocument(App.sInstance.getContentResolver(), uri, mIsCreateDirectory ? DocumentsContract.Document.MIME_TYPE_DIR : "", mDestinationFileName); return fileUri != null; } }