move the SelectFolder dialog handling in a separate file

This commit is contained in:
tibbi 2016-09-04 21:57:37 +02:00
parent 4fd309364c
commit 3ed2fc8d8a
2 changed files with 154 additions and 76 deletions

View File

@ -0,0 +1,136 @@
package com.simplemobiletools.filemanager.dialogs;
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import com.simplemobiletools.filemanager.Breadcrumbs;
import com.simplemobiletools.filemanager.R;
import com.simplemobiletools.filemanager.Utils;
import com.simplemobiletools.filemanager.adapters.ItemsAdapter;
import com.simplemobiletools.filemanager.fragments.ItemsFragment;
import com.simplemobiletools.filemanager.models.FileDirItem;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SelectFolderDialog extends DialogFragment {
private static String mPath;
private static ListView mListView;
private static Breadcrumbs mBreadcrumbs;
public static SelectFolderDialog newInstance(String path) {
mPath = path;
return new SelectFolderDialog();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final View view = getActivity().getLayoutInflater().inflate(R.layout.directory_picker, null);
mListView = (ListView) view.findViewById(R.id.directory_picker_list);
mBreadcrumbs = (Breadcrumbs) view.findViewById(R.id.directory_picker_breadcrumbs);
updateItems();
setupBreadcrumbs();
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(getResources().getString(R.string.select_destination));
builder.setView(view);
builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
sendResult();
}
});
builder.setNegativeButton(R.string.cancel, null);
return builder.create();
}
private void updateItems() {
final List<FileDirItem> items = getItems(mPath);
if (!containsDirectory(items)) {
sendResult();
return;
}
Collections.sort(items);
final ItemsAdapter adapter = new ItemsAdapter(getContext(), items);
mListView.setAdapter(adapter);
mBreadcrumbs.setInitialBreadcrumb(mPath);
mListView.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()) {
mPath = item.getPath();
updateItems();
}
}
});
}
private void sendResult() {
Intent intent = new Intent();
intent.putExtra(ItemsFragment.SELECT_FOLDER_PATH, mPath);
getTargetFragment().onActivityResult(ItemsFragment.SELECT_FOLDER_REQUEST, Activity.RESULT_OK, intent);
dismiss();
}
private void setupBreadcrumbs() {
mBreadcrumbs.setListener(new Breadcrumbs.BreadcrumbsListener() {
@Override
public void breadcrumbClicked(int id) {
final FileDirItem item = (FileDirItem) mBreadcrumbs.getChildAt(id).getTag();
mPath = item.getPath();
updateItems();
}
});
}
private List<FileDirItem> getItems(String path) {
final List<FileDirItem> items = new ArrayList<>();
final File base = new File(path);
File[] files = base.listFiles();
if (files != null) {
for (File file : files) {
if (!file.isDirectory())
continue;
final String curPath = file.getAbsolutePath();
final String curName = Utils.getFilename(curPath);
int children = getChildren(file);
long size = file.length();
items.add(new FileDirItem(curPath, curName, file.isDirectory(), children, size));
}
}
return items;
}
private int getChildren(File file) {
if (file.listFiles() == null || !file.isDirectory())
return 0;
return file.listFiles().length;
}
private boolean containsDirectory(List<FileDirItem> items) {
for (FileDirItem item : items) {
if (item.getIsDirectory()) {
return true;
}
}
return false;
}
}

View File

@ -1,5 +1,6 @@
package com.simplemobiletools.filemanager.fragments; package com.simplemobiletools.filemanager.fragments;
import android.app.Activity;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
@ -29,13 +30,13 @@ import android.widget.ListView;
import android.widget.RadioGroup; import android.widget.RadioGroup;
import android.widget.TextView; import android.widget.TextView;
import com.simplemobiletools.filemanager.Breadcrumbs;
import com.simplemobiletools.filemanager.Config; import com.simplemobiletools.filemanager.Config;
import com.simplemobiletools.filemanager.Constants; import com.simplemobiletools.filemanager.Constants;
import com.simplemobiletools.filemanager.R; import com.simplemobiletools.filemanager.R;
import com.simplemobiletools.filemanager.Utils; import com.simplemobiletools.filemanager.Utils;
import com.simplemobiletools.filemanager.adapters.ItemsAdapter; import com.simplemobiletools.filemanager.adapters.ItemsAdapter;
import com.simplemobiletools.filemanager.asynctasks.CopyTask; import com.simplemobiletools.filemanager.asynctasks.CopyTask;
import com.simplemobiletools.filemanager.dialogs.SelectFolderDialog;
import com.simplemobiletools.filemanager.models.FileDirItem; import com.simplemobiletools.filemanager.models.FileDirItem;
import java.io.File; import java.io.File;
@ -56,6 +57,9 @@ public class ItemsFragment extends android.support.v4.app.Fragment
@BindView(R.id.items_swipe_refresh) SwipeRefreshLayout mSwipeRefreshLayout; @BindView(R.id.items_swipe_refresh) SwipeRefreshLayout mSwipeRefreshLayout;
@BindView(R.id.items_holder) CoordinatorLayout mCoordinatorLayout; @BindView(R.id.items_holder) CoordinatorLayout mCoordinatorLayout;
public static final int SELECT_FOLDER_REQUEST = 1;
public static final String SELECT_FOLDER_PATH = "path";
private List<FileDirItem> mItems; private List<FileDirItem> mItems;
private ItemInteractionListener mListener; private ItemInteractionListener mListener;
private List<String> mToBeDeleted; private List<String> mToBeDeleted;
@ -63,6 +67,7 @@ public class ItemsFragment extends android.support.v4.app.Fragment
private String mCopyDestinationPath; private String mCopyDestinationPath;
private Snackbar mSnackbar; private Snackbar mSnackbar;
private AlertDialog mCopyDialog; private AlertDialog mCopyDialog;
private TextView mDestinationView;
private boolean mShowHidden; private boolean mShowHidden;
private int mSelectedItemsCnt; private int mSelectedItemsCnt;
@ -417,8 +422,8 @@ public class ItemsFragment extends android.support.v4.app.Fragment
final TextView source = (TextView) copyView.findViewById(R.id.source); final TextView source = (TextView) copyView.findViewById(R.id.source);
source.setText(mPath + "/"); source.setText(mPath + "/");
final TextView destination = (TextView) copyView.findViewById(R.id.destination); mDestinationView = (TextView) copyView.findViewById(R.id.destination);
destination.setOnClickListener(destinationPicker); mDestinationView.setOnClickListener(destinationPicker);
final int copyString = (itemIndexes.size() == 1) ? R.string.copy_item : R.string.copy_items; final int copyString = (itemIndexes.size() == 1) ? R.string.copy_item : R.string.copy_items;
final AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
@ -432,7 +437,7 @@ public class ItemsFragment extends android.support.v4.app.Fragment
mCopyDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { mCopyDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
final String destinationPath = destination.getText().toString().trim(); final String destinationPath = mDestinationView.getText().toString().trim();
if (destinationPath.equals(getResources().getString(R.string.select_destination))) { if (destinationPath.equals(getResources().getString(R.string.select_destination))) {
Utils.showToast(getContext(), R.string.please_select_destination); Utils.showToast(getContext(), R.string.please_select_destination);
return; return;
@ -515,82 +520,19 @@ 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(final View destinationView) { public void onClick(final View view) {
final View pickerView = getActivity().getLayoutInflater().inflate(R.layout.directory_picker, null); SelectFolderDialog dialog = SelectFolderDialog.newInstance(mCopyDestinationPath);
final ListView pickerList = (ListView) pickerView.findViewById(R.id.directory_picker_list); dialog.setTargetFragment(ItemsFragment.this, SELECT_FOLDER_REQUEST);
final List<FileDirItem> items = getItems(mCopyDestinationPath); dialog.show(getFragmentManager(), "selectFolder");
Collections.sort(items);
final ItemsAdapter adapter = new ItemsAdapter(getContext(), items);
pickerList.setAdapter(adapter);
final Breadcrumbs breadcrumbs = (Breadcrumbs) pickerView.findViewById(R.id.directory_picker_breadcrumbs);
breadcrumbs.setInitialBreadcrumb(mCopyDestinationPath);
breadcrumbs.setListener(new Breadcrumbs.BreadcrumbsListener() {
@Override
public void breadcrumbClicked(int id) {
final FileDirItem item = (FileDirItem) breadcrumbs.getChildAt(id).getTag();
mCopyDestinationPath = item.getPath();
breadcrumbs.setInitialBreadcrumb(mCopyDestinationPath);
final List<FileDirItem> newItems = getItems(mCopyDestinationPath);
Collections.sort(newItems);
adapter.updateItems(newItems);
}
});
final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle(getResources().getString(R.string.select_destination));
builder.setView(pickerView);
builder.setPositiveButton(R.string.ok, null);
builder.setNegativeButton(R.string.cancel, null);
final AlertDialog alertDialog = builder.create();
alertDialog.show();
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
((TextView) destinationView).setText(mCopyDestinationPath);
}
});
alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
final String destText = ((TextView) destinationView).getText().toString().trim();
if (!destText.equals(getString(R.string.select_destination))) {
mCopyDestinationPath = destText;
}
}
});
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()) {
breadcrumbs.addBreadcrumb(item, true);
mCopyDestinationPath = item.getPath();
final List<FileDirItem> newItems = getItems(mCopyDestinationPath);
Collections.sort(newItems);
if (containsDirectory(newItems)) {
adapter.updateItems(newItems);
} else {
alertDialog.dismiss();
((TextView) destinationView).setText(mCopyDestinationPath);
}
}
}
});
} }
}; };
private boolean containsDirectory(List<FileDirItem> items) { @Override
for (FileDirItem item : items) { public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (item.getIsDirectory()) { if (requestCode == SELECT_FOLDER_REQUEST && resultCode == Activity.RESULT_OK && data != null) {
return true; mDestinationView.setText(data.getStringExtra(SELECT_FOLDER_PATH));
}
} }
return false; super.onActivityResult(requestCode, resultCode, data);
} }
@Override @Override