package yuku.atree.demo;
import android.app.*;
import android.os.*;
import android.view.*;
import android.view.ViewGroup.MarginLayoutParams;
import android.widget.*;
import android.widget.AdapterView.OnItemClickListener;
import java.io.*;
import yuku.atree.*;
import yuku.atree.nodes.*;
public class MainActivity extends Activity {
private ListView tree;
private TreeAdapter adapter;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tree = (ListView) findViewById(R.id.aTree);
TreeNode root = getDemoTree();
root = new FileTreeNode("Choose a folder", new File[] {
Environment.getExternalStorageDirectory(),
new File("/"),
});
root.setExpanded(true);
adapter = new TreeAdapter();
adapter.setRoot(root);
adapter.setRootVisible(false);
tree.setAdapter(adapter);
adapter.setTreeListener(tree_listener);
tree.setOnItemClickListener(tree_itemClick);
}
private DemoTreeNode getDemoTree() {
DemoTreeNode root = new DemoTreeNode("root");
root.add(new DemoTreeNode("child 1") {{
add(new DemoTreeNode("grand child 1"));
add(new DemoTreeNode("grand child 2"));
add(new DemoTreeNode("grand child 3"));
setExpanded(true);
}});
root.add(new DemoTreeNode("child 2"));
root.add(new DemoTreeNode("child 3") {{
add(new DemoTreeNode("grand child 4"));
}});
return root;
}
private TreeListener tree_listener = new BaseTreeListener() {
};
private OnItemClickListener tree_itemClick = new OnItemClickListener() {
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TreeNode node = adapter.getItem(position);
node.setExpanded(!node.getExpanded());
adapter.notifyDataSetChanged();
};
};
class DemoTreeNode extends BaseMutableTreeNode {
private final String text;
public DemoTreeNode(String text) {
this.text = text;
}
@Override public View getView(int position, View convertView, ViewGroup parent, int level, TreeNodeIconType iconType, int[] lines) {
View res = convertView != null? convertView: getLayoutInflater().inflate(R.layout.item_node, null);
TextView lText = (TextView) res.findViewById(R.id.lText);
ImageView imgNodeIcon = (ImageView) res.findViewById(R.id.imgNodeIcon);
lText.setText("" + level + " " + text);
MarginLayoutParams lp = (MarginLayoutParams) imgNodeIcon.getLayoutParams();
lp.leftMargin = 20 * level;
return res;
}
}
class FileTreeNode extends BaseFileTreeNode {
private String label;
public FileTreeNode(File file) {
super(file);
}
public FileTreeNode(String label, File[] virtualChildren) {
super(virtualChildren);
this.label = label;
}
@Override public View getView(int position, View convertView, ViewGroup parent, int level, TreeNodeIconType iconType, int[] lines) {
View res = convertView != null ? convertView : getLayoutInflater().inflate(R.layout.item_node, null);
TextView lText = (TextView) res.findViewById(R.id.lText);
ImageView imgNodeIcon = (ImageView) res.findViewById(R.id.imgNodeIcon);
lText.setText(label != null? label: file.getName());
MarginLayoutParams lp = (MarginLayoutParams) imgNodeIcon.getLayoutParams();
lp.leftMargin = (int) (getResources().getDisplayMetrics().density * 20) * (level - 1);
imgNodeIcon.setImageResource(file.isDirectory() ? android.R.drawable.presence_online : android.R.drawable.presence_offline);
return res;
}
@Override protected BaseFileTreeNode generateForFile(File file) {
return new FileTreeNode(file);
}
@Override protected boolean showHidden() {
return false;
}
@Override protected boolean showDirectoriesOnly() {
return true;
}
}
}