feat: 로컬 파일 삭제 기능 구현
This commit is contained in:
@@ -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<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
|
||||
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() {
|
||||
|
||||
Reference in New Issue
Block a user