feat: 로컬 파일 삭제 기능 구현

This commit is contained in:
2026-01-05 01:24:38 +09:00
parent 3a82480ecf
commit 1d83d25895

View File

@@ -39,6 +39,105 @@ import java.util.List;
public class MainActivity extends AppCompatActivity implements FileAdapter.OnItemClickListener, FileAdapter.OnItemLongClickListener { 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<FileItem> 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<FileItem> 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 // Common
private static final int REQUEST_CODE_MANAGE_EXTERNAL_STORAGE = 1; private static final int REQUEST_CODE_MANAGE_EXTERNAL_STORAGE = 1;
private RecyclerView recyclerView; private RecyclerView recyclerView;
@@ -55,25 +154,6 @@ public class MainActivity extends AppCompatActivity implements FileAdapter.OnIte
private FTPClientHelper ftpHelper; private FTPClientHelper ftpHelper;
private String currentRemotePath; 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 --- // --- 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 --- // --- FTP Methods ---
private void connectAndLoadFtpFiles() { private void connectAndLoadFtpFiles() {