From b8d517d3dcd2c4409f4ce95536195599f9434237 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 13 Jul 2016 14:49:16 +0200 Subject: [PATCH] allow opening subdirs --- .../filemanager/activities/MainActivity.java | 33 +++++++++++++++---- .../filemanager/fragments/ItemsFragment.java | 24 +++++++++++--- .../filemanager/models/FileDirItem.java | 2 +- 3 files changed, 47 insertions(+), 12 deletions(-) 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 b471a9be..9c4c5533 100644 --- a/app/src/main/java/com/simplemobiletools/filemanager/activities/MainActivity.java +++ b/app/src/main/java/com/simplemobiletools/filemanager/activities/MainActivity.java @@ -5,6 +5,7 @@ import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Environment; import android.support.v4.app.ActivityCompat; +import android.support.v4.app.FragmentManager; import android.support.v7.app.AppCompatActivity; import com.simplemobiletools.filemanager.Constants; @@ -14,7 +15,7 @@ import com.simplemobiletools.filemanager.fragments.ItemsFragment; import butterknife.ButterKnife; -public class MainActivity extends AppCompatActivity { +public class MainActivity extends AppCompatActivity implements ItemsFragment.ItemInteractionListener { private static final int STORAGE_PERMISSION = 1; @Override @@ -32,20 +33,35 @@ public class MainActivity extends AppCompatActivity { private void tryInitFileManager() { if (Utils.hasStoragePermission(getApplicationContext())) { - initializeFileManager(); + initRootFileManager(); } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION); } } - private void initializeFileManager() { - final Bundle bundle = new Bundle(); + private void initRootFileManager() { final String path = Environment.getExternalStorageDirectory().toString(); + openPath(path); + } + + private void openPath(String path) { + final Bundle bundle = new Bundle(); bundle.putString(Constants.PATH, path); final ItemsFragment fragment = new ItemsFragment(); fragment.setArguments(bundle); - getSupportFragmentManager().beginTransaction().replace(R.id.fragment_holder, fragment).commit(); + fragment.setListener(this); + getSupportFragmentManager().beginTransaction().replace(R.id.fragment_holder, fragment).addToBackStack("").commit(); + } + + @Override + public void onBackPressed() { + final FragmentManager manager = getSupportFragmentManager(); + if (manager.getBackStackEntryCount() == 1) + finish(); + else { + super.onBackPressed(); + } } @Override @@ -54,11 +70,16 @@ public class MainActivity extends AppCompatActivity { if (requestCode == STORAGE_PERMISSION) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - initializeFileManager(); + initRootFileManager(); } else { Utils.showToast(getApplicationContext(), R.string.no_permissions); finish(); } } } + + @Override + public void itemClicked(String path) { + openPath(path); + } } 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 b8b76bbe..ffc8f9ae 100644 --- a/app/src/main/java/com/simplemobiletools/filemanager/fragments/ItemsFragment.java +++ b/app/src/main/java/com/simplemobiletools/filemanager/fragments/ItemsFragment.java @@ -25,6 +25,9 @@ import butterknife.ButterKnife; public class ItemsFragment extends android.support.v4.app.Fragment implements AdapterView.OnItemClickListener { @BindView(R.id.items_list) ListView mListView; + private List mItems; + private ItemInteractionListener mListener; + @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -38,18 +41,22 @@ public class ItemsFragment extends android.support.v4.app.Fragment implements Ad super.onViewCreated(view, savedInstanceState); final String path = getArguments().getString(Constants.PATH); - List items = getItems(path); - Collections.sort(items); + mItems = getItems(path); + Collections.sort(mItems); - final ItemsAdapter adapter = new ItemsAdapter(getContext(), items); + final ItemsAdapter adapter = new ItemsAdapter(getContext(), mItems); mListView.setAdapter(adapter); mListView.setOnItemClickListener(this); } + public void setListener(ItemInteractionListener listener) { + mListener = listener; + } + private List getItems(String path) { final List items = new ArrayList<>(); - final File root = new File(path); - File[] files = root.listFiles(); + 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); @@ -60,6 +67,13 @@ public class ItemsFragment extends android.support.v4.app.Fragment implements Ad @Override public void onItemClick(AdapterView parent, View view, int position, long id) { + final FileDirItem item = mItems.get(position); + if (item.getIsDirectory()) { + mListener.itemClicked(item.getPath()); + } + } + public interface ItemInteractionListener { + void itemClicked(String path); } } diff --git a/app/src/main/java/com/simplemobiletools/filemanager/models/FileDirItem.java b/app/src/main/java/com/simplemobiletools/filemanager/models/FileDirItem.java index a5a8a7ea..ae7787ce 100644 --- a/app/src/main/java/com/simplemobiletools/filemanager/models/FileDirItem.java +++ b/app/src/main/java/com/simplemobiletools/filemanager/models/FileDirItem.java @@ -37,7 +37,7 @@ public class FileDirItem implements Comparable { @Override public String toString() { - return "FileDirItem {" + + return "FileDirItem{" + "name=" + getName() + ", isDirectory=" + getIsDirectory() + ", path=" + getPath() + "}";