Skip to content

Commit f46ef65

Browse files
authored
Merge pull request evrencoskun#375 from MGaetan89/corner_view_visibility
Refactor the corner view visibility
2 parents 4810ec4 + 89ab174 commit f46ef65

File tree

2 files changed

+191
-27
lines changed

2 files changed

+191
-27
lines changed
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
package com.evrencoskun.tableview.test.adapters;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNotNull;
5+
import static org.junit.Assert.assertNull;
6+
import static java.util.Collections.emptyList;
7+
8+
import android.view.View;
9+
10+
import androidx.test.ext.junit.rules.ActivityScenarioRule;
11+
import androidx.test.ext.junit.runners.AndroidJUnit4;
12+
import androidx.test.platform.app.InstrumentationRegistry;
13+
14+
import com.evrencoskun.tableview.TableView;
15+
import com.evrencoskun.tableview.test.TestActivity;
16+
import com.evrencoskun.tableview.test.data.SimpleData;
17+
18+
import org.junit.Before;
19+
import org.junit.Rule;
20+
import org.junit.Test;
21+
import org.junit.runner.RunWith;
22+
23+
@RunWith(AndroidJUnit4.class)
24+
public class AbstractTableAdapterTest {
25+
26+
@Rule
27+
public ActivityScenarioRule<TestActivity> mActivityTestRule =
28+
new ActivityScenarioRule<>(TestActivity.class);
29+
30+
private SimpleData mData;
31+
private TableView mTableView;
32+
private SimpleTestAdapter mAdapter;
33+
34+
@Before
35+
public void before() {
36+
mData = new SimpleData(5);
37+
mTableView = new TableView(InstrumentationRegistry.getInstrumentation().getContext());
38+
39+
mAdapter = new SimpleTestAdapter();
40+
mAdapter.setTableView(mTableView);
41+
}
42+
43+
@Test
44+
public void testCornerViewStateWithDisabledCorner() {
45+
mTableView.setShowCornerView(false);
46+
47+
assertNull(mAdapter.getCornerView());
48+
49+
mAdapter.setAllItems(null, null, null);
50+
51+
assertNull(mAdapter.getCornerView());
52+
53+
mAdapter.setAllItems(mData.getColumnHeaders(), mData.getRowHeaders(), mData.getCells());
54+
55+
assertNotNull(mAdapter.getCornerView());
56+
assertEquals(View.VISIBLE, mAdapter.getCornerView().getVisibility());
57+
58+
mAdapter.setAllItems(emptyList(), emptyList(), emptyList());
59+
60+
assertNotNull(mAdapter.getCornerView());
61+
assertEquals(View.GONE, mAdapter.getCornerView().getVisibility());
62+
}
63+
64+
@Test
65+
public void testCornerViewStateWithEnabledCorners() {
66+
mTableView.setShowCornerView(true);
67+
68+
assertNull(mAdapter.getCornerView());
69+
70+
mAdapter.setAllItems(mData.getColumnHeaders(), mData.getRowHeaders(), mData.getCells());
71+
72+
assertNotNull(mAdapter.getCornerView());
73+
assertEquals(View.VISIBLE, mAdapter.getCornerView().getVisibility());
74+
75+
mAdapter.setAllItems(null, null, null);
76+
77+
assertNotNull(mAdapter.getCornerView());
78+
assertEquals(View.GONE, mAdapter.getCornerView().getVisibility());
79+
80+
// We set some data, that we then reset to empty
81+
mAdapter.setAllItems(mData.getColumnHeaders(), mData.getRowHeaders(), mData.getCells());
82+
mAdapter.setAllItems(emptyList(), emptyList(), emptyList());
83+
84+
assertNotNull(mAdapter.getCornerView());
85+
assertEquals(View.GONE, mAdapter.getCornerView().getVisibility());
86+
87+
mAdapter.setAllItems(mData.getColumnHeaders(), null, null);
88+
89+
assertNotNull(mAdapter.getCornerView());
90+
assertEquals(View.VISIBLE, mAdapter.getCornerView().getVisibility());
91+
92+
mAdapter.setAllItems(null, mData.getRowHeaders(), null);
93+
94+
assertNotNull(mAdapter.getCornerView());
95+
assertEquals(View.GONE, mAdapter.getCornerView().getVisibility());
96+
97+
mAdapter.setAllItems(mData.getColumnHeaders(), mData.getRowHeaders(), null);
98+
99+
assertNotNull(mAdapter.getCornerView());
100+
assertEquals(View.VISIBLE, mAdapter.getCornerView().getVisibility());
101+
}
102+
103+
@Test
104+
public void testCornerViewStateWithToggledCorners() {
105+
mTableView.setShowCornerView(true);
106+
107+
assertNull(mAdapter.getCornerView());
108+
109+
mAdapter.setAllItems(mData.getColumnHeaders(), mData.getRowHeaders(), mData.getCells());
110+
111+
assertNotNull(mAdapter.getCornerView());
112+
assertEquals(View.VISIBLE, mAdapter.getCornerView().getVisibility());
113+
114+
mTableView.setShowCornerView(false);
115+
mAdapter.setAllItems(mData.getColumnHeaders(), mData.getRowHeaders(), mData.getCells());
116+
117+
assertNotNull(mAdapter.getCornerView());
118+
assertEquals(View.VISIBLE, mAdapter.getCornerView().getVisibility());
119+
120+
mAdapter.setAllItems(null, null, null);
121+
122+
assertNotNull(mAdapter.getCornerView());
123+
assertEquals(View.GONE, mAdapter.getCornerView().getVisibility());
124+
125+
// We set some data, that we then reset to empty
126+
mAdapter.setAllItems(mData.getColumnHeaders(), mData.getRowHeaders(), mData.getCells());
127+
mAdapter.setAllItems(emptyList(), emptyList(), emptyList());
128+
129+
assertNotNull(mAdapter.getCornerView());
130+
assertEquals(View.GONE, mAdapter.getCornerView().getVisibility());
131+
132+
mAdapter.setAllItems(mData.getColumnHeaders(), null, null);
133+
134+
assertNotNull(mAdapter.getCornerView());
135+
assertEquals(View.GONE, mAdapter.getCornerView().getVisibility());
136+
137+
mAdapter.setAllItems(null, mData.getRowHeaders(), null);
138+
139+
assertNotNull(mAdapter.getCornerView());
140+
assertEquals(View.GONE, mAdapter.getCornerView().getVisibility());
141+
142+
mAdapter.setAllItems(mData.getColumnHeaders(), mData.getRowHeaders(), null);
143+
144+
assertNotNull(mAdapter.getCornerView());
145+
assertEquals(View.VISIBLE, mAdapter.getCornerView().getVisibility());
146+
}
147+
}

tableview/src/main/java/com/evrencoskun/tableview/adapter/AbstractTableAdapter.java

Lines changed: 44 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -121,41 +121,58 @@ public void setCellItems(@Nullable List<List<C>> cellItems) {
121121
dispatchCellDataSetChangesToListeners(mCellItems);
122122
}
123123

124-
public void setAllItems(@Nullable List<CH> columnHeaderItems, @Nullable List<RH> rowHeaderItems, @Nullable List<List<C>>
125-
cellItems) {
124+
public void setAllItems(
125+
@Nullable List<CH> columnHeaderItems,
126+
@Nullable List<RH> rowHeaderItems,
127+
@Nullable List<List<C>> cellItems
128+
) {
126129
// Set all items
127130
setColumnHeaderItems(columnHeaderItems);
128131
setRowHeaderItems(rowHeaderItems);
129132
setCellItems(cellItems);
130133

131134
// Control corner view
132-
if (mCornerView == null){
133-
if (columnHeaderItems != null && !columnHeaderItems.isEmpty() && mTableView != null) {
134-
// Check to see if the corner view show be shown with column headers
135-
if (!mTableView.getShowCornerView()){
136-
// Don't show corner view if there are column headers but
137-
// No row headers or cell data
138-
// (Original behaviour)
139-
if (!(rowHeaderItems != null && !rowHeaderItems.isEmpty() &&
140-
cellItems != null && !cellItems.isEmpty())) {
141-
// There are no row headers or cell items so no corner view is needed
142-
return;
143-
}
144-
}
145-
// Create corner view
146-
mCornerView = onCreateCornerView((ViewGroup) mTableView);
147-
148-
// Set the corner location
149-
mTableView.addView(mCornerView, new FrameLayout.LayoutParams(mRowHeaderWidth,
150-
mColumnHeaderHeight, mTableView.getGravity()));
135+
updateCornerViewState(columnHeaderItems, rowHeaderItems);
136+
}
137+
138+
private void updateCornerViewState(
139+
@Nullable List<CH> columnHeaderItems,
140+
@Nullable List<RH> rowHeaderItems
141+
) {
142+
boolean hasColumnHeaders = columnHeaderItems != null && !columnHeaderItems.isEmpty();
143+
boolean hasRowHeaders = rowHeaderItems != null && !rowHeaderItems.isEmpty();
144+
boolean showCornerView = mTableView != null && mTableView.getShowCornerView();
145+
boolean needCornerSpace = hasColumnHeaders && (hasRowHeaders || showCornerView);
146+
147+
// Create the corner view if we need it
148+
if (mCornerView == null && needCornerSpace) {
149+
// No TableView is associated with this Adapter, so we can't create the corner view
150+
if (mTableView == null) {
151+
return;
151152
}
153+
154+
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
155+
mRowHeaderWidth,
156+
mColumnHeaderHeight,
157+
mTableView.getGravity()
158+
);
159+
160+
// Create corner view
161+
mCornerView = onCreateCornerView((ViewGroup) mTableView);
162+
163+
// Set the corner location
164+
mTableView.addView(mCornerView, layoutParams);
165+
}
166+
167+
// We don't have any corner view to update
168+
if (mCornerView == null) {
169+
return;
170+
}
171+
172+
if (needCornerSpace) {
173+
mCornerView.setVisibility(View.VISIBLE);
152174
} else {
153-
// Change corner view visibility
154-
if (rowHeaderItems != null && !rowHeaderItems.isEmpty()) {
155-
mCornerView.setVisibility(View.VISIBLE);
156-
} else {
157-
mCornerView.setVisibility(View.GONE);
158-
}
175+
mCornerView.setVisibility(View.GONE);
159176
}
160177
}
161178

0 commit comments

Comments
 (0)