package org.ebookdroid.ui.library.dialogs;
import org.ebookdroid.EBookDroidApp;
import org.sufficientlysecure.viewer.R;
import org.ebookdroid.ui.library.adapters.BrowserAdapter;
import android.app.Activity;
import android.content.Context;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.io.File;
import java.io.FileFilter;
import org.emdev.common.filesystem.DirectoryFilter;
import org.emdev.ui.actions.ActionController;
import org.emdev.ui.actions.ActionDialogBuilder;
import org.emdev.ui.actions.ActionEx;
import org.emdev.ui.actions.ActionMethod;
import org.emdev.ui.actions.IActionController;
import org.emdev.ui.actions.params.AbstractActionParameter;
import org.emdev.utils.LayoutUtils;
public class FolderDlg implements AdapterView.OnItemClickListener {
public static final String SELECTED_FOLDER = "selected";
protected final FileFilter filter;
private BrowserAdapter adapter;
private TextView header;
private ListView filesView;
private final IActionController<FolderDlg> controller;
private final Context context;
private File selected;
private ImageView upButton;
private ImageView homeButton;
public FolderDlg(final IActionController<? extends Activity> controller) {
this.filter = DirectoryFilter.NOT_HIDDEN;
this.context = controller.getManagedComponent();
this.controller = new ActionController<FolderDlg>(controller, this);
}
public void show(final File file, int titleId, final int okActionId) {
final View view = LayoutInflater.from(context).inflate(R.layout.folder_dialog, null);
adapter = new BrowserAdapter(filter);
header = (TextView) view.findViewById(R.id.browsertext);
filesView = (ListView) view.findViewById(R.id.browserview);
upButton = (ImageView) view.findViewById(R.id.browserupfolder);
homeButton = (ImageView) view.findViewById(R.id.browserhome);
upButton.setOnClickListener(controller.getOrCreateAction(R.id.browserupfolder));
homeButton.setOnClickListener(controller.getOrCreateAction(R.id.browserhome));
filesView.setAdapter(adapter);
filesView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_LOW);
filesView.setOnItemClickListener(this);
final ActionDialogBuilder builder = new ActionDialogBuilder(context, controller);
builder.setTitle(titleId);
builder.setView(view);
builder.setPositiveButton(android.R.string.ok, okActionId, new SelectedFolder());
builder.setNegativeButton();
goHome(null);
AlertDialog dlg = builder.show();
LayoutUtils.maximizeWindow(dlg.getWindow());
}
public void show(final File file, int titleId, final int okActionId, final int cancelActionId) {
final View view = LayoutInflater.from(context).inflate(R.layout.folder_dialog, null);
adapter = new BrowserAdapter(filter);
header = (TextView) view.findViewById(R.id.browsertext);
filesView = (ListView) view.findViewById(R.id.browserview);
upButton = (ImageView) view.findViewById(R.id.browserupfolder);
homeButton = (ImageView) view.findViewById(R.id.browserhome);
upButton.setOnClickListener(controller.getOrCreateAction(R.id.browserupfolder));
homeButton.setOnClickListener(controller.getOrCreateAction(R.id.browserhome));
filesView.setAdapter(adapter);
filesView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_LOW);
filesView.setOnItemClickListener(this);
final ActionDialogBuilder builder = new ActionDialogBuilder(context, controller);
builder.setTitle(titleId);
builder.setView(view);
builder.setPositiveButton(android.R.string.ok, okActionId, new SelectedFolder());
builder.setNegativeButton(android.R.string.cancel, cancelActionId);
goHome(null);
AlertDialog dlg = builder.show();
LayoutUtils.maximizeWindow(dlg.getWindow());
}
@ActionMethod(ids = R.id.browserhome)
public void goHome(final ActionEx action) {
if (EBookDroidApp.EXT_STORAGE.exists()) {
setCurrentDir(EBookDroidApp.EXT_STORAGE);
} else {
setCurrentDir(new File("/"));
}
}
@ActionMethod(ids = R.id.browserupfolder)
public void goUp(final ActionEx action) {
final File dir = adapter.getCurrentDirectory();
final File parent = dir != null ? dir.getParentFile() : null;
if (parent != null) {
setCurrentDir(parent);
}
}
public void setCurrentDir(final File newDir) {
final boolean hasParent = newDir.getParentFile() != null;
upButton.setImageResource(hasParent ? R.drawable.browser_actionbar_nav_up_enabled : R.drawable.browser_actionbar_nav_up_disabled);
selected = newDir;
header.setText(newDir.getAbsolutePath());
adapter.setCurrentDirectory(newDir);
}
@Override
public void onItemClick(final AdapterView<?> adapterView, final View view, final int i, final long l) {
final File selected = adapter.getItem(i);
if (selected.isDirectory()) {
setCurrentDir(selected);
}
}
private class SelectedFolder extends AbstractActionParameter {
public SelectedFolder() {
super(SELECTED_FOLDER);
}
@Override
public Object getValue() {
return selected;
}
}
}