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>
+

Reply via email to