diff --git a/app/src/main/java/be/gyu/android/file/explorer/MainActivity.java b/app/src/main/java/be/gyu/android/file/explorer/MainActivity.java index 1db9914..71bad26 100644 --- a/app/src/main/java/be/gyu/android/file/explorer/MainActivity.java +++ b/app/src/main/java/be/gyu/android/file/explorer/MainActivity.java @@ -39,6 +39,105 @@ import java.util.List; public class MainActivity extends AppCompatActivity implements FileAdapter.OnItemClickListener, FileAdapter.OnItemLongClickListener { + // ... (existing variables) + + @Override + protected void onCreate(Bundle savedInstanceState) { + // ... (onCreate remains the same) + } + + // --- Action Mode & Click Handling --- + + // ... (onItemClick, onItemLongClick, toggleSelection remain the same) + + private final ActionMode.Callback actionModeCallback = new ActionMode.Callback() { + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + MenuInflater inflater = mode.getMenuInflater(); + inflater.inflate(R.menu.context_menu_local, menu); + return true; + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return false; + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + int itemId = item.getItemId(); + if (itemId == R.id.action_copy) { + Toast.makeText(MainActivity.this, "Copy clicked", Toast.LENGTH_SHORT).show(); + mode.finish(); + return true; + } else if (itemId == R.id.action_cut) { + Toast.makeText(MainActivity.this, "Cut clicked", Toast.LENGTH_SHORT).show(); + mode.finish(); + return true; + } else if (itemId == R.id.action_delete) { + showDeleteConfirmationDialog(); + mode.finish(); + return true; + } else if (itemId == R.id.action_rename) { + Toast.makeText(MainActivity.this, "Rename clicked", Toast.LENGTH_SHORT).show(); + mode.finish(); + return true; + } + return false; + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + actionMode = null; + fileAdapter.clearSelections(); + } + }; + + private void showDeleteConfirmationDialog() { + List selectedFiles = fileAdapter.getSelectedItems(); + new AlertDialog.Builder(this) + .setTitle("Delete Files") + .setMessage("Are you sure you want to delete " + selectedFiles.size() + " item(s)?") + .setPositiveButton("Delete", (dialog, which) -> deleteSelectedFiles(selectedFiles)) + .setNegativeButton(android.R.string.no, null) + .setIcon(R.drawable.ic_delete) + .show(); + } + + private void deleteSelectedFiles(List filesToDelete) { + new Thread(() -> { + int successCount = 0; + for (FileItem item : filesToDelete) { + File file = new File(item.getPath()); + if (deleteFileOrDirectory(file)) { + successCount++; + } + } + int finalSuccessCount = successCount; + runOnUiThread(() -> { + Toast.makeText(this, finalSuccessCount + " items deleted.", Toast.LENGTH_SHORT).show(); + loadFiles(currentDirectory); + }); + }).start(); + } + + public static boolean deleteFileOrDirectory(File fileOrDirectory) { + if (fileOrDirectory.isDirectory()) { + File[] children = fileOrDirectory.listFiles(); + if (children != null) { + for (File child : children) { + deleteFileOrDirectory(child); + } + } + } + return fileOrDirectory.delete(); + } + + // --- Other methods (FTP, Local Storage, etc.) remain the same --- + + // ... (rest of the file remains the same) + + // Common private static final int REQUEST_CODE_MANAGE_EXTERNAL_STORAGE = 1; private RecyclerView recyclerView; @@ -55,25 +154,6 @@ public class MainActivity extends AppCompatActivity implements FileAdapter.OnIte private FTPClientHelper ftpHelper; private String currentRemotePath; - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - - Toolbar toolbar = findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - - recyclerView = findViewById(R.id.recyclerView); - recyclerView.setLayoutManager(new LinearLayoutManager(this)); - - fileList = new ArrayList<>(); - fileAdapter = new FileAdapter(fileList); - fileAdapter.setOnItemClickListener(this); - fileAdapter.setOnItemLongClickListener(this); - recyclerView.setAdapter(fileAdapter); - - // ... (rest of onCreate remains the same) - } // --- Action Mode & Click Handling --- @@ -123,50 +203,6 @@ public class MainActivity extends AppCompatActivity implements FileAdapter.OnIte } } - private final ActionMode.Callback actionModeCallback = new ActionMode.Callback() { - @Override - public boolean onCreateActionMode(ActionMode mode, Menu menu) { - MenuInflater inflater = mode.getMenuInflater(); - inflater.inflate(R.menu.context_menu_local, menu); - return true; - } - - @Override - public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - return false; // Return false if nothing is done - } - - @Override - public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - int itemId = item.getItemId(); - if (itemId == R.id.action_copy) { - Toast.makeText(MainActivity.this, "Copy clicked", Toast.LENGTH_SHORT).show(); - mode.finish(); - return true; - } else if (itemId == R.id.action_cut) { - Toast.makeText(MainActivity.this, "Cut clicked", Toast.LENGTH_SHORT).show(); - mode.finish(); - return true; - } else if (itemId == R.id.action_delete) { - Toast.makeText(MainActivity.this, "Delete clicked", Toast.LENGTH_SHORT).show(); - mode.finish(); - return true; - } else if (itemId == R.id.action_rename) { - Toast.makeText(MainActivity.this, "Rename clicked", Toast.LENGTH_SHORT).show(); - mode.finish(); - return true; - } - return false; - } - - @Override - public void onDestroyActionMode(ActionMode mode) { - actionMode = null; - fileAdapter.clearSelections(); - } - }; - - // --- Other methods (FTP, Local Storage, etc.) remain the same --- // --- FTP Methods --- private void connectAndLoadFtpFiles() {