From 0bdb67e780a7bd25037bf0d085c2eafbef34ea94 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 18 Oct 2015 19:43:08 +0100 Subject: [PATCH 01/18] Start Search --- app/app.iml | 3 +- .../main/java/org/openlp/android2/OpenLP.java | 10 +++ .../android2/common/NavigationOptions.java | 1 + .../fragments/NavigationDrawerFragment.java | 5 ++ .../android2/fragments/SearchFragment.java | 87 +++++++++++++++++++ app/src/main/res/layout/fragment_search.xml | 51 +++++++++++ app/src/main/res/values/strings.xml | 13 ++- 7 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/org/openlp/android2/fragments/SearchFragment.java create mode 100644 app/src/main/res/layout/fragment_search.xml diff --git a/app/app.iml b/app/app.iml index 1a4d498..5e29317 100644 --- a/app/app.iml +++ b/app/app.iml @@ -1,5 +1,5 @@ - + @@ -87,6 +87,7 @@ + diff --git a/app/src/main/java/org/openlp/android2/OpenLP.java b/app/src/main/java/org/openlp/android2/OpenLP.java index 5312d6b..357a65f 100644 --- a/app/src/main/java/org/openlp/android2/OpenLP.java +++ b/app/src/main/java/org/openlp/android2/OpenLP.java @@ -42,6 +42,7 @@ import org.openlp.android2.fragments.HomeFragment; import org.openlp.android2.fragments.LiveListFragment; import org.openlp.android2.fragments.LiveWebFragment; import org.openlp.android2.fragments.NavigationDrawerFragment; +import org.openlp.android2.fragments.SearchFragment; import org.openlp.android2.fragments.ServiceListFragment; import org.openlp.android2.fragments.StageWebFragment; @@ -163,6 +164,15 @@ public class OpenLP extends ActionBarActivity toggerContainer(R.id.next_button, View.GONE); toggerContainer(R.id.prev_button, View.GONE); break; + case NavigationOptions.Search: + singleTab(); + fragmentManager.beginTransaction() + .replace(R.id.container, SearchFragment.newInstance()) + .commit(); + mTitle = getString(R.string.action_search); + toggerContainer(R.id.next_button, View.GONE); + toggerContainer(R.id.prev_button, View.GONE); + break; } } diff --git a/app/src/main/java/org/openlp/android2/common/NavigationOptions.java b/app/src/main/java/org/openlp/android2/common/NavigationOptions.java index b231c3c..e2726b4 100644 --- a/app/src/main/java/org/openlp/android2/common/NavigationOptions.java +++ b/app/src/main/java/org/openlp/android2/common/NavigationOptions.java @@ -24,4 +24,5 @@ public class NavigationOptions{ public final static int LiveList = 2; public final static int StageView = 3; public final static int LiveView = 4; + public final static int Search = 5; } diff --git a/app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java b/app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java index 6024cf6..1a30a1e 100644 --- a/app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java +++ b/app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java @@ -152,6 +152,11 @@ public class NavigationDrawerFragment extends Fragment { hm4.put("icon", Integer.toString(R.drawable.ic_ondemand_video_black)); aList.add(hm4); + HashMap hm5 = new HashMap(); + hm4.put("title", getString(R.string.action_search)); + hm4.put("icon", Integer.toString(R.drawable.ic_ondemand_video_black)); + aList.add(hm5); + // Keys used in Hashmap String[] from = {"icon", "title"}; diff --git a/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java b/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java new file mode 100644 index 0000000..c231a29 --- /dev/null +++ b/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java @@ -0,0 +1,87 @@ +package org.openlp.android2.fragments; + +import android.app.Activity; +import android.net.Uri; +import android.os.Bundle; +import android.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.openlp.android2.R; + +/** + * A simple {@link Fragment} subclass. + * Activities that contain this fragment must implement the + * {@link SearchFragment.OnFragmentInteractionListener} interface + * to handle interaction events. + * Use the {@link SearchFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class SearchFragment extends Fragment { + + + private OnFragmentInteractionListener mListener; + + public SearchFragment() { + // Required empty public constructor + } + + public static SearchFragment newInstance() { + SearchFragment fragment = new SearchFragment(); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_search, container, false); + } + + // TODO: Rename method, update argument and hook method into UI event + public void onButtonPressed(Uri uri) { + if (mListener != null) { + mListener.onFragmentInteraction(uri); + } + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + try { + mListener = (OnFragmentInteractionListener) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + + " must implement OnFragmentInteractionListener"); + } + } + + @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. + *

+ * See the Android Training lesson Communicating with Other Fragments for more information. + */ + public interface OnFragmentInteractionListener { + // TODO: Update argument type and name + public void onFragmentInteraction(Uri uri); + } + +} diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml new file mode 100644 index 0000000..81d79de --- /dev/null +++ b/app/src/main/res/layout/fragment_search.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index df5a823..5cd1ee9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -36,7 +36,7 @@ Enable Custom Timeouts Enter Alert Text Allow displays to auto center - Home + Home Unauthorised Access, please enter valid username and password Live List Live View @@ -45,6 +45,14 @@ Next None Port + + Songs + Bibles + Presentations + Images + Media + Custom + Previous Process Service List @@ -54,4 +62,7 @@ Settings Hostname or IP Unable to process request - check network settings + + + Hello blank fragment From bb67f7a7371bb9fedd26d3b52dd1b78a544437c8 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 21 Nov 2015 09:50:04 +0000 Subject: [PATCH 02/18] First call and ui started --- .../fragments/NavigationDrawerFragment.java | 5 +- .../android2/fragments/SearchFragment.java | 88 +++++++++---------- app/src/main/res/layout/fragment_search.xml | 64 ++++++++++---- app/src/main/res/values/strings.xml | 13 +-- 4 files changed, 94 insertions(+), 76 deletions(-) diff --git a/app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java b/app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java index 1a30a1e..132a2ed 100644 --- a/app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java +++ b/app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java @@ -42,7 +42,6 @@ import android.widget.AdapterView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; -import android.widget.Toast; import org.openlp.android2.R; @@ -153,8 +152,8 @@ public class NavigationDrawerFragment extends Fragment { aList.add(hm4); HashMap hm5 = new HashMap(); - hm4.put("title", getString(R.string.action_search)); - hm4.put("icon", Integer.toString(R.drawable.ic_ondemand_video_black)); + hm5.put("title", getString(R.string.action_search)); + hm5.put("icon", Integer.toString(R.drawable.ic_ondemand_video_black)); aList.add(hm5); // Keys used in Hashmap diff --git a/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java b/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java index c231a29..14833b1 100644 --- a/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java +++ b/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java @@ -1,30 +1,28 @@ package org.openlp.android2.fragments; -import android.app.Activity; import android.net.Uri; import android.os.Bundle; -import android.app.Fragment; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; import org.openlp.android2.R; +import org.openlp.android2.api.Api; +import org.openlp.android2.common.JsonHelpers; +import org.openlp.android2.common.OpenLPFragment; +import org.openlp.android2.common.OpenLPHttpClient; /** - * A simple {@link Fragment} subclass. - * Activities that contain this fragment must implement the - * {@link SearchFragment.OnFragmentInteractionListener} interface - * to handle interaction events. - * Use the {@link SearchFragment#newInstance} factory method to - * create an instance of this fragment. + */ -public class SearchFragment extends Fragment { +public class SearchFragment extends OpenLPFragment { - - private OnFragmentInteractionListener mListener; + private final String LOG_TAG = SearchFragment.class.getName(); public SearchFragment() { - // Required empty public constructor + Log.d(LOG_TAG, "Constructor"); } public static SearchFragment newInstance() { @@ -37,51 +35,49 @@ public class SearchFragment extends Fragment { super.onCreate(savedInstanceState); } - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_search, container, false); - } - - // TODO: Rename method, update argument and hook method into UI event - public void onButtonPressed(Uri uri) { - if (mListener != null) { - mListener.onFragmentInteraction(uri); - } + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + context = getActivity(); + updateUrl = Api.SERVICE_LIST; + httpClient = new OpenLPHttpClient(context); + return super.onCreateView(inflater, container, savedInstanceState); } @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - try { - mListener = (OnFragmentInteractionListener) activity; - } catch (ClassCastException e) { - throw new ClassCastException(activity.toString() - + " must implement OnFragmentInteractionListener"); - } + public void onResume() { + super.onResume(); + Log.d(LOG_TAG, "Resuming..."); + triggerTextRequest(Api.SEARCHABLE_PLUGINS); + Log.d(LOG_TAG, "Resumed..."); } @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. - *

- * See the Android Training lesson Communicating with Other Fragments for more information. - */ - public interface OnFragmentInteractionListener { - // TODO: Update argument type and name - public void onFragmentInteraction(Uri uri); + public void manageResponse(String response, boolean notInError) { + if (calledURL.equals(updateUrl)) { + populateTabDisplay(response); + }else { + processUpdate(response, notInError); + } + } + + private void populateTabDisplay(String response){ + int a = 1; + } + + public void itemClicked(int position) { + try { + String request = JsonHelpers.createRequestJSON("id", Integer.toString(position)); + triggerTextRequest(String.format("%s%s", Api.SERVICE_SET, request)); + Log.d(LOG_TAG, String.format("Setting list data. apiBase(%s), position(%s)", + Api.SERVICE_SET, position)); + } catch (JsonHelpers.JSONHandlerException e) { + e.printStackTrace(); + Toast.makeText(context, "Request Failed", Toast.LENGTH_SHORT).show(); + } } } diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index 81d79de..143cf4f 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -2,26 +2,37 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="org.openlp.android2.fragments.SearchFragment"> + tools:context="org.openlp.android2.fragments.SearchFragment" + android:id="@+id/search_layout"> + android:layout_gravity="center_horizontal|top" + android:weightSum="1"> + + - + android:weightSum="1"> + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5cd1ee9..d1fd299 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -29,7 +29,7 @@ Select the required display Display Desktop background Allow the selected item to scroll to the centre of the list - Show Live display + Live display Display Setting Display Black only Display Theme only @@ -45,14 +45,6 @@ Next None Port - - Songs - Bibles - Presentations - Images - Media - Custom - Previous Process Service List @@ -62,7 +54,4 @@ Settings Hostname or IP Unable to process request - check network settings - - - Hello blank fragment From c9f8413f163f172e4cd155b40df52b7e3dc725d3 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 21 Nov 2015 12:42:14 +0000 Subject: [PATCH 03/18] we have dropdown --- .../android2/fragments/SearchFragment.java | 97 +++++++++++-- app/src/main/res/layout/fragment_search.xml | 135 +++++++++--------- 2 files changed, 149 insertions(+), 83 deletions(-) diff --git a/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java b/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java index 14833b1..1c50103 100644 --- a/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java +++ b/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java @@ -1,25 +1,53 @@ package org.openlp.android2.fragments; -import android.net.Uri; +import android.app.Fragment; +import android.content.Context; import android.os.Bundle; +import android.preference.PreferenceManager; +import android.text.Html; import android.util.Log; +import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListAdapter; +import android.widget.SimpleAdapter; +import android.widget.Spinner; +import android.widget.TextView; import android.widget.Toast; +import com.loopj.android.http.AsyncHttpClient; +import com.loopj.android.http.TextHttpResponseHandler; + +import org.apache.http.Header; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; import org.openlp.android2.R; import org.openlp.android2.api.Api; import org.openlp.android2.common.JsonHelpers; -import org.openlp.android2.common.OpenLPFragment; + import org.openlp.android2.common.OpenLPHttpClient; +import java.util.ArrayList; +import java.util.List; + /** */ -public class SearchFragment extends OpenLPFragment { +public class SearchFragment extends Fragment { private final String LOG_TAG = SearchFragment.class.getName(); + private Spinner spinner; + private static AsyncHttpClient client = new AsyncHttpClient(); + public Context context; + protected String calledURL; + protected OpenLPHttpClient httpClient; + protected String updateUrl; public SearchFragment() { Log.d(LOG_TAG, "Constructor"); @@ -33,21 +61,25 @@ public class SearchFragment extends OpenLPFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { context = getActivity(); - updateUrl = Api.SERVICE_LIST; + updateUrl = Api.SEARCHABLE_PLUGINS; httpClient = new OpenLPHttpClient(context); - return super.onCreateView(inflater, container, savedInstanceState); + View view = inflater.inflate(R.layout.fragment_search, container, false); + spinner = (Spinner)view.findViewById(R.id.search_spinner); + triggerTextRequest(Api.SEARCHABLE_PLUGINS); + //spinner.setOnItemSelectedListener(new MyOnItemSelectedListener()); + return view; } @Override public void onResume() { super.onResume(); Log.d(LOG_TAG, "Resuming..."); - triggerTextRequest(Api.SEARCHABLE_PLUGINS); + //triggerTextRequest(Api.SEARCHABLE_PLUGINS); Log.d(LOG_TAG, "Resumed..."); } @@ -58,16 +90,35 @@ public class SearchFragment extends OpenLPFragment { public void manageResponse(String response, boolean notInError) { if (calledURL.equals(updateUrl)) { - populateTabDisplay(response); - }else { - processUpdate(response, notInError); + populatePluginList(response); + } else { + //processUpdate(response, notInError); } } - private void populateTabDisplay(String response){ - int a = 1; + private void populatePluginList(String response) { + Log.i(LOG_TAG, "populatePluginList - entry"); + List categories = new ArrayList(); + + try { + JSONArray items = new JSONObject(response).getJSONObject("results").getJSONArray("items"); + for (int i = 0; i < items.length(); ++i) { + JSONArray item = items.getJSONArray(i); + categories.add(item.get(1).toString()); + } + } catch (JSONException e) { + Log.e(LOG_TAG, response); + e.printStackTrace(); + } + ArrayAdapter LTRadapter = new ArrayAdapter(getActivity(), + android.R.layout.simple_spinner_item, categories); + LTRadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinner.setAdapter(LTRadapter); + + Log.i(LOG_TAG, "populatePluginList - exit"); } + public void itemClicked(int position) { try { String request = JsonHelpers.createRequestJSON("id", Integer.toString(position)); @@ -79,5 +130,27 @@ public class SearchFragment extends OpenLPFragment { Toast.makeText(context, "Request Failed", Toast.LENGTH_SHORT).show(); } } + protected void triggerTextRequest(String url) { + calledURL = url; + Log.d(LOG_TAG, "Trigger Request for url " + url); + String callurl = String.format("%s%s", httpClient.getAbsoluteUrl(client), url ); + client.get(callurl, null, new TextHttpResponseHandler() { + @Override + public void onSuccess(int statusCode, Header[] headers, String responseString) { + // called when response HTTP status is "200 OK" + manageResponse(responseString, true); + } + @Override + public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { + // called when response HTTP status is "4XX" (eg. 401, 403, 404) + if (statusCode == 401) { + Toast.makeText(context, R.string.httpreturn_unauthorised, Toast.LENGTH_LONG).show(); + } else { + Toast.makeText(context, R.string.unable, Toast.LENGTH_LONG).show(); + } + manageResponse(responseString, false); + } + }); + } } diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index 143cf4f..e1324d3 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -1,85 +1,78 @@ - + + - - + android:layout_gravity="center_horizontal|top" + android:weightSum="1"> - + android:text="Select Plugin" + android:id="@+id/search_title" + android:textAppearance="?android:attr/textAppearanceMedium" /> - - - - - - - - - - - - - - - - - - - - + android:id="@+id/search_spinner" + android:layout_weight="0.58" /> + - + + + + + + + + + + + + + + + + From 663bf6f55e13c3f6f5a9bf642134bd2d905389e0 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 21 Nov 2015 15:32:03 +0000 Subject: [PATCH 04/18] More styling --- app/app.iml | 11 ++------- .../android2/fragments/SearchFragment.java | 6 ++--- app/src/main/res/layout/fragment_search.xml | 24 ++++++++++++------- .../main/res/layout/spinner_dropdown_item.xml | 11 +++++++++ app/src/main/res/layout/spinner_list_item.xml | 11 +++++++++ 5 files changed, 43 insertions(+), 20 deletions(-) create mode 100644 app/src/main/res/layout/spinner_dropdown_item.xml create mode 100644 app/src/main/res/layout/spinner_list_item.xml diff --git a/app/app.iml b/app/app.iml index 5e29317..f941dc1 100644 --- a/app/app.iml +++ b/app/app.iml @@ -65,27 +65,20 @@ - - - - - - - - - + + diff --git a/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java b/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java index 1c50103..8db1bb7 100644 --- a/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java +++ b/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java @@ -2,6 +2,7 @@ package org.openlp.android2.fragments; import android.app.Fragment; import android.content.Context; +import android.graphics.Color; import android.os.Bundle; import android.preference.PreferenceManager; import android.text.Html; @@ -111,10 +112,9 @@ public class SearchFragment extends Fragment { e.printStackTrace(); } ArrayAdapter LTRadapter = new ArrayAdapter(getActivity(), - android.R.layout.simple_spinner_item, categories); - LTRadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + R.layout.spinner_list_item, categories); + LTRadapter.setDropDownViewResource(R.layout.spinner_dropdown_item); spinner.setAdapter(LTRadapter); - Log.i(LOG_TAG, "populatePluginList - exit"); } diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index e1324d3..843ea79 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -7,7 +7,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_horizontal|top" - android:weightSum="1"> + android:weightSum="1" + android:paddingLeft="15dp"> + android:textAppearance="?android:attr/textAppearanceLarge" + android:paddingLeft="30dp" + android:paddingRight="30dp"/> + android:layout_weight="0.4" + android:textAppearance="?android:attr/textAppearanceLarge"/> - + android:layout_gravity="center_horizontal" + android:layout_weight="0.07" /> @@ -47,9 +53,11 @@ + android:id="@+id/search_value_desc" + android:paddingLeft="30dp" + android:paddingRight="30dp"/> + \ No newline at end of file diff --git a/app/src/main/res/layout/spinner_list_item.xml b/app/src/main/res/layout/spinner_list_item.xml new file mode 100644 index 0000000..d76b839 --- /dev/null +++ b/app/src/main/res/layout/spinner_list_item.xml @@ -0,0 +1,11 @@ + + \ No newline at end of file From 51a9a216d93de93a159e77de6e7535002a02d7ad Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 21 Nov 2015 16:50:05 +0000 Subject: [PATCH 05/18] Build search request --- .../openlp/android2/common/JsonHelpers.java | 14 ++++++ .../android2/fragments/SearchFragment.java | 50 +++++++++++++++---- app/src/main/res/layout/fragment_search.xml | 12 ++--- 3 files changed, 57 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/org/openlp/android2/common/JsonHelpers.java b/app/src/main/java/org/openlp/android2/common/JsonHelpers.java index a46ac09..3505006 100644 --- a/app/src/main/java/org/openlp/android2/common/JsonHelpers.java +++ b/app/src/main/java/org/openlp/android2/common/JsonHelpers.java @@ -45,6 +45,20 @@ public class JsonHelpers { } } + public static String createSearchJSON(String key, String value) throws JSONHandlerException { + try { + String responseJSON; + responseJSON = new JSONStringer().object().key(key).value(value) + .endObject().toString(); + responseJSON = URLEncoder.encode(responseJSON, "UTF-8"); + return responseJSON; + } catch (JSONException e) { + throw new JSONHandlerException(e); + } catch (UnsupportedEncodingException e) { + throw new JSONHandlerException(e); + } + } + public static class JSONHandlerException extends Exception { private static final long serialVersionUID = -6772307308404816615L; diff --git a/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java b/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java index 8db1bb7..993e4ce 100644 --- a/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java +++ b/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java @@ -8,11 +8,15 @@ import android.preference.PreferenceManager; import android.text.Html; import android.util.Log; import android.util.TypedValue; +import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; +import android.widget.EditText; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.ListAdapter; @@ -72,16 +76,30 @@ public class SearchFragment extends Fragment { View view = inflater.inflate(R.layout.fragment_search, container, false); spinner = (Spinner)view.findViewById(R.id.search_spinner); triggerTextRequest(Api.SEARCHABLE_PLUGINS); - //spinner.setOnItemSelectedListener(new MyOnItemSelectedListener()); - return view; - } - @Override - public void onResume() { - super.onResume(); - Log.d(LOG_TAG, "Resuming..."); - //triggerTextRequest(Api.SEARCHABLE_PLUGINS); - Log.d(LOG_TAG, "Resumed..."); + // Add search listener to text field + EditText editText = (EditText)view.findViewById(R.id.search_text); + editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_SEARCH) { + // Now close the keyboard as finished with + View view = getActivity().getCurrentFocus(); + if (view != null) { + InputMethodManager imm = + (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + String text = spinner.getSelectedItem().toString(); + String text1 = v.getText().toString(); + Toast.makeText(context, "Search Called " + text + " " + text1, Toast.LENGTH_SHORT).show(); + requestSearch(spinner.getSelectedItem().toString(), v.getText().toString()); + return true; + } + return false; + } + }); + return view; } @Override @@ -118,7 +136,6 @@ public class SearchFragment extends Fragment { Log.i(LOG_TAG, "populatePluginList - exit"); } - public void itemClicked(int position) { try { String request = JsonHelpers.createRequestJSON("id", Integer.toString(position)); @@ -153,4 +170,17 @@ public class SearchFragment extends Fragment { }); } + public void requestSearch(String plugin, String text) { + updateUrl = Api.SEARCH_PLUGIN_FORMATTED; + try { + String request = JsonHelpers.createSearchJSON("data", text); + String url = String.format(Api.SEARCH_PLUGIN_FORMATTED, plugin); + triggerTextRequest(String.format("%s%s", url, request)); + Log.d(LOG_TAG, String.format("Search request. apiBase(%s), text(%s)", plugin, text)); + } catch (JsonHelpers.JSONHandlerException e) { + e.printStackTrace(); + Toast.makeText(context, "Search Request Failed", Toast.LENGTH_SHORT).show(); + } + } + } diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index 843ea79..fa1fc6f 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -33,14 +33,6 @@ android:layout_weight="0.4" android:textAppearance="?android:attr/textAppearanceLarge"/> -