allow moving files and directories
This commit is contained in:
parent
47c106b074
commit
18114f3286
|
@ -90,6 +90,12 @@ public class ItemsAdapter extends BaseAdapter {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateItems(List<FileDirItem> newItems) {
|
||||||
|
mItems.clear();
|
||||||
|
mItems.addAll(newItems);
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
static class ViewHolder {
|
static class ViewHolder {
|
||||||
@BindView(R.id.item_name) TextView name;
|
@BindView(R.id.item_name) TextView name;
|
||||||
@BindView(R.id.item_icon) ImageView icon;
|
@BindView(R.id.item_icon) ImageView icon;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.simplemobiletools.filemanager.fragments;
|
package com.simplemobiletools.filemanager.fragments;
|
||||||
|
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
|
@ -56,6 +57,7 @@ public class ItemsFragment extends android.support.v4.app.Fragment
|
||||||
private ItemInteractionListener mListener;
|
private ItemInteractionListener mListener;
|
||||||
private List<String> mToBeDeleted;
|
private List<String> mToBeDeleted;
|
||||||
private String mPath;
|
private String mPath;
|
||||||
|
private String mCopyDestinationPath;
|
||||||
private Snackbar mSnackbar;
|
private Snackbar mSnackbar;
|
||||||
|
|
||||||
private boolean mShowHidden;
|
private boolean mShowHidden;
|
||||||
|
@ -96,7 +98,8 @@ public class ItemsFragment extends android.support.v4.app.Fragment
|
||||||
|
|
||||||
private void fillItems() {
|
private void fillItems() {
|
||||||
mPath = getArguments().getString(Constants.PATH);
|
mPath = getArguments().getString(Constants.PATH);
|
||||||
final List<FileDirItem> newItems = getItems();
|
mCopyDestinationPath = mPath;
|
||||||
|
final List<FileDirItem> newItems = getItems(mPath);
|
||||||
Collections.sort(newItems);
|
Collections.sort(newItems);
|
||||||
if (mItems != null && newItems.toString().equals(mItems.toString())) {
|
if (mItems != null && newItems.toString().equals(mItems.toString())) {
|
||||||
return;
|
return;
|
||||||
|
@ -115,9 +118,9 @@ public class ItemsFragment extends android.support.v4.app.Fragment
|
||||||
mListener = listener;
|
mListener = listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<FileDirItem> getItems() {
|
private List<FileDirItem> getItems(String path) {
|
||||||
final List<FileDirItem> items = new ArrayList<>();
|
final List<FileDirItem> items = new ArrayList<>();
|
||||||
final File base = new File(mPath);
|
final File base = new File(path);
|
||||||
File[] files = base.listFiles();
|
File[] files = base.listFiles();
|
||||||
for (File file : files) {
|
for (File file : files) {
|
||||||
final String curPath = file.getAbsolutePath();
|
final String curPath = file.getAbsolutePath();
|
||||||
|
@ -390,7 +393,36 @@ public class ItemsFragment extends android.support.v4.app.Fragment
|
||||||
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
|
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
final File destinationDir = new File(destination.getText().toString().trim());
|
||||||
|
if (!destinationDir.exists()) {
|
||||||
|
Utils.showToast(getContext(), R.string.invalid_destination);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<File> itemsToCopy = new ArrayList<>(itemIndexes.size());
|
||||||
|
for (Integer i : itemIndexes) {
|
||||||
|
FileDirItem item = mItems.get(i);
|
||||||
|
itemsToCopy.add(new File(item.getPath()));
|
||||||
|
}
|
||||||
|
|
||||||
|
final RadioGroup radio = (RadioGroup) copyView.findViewById(R.id.dialog_radio_group);
|
||||||
|
if (radio.getCheckedRadioButtonId() == R.id.dialog_radio_copy) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
for (File f : itemsToCopy) {
|
||||||
|
f.renameTo(new File(destinationDir, f.getName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
alertDialog.dismiss();
|
||||||
|
fillItems();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
||||||
|
@Override
|
||||||
|
public void onDismiss(DialogInterface dialog) {
|
||||||
|
mCopyDestinationPath = mPath;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -436,20 +468,13 @@ public class ItemsFragment extends android.support.v4.app.Fragment
|
||||||
|
|
||||||
private View.OnClickListener destinationPicker = new View.OnClickListener() {
|
private View.OnClickListener destinationPicker = new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(final View destinationView) {
|
||||||
final View pickerView = getActivity().getLayoutInflater().inflate(R.layout.directory_picker, null);
|
final View pickerView = getActivity().getLayoutInflater().inflate(R.layout.directory_picker, null);
|
||||||
final ListView pickerList = (ListView) pickerView.findViewById(R.id.directory_picker_list);
|
final ListView pickerList = (ListView) pickerView.findViewById(R.id.directory_picker_list);
|
||||||
final ItemsAdapter adapter = new ItemsAdapter(getContext(), mItems);
|
final List<FileDirItem> items = getItems(mCopyDestinationPath);
|
||||||
|
Collections.sort(items);
|
||||||
|
final ItemsAdapter adapter = new ItemsAdapter(getContext(), items);
|
||||||
pickerList.setAdapter(adapter);
|
pickerList.setAdapter(adapter);
|
||||||
pickerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
|
||||||
final FileDirItem item = mItems.get(position);
|
|
||||||
if (item.getIsDirectory()) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
|
final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
|
||||||
builder.setTitle(getResources().getString(R.string.select_destination));
|
builder.setTitle(getResources().getString(R.string.select_destination));
|
||||||
|
@ -462,12 +487,39 @@ public class ItemsFragment extends android.support.v4.app.Fragment
|
||||||
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
|
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
alertDialog.dismiss();
|
||||||
|
((TextView) destinationView).setText(mCopyDestinationPath);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
pickerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
final FileDirItem item = items.get(position);
|
||||||
|
if (item.getIsDirectory()) {
|
||||||
|
mCopyDestinationPath = item.getPath();
|
||||||
|
final List<FileDirItem> newItems = getItems(mCopyDestinationPath);
|
||||||
|
if (containsDirectory(newItems)) {
|
||||||
|
adapter.updateItems(newItems);
|
||||||
|
} else {
|
||||||
|
alertDialog.dismiss();
|
||||||
|
((TextView) destinationView).setText(mCopyDestinationPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private boolean containsDirectory(List<FileDirItem> items) {
|
||||||
|
for (FileDirItem item : items) {
|
||||||
|
if (item.getIsDirectory()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onTouch(View v, MotionEvent event) {
|
public boolean onTouch(View v, MotionEvent event) {
|
||||||
if (mSnackbar != null && mSnackbar.isShown()) {
|
if (mSnackbar != null && mSnackbar.isShown()) {
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
<string name="source">Source</string>
|
<string name="source">Source</string>
|
||||||
<string name="destination">Destination</string>
|
<string name="destination">Destination</string>
|
||||||
<string name="select_destination">Select destination</string>
|
<string name="select_destination">Select destination</string>
|
||||||
|
<string name="invalid_destination">Could not write to the selected destination</string>
|
||||||
|
|
||||||
<plurals name="items_deleted">
|
<plurals name="items_deleted">
|
||||||
<item quantity="one">1 item deleted</item>
|
<item quantity="one">1 item deleted</item>
|
||||||
|
|
Loading…
Reference in New Issue