package com.micabytes.gui; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import com.micabytes.R; import com.micabytes.util.StringHandler; import org.jetbrains.annotations.NonNls; import java.io.File; import java.util.ArrayList; import java.util.List; @SuppressWarnings("unused") public class FileNavigationLayout extends LinearLayout implements AdapterView.OnItemClickListener { private final Context context; private FileItemListener itemListener; private final TextView pathLabel; private final ListView listView; private List<String> path; @NonNls private String root = "/"; @NonNls private String current = "/"; public FileNavigationLayout(Context ctx, AttributeSet attrs) { super(ctx, attrs); context = ctx; LayoutInflater layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); layoutInflater.inflate(R.layout.view_file_navigation, this); pathLabel = (TextView) findViewById(R.id.FileNavigationPath); listView = (ListView) findViewById(R.id.FileNavigationList); if (isInEditMode()) return; setFolder(root); } public void setRoot(String rootDir) { root = rootDir; } public void setFileItemListener(FileItemListener l) { itemListener = l; } public void setFolder(String dirPath) { current = dirPath; pathLabel.setText(StringHandler.get(R.string.filenavigation_location, dirPath)); List<String> item = new ArrayList<>(); path = new ArrayList<>(); File f = new File(dirPath); File[] files = f.listFiles(); if (!dirPath.equals(root)) { item.add(root); path.add(root); item.add("../"); path.add(f.getParent()); } for (File file : files) { path.add(file.getPath()); if (file.isDirectory()) item.add(file.getName() + StringHandler.SLASH); else item.add(file.getName()); } setItemList(item); } public void refresh() { setFolder(current); } public void setItemList(List<String> item){ ArrayAdapter<String> fileList = new ArrayAdapter<>(context, R.layout.entry_file_navigation, item); listView.setAdapter(fileList); listView.setOnItemClickListener(this); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { File file = new File(path.get(position)); if (file.isDirectory()) { if (file.canRead()) setFolder(path.get(position)); else { if (itemListener != null) { itemListener.onFileInaccessible(file); } } } else { if (itemListener != null) { itemListener.onFileClicked(file); } } } }