From 7dcd3ab9470b2379890b6cfed1926e4bf26265d6 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 17 Jul 2016 22:08:04 +0200 Subject: [PATCH] add breadcrumbs to Destination picker dialog too at Copy --- .../filemanager/Breadcrumbs.java | 37 +++++++++--- .../filemanager/activities/MainActivity.java | 4 +- .../filemanager/fragments/ItemsFragment.java | 57 +++++++++++++++---- app/src/main/res/layout/directory_picker.xml | 22 ++++++- app/src/main/res/values/strings.xml | 1 + 5 files changed, 98 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/simplemobiletools/filemanager/Breadcrumbs.java b/app/src/main/java/com/simplemobiletools/filemanager/Breadcrumbs.java index 66e94fe4..f41f9c78 100644 --- a/app/src/main/java/com/simplemobiletools/filemanager/Breadcrumbs.java +++ b/app/src/main/java/com/simplemobiletools/filemanager/Breadcrumbs.java @@ -10,6 +10,8 @@ import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.TextView; +import com.simplemobiletools.filemanager.models.FileDirItem; + public class Breadcrumbs extends LinearLayout implements View.OnClickListener { private LayoutInflater mInflater; private int mDeviceWidth; @@ -96,17 +98,33 @@ public class Breadcrumbs extends LinearLayout implements View.OnClickListener { setMeasuredDimension(parentWidth, calculatedHeight); } - public void setInitialBreadcrumb() { - addBreadcrumb(getResources().getString(R.string.initial_breadcrumb)); + public void setInitialBreadcrumb(String fullPath) { + removeAllViewsInLayout(); + final String[] dirs = fullPath.split("/"); + String currPath = ""; + for (int i = 0; i < dirs.length; i++) { + final String dir = dirs[i]; + currPath += dir + "/"; + if (dir.isEmpty()) + continue; + + final FileDirItem item = new FileDirItem(currPath, dir, true, 0, 0); + addBreadcrumb(item, i > 1); + } } - public void addBreadcrumb(String text) { + public void addBreadcrumb(FileDirItem item, boolean addPrefix) { final View view = mInflater.inflate(R.layout.breadcrumb_item, null, false); - view.setTag(getChildCount()); final TextView textView = (TextView) view.findViewById(R.id.breadcrumb_text); - textView.setText(text); + + String textToAdd = item.getName(); + if (addPrefix) + textToAdd = " -> " + textToAdd; + textView.setText(textToAdd); addView(view); view.setOnClickListener(this); + + view.setTag(item); } public void removeBreadcrumb() { @@ -115,8 +133,13 @@ public class Breadcrumbs extends LinearLayout implements View.OnClickListener { @Override public void onClick(View v) { - if (mListener != null) { - mListener.breadcrumbClicked((Integer) v.getTag()); + final int cnt = getChildCount(); + for (int i = 0; i < cnt; i++) { + if (getChildAt(i) != null && getChildAt(i).equals(v)) { + if (mListener != null) { + mListener.breadcrumbClicked(i); + } + } } } diff --git a/app/src/main/java/com/simplemobiletools/filemanager/activities/MainActivity.java b/app/src/main/java/com/simplemobiletools/filemanager/activities/MainActivity.java index 237f47bd..d6520568 100644 --- a/app/src/main/java/com/simplemobiletools/filemanager/activities/MainActivity.java +++ b/app/src/main/java/com/simplemobiletools/filemanager/activities/MainActivity.java @@ -52,7 +52,7 @@ public class MainActivity extends AppCompatActivity implements ItemsFragment.Ite private void initRootFileManager() { final String path = Environment.getExternalStorageDirectory().toString(); openPath(path); - mBreadcrumbs.setInitialBreadcrumb(); + mBreadcrumbs.setInitialBreadcrumb(path); } private void openPath(String path) { @@ -111,7 +111,7 @@ public class MainActivity extends AppCompatActivity implements ItemsFragment.Ite @Override public void itemClicked(FileDirItem item) { openPath(item.getPath()); - mBreadcrumbs.addBreadcrumb(" -> " + item.getName()); + mBreadcrumbs.addBreadcrumb(item, true); } @Override diff --git a/app/src/main/java/com/simplemobiletools/filemanager/fragments/ItemsFragment.java b/app/src/main/java/com/simplemobiletools/filemanager/fragments/ItemsFragment.java index b4883677..8cfb7848 100644 --- a/app/src/main/java/com/simplemobiletools/filemanager/fragments/ItemsFragment.java +++ b/app/src/main/java/com/simplemobiletools/filemanager/fragments/ItemsFragment.java @@ -29,6 +29,7 @@ import android.widget.ListView; import android.widget.RadioGroup; import android.widget.TextView; +import com.simplemobiletools.filemanager.Breadcrumbs; import com.simplemobiletools.filemanager.Config; import com.simplemobiletools.filemanager.Constants; import com.simplemobiletools.filemanager.R; @@ -125,24 +126,29 @@ public class ItemsFragment extends android.support.v4.app.Fragment final List items = new ArrayList<>(); final File base = new File(path); File[] files = base.listFiles(); - for (File file : files) { - final String curPath = file.getAbsolutePath(); - final String curName = Utils.getFilename(curPath); - if (!mShowHidden && curName.startsWith(".")) - continue; + if (files != null) { + for (File file : files) { + final String curPath = file.getAbsolutePath(); + final String curName = Utils.getFilename(curPath); + if (!mShowHidden && curName.startsWith(".")) + continue; - if (mToBeDeleted.contains(curPath)) - continue; + if (mToBeDeleted.contains(curPath)) + continue; - int children = getChildren(file); - long size = file.length(); + int children = getChildren(file); + long size = file.length(); - items.add(new FileDirItem(curPath, curName, file.isDirectory(), children, size)); + items.add(new FileDirItem(curPath, curName, file.isDirectory(), children, size)); + } } return items; } private int getChildren(File file) { + if (file.listFiles() == null) + return 0; + if (file.isDirectory()) { if (mShowHidden) { return file.listFiles().length; @@ -396,7 +402,13 @@ public class ItemsFragment extends android.support.v4.app.Fragment mCopyDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - final File destinationDir = new File(destination.getText().toString().trim()); + final String destinationPath = destination.getText().toString().trim(); + if (destinationPath.equals(getResources().getString(R.string.select_destination))) { + Utils.showToast(getContext(), R.string.please_select_destination); + return; + } + + final File destinationDir = new File(destinationPath); if (!destinationDir.exists()) { Utils.showToast(getContext(), R.string.invalid_destination); return; @@ -481,6 +493,20 @@ public class ItemsFragment extends android.support.v4.app.Fragment 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 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); @@ -497,13 +523,22 @@ public class ItemsFragment extends android.support.v4.app.Fragment } }); + alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + mCopyDestinationPath = ((TextView) destinationView).getText().toString().trim(); + } + }); + 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 newItems = getItems(mCopyDestinationPath); + Collections.sort(newItems); if (containsDirectory(newItems)) { adapter.updateItems(newItems); } else { diff --git a/app/src/main/res/layout/directory_picker.xml b/app/src/main/res/layout/directory_picker.xml index 996550cc..c881a643 100644 --- a/app/src/main/res/layout/directory_picker.xml +++ b/app/src/main/res/layout/directory_picker.xml @@ -1,6 +1,22 @@ - + android:layout_height="wrap_content" + android:orientation="vertical"> + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a56eaf86..b7d5c512 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -21,6 +21,7 @@ Destination Select destination Could not write to the selected destination + Please select a destination Could not copy the files Copying home