Repository: incubator-taverna-mobile Updated Branches: refs/heads/ian_licence_data [created] b05192ba7
Remove empty line at end from build.gradle Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/commit/a3ef86f9 Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/a3ef86f9 Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/a3ef86f9 Branch: refs/heads/ian_licence_data Commit: a3ef86f9f32c2a9aed70225091b6da8c22731e4f Parents: 665531e Author: Ian Dunlop <ian.dun...@manchester.ac.uk> Authored: Tue Oct 11 15:51:14 2016 +0100 Committer: Ian Dunlop <ian.dun...@manchester.ac.uk> Committed: Tue Oct 11 15:51:14 2016 +0100 ---------------------------------------------------------------------- app/build.gradle | 2 +- .../mobile/ui/licences/LicenceFragment.java | 109 +++++++++++++++++++ .../ui/licences/LicenceRecyclerViewAdapter.java | 78 +++++++++++++ .../ui/licences/licence/LicenceContent.java | 80 ++++++++++++++ app/src/main/res/layout/fragment_licence.xml | 20 ++++ .../main/res/layout/fragment_licence_list.xml | 13 +++ 6 files changed, 301 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/a3ef86f9/app/build.gradle ---------------------------------------------------------------------- diff --git a/app/build.gradle b/app/build.gradle index 2282111..051a337 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,4 +81,4 @@ dependencies { compile 'com.anton46:stepsview:0.0.2' -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/a3ef86f9/app/src/main/java/org/apache/taverna/mobile/ui/licences/LicenceFragment.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/licences/LicenceFragment.java b/app/src/main/java/org/apache/taverna/mobile/ui/licences/LicenceFragment.java new file mode 100644 index 0000000..f97be38 --- /dev/null +++ b/app/src/main/java/org/apache/taverna/mobile/ui/licences/LicenceFragment.java @@ -0,0 +1,109 @@ +package org.apache.taverna.mobile.ui.licences; + +import android.content.Context; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import mobile.taverna.apache.org.tavernamobile.R; + +import org.apache.taverna.mobile.ui.licences.dummy.DummyContent; +import org.apache.taverna.mobile.ui.licences.dummy.DummyContent.DummyItem; + +/** + * A fragment representing a list of Items. + * <p/> + * Activities containing this fragment MUST implement the {@link OnListFragmentInteractionListener} + * interface. + */ +public class LicenceFragment extends Fragment { + + // TODO: Customize parameter argument names + private static final String ARG_COLUMN_COUNT = "column-count"; + // TODO: Customize parameters + private int mColumnCount = 1; + private OnListFragmentInteractionListener mListener; + + /** + * Mandatory empty constructor for the fragment manager to instantiate the + * fragment (e.g. upon screen orientation changes). + */ + public LicenceFragment() { + } + + // TODO: Customize parameter initialization + @SuppressWarnings("unused") + public static LicenceFragment newInstance(int columnCount) { + LicenceFragment fragment = new LicenceFragment(); + Bundle args = new Bundle(); + args.putInt(ARG_COLUMN_COUNT, columnCount); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + if (getArguments() != null) { + mColumnCount = getArguments().getInt(ARG_COLUMN_COUNT); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_licence_list, container, false); + + // Set the adapter + if (view instanceof RecyclerView) { + Context context = view.getContext(); + RecyclerView recyclerView = (RecyclerView) view; + if (mColumnCount <= 1) { + recyclerView.setLayoutManager(new LinearLayoutManager(context)); + } else { + recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount)); + } + recyclerView.setAdapter(new MyLicenceRecyclerViewAdapter(DummyContent.ITEMS, mListener)); + } + return view; + } + + + @Override + public void onAttach(Context context) { + super.onAttach(context); + if (context instanceof OnListFragmentInteractionListener) { + mListener = (OnListFragmentInteractionListener) context; + } else { + throw new RuntimeException(context.toString() + + " must implement OnListFragmentInteractionListener"); + } + } + + @Override + public void onDetach() { + super.onDetach(); + mListener = null; + } + + /** + * This interface must be implemented by activities that contain this + * fragment to allow an interaction in this fragment to be communicated + * to the activity and potentially other fragments contained in that + * activity. + * <p/> + * See the Android Training lesson <a href= + * "http://developer.android.com/training/basics/fragments/communicating.html" + * >Communicating with Other Fragments</a> for more information. + */ + public interface OnListFragmentInteractionListener { + // TODO: Update argument type and name + void onListFragmentInteraction(DummyItem item); + } +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/a3ef86f9/app/src/main/java/org/apache/taverna/mobile/ui/licences/LicenceRecyclerViewAdapter.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/licences/LicenceRecyclerViewAdapter.java b/app/src/main/java/org/apache/taverna/mobile/ui/licences/LicenceRecyclerViewAdapter.java new file mode 100644 index 0000000..85ff0b5 --- /dev/null +++ b/app/src/main/java/org/apache/taverna/mobile/ui/licences/LicenceRecyclerViewAdapter.java @@ -0,0 +1,78 @@ +package org.apache.taverna.mobile.ui.licences; + +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import org.apache.taverna.mobile.R; +import org.apache.taverna.mobile.ui.licences.LicenceFragment.OnListFragmentInteractionListener; +import org.apache.taverna.mobile.ui.licences.licence.LicenceContent.DummyItem; + +import java.util.List; + +/** + * {@link RecyclerView.Adapter} that can display a {@link DummyItem} and makes a call to the + * specified {@link OnListFragmentInteractionListener}. + * TODO: Replace the implementation with code for your data type. + */ +public class LicenceRecyclerViewAdapter extends RecyclerView.Adapter<LicenceRecyclerViewAdapter.ViewHolder> { + + private final List<DummyItem> mValues; + private final OnListFragmentInteractionListener mListener; + + public LicenceRecyclerViewAdapter(List<DummyItem> items, OnListFragmentInteractionListener listener) { + mValues = items; + mListener = listener; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.fragment_item, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(final ViewHolder holder, int position) { + holder.mItem = mValues.get(position); + holder.mIdView.setText(mValues.get(position).id); + holder.mContentView.setText(mValues.get(position).content); + + holder.mView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (null != mListener) { + // Notify the active callbacks interface (the activity, if the + // fragment is attached to one) that an item has been selected. + mListener.onListFragmentInteraction(holder.mItem); + } + } + }); + } + + @Override + public int getItemCount() { + return mValues.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder { + public final View mView; + public final TextView mIdView; + public final TextView mContentView; + public DummyItem mItem; + + public ViewHolder(View view) { + super(view); + mView = view; + mIdView = (TextView) view.findViewById(R.id.id); + mContentView = (TextView) view.findViewById(R.id.content); + } + + @Override + public String toString() { + return super.toString() + " '" + mContentView.getText() + "'"; + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/a3ef86f9/app/src/main/java/org/apache/taverna/mobile/ui/licences/licence/LicenceContent.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/licences/licence/LicenceContent.java b/app/src/main/java/org/apache/taverna/mobile/ui/licences/licence/LicenceContent.java new file mode 100644 index 0000000..3b403ff --- /dev/null +++ b/app/src/main/java/org/apache/taverna/mobile/ui/licences/licence/LicenceContent.java @@ -0,0 +1,80 @@ +package org.apache.taverna.mobile.ui.licences.licence; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Helper class for providing sample content for user interfaces created by + * Android template wizards. + * <p> + * TODO: Replace all uses of this class before publishing your app. + */ +public class LicenceContent { + + /** + * An array of sample (dummy) items. + */ + public static final List<LicenceItem> ITEMS = new ArrayList<LicenceItem>(); + private static String licence_json = "[{'library': 'dropbox-android-sdk','version': '1.6.3'}, {'library': 'json_simple','version': '1.1'}, {'libary': 'sjxp','version': '2.2'}, {'library': 'com.android.support:appcompat','version': 'v7:23.3.0'}, {'library': 'com.android.support:cardview','version': 'v7:23.3.0'}, {'library': 'com.android.support:recyclerview','version': 'v7:23.3.0'}, {'library': 'com.android.support:support','version': 'v4:23.3.0'}, {'library': 'com.android.support:design','version': ':23.3.0'}, {'library': 'com.squareup.retrofit2:retrofit','version': '2.0.2'}, {'library': 'com.squareup.retrofit2:adapter-rxjava', 'version': '2.0.2'}, { 'library': 'com.squareup.okhttp3:logging-interceptor', 'version': '3.2.0'}, { 'library': 'com.squareup.retrofit2:converter-simplexml', 'version': '2.0.2'}, { 'library': 'com.jakewharton:butterknife', 'version': '8.0.1'}, { 'library': 'com.jakewharton:butterknife-compiler', 'version': '8.0.1'}, {'library': 'io.reactivex:rxandroid', 'version': '1.2.0'}, {'library': 'io.reactivex:rxjava', 'version': '1.1.4'}, {'library': 'org.simpleframework:simple-xml', 'version': '2.7. +'}, { 'library': 'com.github.bumptech.glide:glide', 'version': '3.6.0'}, { 'libray': 'com.caverock:androidsvg', 'version': '1.2.1'}, { 'library': 'com.github.Raizlabs.DBFlow:dbflow-processor', 'version': '3.0.1'}, { 'library': 'com.github.Raizlabs.DBFlow:dbflow-core', 'version': '3.0.1'}, { 'library': 'com.github.Raizlabs.DBFlow:dbflow', 'version': '3.0.1'}, { 'library': 'com.facebook.stetho:stetho', 'version': '1.3.1'}, { 'library': 'com.facebook.stetho:stetho-okhttp', 'version': '3: 1.3.1'}, { 'library': 'com.github.chrisbanes:PhotoView', 'version': '1.2.6'}, { 'library': 'com.androidsupport:multidex','version': '1.0.0'}, {'library': 'com.google.code.gson:gson','version': '2.7'}, {'library': 'com.squareup.retrofit2:converter-gson','version': '2.0.2'}, {'library': 'com.anton46:stepsview','version': '0.0.2'}]"; + + /** + * A map of sample (dummy) items, by ID. + */ + public static final Map<String, LicenceItem> ITEM_MAP = new HashMap<String, LicenceItem>(); + + private static final int COUNT = 25; + + static { + JSONArray licenceList = null; + try { + licenceList = new JSONArray(licence_json); + } catch (JSONException e) { + e.printStackTrace(); + } + for (int i=0; i < licenceList.length(); i++) { + try { + JSONObject libraryDetails = licenceList.getJSONObject(i); + String libraryName = libraryDetails.getString("library"); + String libraryVersion = libraryDetails.getString("version"); + addItem(createLicenceItem(i, libraryName, libraryVersion)); + } catch (JSONException e) { + e.printStackTrace(); + } + } + } + + private static void addItem(LicenceItem item) { + ITEMS.add(item); + ITEM_MAP.put(item.id, item); + } + + private static LicenceItem createLicenceItem(int position, String name, String version) { + return new LicenceItem(String.valueOf(position), name, version); + } + + /** + * A dummy item representing a piece of content. + */ + public static class LicenceItem { + public final String id; + public final String name; + public final String version; + + public LicenceItem(String id, String name, String version) { + this.id = id; + this.name = name; + this.version = version; + } + + @Override + public String toString() { + return name + " " + version; + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/a3ef86f9/app/src/main/res/layout/fragment_licence.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/fragment_licence.xml b/app/src/main/res/layout/fragment_licence.xml new file mode 100644 index 0000000..ba5b613 --- /dev/null +++ b/app/src/main/res/layout/fragment_licence.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal"> + + <TextView + android:id="@+id/id" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="@dimen/text_margin" + android:textAppearance="?attr/textAppearanceListItem" /> + + <TextView + android:id="@+id/content" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="@dimen/text_margin" + android:textAppearance="?attr/textAppearanceListItem" /> +</LinearLayout> http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/a3ef86f9/app/src/main/res/layout/fragment_licence_list.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/fragment_licence_list.xml b/app/src/main/res/layout/fragment_licence_list.xml new file mode 100644 index 0000000..350829d --- /dev/null +++ b/app/src/main/res/layout/fragment_licence_list.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/list" + android:name="org.apache.taverna.mobile.ui.org.apache.taverna.mobile.ui.licences.LicenceFragment" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_marginLeft="16dp" + android:layout_marginRight="16dp" + app:layoutManager="LinearLayoutManager" + tools:context="org.apache.taverna.mobile.ui.org.apache.taverna.mobile.ui.licences.LicenceFragment" + tools:listitem="@layout/fragment_licence" />