implementation of search functionality
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/d14f853f Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/d14f853f Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/d14f853f Branch: refs/heads/master Commit: d14f853f4dafc83428e679d25699965ab1c78798 Parents: 0bad5eb Author: Sagar <[email protected]> Authored: Sat Dec 31 21:54:04 2016 +0530 Committer: Sagar <[email protected]> Committed: Sat Dec 31 21:54:04 2016 +0530 ---------------------------------------------------------------------- .../mobile/ui/adapter/WorkflowAdapter.java | 4 + .../mobile/ui/workflow/WorkflowFragment.java | 96 ++++++++++++++++++-- app/src/main/res/values/strings.xml | 3 +- 3 files changed, 96 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/d14f853f/app/src/main/java/org/apache/taverna/mobile/ui/adapter/WorkflowAdapter.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/adapter/WorkflowAdapter.java b/app/src/main/java/org/apache/taverna/mobile/ui/adapter/WorkflowAdapter.java index 977eb7e..7510800 100644 --- a/app/src/main/java/org/apache/taverna/mobile/ui/adapter/WorkflowAdapter.java +++ b/app/src/main/java/org/apache/taverna/mobile/ui/adapter/WorkflowAdapter.java @@ -119,6 +119,10 @@ public class WorkflowAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde return mWorkflowList.get(position) != null ? VIEW_ITEM : VIEW_PROG; } + public Workflow getItem(int position) { + return mWorkflowList != null ? mWorkflowList.get(position) : null; + } + class ViewHolder extends RecyclerView.ViewHolder { http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/d14f853f/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowFragment.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowFragment.java b/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowFragment.java index 397a43c..8a93fa9 100644 --- a/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowFragment.java +++ b/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowFragment.java @@ -19,6 +19,8 @@ package org.apache.taverna.mobile.ui.workflow; +import android.app.SearchManager; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.Snackbar; @@ -27,10 +29,15 @@ import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.SearchView; +import android.text.TextUtils; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ProgressBar; +import android.widget.Toast; import org.apache.taverna.mobile.R; import org.apache.taverna.mobile.data.DataManager; @@ -51,7 +58,9 @@ import butterknife.BindView; import butterknife.ButterKnife; public class WorkflowFragment extends Fragment implements WorkflowMvpView, - RecyclerItemClickListner.OnItemClickListener, SwipeRefreshLayout.OnRefreshListener { + RecyclerItemClickListner.OnItemClickListener, SwipeRefreshLayout.OnRefreshListener, + SearchView.OnQueryTextListener, SearchView + .OnCloseListener { public final String LOG_TAG = getClass().getSimpleName(); @BindView(R.id.rv_workflows) @@ -65,16 +74,20 @@ public class WorkflowFragment extends Fragment implements WorkflowMvpView, private WorkflowPresenter mWorkflowPresenter; private WorkflowAdapter mWorkflowAdapter; + private WorkflowAdapter mSearchWorkflowAdapter; private int mPageNumber = 1; private List<Workflow> mWorkflowList; + private SearchView searchView; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mWorkflowList = new ArrayList<>(); DataManager dataManager = new DataManager(); mWorkflowPresenter = new WorkflowPresenter(dataManager); + setHasOptionsMenu(true); } @Override @@ -184,11 +197,23 @@ public class WorkflowFragment extends Fragment implements WorkflowMvpView, @Override public void onItemClick(View childView, int position) { - if (mWorkflowList.get(position) != null && position != -1) { - Intent intent = new Intent(getActivity(), WorkflowDetailActivity.class); - intent.putExtra(Constants.WORKFLOW_ID, mWorkflowList.get(position).getId()); - intent.putExtra(Constants.WORKFLOW_TITLE, mWorkflowList.get(position).getTitle()); - startActivity(intent); + if (searchView.isIconified()) { + if (mWorkflowAdapter.getItem(position) != null && position != -1) { + Intent intent = new Intent(getActivity(), WorkflowDetailActivity.class); + intent.putExtra(Constants.WORKFLOW_ID, mWorkflowAdapter.getItem(position).getId()); + intent.putExtra(Constants.WORKFLOW_TITLE, mWorkflowAdapter.getItem(position) + .getTitle()); + startActivity(intent); + } + } else { + if (mSearchWorkflowAdapter.getItem(position) != null && position != -1) { + Intent intent = new Intent(getActivity(), WorkflowDetailActivity.class); + intent.putExtra(Constants.WORKFLOW_ID, mSearchWorkflowAdapter.getItem(position) + .getId()); + intent.putExtra(Constants.WORKFLOW_TITLE, mSearchWorkflowAdapter.getItem(position) + .getTitle()); + startActivity(intent); + } } } @@ -196,4 +221,63 @@ public class WorkflowFragment extends Fragment implements WorkflowMvpView, public void onItemLongPress(View childView, int position) { } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context + .SEARCH_SERVICE); + searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); + + searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity() + .getComponentName())); + searchView.setSubmitButtonEnabled(false); + searchView.setOnQueryTextListener(this); + searchView.setOnCloseListener(this); + } + + + private void performSearch(String search) { + mSearchWorkflowAdapter = new WorkflowAdapter(new ArrayList<Workflow>(), + getContext()); + WorkflowAdapter wk = mWorkflowAdapter; + if (!TextUtils.isEmpty(search)) { + if (null != wk) + for (int i = 0; i < wk.getItemCount(); i++) { + Workflow workflow = wk.getItem(i); + if (workflow.getTitle().toLowerCase().contains(search.toLowerCase())) { + mSearchWorkflowAdapter.addWorkflow(workflow); + } + } + + mRecyclerView.swapAdapter(mSearchWorkflowAdapter, true); + if (mSearchWorkflowAdapter.getItemCount() == 0) + + Toast.makeText(getActivity(), getString(R.string.msg_no_workflow_found), Toast + .LENGTH_SHORT).show(); + } else { + mRecyclerView.swapAdapter(mWorkflowAdapter, true); + } + } + + @Override + public boolean onQueryTextSubmit(String query) { + performSearch(query); + searchView.clearFocus(); + return true; + } + + @Override + public boolean onQueryTextChange(String newText) { + performSearch(newText); + return true; + } + + + @Override + public boolean onClose() { + return false; + } + + } http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/d14f853f/app/src/main/res/values/strings.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d063b3f..3b1a0e5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -212,5 +212,6 @@ limitations under the License. <string name="title_nav_about">About</string> <string name="title_nav_my_workflows">My Workflows</string> <string name="title_nav_os_licences">Licence info</string> - <!-- Strings related to Settings --> + <!-- Strings related to message --> + <string name="msg_no_workflow_found">No matching criteria workflow found</string> </resources>
