Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion app/src/main/java/com/tyron/code/ApplicationLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;
import android.widget.Toast;

import androidx.annotation.NonNull;
Expand All @@ -20,6 +21,7 @@
import com.tyron.code.ui.editor.action.PreviewLayoutAction;
import com.tyron.code.ui.editor.action.text.TextActionGroup;
import com.tyron.code.ui.file.action.NewFileActionGroup;
import com.tyron.code.ui.file.action.ImportFileActionGroup;
import com.tyron.code.ui.file.action.file.DeleteFileAction;
import com.tyron.code.ui.main.action.compile.CompileActionGroup;
import com.tyron.code.ui.main.action.debug.DebugActionGroup;
Expand Down Expand Up @@ -159,6 +161,9 @@ private void runStartup() {
// file manager actions
manager.registerAction(NewFileActionGroup.ID, new NewFileActionGroup());
manager.registerAction(DeleteFileAction.ID, new DeleteFileAction());
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.R) {
manager.registerAction(ImportFileActionGroup.ID,new ImportFileActionGroup());
}

// java actions
CompletionModule.registerActions(manager);
Expand All @@ -185,4 +190,4 @@ public static void showToast(String message) {
public static void setApplicationContext(Context context) {
applicationContext = context;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.tyron.code.ui.file.action;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.tyron.actions.ActionGroup;
import com.tyron.actions.AnAction;
import com.tyron.actions.AnActionEvent;
import com.tyron.actions.Presentation;
import com.tyron.code.R;
import com.tyron.code.ui.file.CommonFileKeys;
import com.tyron.code.ui.file.action.file.ImportDirectoryAction;
import com.tyron.code.ui.file.action.file.ImportFileAction;
import com.tyron.code.ui.file.tree.model.TreeFile;
import com.tyron.ui.treeview.TreeNode;

public class ImportFileActionGroup extends ActionGroup {

public static final String ID = "fileManagerImportGroup";

@Override
public void update(@NonNull AnActionEvent event) {
Presentation presentation = event.getPresentation();
presentation.setVisible(false);

TreeNode<TreeFile> data = event.getData(CommonFileKeys.TREE_NODE);
if (data == null) {
return;
}

presentation.setVisible(true);
presentation.setText(event.getDataContext().getString(R.string.menu_import));
}

@Override
public AnAction[] getChildren(@Nullable AnActionEvent e) {
return new AnAction[]{new ImportFileAction(),new ImportDirectoryAction()};
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package com.tyron.code.ui.file.action.file;

import android.content.Context;
import android.os.Environment;
import android.util.Log;

import androidx.annotation.NonNull;

import com.github.angads25.filepicker.model.DialogConfigs;
import com.github.angads25.filepicker.model.DialogProperties;
import com.github.angads25.filepicker.view.FilePickerDialog;
import com.tyron.actions.AnActionEvent;
import com.tyron.actions.CommonDataKeys;
import com.tyron.code.R;
import com.tyron.completion.progress.ProgressManager;
import com.tyron.code.ui.file.CommonFileKeys;
import com.tyron.code.ui.file.action.FileAction;
import com.tyron.code.ui.file.tree.TreeFileManagerFragment;
import com.tyron.code.ui.file.tree.TreeUtil;
import com.tyron.code.ui.file.tree.model.TreeFile;
import com.tyron.ui.treeview.TreeNode;
import com.tyron.ui.treeview.TreeView;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;

public class ImportDirectoryAction extends FileAction {

public static final String ID = "fileManagerImportDirectoryAction";

@Override
public String getTitle(Context context) {
return context.getString(R.string.menu_action_new_directory);
}

@Override
public boolean isApplicable(File file) {
return file.isDirectory();
}

private void refreshTreeView(TreeNode<TreeFile> currentNode, TreeView<?> treeView) {
TreeUtil.updateNode(currentNode);
treeView.refreshTreeView();
}

@SuppressWarnings("ConstantConditions")
@Override
public void actionPerformed(@NonNull AnActionEvent e) {
TreeFileManagerFragment fragment = (TreeFileManagerFragment) e.getData(CommonDataKeys.FRAGMENT);
File currentDir = e.getData(CommonDataKeys.FILE);
TreeNode<TreeFile> currentNode = e.getData(CommonFileKeys.TREE_NODE);

DialogProperties properties = new DialogProperties();
properties.selection_mode = DialogConfigs.SINGLE_MODE;
properties.selection_type = DialogConfigs.DIR_SELECT;
properties.root = Environment.getExternalStorageDirectory();
properties.error_dir = fragment.requireContext().getExternalFilesDir(null);

FilePickerDialog dialog = new FilePickerDialog(fragment.requireContext(), properties);
dialog.setDialogSelectionListener(files -> {
ProgressManager.getInstance().runNonCancelableAsync(() -> {
String file = files[0];
try {
FileUtils.copyDirectoryToDirectory(new File(file), currentDir);
} catch (IOException ioException) {
Log.e(ID, ioException.toString());
}

ProgressManager.getInstance().runLater(() -> {
refreshTreeView(currentNode, fragment.getTreeView());
});

});

});
dialog.show();

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package com.tyron.code.ui.file.action.file;

import android.content.Context;
import android.os.Environment;
import android.util.Log;

import androidx.annotation.NonNull;

import com.github.angads25.filepicker.model.DialogConfigs;
import com.github.angads25.filepicker.model.DialogProperties;
import com.github.angads25.filepicker.view.FilePickerDialog;
import com.tyron.actions.AnActionEvent;
import com.tyron.actions.CommonDataKeys;
import com.tyron.code.R;
import com.tyron.completion.progress.ProgressManager;
import com.tyron.code.ui.file.CommonFileKeys;
import com.tyron.code.ui.file.action.FileAction;
import com.tyron.code.ui.file.tree.TreeFileManagerFragment;
import com.tyron.code.ui.file.tree.TreeUtil;
import com.tyron.code.ui.file.tree.model.TreeFile;
import com.tyron.ui.treeview.TreeNode;
import com.tyron.ui.treeview.TreeView;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;

public class ImportFileAction extends FileAction {
public static final String ID = "fileManagerImportFileAction";

@Override
public String getTitle(Context context) {
return context.getString(R.string.menu_action_new_file);
}

@Override
public boolean isApplicable(File file) {
return file.isDirectory();
}

private void refreshTreeView(TreeNode<TreeFile> currentNode, TreeView<?> treeView) {
TreeUtil.updateNode(currentNode);
treeView.refreshTreeView();
}

@SuppressWarnings("ConstantConditions")
@Override
public void actionPerformed(@NonNull AnActionEvent e) {
TreeFileManagerFragment fragment = (TreeFileManagerFragment) e.getData(CommonDataKeys.FRAGMENT);
File currentDir = e.getData(CommonDataKeys.FILE);
TreeNode<TreeFile> currentNode = e.getData(CommonFileKeys.TREE_NODE);

DialogProperties properties = new DialogProperties();
properties.selection_mode = DialogConfigs.MULTI_MODE;
properties.selection_type = DialogConfigs.FILE_SELECT;
properties.root = Environment.getExternalStorageDirectory();
properties.error_dir = fragment.requireContext().getExternalFilesDir(null);

FilePickerDialog dialog = new FilePickerDialog(fragment.requireContext(), properties);
dialog.setDialogSelectionListener(files -> {
ProgressManager.getInstance().runNonCancelableAsync(() -> {
for(String file : files) {
try {
FileUtils.copyFileToDirectory(new File(file),currentDir);
} catch (IOException ioException) {
Log.e(ID,ioException.toString());
}
}
ProgressManager.getInstance().runLater(() -> {
refreshTreeView(currentNode, fragment.getTreeView());
});

});
});
dialog.show();

}

}
1 change: 1 addition & 0 deletions app/src/main/res/values/actions_strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<string name="directory_name">Directory name</string>
<string name="file_name">File name</string>
<string name="menu_new">New</string>
<string name="menu_import">Import</string>
<string name="menu_refactor">Refactor</string>
<string name="menu_new_layout">New layout</string>

Expand Down