update favorite list when worklow is marked as favorite
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/2d61d928 Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/2d61d928 Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/2d61d928 Branch: refs/heads/master Commit: 2d61d92814fb074c587b13b8aa23a46c61abdd1a Parents: ad22401 Author: larrytech7 <larrya...@gmail.com> Authored: Wed Jul 29 01:20:22 2015 +0100 Committer: larrytech7 <larrya...@gmail.com> Committed: Wed Jul 29 01:20:22 2015 +0100 ---------------------------------------------------------------------- .../adapters/FavoriteWorkflowAdapter.java | 33 +++++++ .../mobile/adapters/WorkflowAdapter.java | 27 ++---- .../mobile/fragments/FavoriteFragment.java | 91 ++++++++++++-------- .../mobile/fragments/WorkflowItemFragment.java | 3 +- .../main/res/layout/fragment_dashboard_main.xml | 5 +- .../main/res/layout/workflow_item_layout.xml | 3 + libs/MaterialDesignLib/MaterialDesignLib.iml | 16 ++++ 7 files changed, 118 insertions(+), 60 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/2d61d928/app/src/main/java/org/apache/taverna/mobile/adapters/FavoriteWorkflowAdapter.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/adapters/FavoriteWorkflowAdapter.java b/app/src/main/java/org/apache/taverna/mobile/adapters/FavoriteWorkflowAdapter.java index 92355c6..e9d7d0e 100644 --- a/app/src/main/java/org/apache/taverna/mobile/adapters/FavoriteWorkflowAdapter.java +++ b/app/src/main/java/org/apache/taverna/mobile/adapters/FavoriteWorkflowAdapter.java @@ -56,6 +56,39 @@ public class FavoriteWorkflowAdapter extends RecyclerView.Adapter<FavoriteWorkfl FViewHolder vh = new FViewHolder(itemview); return vh; } + /** + * Register a new observer to listen for data changes. + * <p/> + * <p>The adapter may publish a variety of events describing specific changes. + * Not all adapters may support all change types and some may fall back to a generic + * {@link android.support.v7.widget.RecyclerView.AdapterDataObserver#onChanged() + * "something changed"} event if more specific data is not available.</p> + * <p/> + * <p>Components registering observers with an adapter are responsible for + * {@link #unregisterAdapterDataObserver(android.support.v7.widget.RecyclerView.AdapterDataObserver) + * unregistering} those observers when finished.</p> + * + * @param observer Observer to register + * @see #unregisterAdapterDataObserver(android.support.v7.widget.RecyclerView.AdapterDataObserver) + */ + @Override + public void registerAdapterDataObserver(RecyclerView.AdapterDataObserver observer) { + super.registerAdapterDataObserver(observer); + //observer.onChanged(); + } + /** + * Unregister an observer currently listening for data changes. + * <p/> + * <p>The unregistered observer will no longer receive events about changes + * to the adapter.</p> + * + * @param observer Observer to unregister + * @see #registerAdapterDataObserver(android.support.v7.widget.RecyclerView.AdapterDataObserver) + */ + @Override + public void unregisterAdapterDataObserver(RecyclerView.AdapterDataObserver observer) { + super.unregisterAdapterDataObserver(observer); + } @Override public void onBindViewHolder(FViewHolder fViewHolder, int i) { http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/2d61d928/app/src/main/java/org/apache/taverna/mobile/adapters/WorkflowAdapter.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/adapters/WorkflowAdapter.java b/app/src/main/java/org/apache/taverna/mobile/adapters/WorkflowAdapter.java index 7ef234e..65598c7 100644 --- a/app/src/main/java/org/apache/taverna/mobile/adapters/WorkflowAdapter.java +++ b/app/src/main/java/org/apache/taverna/mobile/adapters/WorkflowAdapter.java @@ -27,13 +27,10 @@ package org.apache.taverna.mobile.adapters; import android.app.Activity; import android.content.Context; import android.content.Intent; -import android.net.Uri; import android.os.AsyncTask; -import android.preference.PreferenceManager; import android.support.v7.widget.RecyclerView; import android.text.Html; import android.text.util.Linkify; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -46,20 +43,14 @@ import android.widget.Toast; import com.thebuzzmedia.sjxp.rule.IRule; import org.apache.taverna.mobile.R; -import org.apache.taverna.mobile.activities.DashboardMainActivity; import org.apache.taverna.mobile.activities.WorkflowDetailActivity; -import org.apache.taverna.mobile.fragments.FavoriteFragment; import org.apache.taverna.mobile.fragments.workflowdetails.WorkflowdetailFragment; import org.apache.taverna.mobile.tavernamobile.User; import org.apache.taverna.mobile.tavernamobile.Workflow; -import org.apache.taverna.mobile.utils.WorkflowDownloadManager; import org.apache.taverna.mobile.utils.Workflow_DB; -import org.apache.taverna.mobile.utils.xmlparsers.AvatarXMLParser; import org.apache.taverna.mobile.utils.xmlparsers.MyExperimentXmlParserRules; import org.apache.taverna.mobile.utils.xmlparsers.WorkflowDetailParser; -import org.json.JSONException; -import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; @@ -143,27 +134,23 @@ public class WorkflowAdapter extends RecyclerView.Adapter<WorkflowAdapter.ViewHo public void onClick(View view) { ArrayList<Object> mfav = new ArrayList<Object>(); //save current workflow as favorite - mfav.add(wid); mfav.add(author);mfav.add(title);mfav.add(desc_full); mfav.add(SimpleDateFormat.getDateTimeInstance().format(new Date()).toString()); + mfav.add(wid); mfav.add(author);mfav.add(title);mfav.add(desc_full); + mfav.add(SimpleDateFormat.getDateTimeInstance().format(new Date()).toString()); mfav.add(uri); mfav.add(viewHolder.author_name.getText()); - /* - try { - favDB.put(mfav); - } catch (JSONException e) { - e.printStackTrace(); - } - */ - int saved = - favDB.insert(mfav); + int saved = favDB.insert(mfav); + if(saved >0) { Toast.makeText(context, "Workflow marked as favorite", Toast.LENGTH_SHORT).show(); viewHolder.btn_mark_workflow.setCompoundDrawables(context.getResources().getDrawable(android.R.drawable.btn_star_big_on),null,null,null); //refresh fragment since data has changed - FavoriteFragment.newInstance(0); +// FavoriteFragment.newInstance(0).favoriteAdapter.notifyDataSetChanged(); + ((RecyclerView)((Activity) context).findViewById(R.id.favoriteList)).getAdapter().notifyDataSetChanged(); }else if(saved == -1){ Toast.makeText(context,"sorry!, this workflow has already been marked as favorite",Toast.LENGTH_SHORT).show(); }else Toast.makeText(context,"Error!, please try again",Toast.LENGTH_SHORT).show(); + } }); viewHolder.wk_showmore.setText(Html.fromHtml(context.getResources().getString(R.string.seemore))); http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/2d61d928/app/src/main/java/org/apache/taverna/mobile/fragments/FavoriteFragment.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/fragments/FavoriteFragment.java b/app/src/main/java/org/apache/taverna/mobile/fragments/FavoriteFragment.java index 1066d60..4efa332 100644 --- a/app/src/main/java/org/apache/taverna/mobile/fragments/FavoriteFragment.java +++ b/app/src/main/java/org/apache/taverna/mobile/fragments/FavoriteFragment.java @@ -50,15 +50,15 @@ import java.util.List; /** * Created by Larry Akah on 6/6/15. */ -public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateContextMenuListener, RecyclerView.OnClickListener{ +public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateContextMenuListener{ /** * The fragment argument representing the section number for this * fragment. */ private static final String ARG_SECTION_NUMBER = "SECTION_NUMBER"; - private FavoriteWorkflowAdapter favoriteAdapter; + public FavoriteWorkflowAdapter favoriteAdapter; private RecyclerView wFavoriteListView; - // private FavoriteItemSelected favItemListener; + private RecyclerView.AdapterDataObserver dataObserver; public Workflow_DB myWorkflowDb; /** @@ -70,6 +70,7 @@ public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateC Bundle args = new Bundle(); args.putInt(ARG_SECTION_NUMBER, sectionNumber); fragment.setArguments(args); + return fragment; } @@ -79,23 +80,24 @@ public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateC @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); - myWorkflowDb = new Workflow_DB(getActivity(), WorkflowAdapter.WORKFLOW_FAVORITE_KEY); -//TODO Add support for loading all the favorites and adding to the required list - try { - List<ArrayList<Object>> mfavorites = myWorkflowDb.get(); - // ArrayList<Object> m = mydata.get(0); - //retrieval order: workflowid, workflowauthor, workflowtitle, workflowmarkeddate - favoriteAdapter = new FavoriteWorkflowAdapter(getActivity(), mfavorites); - } catch (JSONException e) { - e.printStackTrace(); - } + dataObserver = new RecyclerView.AdapterDataObserver(){ + @Override + public void onChanged() { + super.onChanged(); + // Toast.makeText(getActivity(), "data changed", Toast.LENGTH_SHORT).show(); + setUpFavoriteData(); + setUpListView(); + } + + }; + setUpFavoriteData(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_dashboard_main, container, false); - wFavoriteListView = (RecyclerView)rootView.findViewById(android.R.id.list); + wFavoriteListView = (RecyclerView)rootView.findViewById(R.id.favoriteList); wFavoriteListView.setHasFixedSize(true); wFavoriteListView.setLayoutManager(new LinearLayoutManager(getActivity())); wFavoriteListView.setAdapter(favoriteAdapter); @@ -104,6 +106,26 @@ public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateC } /** + * Prepare the data to be used in the list as favorite items + */ + private void setUpFavoriteData(){ + myWorkflowDb = new Workflow_DB(getActivity(), WorkflowAdapter.WORKFLOW_FAVORITE_KEY); + try { + List<ArrayList<Object>> mfavorites = myWorkflowDb.get(); + favoriteAdapter = new FavoriteWorkflowAdapter(getActivity(), mfavorites); + favoriteAdapter.registerAdapterDataObserver(dataObserver); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + /** + * Populate the listview using the adapter + */ + private void setUpListView(){ + wFavoriteListView.setAdapter(favoriteAdapter); + } + /** * Called when a context menu for the {@code view} is about to be shown. * Unlike {@link #onCreateOptionsMenu}, this will be called every * time the context menu is about to be shown and should be populated for @@ -126,11 +148,12 @@ public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateC */ @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { - super.onCreateContextMenu(menu, v, menuInfo); - menu.add("Select"); - menu.add("Comment ..."); - menu.add("Delete"); + // super.onCreateContextMenu(menu, v, menuInfo); + menu.add("View"); + menu.add("Remove"); menu.setHeaderIcon(R.mipmap.ic_launcher); + menu.setHeaderTitle("Favorite"); + } /** @@ -153,14 +176,12 @@ public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateC @Override public boolean onContextItemSelected(MenuItem item) { String title = (String) item.getTitle(); - if(title.equals("Select")){ - Toast.makeText(getActivity(),"Selected", Toast.LENGTH_SHORT).show(); + if(title.equals("View")){ + Toast.makeText(getActivity(),"View", Toast.LENGTH_SHORT).show(); return true; - }else if (title.equals("Comment ...")){ - Toast.makeText(getActivity(),"Commenting", Toast.LENGTH_SHORT).show(); - return true; - }else if (title.equals("Delete")){ - Toast.makeText(getActivity(),"Deleted", Toast.LENGTH_SHORT).show(); + } + else if (title.equals("Remove")){ + Toast.makeText(getActivity(),"Removing", Toast.LENGTH_SHORT).show(); return true; }else return super.onContextItemSelected(item); @@ -175,18 +196,20 @@ public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateC @Override public void onResume() { super.onResume(); -// wFavoriteListView.setKeepScreenOn(); - wFavoriteListView.setOnClickListener(this); - registerForContextMenu(wFavoriteListView); + //wFavoriteListView.setOnCreateContextMenuListener(this); + //registerForContextMenu(wFavoriteListView); + } /** - * Called when the fragment is no longer attached to its activity. This - * is called after {@link #onDestroy()}. + * Called when the fragment is no longer in use. This is called + * after {@link #onStop()} and before {@link #onDetach()}. */ @Override - public void onDetach() { - super.onDetach(); + public void onDestroy() { + super.onDestroy(); + favoriteAdapter.unregisterAdapterDataObserver(dataObserver); + unregisterForContextMenu(wFavoriteListView); } /** @@ -199,8 +222,4 @@ public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateC } } - @Override - public void onClick(View view) { - Toast.makeText(getActivity(),"Clicked", Toast.LENGTH_SHORT).show(); - } } http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/2d61d928/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowItemFragment.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowItemFragment.java b/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowItemFragment.java index 00e2e32..da12d6a 100644 --- a/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowItemFragment.java +++ b/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowItemFragment.java @@ -104,7 +104,6 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout * The Adapter which will be used to populate the ListView/GridView with * Views. */ - private WorkflowAdapter workflowAdapter; private static WorkflowAdapter searchAdpater; private static View rootView; public static Context cx; @@ -142,7 +141,7 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout // mlist.add(new Workflow(getActivity(),"Testing title","Larry","Ok testing",0,"http://127.0.0.1")); /* mlist.add(new Workflow(getActivity(),"Testing title","Larry","Ok testing",0,"http://127.0.0.1")); */ - workflowAdapter = new WorkflowAdapter(getActivity(), mlist ); + } @Override http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/2d61d928/app/src/main/res/layout/fragment_dashboard_main.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/fragment_dashboard_main.xml b/app/src/main/res/layout/fragment_dashboard_main.xml index 5627944..32081e6 100644 --- a/app/src/main/res/layout/fragment_dashboard_main.xml +++ b/app/src/main/res/layout/fragment_dashboard_main.xml @@ -11,17 +11,18 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="org.apache.taverna.mobile.activities.DashboardMainActivity$PlaceholderFragment" + tools:context="org.apache.taverna.mobile.fragments.FavoriteFragment" android:orientation="vertical" android:padding="2dp"> <android.support.v7.widget.RecyclerView xmlns:recycler_view="http://schemas.android.com/apk/res-auto" - android:id="@android:id/list" + android:id="@+id/favoriteList" android:theme="@style/Theme.AppCompat.Light" android:layout_width="match_parent" android:layout_height="match_parent" http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/2d61d928/app/src/main/res/layout/workflow_item_layout.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/workflow_item_layout.xml b/app/src/main/res/layout/workflow_item_layout.xml index d6c5724..d16cd3c 100644 --- a/app/src/main/res/layout/workflow_item_layout.xml +++ b/app/src/main/res/layout/workflow_item_layout.xml @@ -17,9 +17,11 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + --> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:materialdesign="http://schemas.android.com/apk/res-auto" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" @@ -163,6 +165,7 @@ limitations under the License. android:layout_marginLeft="2dp" android:layout_marginRight="2dp" android:visibility="gone" /> + <Button android:id="@+id/button_mark_workflow" android:layout_width="wrap_content" http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/2d61d928/libs/MaterialDesignLib/MaterialDesignLib.iml ---------------------------------------------------------------------- diff --git a/libs/MaterialDesignLib/MaterialDesignLib.iml b/libs/MaterialDesignLib/MaterialDesignLib.iml new file mode 100644 index 0000000..7b035b9 --- /dev/null +++ b/libs/MaterialDesignLib/MaterialDesignLib.iml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="TavernaMobile2" external.system.module.version="unspecified" type="JAVA_MODULE" version="4"> + <component name="FacetManager"> + <facet type="android-gradle" name="Android-Gradle"> + <configuration> + <option name="GRADLE_PROJECT_PATH" value=":MaterialDesignLib" /> + </configuration> + </facet> + </component> + <component name="NewModuleRootManager" inherit-compiler-output="true"> + <exclude-output /> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> +