Skip to content

Commit e0fd5bc

Browse files
committed
Added disable for auto tree node toggle, and test use case
1 parent 121d2fb commit e0fd5bc

File tree

4 files changed

+174
-2
lines changed

4 files changed

+174
-2
lines changed

Diff for: app/src/main/java/com/unnamed/b/atv/sample/activity/MainActivity.java

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.unnamed.b.atv.sample.fragment.CustomViewHolderFragment;
1414
import com.unnamed.b.atv.sample.fragment.FolderStructureFragment;
1515
import com.unnamed.b.atv.sample.fragment.SelectableTreeFragment;
16+
import com.unnamed.b.atv.sample.fragment.TwoDScrollingArrowExpandFragment;
1617
import com.unnamed.b.atv.sample.fragment.TwoDScrollingFragment;
1718

1819
import java.util.ArrayList;
@@ -34,6 +35,7 @@ protected void onCreate(Bundle savedInstanceState) {
3435
listItems.put("Custom Holder Example", CustomViewHolderFragment.class);
3536
listItems.put("Selectable Nodes", SelectableTreeFragment.class);
3637
listItems.put("2d scrolling", TwoDScrollingFragment.class);
38+
listItems.put("Expand with arrow only", TwoDScrollingArrowExpandFragment.class);
3739

3840

3941
final List<String> list = new ArrayList(listItems.keySet());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package com.unnamed.b.atv.sample.fragment;
2+
3+
import android.app.Fragment;
4+
import android.os.Bundle;
5+
import android.text.TextUtils;
6+
import android.view.LayoutInflater;
7+
import android.view.View;
8+
import android.view.ViewGroup;
9+
import android.widget.Toast;
10+
11+
import com.unnamed.b.atv.model.TreeNode;
12+
import com.unnamed.b.atv.sample.R;
13+
import com.unnamed.b.atv.sample.holder.ArrowExpandSelectableHeaderHolder;
14+
import com.unnamed.b.atv.sample.holder.IconTreeItemHolder;
15+
import com.unnamed.b.atv.view.AndroidTreeView;
16+
17+
/**
18+
* Created by Bogdan Melnychuk on 2/12/15 modified by Szigeti Peter 2/2/16.
19+
*/
20+
public class TwoDScrollingArrowExpandFragment extends Fragment implements TreeNode.TreeNodeClickListener{
21+
private static final String NAME = "Very long name for folder";
22+
private AndroidTreeView tView;
23+
24+
@Override
25+
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
26+
View rootView = inflater.inflate(R.layout.fragment_selectable_nodes, null, false);
27+
rootView.findViewById(R.id.status).setVisibility(View.GONE);
28+
ViewGroup containerView = (ViewGroup) rootView.findViewById(R.id.container);
29+
30+
TreeNode root = TreeNode.root();
31+
32+
TreeNode s1 = new TreeNode(new IconTreeItemHolder.IconTreeItem(R.string.ic_folder, "Folder with very long name ")).setViewHolder(
33+
new ArrowExpandSelectableHeaderHolder(getActivity()));
34+
TreeNode s2 = new TreeNode(new IconTreeItemHolder.IconTreeItem(R.string.ic_folder, "Another folder with very long name")).setViewHolder(
35+
new ArrowExpandSelectableHeaderHolder(getActivity()));
36+
37+
fillFolder(s1);
38+
fillFolder(s2);
39+
40+
root.addChildren(s1, s2);
41+
42+
tView = new AndroidTreeView(getActivity(), root);
43+
tView.setDefaultAnimation(true);
44+
tView.setUse2dScroll(true);
45+
tView.setDefaultContainerStyle(R.style.TreeNodeStyleCustom);
46+
tView.setDefaultNodeClickListener(TwoDScrollingArrowExpandFragment.this);
47+
tView.setDefaultViewHolder(ArrowExpandSelectableHeaderHolder.class);
48+
containerView.addView(tView.getView());
49+
tView.setUseAutoToggle(false);
50+
51+
tView.expandAll();
52+
53+
if (savedInstanceState != null) {
54+
String state = savedInstanceState.getString("tState");
55+
if (!TextUtils.isEmpty(state)) {
56+
tView.restoreState(state);
57+
}
58+
}
59+
return rootView;
60+
}
61+
62+
private void fillFolder(TreeNode folder) {
63+
TreeNode currentNode = folder;
64+
for (int i = 0; i < 4; i++) {
65+
TreeNode file = new TreeNode(new IconTreeItemHolder.IconTreeItem(R.string.ic_folder, NAME + " " + i));
66+
currentNode.addChild(file);
67+
currentNode = file;
68+
}
69+
}
70+
71+
@Override
72+
public void onSaveInstanceState(Bundle outState) {
73+
super.onSaveInstanceState(outState);
74+
outState.putString("tState", tView.getSaveState());
75+
}
76+
77+
@Override
78+
public void onClick(TreeNode node, Object value) {
79+
Toast toast = Toast.makeText(getActivity(), ((IconTreeItemHolder.IconTreeItem)value).text, Toast.LENGTH_SHORT);
80+
toast.show();
81+
}
82+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package com.unnamed.b.atv.sample.holder;
2+
3+
import android.content.Context;
4+
import android.view.LayoutInflater;
5+
import android.view.View;
6+
import android.widget.CheckBox;
7+
import android.widget.CompoundButton;
8+
import android.widget.TextView;
9+
10+
import com.github.johnkil.print.PrintView;
11+
import com.unnamed.b.atv.model.TreeNode;
12+
import com.unnamed.b.atv.sample.R;
13+
14+
/**
15+
* Created by Bogdan Melnychuk on 2/15/15, modified by Szigeti Peter 2/2/16.
16+
*/
17+
public class ArrowExpandSelectableHeaderHolder extends TreeNode.BaseNodeViewHolder<IconTreeItemHolder.IconTreeItem> {
18+
private TextView tvValue;
19+
private PrintView arrowView;
20+
private CheckBox nodeSelector;
21+
22+
public ArrowExpandSelectableHeaderHolder(Context context) {
23+
super(context);
24+
}
25+
26+
@Override
27+
public View createNodeView(final TreeNode node, IconTreeItemHolder.IconTreeItem value) {
28+
final LayoutInflater inflater = LayoutInflater.from(context);
29+
final View view = inflater.inflate(R.layout.layout_selectable_header, null, false);
30+
31+
tvValue = (TextView) view.findViewById(R.id.node_value);
32+
tvValue.setText(value.text);
33+
34+
final PrintView iconView = (PrintView) view.findViewById(R.id.icon);
35+
iconView.setIconText(context.getResources().getString(value.icon));
36+
37+
arrowView = (PrintView) view.findViewById(R.id.arrow_icon);
38+
arrowView.setPadding(20,10,10,10);
39+
if (node.isLeaf()) {
40+
arrowView.setVisibility(View.GONE);
41+
}
42+
arrowView.setOnClickListener(new View.OnClickListener() {
43+
@Override
44+
public void onClick(View view) {
45+
tView.toggleNode(node);
46+
}
47+
});
48+
49+
nodeSelector = (CheckBox) view.findViewById(R.id.node_selector);
50+
nodeSelector.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
51+
@Override
52+
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
53+
node.setSelected(isChecked);
54+
for (TreeNode n : node.getChildren()) {
55+
getTreeView().selectNode(n, isChecked);
56+
}
57+
}
58+
});
59+
nodeSelector.setChecked(node.isSelected());
60+
61+
return view;
62+
}
63+
64+
@Override
65+
public void toggle(boolean active) {
66+
arrowView.setIconText(context.getResources().getString(active ? R.string.ic_keyboard_arrow_down : R.string.ic_keyboard_arrow_right));
67+
}
68+
69+
@Override
70+
public void toggleSelectionMode(boolean editModeEnabled) {
71+
nodeSelector.setVisibility(editModeEnabled ? View.VISIBLE : View.GONE);
72+
nodeSelector.setChecked(mNode.isSelected());
73+
}
74+
}

Diff for: library/src/main/java/com/unnamed/b/atv/view/AndroidTreeView.java

+16-2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public class AndroidTreeView {
3636
private boolean mSelectionModeEnabled;
3737
private boolean mUseDefaultAnimation = false;
3838
private boolean use2dScroll = false;
39+
private boolean enableAutoToggle = true;
3940

4041
public AndroidTreeView(Context context) {
4142
mContext = context;
@@ -71,6 +72,14 @@ public boolean is2dScrollEnabled() {
7172
return use2dScroll;
7273
}
7374

75+
public void setUseAutoToggle(boolean enableAutoToggle) {
76+
this.enableAutoToggle = enableAutoToggle;
77+
}
78+
79+
public boolean isAutoToggleEnabled() {
80+
return enableAutoToggle;
81+
}
82+
7483
public void setDefaultViewHolder(Class<? extends TreeNode.BaseNodeViewHolder> viewHolder) {
7584
defaultViewHolderClass = viewHolder;
7685
}
@@ -194,7 +203,7 @@ private void getSaveState(TreeNode root, StringBuilder sBuilder) {
194203
}
195204
}
196205

197-
private void toggleNode(TreeNode node) {
206+
public void toggleNode(TreeNode node) {
198207
if (node.isExpanded()) {
199208
collapseNode(node, false);
200209
} else {
@@ -260,7 +269,9 @@ public void onClick(View v) {
260269
} else if (nodeClickListener != null) {
261270
nodeClickListener.onClick(n, n.getValue());
262271
}
263-
toggleNode(n);
272+
if (enableAutoToggle) {
273+
toggleNode(n);
274+
}
264275
}
265276
});
266277

@@ -272,6 +283,9 @@ public boolean onLongClick(View view) {
272283
} else if (nodeLongClickListener != null) {
273284
return nodeLongClickListener.onLongClick(n, n.getValue());
274285
}
286+
if (enableAutoToggle) {
287+
toggleNode(n);
288+
}
275289
return false;
276290
}
277291
});

0 commit comments

Comments
 (0)