Skip to content

Commit 6cb3ca5

Browse files
- NEW: Added "similar diseases" section to disease details page.
- NEW: Added main grid layout options to preferences screen. - BUG: Fixed grid padding/margin issues.
1 parent cdfaa5d commit 6cb3ca5

22 files changed

Lines changed: 437 additions & 55 deletions

app/libs/buntata-client.jar

1.16 KB
Binary file not shown.

app/src/main/java/uk/ac/hutton/ics/buntata/activity/BaseActivity.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package uk.ac.hutton.ics.buntata.activity;
1818

1919
import android.content.*;
20+
import android.content.res.*;
21+
import android.graphics.*;
2022
import android.net.*;
2123
import android.os.*;
2224
import android.provider.*;
@@ -227,4 +229,23 @@ protected boolean isDebugApplication()
227229
String packageName = this.getPackageName();
228230
return packageName != null && packageName.endsWith(".debug");
229231
}
232+
233+
public int getScreenOrientation()
234+
{
235+
Display getOrient = getWindowManager().getDefaultDisplay();
236+
Point size = new Point();
237+
238+
getOrient.getSize(size);
239+
240+
int orientation;
241+
if (size.x < size.y)
242+
{
243+
orientation = Configuration.ORIENTATION_PORTRAIT;
244+
}
245+
else
246+
{
247+
orientation = Configuration.ORIENTATION_LANDSCAPE;
248+
}
249+
return orientation;
250+
}
230251
}

app/src/main/java/uk/ac/hutton/ics/buntata/activity/MainActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ public class MainActivity extends DrawerActivity implements OnFragmentChangeList
5353

5454
private int datasourceId = -1;
5555

56-
private boolean override = false;
57-
private String query = null;
56+
public static boolean override = false;
57+
private String query = null;
5858

5959
@BindView(R.id.main_view_fab)
6060
FloatingActionButton fab;

app/src/main/java/uk/ac/hutton/ics/buntata/activity/NodeDetailsActivity.java

Lines changed: 65 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,15 @@
1717
package uk.ac.hutton.ics.buntata.activity;
1818

1919

20+
import android.content.*;
2021
import android.net.*;
2122
import android.os.*;
2223
import android.support.design.widget.*;
2324
import android.support.v4.view.*;
2425
import android.support.v7.widget.*;
26+
import android.support.v7.widget.Toolbar;
2527
import android.view.*;
28+
import android.widget.*;
2629

2730
import java.util.*;
2831

@@ -45,16 +48,26 @@ public class NodeDetailsActivity extends BaseActivity
4548
public static final String PARAM_DATASOURCE_ID = "datasourceId";
4649
public static final String PARAM_PREFERED_FIRST_MEDIUM = "preferedMediumId";
4750
public static final String PARAM_NODE_ID = "nodeId";
51+
52+
private int datasourceId = -1;
53+
private int nodeId = -1;
54+
4855
@BindView(R.id.node_details_image_pager)
4956
ViewPager pager;
5057
@BindView(R.id.node_details_image_indicator)
5158
CircleIndicator circleIndicator;
5259
@BindView(R.id.node_details_attributes)
53-
RecyclerView recyclerView;
60+
RecyclerView attributeRecyclerView;
5461
@BindView(R.id.node_details_app_bar)
5562
AppBarLayout appBarLayout;
5663
@BindView(R.id.toolbar)
5764
Toolbar toolbar;
65+
@BindView(R.id.node_details_similar_nodes_header)
66+
TextView similarNodesHeader;
67+
@BindView(R.id.node_details_similar_nodes)
68+
RecyclerView similarNodes;
69+
@BindView(R.id.node_details_similar_nodes_layout)
70+
LinearLayout similarNodesLayout;
5871

5972
@Override
6073
protected void onCreate(Bundle savedInstanceState)
@@ -67,8 +80,6 @@ protected void onCreate(Bundle savedInstanceState)
6780
Bundle args = getIntent().getExtras();
6881
Uri data = getIntent().getData();
6982

70-
int datasourceId = -1;
71-
int nodeId = -1;
7283
int preferedMediumId = -1;
7384

7485
/* If this Activity has been called based on deep linking, then get the parameters from the request */
@@ -102,6 +113,7 @@ else if (args != null)
102113

103114
/* Initialize the media manager */
104115
MediaManager mediaManager = new MediaManager(this, datasourceId);
116+
NodeManager nodeManager = new NodeManager(this, datasourceId);
105117

106118
setSupportActionBar(toolbar);
107119

@@ -148,17 +160,60 @@ else if (args != null)
148160
List<BuntataAttributeValueAdvanced> attributeValues = new AttributeValueManager(this, datasourceId).getForNode(nodeId);
149161

150162
/* Set them to the recycler view */
151-
recyclerView.setLayoutManager(new LinearLayoutManager(this));
152-
recyclerView.setAdapter(new AttributeValueVideoAdapter(this, datasourceId, attributeValues, splitByType.get(BuntataMediaType.TYPE_VIDEO)));
163+
attributeRecyclerView.setLayoutManager(new LinearLayoutManager(this));
164+
attributeRecyclerView.setAdapter(new AttributeValueVideoAdapter(this, datasourceId, attributeValues, splitByType.get(BuntataMediaType.TYPE_VIDEO)));
153165

154166
/* Set the separator width */
155-
int valueInPixels = (int) getResources().getDimension(R.dimen.activity_vertical_margin) / 2;
156-
157-
int horizontalMargin = (int) getResources().getDimension(R.dimen.activity_horizontal_margin);
158-
int verticalMargin = (int) getResources().getDimension(R.dimen.activity_vertical_margin);
167+
final int valueInPixels = getResources().getDimensionPixelSize(R.dimen.activity_vertical_margin);
168+
final int horizontalMargin = getResources().getDimensionPixelSize(R.dimen.activity_horizontal_margin);
169+
final int verticalMargin = getResources().getDimensionPixelSize(R.dimen.activity_vertical_margin);
159170

160171
/* Add the item decorator */
161-
recyclerView.addItemDecoration(new GridSpacingItemDecoration(1, horizontalMargin, verticalMargin, valueInPixels));
172+
attributeRecyclerView.addItemDecoration(new GridSpacingItemDecoration(1, horizontalMargin, verticalMargin, valueInPixels / 2));
173+
174+
/* Get all the similar nodes */
175+
final List<BuntataNodeAdvanced> similarNodeList = nodeManager.getSimilarNodes(nodeId);
176+
177+
if (similarNodeList.size() > 0)
178+
{
179+
similarNodesLayout.setVisibility(View.VISIBLE);
180+
181+
/* Wait for the view to fully become visible */
182+
similarNodesLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
183+
{
184+
@Override
185+
public void onGlobalLayout()
186+
{
187+
similarNodesLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
188+
189+
/* Then add the data */
190+
similarNodes.setLayoutManager(new LinearLayoutManager(NodeDetailsActivity.this, LinearLayoutManager.HORIZONTAL, false));
191+
similarNodes.addItemDecoration(new GridSpacingItemDecoration(similarNodeList.size(), horizontalMargin, verticalMargin, valueInPixels / 2));
192+
similarNodes.setAdapter(new NodeAdapter(NodeDetailsActivity.this, similarNodes, datasourceId, -1, similarNodeList)
193+
{
194+
@Override
195+
public void onNodeClicked(View transitionRoot, View title, BuntataMediaAdvanced medium, BuntataNodeAdvanced node)
196+
{
197+
/* Open the details activity */
198+
Intent intent = new Intent(getApplicationContext(), NodeDetailsActivity.class);
199+
200+
/* Pass parameters */
201+
Bundle args = new Bundle();
202+
args.putInt(NodeDetailsActivity.PARAM_NODE_ID, node.getId());
203+
args.putInt(NodeDetailsActivity.PARAM_DATASOURCE_ID, node.getDatasourceId());
204+
args.putInt(NodeDetailsActivity.PARAM_PREFERED_FIRST_MEDIUM, -1);
205+
intent.putExtras(args);
206+
207+
startActivity(intent);
208+
}
209+
});
210+
211+
/* Snap the recyclerview items */
212+
SnapHelper helper = new LinearSnapHelper();
213+
helper.attachToRecyclerView(similarNodes);
214+
}
215+
});
216+
}
162217
}
163218

164219
@Override

app/src/main/java/uk/ac/hutton/ics/buntata/activity/PreferencesActivity.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ public void onCreate(Bundle savedInstanceState)
114114
addPreferencesFromResource(R.xml.prefs);
115115

116116
findPreference(PreferenceUtils.PREFS_SHOW_CHANGELOG).setOnPreferenceClickListener(this);
117+
findPreference(PreferenceUtils.PREFS_COLUMNS_PORTRAIT).setSummary(getString(R.string.preferences_columns_portrait_summary, PreferenceUtils.getPreferenceAsInt(getActivity(), PreferenceUtils.PREFS_COLUMNS_PORTRAIT, 2)));
118+
findPreference(PreferenceUtils.PREFS_COLUMNS_LANDSCAPE).setSummary(getString(R.string.preferences_columns_landscape_summary, PreferenceUtils.getPreferenceAsInt(getActivity(), PreferenceUtils.PREFS_COLUMNS_LANDSCAPE, 3)));
117119
}
118120

119121
@Override
@@ -141,6 +143,14 @@ public void onSharedPreferenceChanged(SharedPreferences pref, String key)
141143
/* Disable GA tracking */
142144
GoogleAnalytics.getInstance(getActivity().getApplicationContext()).setAppOptOut(!PreferenceUtils.getPreferenceAsBoolean(getActivity(), PreferenceUtils.PREFS_GA_OPT_OUT, true));
143145
break;
146+
case PreferenceUtils.PREFS_COLUMNS_PORTRAIT:
147+
findPreference(key).setSummary(getString(R.string.preferences_columns_portrait_summary, PreferenceUtils.getPreferenceAsInt(getActivity(), key, 2)));
148+
MainActivity.override = true;
149+
break;
150+
case PreferenceUtils.PREFS_COLUMNS_LANDSCAPE:
151+
findPreference(key).setSummary(getString(R.string.preferences_columns_landscape_summary, PreferenceUtils.getPreferenceAsInt(getActivity(), key, 3)));
152+
MainActivity.override = true;
153+
break;
144154
}
145155
}
146156

app/src/main/java/uk/ac/hutton/ics/buntata/adapter/GridSpacingItemDecoration.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,19 +71,25 @@ public void getItemOffsets(Rect outRect, View view, RecyclerView parent, Recycle
7171
int x = left + right + (spanCount - 1) * horizontalSpacing;
7272
int y = top + bottom + (maxRow) * verticalSpacing;
7373

74-
int xPad = x / spanCount;
74+
int xPad = x / spanCount / 2;
7575

76+
/* If this is the first AND last column, add the left and right margin */
77+
if (column == 0 && column == spanCount - 1)
78+
{
79+
outRect.left = left;
80+
outRect.right = right;
81+
}
7682
/* If this is the first column, add the left margin, plus a fraction of the right padding */
77-
if (column == 0)
83+
else if (column == 0)
7884
{
7985
outRect.left = left;
80-
outRect.right = xPad - left;
86+
outRect.right = xPad / 2;// Math.max(0, xPad - left);
8187
}
8288
/* If this is the last column, add the right margin, plus a fraction of the left padding */
8389
else if (column == spanCount - 1)
8490
{
8591
outRect.right = right;
86-
outRect.left = xPad - right;
92+
outRect.left = xPad / 2;//Math.max(0, xPad - right);
8793
}
8894
/* Else, it's an item in the middle, add fraction of left and right padding*/
8995
else
@@ -106,5 +112,7 @@ else if (column == spanCount - 1)
106112
{
107113
outRect.bottom = bottom;
108114
}
115+
116+
System.out.println(position + " -> " + outRect);
109117
}
110118
}

app/src/main/java/uk/ac/hutton/ics/buntata/adapter/NodeAdapter.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import android.content.*;
2020
import android.graphics.*;
2121
import android.graphics.drawable.*;
22+
import android.os.*;
2223
import android.support.v4.content.*;
2324
import android.support.v7.graphics.*;
2425
import android.support.v7.widget.*;
@@ -33,6 +34,7 @@
3334
import butterknife.*;
3435
import jhi.buntata.resource.*;
3536
import uk.ac.hutton.ics.buntata.R;
37+
import uk.ac.hutton.ics.buntata.activity.*;
3638
import uk.ac.hutton.ics.buntata.database.entity.*;
3739
import uk.ac.hutton.ics.buntata.database.manager.*;
3840
import uk.ac.hutton.ics.buntata.util.*;
@@ -75,6 +77,8 @@ public void updateDimensions(int columnCount, int left, int right, int padding)
7577
static class ViewHolder extends RecyclerView.ViewHolder
7678
{
7779
View view;
80+
@BindView(R.id.node_view_layout)
81+
CardView layout;
7882
@BindView(R.id.node_view_image)
7983
ImageView image;
8084
@BindView(R.id.node_view_title)
@@ -152,6 +156,19 @@ public void onBindViewHolder(final ViewHolder holder, int position)
152156

153157
/* Get the width of the view */
154158
int viewWidth = (parent.getWidth() - left - right - (columnCount - 1) * padding) / columnCount;
159+
160+
if (context instanceof MainActivity && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
161+
{
162+
holder.image.setTransitionName(context.getString(R.string.transition_node_view));
163+
}
164+
else
165+
{
166+
viewWidth = context.getResources().getDimensionPixelSize(R.dimen.node_image_height) / 2;
167+
holder.image.setMaxHeight(viewWidth);
168+
holder.image.setMaxWidth(viewWidth);
169+
holder.layout.getLayoutParams().width = viewWidth;
170+
}
171+
155172
holder.image.setMinimumHeight(viewWidth);
156173

157174
/* If no image is found */

app/src/main/java/uk/ac/hutton/ics/buntata/database/entity/BuntataDatasourceAdvanced.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ public BuntataDatasourceAdvanced(int id, Date createdOn, Date updatedOn)
3838
super(id, createdOn, updatedOn);
3939
}
4040

41-
public BuntataDatasourceAdvanced(int id, Date createdOn, Date updatedOn, String name, String description, int versionNumber, String dataProvider, String contact, boolean showKeyName, String icon, long size, InstallState state)
41+
public BuntataDatasourceAdvanced(int id, Date createdOn, Date updatedOn, String name, String description, boolean visibility, int versionNumber, String dataProvider, String contact, boolean showKeyName, String icon, long sizeTotal, long sizeNoVideo, InstallState state)
4242
{
43-
super(id, createdOn, updatedOn, name, description, versionNumber, dataProvider, contact, showKeyName, icon, size);
43+
super(id, createdOn, updatedOn, name, description, visibility, versionNumber, dataProvider, contact, showKeyName, icon, sizeTotal, sizeNoVideo);
4444
this.state = state;
4545
}
4646

app/src/main/java/uk/ac/hutton/ics/buntata/database/manager/NodeManager.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import android.content.*;
2020
import android.database.*;
21+
import android.util.*;
2122

2223
import java.text.*;
2324
import java.util.*;
@@ -33,6 +34,8 @@
3334
*/
3435
public class NodeManager extends AbstractManager<BuntataNodeAdvanced>
3536
{
37+
private static final String TAG = NodeManager.class.getCanonicalName();
38+
3639
private static final String[] ALL_FIELDS = {BuntataNode.FIELD_ID, BuntataNode.FIELD_NAME, BuntataNode.FIELD_DESCRIPTION, BuntataNode.FIELD_DATASOURCE_ID, BuntataNode.FIELD_CREATED_ON, BuntataNode.FIELD_UPDATED_ON};
3740

3841
private static Map<String, Set<Integer>> CACHE_FILTER_POSITIVE = new LinkedHashMap<String, Set<Integer>>()
@@ -135,6 +138,46 @@ public boolean hasChildren(int nodeId)
135138
return result;
136139
}
137140

141+
public List<BuntataNodeAdvanced> getSimilarNodes(int sourceId)
142+
{
143+
List<BuntataNodeAdvanced> result = new ArrayList<>();
144+
145+
try
146+
{
147+
open();
148+
149+
Cursor cursor = database.rawQuery("SELECT * FROM nodes WHERE EXISTS (SELECT 1 FROM similarities WHERE (similarities.node_a_id = nodes.id AND similarities.node_b_id = ?) OR (similarities.node_b_id = nodes.id AND similarities.node_a_id = ?)) ORDER BY nodes.name", new String[]{Integer.toString(sourceId), Integer.toString(sourceId)});
150+
cursor.moveToFirst();
151+
while (!cursor.isAfterLast())
152+
{
153+
try
154+
{
155+
BuntataNodeAdvanced node = getDefaultParser().parse(context, datasourceId, new DatabaseInternal.AdvancedCursor(cursor));
156+
node.setHasChildren(hasChildren(node.getId()));
157+
result.add(node);
158+
}
159+
catch (ParseException e)
160+
{
161+
e.printStackTrace();
162+
}
163+
164+
cursor.moveToNext();
165+
}
166+
167+
cursor.close();
168+
}
169+
catch (SQLException e)
170+
{
171+
Log.e(TAG, e.getLocalizedMessage(), e);
172+
}
173+
finally
174+
{
175+
close();
176+
}
177+
178+
return result;
179+
}
180+
138181
public List<BuntataNodeAdvanced> getForParent(int parentId)
139182
{
140183
List<BuntataNodeAdvanced> result = new ArrayList<>();

app/src/main/java/uk/ac/hutton/ics/buntata/fragment/NodeFragment.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import uk.ac.hutton.ics.buntata.adapter.*;
3333
import uk.ac.hutton.ics.buntata.database.entity.*;
3434
import uk.ac.hutton.ics.buntata.database.manager.*;
35+
import uk.ac.hutton.ics.buntata.util.*;
3536

3637
/**
3738
* The {@link NodeFragment} shows the nodes in a grid.
@@ -129,7 +130,8 @@ public void onDestroyView()
129130

130131
private void updateItemDecorator()
131132
{
132-
int columns = getResources().getInteger(R.integer.node_recyclerview_columns);
133+
String columnsPreference = ((BaseActivity) getActivity()).getScreenOrientation() == Configuration.ORIENTATION_LANDSCAPE ? PreferenceUtils.PREFS_COLUMNS_LANDSCAPE : PreferenceUtils.PREFS_COLUMNS_PORTRAIT;
134+
int columns = PreferenceUtils.getPreferenceAsInt(getContext(), columnsPreference, 2);
133135

134136
if (columns > originalList.size())
135137
columns = originalList.size();

0 commit comments

Comments
 (0)