← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~trb143/openlp/android_fixes into lp:openlp/android2

 

Tim Bentley has proposed merging lp:~trb143/openlp/android_fixes into lp:openlp/android2.

Requested reviews:
  Raoul Snyman (raoul-snyman)

For more details, see:
https://code.launchpad.net/~trb143/openlp/android_fixes/+merge/310576

Version 6 release
-- 
Your team OpenLP Core is subscribed to branch lp:openlp/android2.
=== modified file 'app/build.gradle'
--- app/build.gradle	2016-01-11 20:02:36 +0000
+++ app/build.gradle	2016-11-10 19:36:50 +0000
@@ -1,17 +1,16 @@
 apply plugin: 'com.android.application'
-
 project.archivesBaseName = 'OpenLP'
-
 android {
-    compileSdkVersion 22
-    buildToolsVersion "21.1.2"
+    compileSdkVersion 25
+    buildToolsVersion "25"
 
     defaultConfig {
         applicationId "org.openlp.android2"
-        minSdkVersion 15
-        targetSdkVersion 22
-        versionCode 5
+        minSdkVersion 16
+        targetSdkVersion 25
+        versionCode 6
         versionName "2.0"
+        vectorDrawables.useSupportLibrary = true
     }
     android {
         lintOptions {
@@ -19,6 +18,9 @@
         }
     }
     buildTypes {
+        debug {
+            debuggable true
+        }
         release {
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
@@ -26,20 +28,15 @@
     }
     testOptions {
         unitTests.returnDefaultValues = true
+    }
+
+    dependencies {
+        compile fileTree(include: ['*.jar'], dir: 'libs')
+        compile 'com.android.support:appcompat-v7:25.0.0'
+        compile 'com.android.support:support-v4:25.0.0'
+        compile 'com.android.support:design:25.0.0'
+    }
 }
-
 dependencies {
-    compile fileTree(include: ['*.jar'], dir: 'libs')
-    compile 'com.android.support:appcompat-v7:22.2.1'
-    compile 'com.android.support:support-v4:22.2.1'
-    compile 'com.android.support:design:22.2.1'
-    compile 'com.loopj.android:android-async-http:1.4.6'
-    testCompile 'junit:junit:4.12'
-    testCompile 'org.easytesting:fest:1.0.16'
-    testCompile 'com.squareup:fest-android:1.0.8'
-    testCompile('org.robolectric:robolectric:3.0-rc2') {
-        exclude group: 'commons-logging', module: 'commons-logging'
-        exclude group: 'org.apache.httpcomponents', module: 'httpclient'
-    }
-}
+    compile files('libs/classes.jar')
 }
\ No newline at end of file

=== added file 'app/libs/classes.jar'
Binary files app/libs/classes.jar	1970-01-01 00:00:00 +0000 and app/libs/classes.jar	2016-11-10 19:36:50 +0000 differ
=== modified file 'app/src/main/java/org/openlp/android2/OpenLP.java'
--- app/src/main/java/org/openlp/android2/OpenLP.java	2016-01-09 11:10:39 +0000
+++ app/src/main/java/org/openlp/android2/OpenLP.java	2016-11-10 19:36:50 +0000
@@ -1,7 +1,7 @@
 /******************************************************************************
  * OpenLP - Open Source Lyrics Projection                                      *
  * --------------------------------------------------------------------------- *
- * Copyright (c) 2011-2015 OpenLP Android Developers                           *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
  * --------------------------------------------------------------------------- *
  * This program is free software; you can redistribute it and/or modify it     *
  * under the terms of the GNU General Public License as published by the Free  *
@@ -35,6 +35,8 @@
 
 import org.openlp.android2.activities.SettingsActivity;
 import org.openlp.android2.common.NavigationOptions;
+import org.openlp.android2.common.OpenLPURLBuilder;
+import org.openlp.android2.common.StateHolder;
 import org.openlp.android2.dialogs.AlertDisplayDialog;
 import org.openlp.android2.dialogs.BlankDisplayDialog;
 import org.openlp.android2.fragments.AboutFragment;
@@ -65,6 +67,8 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
+        OpenLPURLBuilder.getInstance().setContext(this);
+        StateHolder.getInstance().setContext(this);
 
         doPreferenceCheck();
 
@@ -140,7 +144,7 @@
                         .replace(R.id.container_left, ServiceListFragment.newInstance(), "servicelist")
                         .commit();
                 fragmentManager.beginTransaction()
-                        .replace(R.id.container_right, LiveListFragment.newInstance())
+                        .replace(R.id.container_right, LiveListFragment.newInstance(), "livelist")
                         .commit();
                 mTitle = getString(R.string.live_list);
                 toggerContainer(R.id.next_button, View.VISIBLE);

=== modified file 'app/src/main/java/org/openlp/android2/api/Api.java'
--- app/src/main/java/org/openlp/android2/api/Api.java	2015-01-19 21:09:12 +0000
+++ app/src/main/java/org/openlp/android2/api/Api.java	2016-11-10 19:36:50 +0000
@@ -1,7 +1,7 @@
 /******************************************************************************
  * OpenLP - Open Source Lyrics Projection                                      *
  * --------------------------------------------------------------------------- *
- * Copyright (c) 2011-2015 OpenLP Android Developers                           *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
  * --------------------------------------------------------------------------- *
  * This program is free software; you can redistribute it and/or modify it     *
  * under the terms of the GNU General Public License as published by the Free  *

=== modified file 'app/src/main/java/org/openlp/android2/common/JsonHelpers.java'
--- app/src/main/java/org/openlp/android2/common/JsonHelpers.java	2015-11-22 14:56:47 +0000
+++ app/src/main/java/org/openlp/android2/common/JsonHelpers.java	2016-11-10 19:36:50 +0000
@@ -1,7 +1,7 @@
 /******************************************************************************
  * OpenLP - Open Source Lyrics Projection                                      *
  * --------------------------------------------------------------------------- *
- * Copyright (c) 2011-2015 OpenLP Android Developers                           *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
  * --------------------------------------------------------------------------- *
  * This program is free software; you can redistribute it and/or modify it     *
  * under the terms of the GNU General Public License as published by the Free  *
@@ -18,6 +18,8 @@
  *******************************************************************************/
 package org.openlp.android2.common;
 
+import android.util.Log;
+
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.json.JSONStringer;
@@ -37,6 +39,7 @@
             responseJSON = new JSONStringer().object().key("request").value(jo)
                     .endObject().toString();
             responseJSON = URLEncoder.encode(responseJSON, "UTF-8");
+            Log.d(LOG_TAG, String.format("createRequestJSON: %s : %s : %s", key, value, responseJSON));
             return responseJSON;
         } catch (JSONException e) {
             throw new JSONHandlerException(e);

=== modified file 'app/src/main/java/org/openlp/android2/common/NavigationOptions.java'
--- app/src/main/java/org/openlp/android2/common/NavigationOptions.java	2015-10-18 18:43:08 +0000
+++ app/src/main/java/org/openlp/android2/common/NavigationOptions.java	2016-11-10 19:36:50 +0000
@@ -1,7 +1,7 @@
 /******************************************************************************
  * OpenLP - Open Source Lyrics Projection                                      *
  * --------------------------------------------------------------------------- *
- * Copyright (c) 2011-2015 OpenLP Android Developers                           *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
  * --------------------------------------------------------------------------- *
  * This program is free software; you can redistribute it and/or modify it     *
  * under the terms of the GNU General Public License as published by the Free  *

=== modified file 'app/src/main/java/org/openlp/android2/common/OpenLPFragment.java'
--- app/src/main/java/org/openlp/android2/common/OpenLPFragment.java	2015-10-06 22:40:40 +0000
+++ app/src/main/java/org/openlp/android2/common/OpenLPFragment.java	2016-11-10 19:36:50 +0000
@@ -1,7 +1,7 @@
 /******************************************************************************
  * OpenLP - Open Source Lyrics Projection                                      *
  * --------------------------------------------------------------------------- *
- * Copyright (c) 2011-2015 OpenLP Android Developers                           *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
  * --------------------------------------------------------------------------- *
  * This program is free software; you can redistribute it and/or modify it     *
  * under the terms of the GNU General Public License as published by the Free  *
@@ -26,18 +26,30 @@
 
 import android.widget.ListView;
 import android.widget.Toast;
-import com.loopj.android.http.AsyncHttpClient;
-import com.loopj.android.http.TextHttpResponseHandler;
-import org.apache.http.Header;
+
+import com.android.volley.AuthFailureError;
+import com.android.volley.ClientError;
+import com.android.volley.DefaultRetryPolicy;
+import com.android.volley.NetworkError;
+import com.android.volley.NoConnectionError;
+import com.android.volley.ParseError;
+import com.android.volley.Request;
+import com.android.volley.Response;
+import com.android.volley.ServerError;
+import com.android.volley.TimeoutError;
+import com.android.volley.VolleyError;
+import com.android.volley.toolbox.StringRequest;
 import org.openlp.android2.R;
 import org.openlp.android2.api.Api;
 
+import java.util.HashMap;
+import java.util.Map;
+
 abstract public class OpenLPFragment extends ListFragment{
 
     private String LOG_TAG = OpenLPFragment.class.getName();
     public Context context;
-    protected String calledURL;
-    protected OpenLPHttpClient httpClient;
+    protected String urlcalled;
     protected String updateUrl;
 
     abstract public void itemClicked(int position);
@@ -48,42 +60,71 @@
         itemClicked(position);
     }
 
-    private static AsyncHttpClient client = new AsyncHttpClient();
-
     protected void refreshDisplay(){}
     protected void populateDisplay(String responseString, boolean inError) {}
     protected void processUpdate(String responseString, boolean inError) {}
 
-    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);
-            }
-        });
-    }
-
-    public void manageResponse(String response, boolean notInError) {
-        if (calledURL.equals(updateUrl)) {
-            populateDisplay(response, notInError);
-        }else {
-            processUpdate(response, notInError);
-        }
-    }
+    protected void triggerTextRequest(final String urlbase) {
+        String url = RequestQueueService.getInstance(this.context).getUrl(urlbase);
+        updateUrl = urlbase;
+
+        StringRequest request = new StringRequest(
+                Request.Method.GET,
+                url,
+                listener,
+                errorListener) {
+
+            @Override
+            public Map<String, String> getHeaders() throws AuthFailureError {
+                return createBasicAuthHeader("user", "passwd");
+            }
+        };
+        //Set a retry policy in case of SocketTimeout & ConnectionTimeout Exceptions.
+        // Volley does retry for you if you have specified the policy.
+        request.setRetryPolicy(new DefaultRetryPolicy(
+                RequestQueueService.getInstance(this.context).getConnectionTimeout(),
+                DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
+        request.setTag("OpenLP");
+        RequestQueueService.getInstance(this.context).addToRequestQueue(request);
+    }
+
+    Map<String, String> createBasicAuthHeader(String username, String password) {
+        Map<String, String> headers = new HashMap<String, String>();
+        headers.put("Authorization", RequestQueueService.getInstance(context).getBasicAuth());
+
+        return headers;
+    }
+
+    Response.Listener<String> listener = new Response.Listener<String>() {
+        @Override
+        public void onResponse(String response) {
+            if (urlcalled.equals(updateUrl)) {
+                populateDisplay(response, true);
+            } else {
+                processUpdate(response, true);
+            }
+        }
+    };
+
+    Response.ErrorListener errorListener = new Response.ErrorListener() {
+        @Override
+        public void onErrorResponse(VolleyError error) {
+            Log.d(LOG_TAG, String.format("Call response error = %s", error.toString()));
+            if (error instanceof NetworkError) {
+            } else if (error instanceof ClientError) {
+            } else if (error instanceof ServerError) {
+            } else if (error instanceof AuthFailureError) {
+                Toast.makeText(context, R.string.httpreturn_unauthorised,
+                        Toast.LENGTH_LONG).show();
+            } else if (error instanceof ParseError) {
+            } else if (error instanceof NoConnectionError) {
+            } else if (error instanceof TimeoutError) {
+            }
+            Toast.makeText(context, R.string.unable,
+                    Toast.LENGTH_LONG).show();
+
+        }
+    };
 
     public void next() {
         Log.d(LOG_TAG, "Going to next slide");

=== removed file 'app/src/main/java/org/openlp/android2/common/OpenLPSSLSocketFactory.java'
--- app/src/main/java/org/openlp/android2/common/OpenLPSSLSocketFactory.java	2015-01-19 21:09:12 +0000
+++ app/src/main/java/org/openlp/android2/common/OpenLPSSLSocketFactory.java	1970-01-01 00:00:00 +0000
@@ -1,66 +0,0 @@
-/******************************************************************************
- * OpenLP - Open Source Lyrics Projection                                      *
- * --------------------------------------------------------------------------- *
- * Copyright (c) 2011-2015 OpenLP Android Developers                           *
- * --------------------------------------------------------------------------- *
- * This program is free software; you can redistribute it and/or modify it     *
- * under the terms of the GNU General Public License as published by the Free  *
- * Software Foundation; version 2 of the License.                              *
- *                                                                             *
- * This program is distributed in the hope that it will be useful, but WITHOUT *
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       *
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for    *
- * more details.                                                               *
- *                                                                             *
- * You should have received a copy of the GNU General Public License along     *
- * with this program; if not, write to the Free Software Foundation, Inc., 59  *
- * Temple Place, Suite 330, Boston, MA 02111-1307 USA                          *
- *******************************************************************************/
-package org.openlp.android2.common;
-
-import org.apache.http.conn.ssl.SSLSocketFactory;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-import java.io.IOException;
-import java.net.Socket;
-import java.net.UnknownHostException;
-import java.security.*;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-
-/**
- * Created by tim on 14/11/14.
- */
-public class OpenLPSSLSocketFactory extends SSLSocketFactory {
-    SSLContext sslContext = SSLContext.getInstance("TLS");
-
-    public OpenLPSSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
-        super(truststore);
-
-        TrustManager tm = new X509TrustManager() {
-            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
-            }
-
-            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
-            }
-
-            public X509Certificate[] getAcceptedIssuers() {
-                return null;
-            }
-        };
-
-        sslContext.init(null, new TrustManager[] { tm }, null);
-    }
-
-    @Override
-    public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
-        return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
-    }
-
-    @Override
-    public Socket createSocket() throws IOException {
-        return sslContext.getSocketFactory().createSocket();
-    }
-}

=== added file 'app/src/main/java/org/openlp/android2/common/OpenLPURLBuilder.java'
--- app/src/main/java/org/openlp/android2/common/OpenLPURLBuilder.java	1970-01-01 00:00:00 +0000
+++ app/src/main/java/org/openlp/android2/common/OpenLPURLBuilder.java	2016-11-10 19:36:50 +0000
@@ -0,0 +1,86 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
+ * --------------------------------------------------------------------------- *
+ * This program is free software; you can redistribute it and/or modify it     *
+ * under the terms of the GNU General Public License as published by the Free  *
+ * Software Foundation; version 2 of the License.                              *
+ *                                                                             *
+ * This program is distributed in the hope that it will be useful, but WITHOUT *
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       *
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for    *
+ * more details.                                                               *
+ *                                                                             *
+ * You should have received a copy of the GNU General Public License along     *
+ * with this program; if not, write to the Free Software Foundation, Inc., 59  *
+ * Temple Place, Suite 330, Boston, MA 02111-1307 USA                          *
+ *******************************************************************************/
+package org.openlp.android2.common;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+import android.util.Base64;
+import android.util.Log;
+
+import org.openlp.android2.R;
+
+public class OpenLPURLBuilder {
+    private final String LOG_TAG = OpenLPURLBuilder.class.getName();
+    private Context context;
+
+    private static OpenLPURLBuilder ourInstance = new OpenLPURLBuilder();
+
+    public static OpenLPURLBuilder getInstance() {
+        return ourInstance;
+    }
+
+    private OpenLPURLBuilder() {
+    }
+
+    public void setContext(Context context) {
+        this.context = context;
+    }
+
+    public int getConnectionTimeout() {
+
+        SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
+
+        int connectionTimeout = context.getResources().getInteger(
+                R.integer.connectionTimeoutDefaultValue);
+
+        if (sharedPrefs.getBoolean(context.getString(R.string.key_enable_custom_timeout), false)) {
+            Log.d(LOG_TAG, "Overriding Connection and Socket timeouts");
+
+            connectionTimeout = Integer.parseInt(sharedPrefs.getString(context.getString(R.string.key_connection_timeout),
+                    String.valueOf(context.getResources().getInteger(R.integer.connectionTimeoutDefaultValue))
+            ));
+        }
+        return connectionTimeout;
+    }
+
+    public String getBasicAuth(){
+
+        SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
+        String userid = sharedPrefs.getString(context.getString(R.string.key_userid), "openlp");
+        String password = sharedPrefs.getString(context.getString(R.string.key_password), "password");
+
+        Log.d(LOG_TAG, "Credentials set to " + userid + " : " + password);
+
+        String credentials = userid + ":" + password;
+        return "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.DEFAULT);
+    }
+
+    public String getBaseUrl(){
+
+        SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
+
+        String host = sharedPrefs.getString(context.getString(R.string.key_host),
+                context.getString(R.string.host_default_value));
+        String port = sharedPrefs.getString(context.getString(R.string.key_port), "4316");
+
+        return String.format("http://%s:%s";, host, port);
+
+    }
+}

=== added file 'app/src/main/java/org/openlp/android2/common/RequestQueueService.java'
--- app/src/main/java/org/openlp/android2/common/RequestQueueService.java	1970-01-01 00:00:00 +0000
+++ app/src/main/java/org/openlp/android2/common/RequestQueueService.java	2016-11-10 19:36:50 +0000
@@ -0,0 +1,99 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
+ * --------------------------------------------------------------------------- *
+ * This program is free software; you can redistribute it and/or modify it     *
+ * under the terms of the GNU General Public License as published by the Free  *
+ * Software Foundation; version 2 of the License.                              *
+ *                                                                             *
+ * This program is distributed in the hope that it will be useful, but WITHOUT *
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       *
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for    *
+ * more details.                                                               *
+ *                                                                             *
+ * You should have received a copy of the GNU General Public License along     *
+ * with this program; if not, write to the Free Software Foundation, Inc., 59  *
+ * Temple Place, Suite 330, Boston, MA 02111-1307 USA                          *
+ *******************************************************************************/
+package org.openlp.android2.common;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.util.Base64;
+import android.util.LruCache;
+
+import com.android.volley.AuthFailureError;
+import com.android.volley.Request;
+import com.android.volley.RequestQueue;
+import com.android.volley.toolbox.HurlStack;
+import com.android.volley.toolbox.ImageLoader;
+import com.android.volley.toolbox.Volley;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class RequestQueueService {
+
+    private static RequestQueueService mInstance;
+    private RequestQueue mRequestQueue;
+    private ImageLoader mImageLoader;
+    private static Context mCtx;
+
+    private RequestQueueService(Context context) {
+        mCtx = context;
+        mRequestQueue = getRequestQueue();
+
+        mImageLoader = new ImageLoader(mRequestQueue,
+            new ImageLoader.ImageCache() {
+                private final LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>(20);
+
+                @Override
+                public Bitmap getBitmap(String url) {
+                    return cache.get(url);
+                }
+
+                @Override
+                public void putBitmap(String url, Bitmap bitmap) {
+                    cache.put(url, bitmap);
+                }
+            });
+    }
+
+    public static synchronized RequestQueueService getInstance(Context context) {
+        if (mInstance == null) {
+            mInstance = new RequestQueueService(context);
+        }
+        return mInstance;
+    }
+
+    public RequestQueue getRequestQueue() {
+        if (mRequestQueue == null) {
+            // getApplicationContext() is key, it keeps you from leaking the
+            // Activity or BroadcastReceiver if someone passes one in.
+            mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
+        }
+        return mRequestQueue;
+    }
+
+    public String getUrl(String url){
+        return String.format("%s%s", OpenLPURLBuilder.getInstance().getBaseUrl(), url );
+    }
+
+    public String getBasicAuth(){
+        return OpenLPURLBuilder.getInstance().getBasicAuth();
+    }
+
+    public int getConnectionTimeout(){
+        return OpenLPURLBuilder.getInstance().getConnectionTimeout();
+    }
+
+    public <T> void addToRequestQueue(Request<T> req) {
+        getRequestQueue().add(req);
+    }
+
+    public ImageLoader getImageLoader() {
+        return mImageLoader;
+    }
+}
+

=== added file 'app/src/main/java/org/openlp/android2/common/StateHolder.java'
--- app/src/main/java/org/openlp/android2/common/StateHolder.java	1970-01-01 00:00:00 +0000
+++ app/src/main/java/org/openlp/android2/common/StateHolder.java	2016-11-10 19:36:50 +0000
@@ -0,0 +1,22 @@
+package org.openlp.android2.common;
+
+import android.content.Context;
+
+/**
+ * Created by tim on 14/08/16.
+ */
+public class StateHolder {
+    private static StateHolder ourInstance = new StateHolder();
+    private static Context context;
+
+    public static StateHolder getInstance() {
+        return ourInstance;
+    }
+
+    private StateHolder() {
+    }
+
+    public void setContext(Context context) {
+        this.context = context;
+    }
+}

=== modified file 'app/src/main/java/org/openlp/android2/dialogs/AlertDisplayDialog.java'
--- app/src/main/java/org/openlp/android2/dialogs/AlertDisplayDialog.java	2015-01-19 21:09:12 +0000
+++ app/src/main/java/org/openlp/android2/dialogs/AlertDisplayDialog.java	2016-11-10 19:36:50 +0000
@@ -1,7 +1,7 @@
 /******************************************************************************
  * OpenLP - Open Source Lyrics Projection                                      *
  * --------------------------------------------------------------------------- *
- * Copyright (c) 2011-2015 OpenLP Android Developers                           *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
  * --------------------------------------------------------------------------- *
  * This program is free software; you can redistribute it and/or modify it     *
  * under the terms of the GNU General Public License as published by the Free  *
@@ -32,7 +32,6 @@
 import org.openlp.android2.api.Api;
 import org.openlp.android2.common.JsonHelpers;
 import org.openlp.android2.common.OpenLPDialog;
-import org.openlp.android2.common.OpenLPHttpClient;
 
 public class AlertDisplayDialog extends OpenLPDialog {
     private final String LOG_TAG = AlertDisplayDialog.class.getName();
@@ -49,7 +48,6 @@
         // remove the dialog title, but you must call the superclass to get the Dialog.
 
         context = getActivity();
-        httpClient = new OpenLPHttpClient(context);
 
         AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
         // Get the layout inflater

=== modified file 'app/src/main/java/org/openlp/android2/dialogs/BlankDisplayDialog.java'
--- app/src/main/java/org/openlp/android2/dialogs/BlankDisplayDialog.java	2015-09-20 21:02:37 +0000
+++ app/src/main/java/org/openlp/android2/dialogs/BlankDisplayDialog.java	2016-11-10 19:36:50 +0000
@@ -1,7 +1,7 @@
 /******************************************************************************
  * OpenLP - Open Source Lyrics Projection                                      *
  * --------------------------------------------------------------------------- *
- * Copyright (c) 2011-2015 OpenLP Android Developers                           *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
  * --------------------------------------------------------------------------- *
  * This program is free software; you can redistribute it and/or modify it     *
  * under the terms of the GNU General Public License as published by the Free  *
@@ -35,10 +35,10 @@
 import org.openlp.android2.api.Api;
 
 import org.openlp.android2.common.OpenLPDialog;
-import org.openlp.android2.common.OpenLPHttpClient;
 
 public class BlankDisplayDialog extends OpenLPDialog {
     private final String LOG_TAG = BlankDisplayDialog.class.getName();
+
     public AlertDialog dialog;
     RadioButton desktop;
     RadioButton screen;
@@ -56,8 +56,6 @@
         // remove the dialog title, but you must call the superclass to get the Dialog.
 
         context = getActivity();
-        httpClient = new OpenLPHttpClient(context);
-
         AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
         // Get the layout inflater
         LayoutInflater inflater = getActivity().getLayoutInflater();
@@ -147,8 +145,8 @@
         }
     }
 
-    public void errorDisplay(int statusCode, String responseString) {
-        Log.d(LOG_TAG, String.format("URL Error status code %d text %s", statusCode, responseString));
+    public void errorDisplay(String responseString) {
+        Log.d(LOG_TAG, String.format("URL Error text %s", responseString));
         reset_display();
     }
 

=== added file 'app/src/main/java/org/openlp/android2/dialogs/SearchSelectionDialog.java'
--- app/src/main/java/org/openlp/android2/dialogs/SearchSelectionDialog.java	1970-01-01 00:00:00 +0000
+++ app/src/main/java/org/openlp/android2/dialogs/SearchSelectionDialog.java	2016-11-10 19:36:50 +0000
@@ -0,0 +1,135 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2015 OpenLP Android Developers                           *
+ * --------------------------------------------------------------------------- *
+ * This program is free software; you can redistribute it and/or modify it     *
+ * under the terms of the GNU General Public License as published by the Free  *
+ * Software Foundation; version 2 of the License.                              *
+ *                                                                             *
+ * This program is distributed in the hope that it will be useful, but WITHOUT *
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       *
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for    *
+ * more details.                                                               *
+ *                                                                             *
+ * You should have received a copy of the GNU General Public License along     *
+ * with this program; if not, write to the Free Software Foundation, Inc., 59  *
+ * Temple Place, Suite 330, Boston, MA 02111-1307 USA                          *
+ *******************************************************************************/
+package org.openlp.android2.dialogs;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.Button;
+import android.widget.RadioButton;
+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.OpenLPDialog;
+
+public class SearchSelectionDialog extends OpenLPDialog {
+    private final String LOG_TAG = SearchSelectionDialog.class.getName();
+    public AlertDialog dialog;
+    private String key;
+    private String plugin;
+    private String text;
+    private RadioButton sendLive;
+    private RadioButton addToService;
+
+    /**
+     * The system calls this only when creating the layout in a dialog.
+     */
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        // The only reason you might override this method when using onCreateView() is
+        // to modify any dialog characteristics. For example, the dialog includes a
+        // title by default, but your custom layout might not need it. So here you can
+        // remove the dialog title, but you must call the superclass to get the Dialog.
+
+        key = getArguments().getString("key");
+        plugin = getArguments().getString("plugin");
+        text = getArguments().getString("text");
+
+        Log.d(LOG_TAG, String.format("onCreateDialog %s : %s : %s", key, plugin, text));
+
+        context = getActivity();
+
+        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+        // Get the layout inflater
+        LayoutInflater inflater = getActivity().getLayoutInflater();
+
+        // Inflate and set the layout for the dialog
+        // Pass null as the parent view because its going in the dialog layout
+        View view = inflater.inflate(R.layout.search_action_dialog, null);
+        builder.setView(view);
+
+        sendLive = (RadioButton) view.findViewById(R.id.buttonLive);
+        sendLive.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                createLive();
+                SearchSelectionDialog.this.getDialog().cancel();
+            }
+        });
+
+        addToService = (RadioButton) view.findViewById(R.id.buttonService);
+        addToService.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                createService();
+                SearchSelectionDialog.this.getDialog().cancel();
+            }
+        });
+
+        builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+            public void onClick(DialogInterface dialog, int id) {
+                SearchSelectionDialog.this.getDialog().cancel();
+            }
+        });
+        dialog = builder.create();
+        dialog.setOnShowListener(new DialogInterface.OnShowListener() {
+            @Override
+            public void onShow(DialogInterface dialogI) {
+                Button btnNegative = dialog.getButton(Dialog.BUTTON_NEGATIVE);
+                btnNegative.setTextSize(20);
+            }
+        });
+        return dialog;
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        Log.d(LOG_TAG, "Resuming...");
+    }
+
+    public void createLive() {
+        try {
+            String request = JsonHelpers.createRequestJSON("id", text);
+            String url = String.format(Api.SEARCH_PLUGIN_LIVE, plugin.toLowerCase());
+            triggerTextRequest(String.format("%s%s", url, request));
+            Log.d(LOG_TAG, String.format("Setting list data. apiBase(%s), text(%s)", Api.SEARCH_PLUGIN_LIVE, request));
+        } catch (JsonHelpers.JSONHandlerException e) {
+            e.printStackTrace();
+            Toast.makeText(context, "Request Failed", Toast.LENGTH_SHORT).show();
+        }
+    }
+
+    public void createService() {
+        try {
+            String request = JsonHelpers.createRequestJSON("id", text);
+            String url = String.format(Api.SEARCH_PLUGIN_ADD, plugin.toLowerCase());
+            triggerTextRequest(String.format("%s%s", url, request));
+            Log.d(LOG_TAG, String.format("Setting list data. apiBase(%s), text(%s)", Api.SEARCH_PLUGIN_ADD, text));
+        } catch (JsonHelpers.JSONHandlerException e) {
+            e.printStackTrace();
+            Toast.makeText(context, "Request Failed", Toast.LENGTH_SHORT).show();
+        }
+    }
+}

=== modified file 'app/src/main/java/org/openlp/android2/fragments/AboutFragment.java'
--- app/src/main/java/org/openlp/android2/fragments/AboutFragment.java	2015-10-08 20:52:22 +0000
+++ app/src/main/java/org/openlp/android2/fragments/AboutFragment.java	2016-11-10 19:36:50 +0000
@@ -1,7 +1,7 @@
 /******************************************************************************
  * OpenLP - Open Source Lyrics Projection                                      *
  * --------------------------------------------------------------------------- *
- * Copyright (c) 2011-2015 OpenLP Android Developers                           *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
  * --------------------------------------------------------------------------- *
  * This program is free software; you can redistribute it and/or modify it     *
  * under the terms of the GNU General Public License as published by the Free  *

=== modified file 'app/src/main/java/org/openlp/android2/fragments/HomeFragment.java'
--- app/src/main/java/org/openlp/android2/fragments/HomeFragment.java	2015-01-23 17:53:00 +0000
+++ app/src/main/java/org/openlp/android2/fragments/HomeFragment.java	2016-11-10 19:36:50 +0000
@@ -1,7 +1,7 @@
 /******************************************************************************
  * OpenLP - Open Source Lyrics Projection                                      *
  * --------------------------------------------------------------------------- *
- * Copyright (c) 2011-2015 OpenLP Android Developers                           *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
  * --------------------------------------------------------------------------- *
  * This program is free software; you can redistribute it and/or modify it     *
  * under the terms of the GNU General Public License as published by the Free  *

=== modified file 'app/src/main/java/org/openlp/android2/fragments/LiveListFragment.java'
--- app/src/main/java/org/openlp/android2/fragments/LiveListFragment.java	2015-10-04 21:02:13 +0000
+++ app/src/main/java/org/openlp/android2/fragments/LiveListFragment.java	2016-11-10 19:36:50 +0000
@@ -1,7 +1,7 @@
 /******************************************************************************
  * OpenLP - Open Source Lyrics Projection                                      *
  * --------------------------------------------------------------------------- *
- * Copyright (c) 2011-2015 OpenLP Android Developers                           *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
  * --------------------------------------------------------------------------- *
  * This program is free software; you can redistribute it and/or modify it     *
  * under the terms of the GNU General Public License as published by the Free  *
@@ -42,7 +42,6 @@
 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.HashMap;
@@ -73,8 +72,7 @@
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         context = getActivity();
-        updateUrl = Api.LIVE_TEXT;
-        httpClient = new OpenLPHttpClient(context);
+        urlcalled = Api.LIVE_TEXT;
         return super.onCreateView(inflater, container, savedInstanceState);
     }
 
@@ -106,10 +104,10 @@
         }
 
         // Keys used in Hashmap
-        String[] from = {"tag", "liveListNormal", "liveListSelected"};
+        String[] from = {"line", "tag", "liveListNormal", "liveListSelected"};
 
         // Ids of views in live_list_fragment
-        int[] to = {R.id.tag, R.id.liveListNormal, R.id.liveListSelected};
+        int[] to = {R.id.line, R.id.tag, R.id.liveListNormal, R.id.liveListSelected};
 
         SharedPreferences prefs = context.getSharedPreferences(
                 context.getString(R.string.key_shared_preferences),
@@ -125,15 +123,21 @@
                 R.layout.fragment_livelist, from, to) {
             public View getView(int position, View convertView, ViewGroup parent) {
                 View view = super.getView(position, convertView, parent);
+                // TextView line = (TextView) view.findViewById(R.id.line);
                 TextView text1 = (TextView) view.findViewById(R.id.tag);
-                text1.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
+                if (text1 != null) {
+                    text1.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
+                }
                 TextView text2 = (TextView) view.findViewById(R.id.liveListNormal);
-                text2.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
-                if (selected == position) {
-                    text2.setTextColor(Color.parseColor("#000000"));
-                    text2.setTypeface(null, Typeface.BOLD_ITALIC);
-                } else{
-                    text2.setTypeface(null, Typeface.NORMAL);
+                if (text2 != null) {
+                    text2.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
+                    if (selected == position) {
+                        text2.setTypeface(null, Typeface.BOLD_ITALIC);
+                        // line.setBackgroundColor(0xffffff);
+                    } else {
+                        text2.setTypeface(null, Typeface.NORMAL);
+                        // line.setBackgroundColor(0xffffff);
+                    }
                 }
                 return view;
 

=== modified file 'app/src/main/java/org/openlp/android2/fragments/LiveWebFragment.java'
--- app/src/main/java/org/openlp/android2/fragments/LiveWebFragment.java	2015-01-23 17:53:00 +0000
+++ app/src/main/java/org/openlp/android2/fragments/LiveWebFragment.java	2016-11-10 19:36:50 +0000
@@ -1,7 +1,7 @@
 /******************************************************************************
  * OpenLP - Open Source Lyrics Projection                                      *
  * --------------------------------------------------------------------------- *
- * Copyright (c) 2011-2015 OpenLP Android Developers                           *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
  * --------------------------------------------------------------------------- *
  * This program is free software; you can redistribute it and/or modify it     *
  * under the terms of the GNU General Public License as published by the Free  *

=== modified file 'app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java'
--- app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java	2016-01-09 12:39:40 +0000
+++ app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java	2016-11-10 19:36:50 +0000
@@ -1,7 +1,7 @@
 /******************************************************************************
  * OpenLP - Open Source Lyrics Projection                                      *
  * --------------------------------------------------------------------------- *
- * Copyright (c) 2011-2015 OpenLP Android Developers                           *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
  * --------------------------------------------------------------------------- *
  * This program is free software; you can redistribute it and/or modify it     *
  * under the terms of the GNU General Public License as published by the Free  *

=== added file 'app/src/main/java/org/openlp/android2/fragments/SearchFragment.java'
--- app/src/main/java/org/openlp/android2/fragments/SearchFragment.java	1970-01-01 00:00:00 +0000
+++ app/src/main/java/org/openlp/android2/fragments/SearchFragment.java	2016-11-10 19:36:50 +0000
@@ -0,0 +1,357 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
+ * --------------------------------------------------------------------------- *
+ * This program is free software; you can redistribute it and/or modify it     *
+ * under the terms of the GNU General Public License as published by the Free  *
+ * Software Foundation; version 2 of the License.                              *
+ * *
+ * This program is distributed in the hope that it will be useful, but WITHOUT *
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       *
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for    *
+ * more details.                                                               *
+ * *
+ * You should have received a copy of the GNU General Public License along     *
+ * with this program; if not, write to the Free Software Foundation, Inc., 59  *
+ * Temple Place, Suite 330, Boston, MA 02111-1307 USA                          *
+ *******************************************************************************/
+package org.openlp.android2.fragments;
+
+import android.app.DialogFragment;
+import android.app.Fragment;
+import android.content.Context;
+import android.os.Bundle;
+import android.util.Log;
+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.ListView;
+import android.widget.Spinner;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.android.volley.AuthFailureError;
+import com.android.volley.ClientError;
+import com.android.volley.DefaultRetryPolicy;
+import com.android.volley.NetworkError;
+import com.android.volley.NoConnectionError;
+import com.android.volley.ParseError;
+import com.android.volley.Request;
+import com.android.volley.Response;
+import com.android.volley.ServerError;
+import com.android.volley.TimeoutError;
+import com.android.volley.VolleyError;
+import com.android.volley.toolbox.StringRequest;
+
+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.RequestQueueService;
+import org.openlp.android2.dialogs.SearchSelectionDialog;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+
+ */
+public class SearchFragment extends Fragment {
+
+    private final String LOG_TAG = SearchFragment.class.getName();
+    private Spinner spinner;
+    public Context context;
+    protected String calledURL;
+    protected String updateUrl;
+    protected String searchedPlugin;
+    protected Map<String, String> pluginMap = new HashMap<String, String>();
+
+    public SearchFragment() {
+        Log.d(LOG_TAG, "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) {
+        context = getActivity();
+        updateUrl = Api.SEARCHABLE_PLUGINS;
+        View view = inflater.inflate(R.layout.fragment_search, container, false);
+        spinner = (Spinner) view.findViewById(R.id.search_spinner);
+        triggerTextRequest(Api.SEARCHABLE_PLUGINS);
+
+        // Add search listener to text field
+        final EditText editText = (EditText) view.findViewById(R.id.search_text);
+        editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+            @Override
+            public boolean onEditorAction(TextView tv, 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);
+                    }
+                    searchedPlugin = pluginMap.get(spinner.getSelectedItem().toString());
+                    requestSearch(tv.getText().toString());
+                    return true;
+                }
+                return false;
+            }
+        });
+        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+            /**
+             * Called when a new item is selected (in the Spinner)
+             */
+            public void onItemSelected(AdapterView<?> parent, View view,
+                                       int pos, long id) {
+                editText.setText("");
+            }
+            public void onNothingSelected(AdapterView<?> parent) {
+                // Do nothing, just another required interface callback
+            }
+
+        });
+        return view;
+    }
+
+    @Override
+    public void onDetach() {
+        super.onDetach();
+    }
+
+    private void populatePluginList(String response, Boolean notInError) {
+        Log.i(LOG_TAG, "populatePluginList - entry");
+        List<String> categories = new ArrayList<String>();
+        pluginMap.clear();
+
+        if (notInError) {
+            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());
+                    pluginMap.put(item.get(1).toString(), item.get(0).toString());
+                }
+            } catch (JSONException e) {
+                Log.e(LOG_TAG, response);
+                e.printStackTrace();
+            }
+            ArrayAdapter<String> LTRadapter = new ArrayAdapter<String>(getActivity(),
+                    R.layout.spinner_list_item, categories);
+            LTRadapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
+            spinner.setAdapter(LTRadapter);
+            Log.i(LOG_TAG, "populatePluginList - exit");
+        }
+    }
+
+    protected void triggerTextRequest(String urlbase) {
+        Log.d(LOG_TAG, "Trigger Request for url " + urlbase);
+        String url = RequestQueueService.getInstance(this.context).getUrl(urlbase);
+        calledURL = urlbase;
+
+        StringRequest request = new StringRequest(
+                Request.Method.GET,
+                url,
+                listener,
+                errorListener) {
+
+            @Override
+            public Map<String, String> getHeaders() throws AuthFailureError {
+                return createBasicAuthHeader("user", "passwd");
+            }
+        };
+        //Set a retry policy in case of SocketTimeout & ConnectionTimeout Exceptions.
+        // Volley does retry for you if you have specified the policy.
+        request.setRetryPolicy(new DefaultRetryPolicy(
+                RequestQueueService.getInstance(this.context).getConnectionTimeout(),
+                DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
+        request.setTag("OpenLP");
+        RequestQueueService.getInstance(this.context).addToRequestQueue(request);
+    }
+
+    Map<String, String> createBasicAuthHeader(String username, String password) {
+        Map<String, String> headers = new HashMap<String, String>();
+        headers.put("Authorization", RequestQueueService.getInstance(context).getBasicAuth());
+
+        return headers;
+    }
+
+    Response.Listener<String> listener = new Response.Listener<String>() {
+        @Override
+        public void onResponse(String response) {
+            if (calledURL.equals(updateUrl)) {
+                populatePluginList(response, true);
+            } else {
+                populateListDisplay(response, true);
+            }
+        }
+    };
+
+    Response.ErrorListener errorListener = new Response.ErrorListener() {
+        @Override
+        public void onErrorResponse(VolleyError error) {
+            Log.d(LOG_TAG, String.format("Call response error = %s", error.toString()));
+            if (error instanceof NetworkError) {
+            } else if (error instanceof ClientError) {
+            } else if (error instanceof ServerError) {
+            } else if (error instanceof AuthFailureError) {
+                Toast.makeText(context, R.string.httpreturn_unauthorised,
+                        Toast.LENGTH_LONG).show();
+            } else if (error instanceof ParseError) {
+            } else if (error instanceof NoConnectionError) {
+            } else if (error instanceof TimeoutError) {
+            }
+            Toast.makeText(context, R.string.unable,
+                    Toast.LENGTH_LONG).show();
+
+        }
+    };
+
+    public void requestSearch(String text) {
+        updateUrl = Api.SEARCH_PLUGIN_FORMATTED;
+        try {
+            String request = JsonHelpers.createRequestJSON("text", text);
+            String url = String.format(Api.SEARCH_PLUGIN_FORMATTED, searchedPlugin);
+            triggerTextRequest(String.format("%s%s", url, request));
+            Log.d(LOG_TAG, String.format("Search request. apiBase(%s), text(%s)", searchedPlugin, text));
+        } catch (JsonHelpers.JSONHandlerException e) {
+            e.printStackTrace();
+            Toast.makeText(context, "Search Request Failed", Toast.LENGTH_SHORT).show();
+        }
+    }
+
+    public void populateListDisplay(String json, boolean notInError) {
+        Log.i(LOG_TAG, "populateListDisplay - entry");
+        ListView list = (ListView) getActivity().findViewById(R.id.searchListView);
+        final ArrayList<JSONArray> listitems = new ArrayList<JSONArray>();
+        if (notInError) {
+            try {
+                JSONArray items = new JSONObject(json).getJSONObject("results").getJSONArray("items");
+                Log.d(LOG_TAG,items.toString());
+                for (int i = 0; i < items.length(); ++i) {
+                    JSONArray item = items.getJSONArray(i);
+                    listitems.add(item);
+                }
+            } catch (JSONException e) {
+                Log.e(LOG_TAG, json);
+                e.printStackTrace();
+            }
+        }
+
+        final StableArrayAdapter adapter = new StableArrayAdapter(context,
+                android.R.layout.simple_list_item_1,
+                listitems);
+
+
+        list.setAdapter(adapter);
+        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+
+            @Override
+            public void onItemClick(AdapterView<?> parent, final View view,
+                                    int position, long id) {
+                final JSONArray item = (JSONArray) parent.getItemAtPosition(position);
+                //Toast.makeText(context, "Item Pressed " + String.valueOf(position) + item,
+                //        Toast.LENGTH_SHORT).show();
+                String it = "";
+                try {
+                    Log.i(LOG_TAG, "list.setOnItemClickListener" + item);
+                    it = item.get(0).toString();
+                } catch (JSONException e) {
+                    e.printStackTrace();
+                }
+                Bundle args = new Bundle();
+                args.putString("plugin", searchedPlugin);
+                args.putString("text", it);
+                args.putString("key", Long.toString(id));
+                DialogFragment SSDFragment = new SearchSelectionDialog();
+                SSDFragment.setArguments(args);
+                SSDFragment.show(getFragmentManager(), "TAG");
+
+            }
+        });
+        Log.i(LOG_TAG, "populateListDisplay - exit");
+    }
+
+    public class StableArrayAdapter extends ArrayAdapter<JSONArray> {
+
+        HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();
+
+        public StableArrayAdapter(Context context,
+                                  int textViewResourceId,
+                                  List<JSONArray> objects) {
+            super(context, textViewResourceId, objects);
+
+            for (int i = 0; i < objects.size(); ++i) {
+                JSONArray item = objects.get(i);
+                try {
+                    mIdMap.put(item.get(1).toString(), i);
+                } catch (JSONException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            // Get the data item for this position
+            //User user = getItem(position);
+            String item = null;
+            try {
+                item = getItem(position).get(1).toString();
+            } catch (JSONException e) {
+                e.printStackTrace();
+            }
+            // Check if an existing view is being reused, otherwise inflate the view
+            if (convertView == null) {
+                convertView = LayoutInflater.from(getContext()).inflate(R.layout.search_result_row,
+                        parent, false);
+            }
+            // Lookup view for data population
+            TextView tvItem = (TextView) convertView.findViewById(R.id.searchListRow);
+            // Populate the data into the template view using the data object
+            tvItem.setText(item);
+            // Return the completed view to render on screen
+            return convertView;
+        }
+
+        @Override
+        public long getItemId(int position) {
+            String item = null;
+            try {
+                item = getItem(position).get(1).toString();
+            } catch (JSONException e) {
+                e.printStackTrace();
+            }
+            return mIdMap.get(item);
+        }
+
+        @Override
+        public boolean hasStableIds() {
+            return true;
+        }
+
+    }
+
+}

=== modified file 'app/src/main/java/org/openlp/android2/fragments/ServiceListFragment.java'
--- app/src/main/java/org/openlp/android2/fragments/ServiceListFragment.java	2015-10-04 21:02:13 +0000
+++ app/src/main/java/org/openlp/android2/fragments/ServiceListFragment.java	2016-11-10 19:36:50 +0000
@@ -1,7 +1,7 @@
 /******************************************************************************
  * OpenLP - Open Source Lyrics Projection                                      *
  * --------------------------------------------------------------------------- *
- * Copyright (c) 2011-2015 OpenLP Android Developers                           *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
  * --------------------------------------------------------------------------- *
  * This program is free software; you can redistribute it and/or modify it     *
  * under the terms of the GNU General Public License as published by the Free  *
@@ -40,12 +40,10 @@
 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.HashMap;
 import java.util.List;
-import java.util.Map;
 
 
 public class ServiceListFragment extends OpenLPFragment {
@@ -64,8 +62,7 @@
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         context = getActivity();
-        updateUrl = Api.SERVICE_LIST;
-        httpClient = new OpenLPHttpClient(context);
+        urlcalled = Api.SERVICE_LIST;
         return super.onCreateView(inflater, container, savedInstanceState);
     }
 
@@ -141,10 +138,10 @@
         }
 
         // Keys used in Hashmap
-        String[] from = {"icon", "title"};
+        String[] from = {"line","icon", "title"};
 
         // Ids of views in service_list_fragment
-        int[] to = {R.id.icon, R.id.serviceListText};
+        int[] to = {R.id.servicelistLine, R.id.icon, R.id.serviceListText};
 
         SharedPreferences prefs = context.getSharedPreferences(
                 context.getString(R.string.key_shared_preferences),
@@ -158,19 +155,26 @@
         // Instantiating an adapter to store each items
         ListAdapter adapter = new SimpleAdapter(getActivity().getBaseContext(), aList,
                 R.layout.fragment_service_list, from, to) {
+
             public View getView(int position, View convertView, ViewGroup parent) {
+
                 View view = super.getView(position, convertView, parent);
+
+                TextView line = (TextView) view.findViewById(R.id.servicelistLine);
                 TextView text1 = (TextView) view.findViewById(R.id.serviceListText);
                 text1.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
                 if (selected == position) {
                     text1.setTextColor(Color.parseColor("#000000"));
                     text1.setTypeface(null, Typeface.BOLD_ITALIC);
+                    line.setBackgroundColor(0xffffff);
                 } else{
                     text1.setTypeface(null, Typeface.NORMAL);
+                    line.setBackgroundColor(0xffffff);
                 }
                 return view;
             }
         };
+
         setListAdapter(adapter);
 
         SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);

=== modified file 'app/src/main/java/org/openlp/android2/fragments/StageWebFragment.java'
--- app/src/main/java/org/openlp/android2/fragments/StageWebFragment.java	2015-01-23 17:53:00 +0000
+++ app/src/main/java/org/openlp/android2/fragments/StageWebFragment.java	2016-11-10 19:36:50 +0000
@@ -1,7 +1,7 @@
 /******************************************************************************
  * OpenLP - Open Source Lyrics Projection                                      *
  * --------------------------------------------------------------------------- *
- * Copyright (c) 2011-2015 OpenLP Android Developers                           *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
  * --------------------------------------------------------------------------- *
  * This program is free software; you can redistribute it and/or modify it     *
  * under the terms of the GNU General Public License as published by the Free  *

=== modified file 'app/src/main/java/org/openlp/android2/fragments/WebFragment.java'
--- app/src/main/java/org/openlp/android2/fragments/WebFragment.java	2015-01-19 21:09:12 +0000
+++ app/src/main/java/org/openlp/android2/fragments/WebFragment.java	2016-11-10 19:36:50 +0000
@@ -1,7 +1,7 @@
 /******************************************************************************
  * OpenLP - Open Source Lyrics Projection                                      *
  * --------------------------------------------------------------------------- *
- * Copyright (c) 2011-2015 OpenLP Android Developers                           *
+ * Copyright (c) 2011-2016 OpenLP Android Developers                           *
  * --------------------------------------------------------------------------- *
  * This program is free software; you can redistribute it and/or modify it     *
  * under the terms of the GNU General Public License as published by the Free  *
@@ -19,21 +19,18 @@
 package org.openlp.android2.fragments;
 
 import android.app.Fragment;
-import android.net.http.SslError;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.webkit.SslErrorHandler;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
 import org.openlp.android2.R;
-import org.openlp.android2.common.OpenLPHttpClient;
+import org.openlp.android2.common.OpenLPURLBuilder;
 
 public class WebFragment extends Fragment {
 
     protected String curURL;
-    private OpenLPHttpClient httpClient;
     private WebView webview;
 
     public WebFragment(){
@@ -47,7 +44,7 @@
 
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
-        httpClient = new OpenLPHttpClient(getActivity());
+
         View view = inflater.inflate(R.layout.fragment_web, container, false);
 
         if (curURL != null) {
@@ -59,7 +56,7 @@
             webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
             webview.setScrollbarFadingEnabled(true);
             webview.setWebViewClient(new webClient());
-            webview.loadUrl(String.format("%s%s", httpClient.getBaseUrl(), curURL));
+            webview.loadUrl(String.format("%s%s", OpenLPURLBuilder.getInstance().getBaseUrl(), curURL));
         }
         return view;
     }
@@ -72,14 +69,10 @@
         super.onDestroyView();
     }
 
-    private class webClient extends WebViewClient {
+    public class webClient extends WebViewClient {
         @Override
         public boolean shouldOverrideUrlLoading(WebView view, String url) {
             return false;
         }
-        @Override
-        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
-            handler.proceed(); // Ignore SSL certificate errors
-        }
     }
 }

=== added file 'app/src/main/res/drawable-hdpi/ic_search_black.png'
Binary files app/src/main/res/drawable-hdpi/ic_search_black.png	1970-01-01 00:00:00 +0000 and app/src/main/res/drawable-hdpi/ic_search_black.png	2016-11-10 19:36:50 +0000 differ
=== modified file 'app/src/main/res/drawable-hdpi/openlp_splash_screen.png'
Binary files app/src/main/res/drawable-hdpi/openlp_splash_screen.png	2014-11-16 08:57:03 +0000 and app/src/main/res/drawable-hdpi/openlp_splash_screen.png	2016-11-10 19:36:50 +0000 differ
=== added file 'app/src/main/res/drawable-mdpi/ic_search_black.png'
Binary files app/src/main/res/drawable-mdpi/ic_search_black.png	1970-01-01 00:00:00 +0000 and app/src/main/res/drawable-mdpi/ic_search_black.png	2016-11-10 19:36:50 +0000 differ
=== added file 'app/src/main/res/drawable-xhdpi/ic_search_black.png'
Binary files app/src/main/res/drawable-xhdpi/ic_search_black.png	1970-01-01 00:00:00 +0000 and app/src/main/res/drawable-xhdpi/ic_search_black.png	2016-11-10 19:36:50 +0000 differ
=== added file 'app/src/main/res/drawable-xxhdpi/ic_search_black.png'
Binary files app/src/main/res/drawable-xxhdpi/ic_search_black.png	1970-01-01 00:00:00 +0000 and app/src/main/res/drawable-xxhdpi/ic_search_black.png	2016-11-10 19:36:50 +0000 differ
=== added file 'app/src/main/res/drawable/custom_border.xml'
--- app/src/main/res/drawable/custom_border.xml	1970-01-01 00:00:00 +0000
+++ app/src/main/res/drawable/custom_border.xml	2016-11-10 19:36:50 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android";
+    android:shape="rectangle">
+
+    <padding android:left="10dp"
+        android:right="10dp"
+        android:top="10dp"
+        android:bottom="10dp"/>
+    <solid android:color="#FFF"/>
+    <stroke android:width="2px" android:color="#ffffff"/>
+</shape>
\ No newline at end of file

=== removed file 'app/src/main/res/drawable/customborder.xml'
--- app/src/main/res/drawable/customborder.xml	2015-09-20 21:02:37 +0000
+++ app/src/main/res/drawable/customborder.xml	1970-01-01 00:00:00 +0000
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android";
-    android:shape="rectangle">
-
-    <padding android:left="10dp"
-        android:right="10dp"
-        android:top="10dp"
-        android:bottom="10dp"/>
-    <solid android:color="#c4c4c4"/>
-    <stroke android:width="2px" android:color="#ffffff"/>
-</shape>
\ No newline at end of file

=== added file 'app/src/main/res/drawable/search_list.xml'
--- app/src/main/res/drawable/search_list.xml	1970-01-01 00:00:00 +0000
+++ app/src/main/res/drawable/search_list.xml	2016-11-10 19:36:50 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android";
+    android:shape="rectangle">
+
+    <padding android:left="10dp"
+        android:right="10dp"
+        android:top="10dp"
+        android:bottom="10dp"/>
+    <solid android:color="#FFF"/>
+    <stroke android:width="20px" android:color="#ffffff"/>
+</shape>
\ No newline at end of file

=== modified file 'app/src/main/res/layout-xlarge/fragment_livelist_list.xml'
--- app/src/main/res/layout-xlarge/fragment_livelist_list.xml	2015-04-19 20:12:18 +0000
+++ app/src/main/res/layout-xlarge/fragment_livelist_list.xml	2016-11-10 19:36:50 +0000
@@ -9,7 +9,16 @@
         android:smoothScrollbar="true"
         android:clickable="false"
         android:longClickable="false"
-        android:background="@drawable/customborder">
+        android:background="@drawable/custom_border">
+    <TextView
+        android:id="@+id/line"
+        android:layout_width="4dp"
+        android:layout_height="fill_parent"
+        android:paddingTop="1dp"
+        android:paddingRight="1dp"
+        android:paddingLeft="1dp"
+        android:paddingBottom="1dp"
+        android:background="#4d7bd8"/>
     <TextView
             android:id="@+id/tag"
             android:layout_width="0dp"

=== modified file 'app/src/main/res/layout/activity_main.xml'
--- app/src/main/res/layout/activity_main.xml	2015-10-08 18:25:59 +0000
+++ app/src/main/res/layout/activity_main.xml	2016-11-10 19:36:50 +0000
@@ -4,7 +4,7 @@
     android:id="@+id/drawer_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".MainActivity">
+    tools:context=".OpenLP">
 
     <!-- As the main content view, the view below consumes the entire
          space available using match_parent in both dimensions. -->

=== removed file 'app/src/main/res/layout/fragment_item_grid.xml'
--- app/src/main/res/layout/fragment_item_grid.xml	2015-05-27 20:05:55 +0000
+++ app/src/main/res/layout/fragment_item_grid.xml	1970-01-01 00:00:00 +0000
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout 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.openlp.android2.emptyFragment">
-
-    <GridView android:id="@android:id/list" android:layout_width="match_parent"
-        android:layout_height="match_parent" android:numColumns="2" />
-
-    <TextView android:id="@android:id/empty" android:layout_width="match_parent"
-        android:layout_height="match_parent" android:gravity="center" />
-
-</FrameLayout>

=== removed file 'app/src/main/res/layout/fragment_livelist_grid.xml'
--- app/src/main/res/layout/fragment_livelist_grid.xml	2015-01-19 20:26:35 +0000
+++ app/src/main/res/layout/fragment_livelist_grid.xml	1970-01-01 00:00:00 +0000
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout 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.openlp.android2.fragments.LiveListFragment">
-
-    <GridView
-        android:id="@android:id/list"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:numColumns="2" />
-
-    <LinearLayout
-            xmlns:android="http://schemas.android.com/apk/res/android";
-            android:id="@+id/fragment_live_list_layout"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:orientation="horizontal"
-            android:smoothScrollbar="true"
-            android:clickable="false"
-            android:longClickable="false">
-        <TextView
-                android:id="@+id/tag"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:textSize="14sp"
-                android:paddingTop="10dp"
-                android:paddingRight="5dp"
-                android:paddingLeft="5dp"
-                android:paddingBottom="10dp"
-                android:layout_weight="1"/>
-        <TextView
-                android:id="@+id/liveListNormal"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:textColor="#ff2a2a2a"
-                android:textSize="14sp"
-                android:paddingTop="10dp"
-                android:paddingBottom="10dp"
-                android:textStyle="normal"
-                android:layout_weight="1"/>
-    </LinearLayout>
-
-</FrameLayout>

=== modified file 'app/src/main/res/layout/fragment_livelist_list.xml'
--- app/src/main/res/layout/fragment_livelist_list.xml	2015-10-08 15:27:56 +0000
+++ app/src/main/res/layout/fragment_livelist_list.xml	2016-11-10 19:36:50 +0000
@@ -9,10 +9,19 @@
         android:smoothScrollbar="true"
         android:clickable="false"
         android:longClickable="false"
-        android:background="@drawable/customborder">
-
-    <TextView
-            android:id="@+id/tag"
+        android:background="@drawable/custom_border">
+    <TextView
+        android:id="@+id/liveListLine"
+        android:layout_width="75sp"
+        android:layout_height="wrap_content"
+        android:textSize="14sp"
+        android:paddingTop="10dp"
+        android:paddingRight="5dp"
+        android:paddingLeft="5dp"
+        android:paddingBottom="10dp"
+        android:layout_weight="1"/>
+    <TextView
+            android:id="@+id/liveListTag"
             android:layout_width="75sp"
             android:layout_height="wrap_content"
             android:textSize="14sp"
@@ -31,15 +40,4 @@
             android:paddingBottom="10dp"
             android:textStyle="normal"
             android:layout_weight="1"/>
-    <TextView
-            android:id="@+id/liveListSelected"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:textColor="#000000"
-            android:textSize="14sp"
-            android:paddingTop="10dp"
-            android:paddingBottom="10dp"
-            android:textStyle="bold|italic"
-            android:layout_weight="1"
-            android:visibility="gone"/>
 </LinearLayout>

=== added file 'app/src/main/res/layout/fragment_search.xml'
--- app/src/main/res/layout/fragment_search.xml	1970-01-01 00:00:00 +0000
+++ app/src/main/res/layout/fragment_search.xml	2016-11-10 19:36:50 +0000
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android";
+    android:orientation="vertical" android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingLeft="15dp"
+    android:paddingTop="15dp"
+    android:paddingRight="15dp"
+    >
+
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <GridLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <TextView
+                android:text="@string/select_plugin"
+                android:id="@+id/search_title"
+                android:textSize="20sp"
+                android:paddingLeft="30dp"
+                android:paddingRight="30dp"
+                android:layout_row="0"
+                android:layout_column="0"/>
+
+            <Spinner
+                android:textSize="20sp"
+                android:paddingLeft="30dp"
+                android:paddingStart="30dp"
+                android:id="@+id/search_spinner"
+                android:layout_row="0"
+                android:layout_column="1"/>
+
+            <TextView
+                android:text="@string/search_text"
+                android:textSize="20sp"
+                android:id="@+id/search_value_desc"
+                android:paddingLeft="30dp"
+                android:paddingRight="30dp"
+                android:layout_row="1"
+                android:layout_column="0"/>
+
+            <EditText
+                android:imeOptions="actionSearch"
+                android:id="@+id/search_text"
+                style="@android:style/Animation.InputMethod"
+                android:inputType="text"
+                android:textSize="22sp"
+                android:layout_row="1"
+                android:layout_column="1"
+                android:layout_width="fill_parent" />
+
+        </GridLayout>
+
+        <LinearLayout
+            android:orientation="horizontal"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:weightSum="1">
+
+            <ListView
+                android:layout_width="match_parent"
+                android:layout_height="fill_parent"
+                android:id="@+id/searchListView"
+                android:paddingLeft="30dp"
+                android:paddingRight="30dp"
+                android:textSize="15sp"
+                android:height="70dp"
+                android:layout_weight="0.8"
+                android:background="@drawable/search_list"/>
+
+        </LinearLayout>
+    </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file

=== modified file 'app/src/main/res/layout/fragment_service_list.xml'
--- app/src/main/res/layout/fragment_service_list.xml	2015-04-19 20:12:18 +0000
+++ app/src/main/res/layout/fragment_service_list.xml	2016-11-10 19:36:50 +0000
@@ -9,11 +9,23 @@
         android:smoothScrollbar="true"
         android:clickable="false"
         android:longClickable="false"
-        android:background="@drawable/customborder">
+        android:background="@drawable/custom_border">
+
+    <TextView
+        android:id="@+id/servicelistLine"
+        android:layout_width="4dp"
+        android:layout_height="36dp"
+        android:paddingTop="10dp"
+        android:paddingRight="5dp"
+        android:paddingEnd="5dp"
+        android:paddingLeft="5dp"
+        android:paddingBottom="10dp"
+        android:background="#4d7bd8"/>
+
     <ImageView
             android:id="@+id/icon"
             android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
+            android:layout_height="36dp"
             android:paddingTop="10dp"
             android:paddingRight="5dp"
             android:paddingEnd="5dp"
@@ -24,7 +36,7 @@
             android:id="@+id/serviceListText"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:textStyle="bold"
+            android:textStyle="normal"
             android:textColor="#000000"
             android:textSize="14sp"
             android:paddingTop="10dp"

=== removed file 'app/src/main/res/layout/fragment_servicelist_grid.xml'
--- app/src/main/res/layout/fragment_servicelist_grid.xml	2014-11-15 22:03:01 +0000
+++ app/src/main/res/layout/fragment_servicelist_grid.xml	1970-01-01 00:00:00 +0000
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout 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.openlp.android2.fragments.ServiceListFragment">
-
-    <GridView
-        android:id="@android:id/list"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:numColumns="2" />
-
-    <TextView
-        android:id="@android:id/empty"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:gravity="center" />
-
-</FrameLayout>

=== added file 'app/src/main/res/layout/search_action_dialog.xml'
--- app/src/main/res/layout/search_action_dialog.xml	1970-01-01 00:00:00 +0000
+++ app/src/main/res/layout/search_action_dialog.xml	2016-11-10 19:36:50 +0000
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android";
+
+    android:orientation="vertical"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:weightSum="1">
+    <TextView
+        android:layout_width="315dp"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:text="@string/searchResults"
+        android:id="@+id/textView"
+        android:textStyle="bold|italic"
+        android:textSize="40px"
+        android:height="70px"
+        android:layout_marginTop="10dp"
+        android:layout_marginBottom="10dp"/>
+    <RadioButton
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/searchSendLive"
+        android:id="@+id/buttonLive"
+        android:textSize="20sp"
+        android:height="30dp"
+        android:clickable="true"
+        android:layout_marginTop="20dp"
+        android:layout_marginBottom="20dp"/>
+    <RadioButton
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/searchAddToService"
+        android:id="@+id/buttonService"
+        android:textSize="20sp"
+        android:height="40dp"
+        android:clickable="true"
+        android:layout_marginTop="20dp"
+        android:layout_marginBottom="20dp"/>
+</LinearLayout>
\ No newline at end of file

=== added file 'app/src/main/res/layout/search_result_row.xml'
--- app/src/main/res/layout/search_result_row.xml	1970-01-01 00:00:00 +0000
+++ app/src/main/res/layout/search_result_row.xml	2016-11-10 19:36:50 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android";
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical" >
+
+    <TextView android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textStyle="bold"
+        android:textColor="#000000"
+        android:textSize="25sp"
+        android:paddingTop="10dp"
+        android:paddingRight="5dp"
+        android:paddingLeft="5dp"
+        android:paddingEnd="5dp"
+        android:paddingBottom="10dp"
+        android:id="@+id/searchListRow"/>
+</LinearLayout>
\ No newline at end of file

=== added file 'app/src/main/res/layout/spinner_dropdown_item.xml'
--- app/src/main/res/layout/spinner_dropdown_item.xml	1970-01-01 00:00:00 +0000
+++ app/src/main/res/layout/spinner_dropdown_item.xml	2016-11-10 19:36:50 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android";
+    android:id="@android:id/text1"
+    style="?android:attr/spinnerDropDownItemStyle"
+    android:singleLine="true"
+    android:layout_width="match_parent"
+    android:layout_height="?android:attr/listPreferredItemHeight"
+    android:ellipsize="marquee"
+    android:textColor="#000"
+    android:textStyle="bold|italic"
+    android:textAppearance="?android:attr/textAppearanceLarge"/>
\ No newline at end of file

=== added file 'app/src/main/res/layout/spinner_list_item.xml'
--- app/src/main/res/layout/spinner_list_item.xml	1970-01-01 00:00:00 +0000
+++ app/src/main/res/layout/spinner_list_item.xml	2016-11-10 19:36:50 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android";
+    android:id="@android:id/text1"
+    style="?android:attr/spinnerItemStyle"
+    android:singleLine="true"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:textColor="#000"
+    android:textAppearance="?android:attr/textAppearanceLarge"
+    android:ellipsize="marquee"
+    android:textStyle="bold|italic" />
\ No newline at end of file

=== modified file 'app/src/main/res/menu/open_l.xml'
--- app/src/main/res/menu/open_l.xml	2015-05-27 20:05:55 +0000
+++ app/src/main/res/menu/open_l.xml	2016-11-10 19:36:50 +0000
@@ -16,10 +16,6 @@
           android:icon="@drawable/ic_refresh_white"
           android:title="@string/action_refresh"
           app:showAsAction="ifRoom" />
-    <item android:id="@+id/action_search"
-          android:icon="@drawable/ic_search_white"
-          android:title="@string/action_search"
-          app:showAsAction="never|withText" />
     <item android:id="@+id/action_preferences"
           android:icon="@android:drawable/ic_menu_preferences"
           android:title="@string/action_preferences"

=== modified file 'app/src/main/res/values-af/strings.xml'
--- app/src/main/res/values-af/strings.xml	2015-05-30 05:53:10 +0000
+++ app/src/main/res/values-af/strings.xml	2016-11-10 19:36:50 +0000
@@ -1,8 +1,12 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <resources>
+  <string name="about_display_1">OpenLP is \'n gratis kerk skyfievertoning sagteware</string>
+  <string name="about_display_2">Besoek die OpenLP webwerf vir meer inligting</string>
   <string name="about_display_4">Kopiereg</string>
   <string name="about_display_5">Gedeeltelike kopiereg</string>
   <string name="about_display_6">Lisensie</string>
+  <string name="about_display_7">Hierdie program is gratis; jy kan dit herversprei of verander volgens die GNU Algemene Publieke Lisensie se voorwaardes, wat gepubliseer is deur die Free Software Foundation; weergawe 2 van die lisensie.</string>
+  <string name="about_display_8">Hierdie program word versprei met die hoop dat dit nuttig sal wees, maar SONDER ENIGE WAARBORG; selfs sonder \'n geimpliseerde waarborg dat dit TOEPASLIK IS VIR \'N SPESIFIEKE DOEL</string>
   <string name="action_settings">Instellings</string>
   <string name="action_about">Aangaande</string>
   <string name="action_alert">Waarskuwing</string>
@@ -12,14 +16,39 @@
   <string name="action_search">Soek</string>
   <string name="app_name">OpenLP</string>
   <string name="cancel">Kanselleer</string>
+  <string name="connection_configuration">Konfigureer Netwerk</string>
+  <string name="connection_password">Wagwoord</string>
+  <string name="connection_profile">Bediener Inligting</string>
   <string name="connection_timeout">Konneksie Tyd-uitloop</string>
   <string name="connection_timeout_summary">Kies \'n waarde (millisekondes)</string>
-  <string name="display_blank_summary">Kies die gevraagde blanko tipe</string>
+  <string name="connection_userid">Gebruikernaame</string>
+  <string name="custom_timeout">Stel pasgemaakte tyd afsnypunt</string>
+  <string name="display_blank_summary">Kies die verlangde skerm</string>
+  <string name="display_desktop">Vertoon Werkvlak agtergrond</string>
+  <string name="display_list_autoscroll">Laat die gekose item toe om na die middel van die lys te beweeg</string>
+  <string name="display_reset">Vertoon lewendige skerm</string>
+  <string name="display_settings">Vertoon Verstelling</string>
+  <string name="display_screen">Vertoon slegs Swart skerm</string>
+  <string name="display_theme">Vertoon slegs Tema</string>
   <string name="enable_custom_timeouts">Bekragtig Aangepasde Tyd-uitlope</string>
+  <string name="enter_alert_text">Voer Afkondiging teks in</string>
+  <string name="enable_autoscroll">Laat skerms toe op outomatiese te sentreer</string>
   <string name="home">Tuis</string>
+  <string name="httpreturn_unauthorised">Ongemagtigde Toegang, voer asb \'n geldige gebruikernaam en wagwoord in.</string>
+  <string name="live_list">Lewendige Vertoonlys</string>
+  <string name="live_view">Lewendige Kykskerm</string>
+  <string name="navigation_drawer_open">Maak navigeer vouer oop</string>
+  <string name="navigation_drawer_close">Sluit navigeer vouer</string>
+  <string name="next">Volgende</string>
   <string name="none">Geen</string>
   <string name="port">Poort</string>
+  <string name="previous">Vorige</string>
+  <string name="process">Voer uit</string>
+  <string name="service_list">Orde van diens</string>
+  <string name="stage_view">Verhoog skerm</string>
+  <string name="text_size">Kies die grootte van die vertoning-teks</string>
   <string name="text_size_summary">Verander die Diens teks grootte</string>
   <string name="title_activity_settings">Instellings</string>
   <string name="url_hint">Gasheer naam of IP</string>
+  <string name="unable">Kan nie die versoek uitvoer nie - gaan jou netwerk verstellings na</string>
 </resources>

=== modified file 'app/src/main/res/values-bg/strings.xml'
--- app/src/main/res/values-bg/strings.xml	2015-05-30 05:53:10 +0000
+++ app/src/main/res/values-bg/strings.xml	2016-11-10 19:36:50 +0000
@@ -13,11 +13,12 @@
   <string name="cancel">Откажи</string>
   <string name="connection_timeout">Времето за изчакване на свързването</string>
   <string name="connection_timeout_summary">Избери стойност (в милисекунди)</string>
-  <string name="display_blank_summary">Избери изисквания тип на празнота</string>
   <string name="enable_custom_timeouts">Активирай клиентски срокове</string>
   <string name="home">Начало</string>
+  <string name="next">След.</string>
   <string name="none">Нищо</string>
   <string name="port">Порт</string>
+  <string name="previous">назад</string>
   <string name="text_size_summary">Промени размера на текста за Службата</string>
   <string name="title_activity_settings">Настройки</string>
   <string name="url_hint">Hostname или IP</string>

=== modified file 'app/src/main/res/values-cs/strings.xml'
--- app/src/main/res/values-cs/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-cs/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,8 +20,6 @@
   <string name="connection_configuration">Nastavení sítě</string>
   <string name="connection_password">Heslo</string>
   <string name="connection_profile">Podrobnosti serveru</string>
-  <string name="connection_profile_ssl_use">Použít HTTPS</string>
-  <string name="connection_profile_ssl_summary">Upřesnit jestli použít HTTPS</string>
   <string name="connection_timeout">Časový limit spojení</string>
   <string name="connection_timeout_summary">Vybrat hodnotu (milisekundy)</string>
   <string name="connection_userid">Uživatelské jméno</string>

=== modified file 'app/src/main/res/values-da/strings.xml'
--- app/src/main/res/values-da/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-da/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,22 +20,24 @@
   <string name="connection_configuration">Konfigurér netværk</string>
   <string name="connection_password">Adgangskode</string>
   <string name="connection_profile">Serverdetaljer</string>
-  <string name="connection_profile_ssl_use">Benyt HTTPS</string>
-  <string name="connection_profile_ssl_summary">Angiv om HTTPS skal benyttes</string>
   <string name="connection_timeout">Timeout for forbindelse</string>
   <string name="connection_timeout_summary">Vælg en værdi (millisekunder)</string>
   <string name="connection_userid">Brugernavn</string>
   <string name="custom_timeout">Sæt brugerdefineret timeout</string>
   <string name="display_blank_summary">Vælg den ønskede skærm</string>
   <string name="display_desktop">Vis skrivebordsbaggrund</string>
+  <string name="display_list_autoscroll">Tillad centrering af det valgte element</string>
   <string name="display_reset">Vis fremvisningsskærm</string>
+  <string name="display_settings">Visningsindstillinger</string>
   <string name="display_screen">Vis kun sort</string>
   <string name="display_theme">Vis kun temabaggrund</string>
   <string name="enable_custom_timeouts">Aktiver brugerdefinerede timeouts</string>
   <string name="enter_alert_text">Indtast meddelelsestekst</string>
+  <string name="enable_autoscroll">Tiilad autocentrering</string>
   <string name="home">Hjem</string>
   <string name="httpreturn_unauthorised">Adgang ikke godkendt. Indtast gyldigt brugernavn og adgangskode</string>
   <string name="live_list">Fremvisningsliste</string>
+  <string name="live_view">Præsentationsvisning</string>
   <string name="navigation_drawer_open">Åbn navigationsskuffe</string>
   <string name="navigation_drawer_close">Luk navigationsskuffe</string>
   <string name="next">Næste</string>

=== modified file 'app/src/main/res/values-de/strings.xml'
--- app/src/main/res/values-de/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-de/strings.xml	2016-11-10 19:36:50 +0000
@@ -1,8 +1,8 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <resources>
-  <string name="about_display_1">OpenLP ist eine freie Präsentationssoftware für Kirchen und Gemeinden. Erfahre mehr über OpenLP.</string>
+  <string name="about_display_1">OpenLP ist eine freie Präsentationssoftware für Kirchen und Gemeinden.</string>
   <string name="about_display_2">Weitere Informationen sind auf der OpenLP Webseite zu finden.</string>
-  <string name="about_display_4">Copyright</string>
+  <string name="about_display_4">Urheberrecht</string>
   <string name="about_display_5">Anteiliges Urheberrecht</string>
   <string name="about_display_6">Lizenz</string>
   <string name="about_display_7">Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License Version 2, herausgegeben von der Free Software Foundation, weitergeben und/oder modifizieren.</string>
@@ -12,7 +12,7 @@
   <string name="action_alert">Hinweis</string>
   <string name="action_back">Zurück</string>
   <string name="action_blank">Anzeige umschalten</string>
-  <string name="action_preferences">Voreinstellungen</string>
+  <string name="action_preferences">Einstellungen</string>
   <string name="action_refresh">Aktualisieren</string>
   <string name="action_search">Suche</string>
   <string name="app_name">OpenLP</string>
@@ -20,20 +20,20 @@
   <string name="connection_configuration">Netzwerk einrichten</string>
   <string name="connection_password">Passwort</string>
   <string name="connection_profile">Server-Einstellungen</string>
-  <string name="connection_profile_ssl_use">HTTPS benutzen</string>
-  <string name="connection_profile_ssl_summary">Festlegen, ob HTTPS verwendet werden soll</string>
   <string name="connection_timeout">Verbindungzeit überschritten</string>
   <string name="connection_timeout_summary">Wähle einen Wert (in Millisekunden)</string>
   <string name="connection_userid">Benutzername</string>
-  <string name="custom_timeout">Setze eigenes Zeitlimit</string>
+  <string name="custom_timeout">Setze benutzerdefiniertes Zeitlimit</string>
   <string name="display_blank_summary">Wähle die erforderlichen Ansicht</string>
   <string name="display_desktop">Bildschirmhintergrund anzeigen</string>
+  <string name="display_list_autoscroll">Ausgewähltes Item mittig in Liste</string>
   <string name="display_reset">Live-Ansicht anzeigen</string>
   <string name="display_settings">Anzeigeeinstellung</string>
   <string name="display_screen">Abdunkeln</string>
   <string name="display_theme">Nur Design anzeigen</string>
   <string name="enable_custom_timeouts">Aktiviere eigene Time-outs</string>
   <string name="enter_alert_text">Hinweis eingeben</string>
+  <string name="enable_autoscroll">Anzeigen automatisch zentrieren</string>
   <string name="home">Start</string>
   <string name="httpreturn_unauthorised">Zugriff nicht erlaubt, bitte einen gültigen Benutzernamen und das korrekte Passwort eingeben</string>
   <string name="live_list">Live Liste</string>

=== modified file 'app/src/main/res/values-en-rGB/strings.xml'
--- app/src/main/res/values-en-rGB/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-en-rGB/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,8 +20,6 @@
   <string name="connection_configuration">Configure Network</string>
   <string name="connection_password">Password</string>
   <string name="connection_profile">Server Details</string>
-  <string name="connection_profile_ssl_use">Use HTTPS</string>
-  <string name="connection_profile_ssl_summary">Specify whether HTTPS should be used</string>
   <string name="connection_timeout">Connection Timeout</string>
   <string name="connection_timeout_summary">Select a value (milliseconds)</string>
   <string name="connection_userid">Username</string>

=== modified file 'app/src/main/res/values-en-rZA/strings.xml'
--- app/src/main/res/values-en-rZA/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-en-rZA/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,8 +20,6 @@
   <string name="connection_configuration">Configure Network</string>
   <string name="connection_password">Password</string>
   <string name="connection_profile">Server Details</string>
-  <string name="connection_profile_ssl_use">Use HTTPS</string>
-  <string name="connection_profile_ssl_summary">Specify whether HTTPS should be used</string>
   <string name="connection_timeout">Connection Timeout</string>
   <string name="connection_timeout_summary">Select a value (milliseconds)</string>
   <string name="connection_userid">Username</string>

=== modified file 'app/src/main/res/values-es/strings.xml'
--- app/src/main/res/values-es/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-es/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,23 +20,24 @@
   <string name="connection_configuration">Configurar Red</string>
   <string name="connection_password">Clave</string>
   <string name="connection_profile">Detalles de Servidor</string>
-  <string name="connection_profile_ssl_use">Usar HTTPS</string>
-  <string name="connection_profile_ssl_summary">Especificar si se debe usar HTTPS</string>
   <string name="connection_timeout">Tiempo de espera de conexión</string>
   <string name="connection_timeout_summary">Seleccione un valor (en milisegundos)</string>
   <string name="connection_userid">Usuario</string>
   <string name="custom_timeout">Tiempo de espera personalizado</string>
   <string name="display_blank_summary">Seleccionar la pantalla requerida</string>
   <string name="display_desktop">Mostrar Fondo del Escritorio</string>
+  <string name="display_list_autoscroll">Permitir que el elemento actual se desplace hacia el centro de la lista</string>
   <string name="display_reset">Mostrar pantalla En Vivo</string>
   <string name="display_settings">Preferencias de pantalla</string>
   <string name="display_screen">Mostrar Negro solamente</string>
   <string name="display_theme">Mostrar Tema solamente</string>
   <string name="enable_custom_timeouts">Permitir tiempos de espera personalizados</string>
   <string name="enter_alert_text">Ingrese Texto de Alerta</string>
+  <string name="enable_autoscroll">Permitir auto centrado de pantalla</string>
   <string name="home">Inicio</string>
   <string name="httpreturn_unauthorised">Acceso No Autorizado, ingrese usuario y clave válidos</string>
   <string name="live_list">Lista En Vivo</string>
+  <string name="live_view">Vista En Vivo</string>
   <string name="navigation_drawer_open">Abrir cajón de navegación</string>
   <string name="navigation_drawer_close">Cerrar cajón de navegación</string>
   <string name="next">Siguiente</string>

=== modified file 'app/src/main/res/values-et/strings.xml'
--- app/src/main/res/values-et/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-et/strings.xml	2016-11-10 19:36:50 +0000
@@ -18,8 +18,6 @@
   <string name="connection_configuration">Seadista võrk</string>
   <string name="connection_password">Parool</string>
   <string name="connection_profile">Serveri andmed</string>
-  <string name="connection_profile_ssl_use">HTTPSi kasutamine</string>
-  <string name="connection_profile_ssl_summary">Määra, kas kasutada tuleks HTTPSi kaudu ühendust</string>
   <string name="connection_timeout">Ühenduse aegumine</string>
   <string name="connection_timeout_summary">Vali kestus (millisekundid)</string>
   <string name="connection_userid">Kasutajanimi</string>
@@ -36,6 +34,7 @@
   <string name="home">Kodu</string>
   <string name="httpreturn_unauthorised">Lubamatu ligipääs, palun sisesta õiged kasutajanimi ja parool.</string>
   <string name="live_list">Ekraanil</string>
+  <string name="live_view">Ekraan</string>
   <string name="navigation_drawer_open">Ava navisahtel</string>
   <string name="navigation_drawer_close">Sulge navisahtel</string>
   <string name="next">Järgmine</string>

=== modified file 'app/src/main/res/values-fi/strings.xml'
--- app/src/main/res/values-fi/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-fi/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,8 +20,6 @@
   <string name="connection_configuration">Verkon asetukset</string>
   <string name="connection_password">Salasana</string>
   <string name="connection_profile">Palvelimen asetukset</string>
-  <string name="connection_profile_ssl_use">Käytä HTTPS</string>
-  <string name="connection_profile_ssl_summary">Määrittele tahdotaanko HTTPS ottaa käyttöön</string>
   <string name="connection_timeout">Yhteyden aikakatkaisu</string>
   <string name="connection_timeout_summary">Valitse arvo (millisekuntia)</string>
   <string name="connection_userid">Käyttäjätunnus</string>

=== modified file 'app/src/main/res/values-fr/strings.xml'
--- app/src/main/res/values-fr/strings.xml	2015-05-30 05:53:10 +0000
+++ app/src/main/res/values-fr/strings.xml	2016-11-10 19:36:50 +0000
@@ -1,25 +1,55 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <resources>
+  <string name="about_display_1">OpenLP est un logiciel de projection libre</string>
+  <string name="about_display_2">Pour en savoir plus visitez le site web d\'OpenLP</string>
   <string name="about_display_4">Copyright</string>
   <string name="about_display_5">Copyright partiel</string>
   <string name="about_display_6">Licence</string>
+  <string name="about_display_7">Ce programme est un logiciel libre; vous pouvez le redistribuer et/ou le modifier au titre des clauses de la Licence Publique Générale GNU, telle que publiée par la Free Software Foundation; version 2 de la Licence.</string>
+  <string name="about_display_8">Ce programme est distribué dans l\'espoir qu\'il sera utile, mais SANS AUCUNE GARANTIE ; sans même une garantie implicite de COMMERCIABILITÉ ou DE CONFORMITÉ À UNE UTILISATION PARTICULIÈRE.</string>
   <string name="action_settings">Paramètres</string>
   <string name="action_about">A propos de</string>
   <string name="action_alert">Alerte</string>
   <string name="action_back">Arrière</string>
+  <string name="action_blank">Afficher/Masquer</string>
   <string name="action_preferences">Préférences</string>
   <string name="action_refresh">Rafraîchir</string>
   <string name="action_search">Recherche</string>
   <string name="app_name">OpenLP</string>
   <string name="cancel">Annuler</string>
+  <string name="connection_configuration">Configuration du réseau</string>
+  <string name="connection_password">Mot de passe</string>
+  <string name="connection_profile">Détails du serveur</string>
   <string name="connection_timeout">Délai de connexion</string>
   <string name="connection_timeout_summary">Sélectionnez une valeur (millisecondes)</string>
-  <string name="display_blank_summary">Sélectionnez le type vide requis</string>
+  <string name="connection_userid">Nom d\'utilisateur</string>
+  <string name="custom_timeout">Définir un délai personnalisé</string>
+  <string name="display_blank_summary">Sélectionner l\'affichage souhaité</string>
+  <string name="display_desktop">Afficher le fond du bureau</string>
+  <string name="display_list_autoscroll">Permettre à l\'élément sélectionné de défiler au centre de la liste</string>
+  <string name="display_reset">Afficher le direct</string>
+  <string name="display_settings">Paramètres d\'affichage</string>
+  <string name="display_screen">Afficher un écran noir</string>
+  <string name="display_theme">Afficher uniquement le thème</string>
   <string name="enable_custom_timeouts">Activer le délai personnalisé</string>
+  <string name="enter_alert_text">Entrer le message d\'alerte</string>
+  <string name="enable_autoscroll">Permettre les affichages au centre</string>
   <string name="home">Accueil</string>
+  <string name="httpreturn_unauthorised">Accès refusé, veuillez entrer un nom d\'utilisateur et un mot de passe valide</string>
+  <string name="live_list">Liste du direct</string>
+  <string name="live_view">Vue du direct</string>
+  <string name="navigation_drawer_open">Ouvrir le tiroir de navigation</string>
+  <string name="navigation_drawer_close">Fermer le tiroir de navigation</string>
+  <string name="next">Suivant</string>
   <string name="none">Rien</string>
   <string name="port">Port</string>
+  <string name="previous">Précédent</string>
+  <string name="process">Processus</string>
+  <string name="service_list">Liste du service</string>
+  <string name="stage_view">Prompteur</string>
+  <string name="text_size">Sélectionner la taille du texte</string>
   <string name="text_size_summary">Modifier la taille du texte du service</string>
   <string name="title_activity_settings">Paramètres</string>
   <string name="url_hint">Nom d\'hôte ou IP</string>
+  <string name="unable">Impossible d\'effectuer la demande - vérifiez les paramètres réseau</string>
 </resources>

=== modified file 'app/src/main/res/values-hu/strings.xml'
--- app/src/main/res/values-hu/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-hu/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,13 +20,11 @@
   <string name="connection_configuration">Hálózat beállítása</string>
   <string name="connection_password">Jelszó</string>
   <string name="connection_profile">Szerver részletek</string>
-  <string name="connection_profile_ssl_use">HTTPS alkalmazása</string>
-  <string name="connection_profile_ssl_summary">HTTPS alkalmazásának meghatározása</string>
   <string name="connection_timeout">Kapcsolódási időtúllépés</string>
-  <string name="connection_timeout_summary">Válassz egy értéket (milliszekundum)</string>
+  <string name="connection_timeout_summary">Érték választása (milliszekundum)</string>
   <string name="connection_userid">Felhasználói név</string>
   <string name="custom_timeout">Egyéni időtúllépés beállítása</string>
-  <string name="display_blank_summary">Válaszd ki a kívánt megjelenést</string>
+  <string name="display_blank_summary">Kívánt megjelenés kiválasztása</string>
   <string name="display_desktop">Asztal hátterének megjelenítése</string>
   <string name="display_list_autoscroll">Görgetés a lista közepére a kijelölt elemhez</string>
   <string name="display_reset">Élő adás megjelenítése</string>
@@ -37,7 +35,7 @@
   <string name="enter_alert_text">Riasztási üzenet megadása</string>
   <string name="enable_autoscroll">Megjelenés automatikus középre igazítása</string>
   <string name="home">Kezdőlap</string>
-  <string name="httpreturn_unauthorised">Engedély nélküli hozzáférés, adjon meg érvényes felhasználói nevet és jelszót</string>
+  <string name="httpreturn_unauthorised">Engedély nélküli hozzáférés, érvényes a felhasználói név és a jelszó?</string>
   <string name="live_list">Élő lista</string>
   <string name="live_view">Élő nézet</string>
   <string name="navigation_drawer_open">Menü megnyitása</string>
@@ -53,5 +51,5 @@
   <string name="text_size_summary">Sorrend betűméretének módosítása</string>
   <string name="title_activity_settings">Beállítások</string>
   <string name="url_hint">Gépnév vagy IP-cím</string>
-  <string name="unable">A kérés feldolgozhatatlan - ellenőrizzük a hálózati beállításokat</string>
+  <string name="unable">A kérés feldolgozhatatlan ‒ a hálózati beállítások ellenőrzése javasolt</string>
 </resources>

=== modified file 'app/src/main/res/values-id/strings.xml'
--- app/src/main/res/values-id/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-id/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,22 +20,24 @@
   <string name="connection_configuration">Mengkonfigurasi Jaringan</string>
   <string name="connection_password">Kata sandi</string>
   <string name="connection_profile">Rincian Server</string>
-  <string name="connection_profile_ssl_use">Gunakan HTTPS</string>
-  <string name="connection_profile_ssl_summary">Tentukan apakah HTTPS seharusnya digunakan</string>
   <string name="connection_timeout">Batas-Waktu Sambungan</string>
   <string name="connection_timeout_summary">Pilih sebuah nilai (milidetik)</string>
   <string name="connection_userid">Nama Pengguna</string>
   <string name="custom_timeout">Setel Batas-waktu Kustom</string>
   <string name="display_blank_summary">Pilih tampilan yang dibutuhkan</string>
   <string name="display_desktop">Tampilkan latar Desktop</string>
+  <string name="display_list_autoscroll">Izinkan butir terpilih untuk digulir ke tengah daftar</string>
   <string name="display_reset">Tampilkan tampilan Tayang</string>
+  <string name="display_settings">Setelan Tampilan</string>
   <string name="display_screen">Tampilkan Layar Hitam saja</string>
   <string name="display_theme">Tampilkan Tema saja</string>
   <string name="enable_custom_timeouts">Aktifkan Batas-Waktu Kustom</string>
   <string name="enter_alert_text">Masukkan Teks Peringatan</string>
+  <string name="enable_autoscroll">Izinkan semua tampilan diposisikan ke tengah secara otomatis</string>
   <string name="home">Beranda</string>
   <string name="httpreturn_unauthorised">Akses Tidak sah, silakan masukkan nama pengguna dan kata sandi yang valid</string>
   <string name="live_list">Daftar Tayang</string>
+  <string name="live_view">Tinjauan Tayang</string>
   <string name="navigation_drawer_open">Buka penarik navigasi</string>
   <string name="navigation_drawer_close">Tutup penarik navigasi</string>
   <string name="next">Selanjutnya</string>

=== modified file 'app/src/main/res/values-it/strings.xml'
--- app/src/main/res/values-it/strings.xml	2015-05-30 05:53:10 +0000
+++ app/src/main/res/values-it/strings.xml	2016-11-10 19:36:50 +0000
@@ -1,6 +1,55 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <resources>
-  <string name="about_display_6">Licensa</string>
-  <string name="action_alert">Allerta</string>
+  <string name="about_display_1">OpenLP è un software libero di presentazione per le Chiese</string>
+  <string name="about_display_2">Per saperne di più visita il sito Web OpenLP</string>
+  <string name="about_display_4">Copyright</string>
+  <string name="about_display_5">Porzioni di copyright</string>
+  <string name="about_display_6">Licenza</string>
+  <string name="about_display_7">Questo è un software libero; può essere redistribuito e/o modificato nei termini della GNU General Public License come pubblicato dalla Free Software Foundation; vesione 2 della licenza</string>
+  <string name="about_display_8">Questo programma è distribuito nella speranza che sia utile, ma SENZA ALCUNA GARANZIA, senza neppure l\'implicita garanzia della COMMERCIABILITA\' o IDONEITA\' PER UN PARTICOLARE SCOPO</string>
+  <string name="action_settings">Impostazioni</string>
+  <string name="action_about">Informazioni</string>
+  <string name="action_alert">Avviso</string>
+  <string name="action_back">Indietro</string>
+  <string name="action_blank">Attiva/disattiva visualizzazione</string>
+  <string name="action_preferences">Preferenze</string>
+  <string name="action_refresh">Aggiorna</string>
   <string name="action_search">Ricerca</string>
+  <string name="app_name">OpenLP</string>
+  <string name="cancel">Annulla</string>
+  <string name="connection_configuration">Configura Rete</string>
+  <string name="connection_password">Password</string>
+  <string name="connection_profile">Dettagli Server</string>
+  <string name="connection_timeout">Timeout Connessione</string>
+  <string name="connection_timeout_summary">Seleziona un valore (millisecondi)</string>
+  <string name="connection_userid">Nome Utente</string>
+  <string name="custom_timeout">Imposta Timeout personalizzato</string>
+  <string name="display_blank_summary">Selezionare il monitor desiderato</string>
+  <string name="display_desktop">Visualizza sfondo Desktop</string>
+  <string name="display_list_autoscroll">Consentire l\'elemento selezionato di scorrere al centro dell\'elenco</string>
+  <string name="display_reset">Visualizzazione Live Show</string>
+  <string name="display_settings">Impostazione Visualizzazione</string>
+  <string name="display_screen">Solo Schermo Nero</string>
+  <string name="display_theme">Visualizza solo il Tema</string>
+  <string name="enable_custom_timeouts">Abilitare i timeout personalizzati</string>
+  <string name="enter_alert_text">Inserisci il testo Avviso</string>
+  <string name="enable_autoscroll">Consenti la visualizzazione al centro automaticamente</string>
+  <string name="home">Inizio</string>
+  <string name="httpreturn_unauthorised">Accesso non consentito, prego inserire un nome utente e password valida</string>
+  <string name="live_list">Elenco LIVE</string>
+  <string name="live_view">Visualizza LIVE</string>
+  <string name="navigation_drawer_open">Apri sezione navigazione</string>
+  <string name="navigation_drawer_close">Chiudi sezione navigazione</string>
+  <string name="next">Successivo</string>
+  <string name="none">Nessuno</string>
+  <string name="port">Porta</string>
+  <string name="previous">Precedente</string>
+  <string name="process">Elabora</string>
+  <string name="service_list">Elenco Servizio</string>
+  <string name="stage_view">Visualizza Palco</string>
+  <string name="text_size">Selezionare la dimensione testo di visualizzazione</string>
+  <string name="text_size_summary">Modificare le dimensioni del testo di servizio</string>
+  <string name="title_activity_settings">Impostazioni</string>
+  <string name="url_hint">Hostname o IP</string>
+  <string name="unable">Impossibile elaborare la richiesta - controllare le impostazioni di rete</string>
 </resources>

=== modified file 'app/src/main/res/values-ja/strings.xml'
--- app/src/main/res/values-ja/strings.xml	2015-05-30 05:53:10 +0000
+++ app/src/main/res/values-ja/strings.xml	2016-11-10 19:36:50 +0000
@@ -1,8 +1,12 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <resources>
+  <string name="about_display_1">OpenLPは無償の教会プレゼンテーション用ソフトです。</string>
+  <string name="about_display_2">詳しくはOpenLPウェブサイトをご覧ください。</string>
   <string name="about_display_4">著作権</string>
   <string name="about_display_5">追加の著作権</string>
   <string name="about_display_6">ライセンス</string>
+  <string name="about_display_7">このプログラムはフリーソフトウェアです。あなたはこれを、フリーソフトウェア財団によって発行された GNU 一般公衆利用許諾契約書バージョン2の定める条件の下で再頒布または改変することができます。</string>
+  <string name="about_display_8">このプログラムは有用であることを願って頒布されますが、*全くの無保証* です。商業可能性の保証や特定の目的への適合性は、言外に示されたものも含め全く存在しません。</string>
   <string name="action_settings">設定</string>
   <string name="action_about">情報</string>
   <string name="action_alert">警告</string>
@@ -12,13 +16,23 @@
   <string name="action_search">検索</string>
   <string name="app_name">OpenLP</string>
   <string name="cancel">キャンセル</string>
+  <string name="connection_configuration">ネットワーク設定</string>
+  <string name="connection_password">パスワード</string>
+  <string name="connection_profile">サーバの詳細</string>
   <string name="connection_timeout">接続タイムアウト</string>
   <string name="connection_timeout_summary">値を選択 (ミリ秒)</string>
-  <string name="display_blank_summary">ブランクの種類を選択してください</string>
+  <string name="connection_userid">ユーザ名</string>
+  <string name="custom_timeout">任意のタイムアウト時間を設定する</string>
   <string name="enable_custom_timeouts">任意のタイムアウトを有効にする</string>
+  <string name="enter_alert_text">警告文を入力</string>
   <string name="home">ホーム</string>
+  <string name="httpreturn_unauthorised">認証が必要です。ユーザ名とパスワードを入力してください。</string>
+  <string name="live_list">ライブ一覧</string>
+  <string name="next">次</string>
   <string name="none">無し</string>
   <string name="port">ポート</string>
+  <string name="previous">前</string>
+  <string name="text_size">文字の大きさを選択</string>
   <string name="text_size_summary">礼拝テキストの大きさを変更します</string>
   <string name="title_activity_settings">設定</string>
   <string name="url_hint">ホスト名またはIPアドレス</string>

=== modified file 'app/src/main/res/values-ko/strings.xml'
--- app/src/main/res/values-ko/strings.xml	2015-05-30 05:53:10 +0000
+++ app/src/main/res/values-ko/strings.xml	2016-11-10 19:36:50 +0000
@@ -2,9 +2,14 @@
 <resources>
   <string name="about_display_6">라이선스</string>
   <string name="action_settings">설정</string>
+  <string name="action_about">정보</string>
   <string name="action_alert">알림</string>
+  <string name="action_back">뒤로</string>
+  <string name="action_refresh">새로 고침</string>
   <string name="action_search">검색</string>
   <string name="cancel">취소</string>
+  <string name="home">처음</string>
+  <string name="next">다음</string>
   <string name="port">포트</string>
   <string name="title_activity_settings">설정</string>
 </resources>

=== modified file 'app/src/main/res/values-large/refs.xml'
--- app/src/main/res/values-large/refs.xml	2015-05-27 20:05:55 +0000
+++ app/src/main/res/values-large/refs.xml	2016-11-10 19:36:50 +0000
@@ -7,6 +7,5 @@
     For more on layout aliases, see:
     http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters
     -->
-    <item name="fragment_item" type="layout">@layout/fragment_item_grid</item>
 
 </resources>
\ No newline at end of file

=== modified file 'app/src/main/res/values-lt/strings.xml'
--- app/src/main/res/values-lt/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-lt/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,8 +20,6 @@
   <string name="connection_configuration">Konfigūruoti Tinklą</string>
   <string name="connection_password">Slaptažodis</string>
   <string name="connection_profile">Išsamiau apie Serverį</string>
-  <string name="connection_profile_ssl_use">Naudoti HTTPS</string>
-  <string name="connection_profile_ssl_summary">Nurodykite ar turėtų būti naudojamas HTTPS</string>
   <string name="connection_timeout">Sujungimo Laiko Limitas</string>
   <string name="connection_timeout_summary">Pasirinkite reikšmę (milisekundėmis)</string>
   <string name="connection_userid">Vartotojo vardas</string>

=== modified file 'app/src/main/res/values-lv/strings.xml'
--- app/src/main/res/values-lv/strings.xml	2015-05-30 05:53:10 +0000
+++ app/src/main/res/values-lv/strings.xml	2016-11-10 19:36:50 +0000
@@ -1,8 +1,55 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <resources>
+  <string name="about_display_1">OpenLP ir bezmaksas prezentāciju programma baznīcām</string>
+  <string name="about_display_2">Lai uzzinātu vairāk, apmeklējiet mājaslapu</string>
+  <string name="about_display_4">Autortiesības</string>
+  <string name="about_display_5">Daļu autortiesības</string>
+  <string name="about_display_6">Licence</string>
+  <string name="about_display_7">Šī ir bezmaksas programma. Jūs varat to izplatīt vai mainīt pēc GNU publiskās licences noteikumiem, kas publicēti Free Software Foundation, 2. versijas licencē.</string>
+  <string name="about_display_8">Šī programma ir izplatīta ar cerību, ka tā būs noderīga, bet be jebkādām garantijām par tās noderīgumu mērķim vai ienesīgumu.</string>
   <string name="action_settings">Iestatījumi</string>
+  <string name="action_about">Par</string>
+  <string name="action_alert">Ziņojums</string>
+  <string name="action_back">Atgriezties</string>
+  <string name="action_blank">Pārslēgt displeju</string>
+  <string name="action_preferences">Iestatījumi</string>
+  <string name="action_refresh">Atsvaidzināt</string>
+  <string name="action_search">Meklēt</string>
   <string name="app_name">OpenLP</string>
-  <string name="connection_timeout">Savienojuma laika beigas</string>
+  <string name="cancel">Atcelt</string>
+  <string name="connection_configuration">Tīkla konfigurācija</string>
+  <string name="connection_password">Parole</string>
+  <string name="connection_profile">Servera iestatījumi</string>
+  <string name="connection_timeout">Savienojuma noildze</string>
   <string name="connection_timeout_summary">Izvēlieties vērtību (milisekundes)</string>
+  <string name="connection_userid">Lietotājvārds</string>
+  <string name="custom_timeout">Izvēlieties vēlamo noildzi</string>
+  <string name="display_blank_summary">Izvēlieties nepieciešamo displeju</string>
+  <string name="display_desktop">Parādīt fona attēlu</string>
+  <string name="display_list_autoscroll">Atļaut šim elementa pārvietoties uz saraksta centru</string>
+  <string name="display_reset">Parādīt displeju</string>
+  <string name="display_settings">Ekrāna iestatījumi</string>
+  <string name="display_screen">Attēlot melnu ekrānu</string>
+  <string name="display_theme">Attēlot tēmas attēlu</string>
+  <string name="enable_custom_timeouts">Iespējot pielāgotās noildzes</string>
+  <string name="enter_alert_text">Ievadiet ziņojuma tekstu</string>
+  <string name="enable_autoscroll">Atļaut ekrānam iecentrēties automatiski.</string>
+  <string name="home">Sākums</string>
+  <string name="httpreturn_unauthorised">Pieeja liegta! Lūdzu ievadiet pareizu lietotājvārdu un paroli.</string>
+  <string name="live_list">Saraksts demonstrēšanai</string>
+  <string name="live_view">Attēls ekrānā</string>
+  <string name="navigation_drawer_open">Atvērt navigācijas slaidni</string>
+  <string name="navigation_drawer_close">Aizvērt navigācijas slaidni</string>
+  <string name="next">Nākamais</string>
+  <string name="none">Nekas</string>
+  <string name="port">Ports</string>
+  <string name="previous">Iepriekšējais</string>
+  <string name="process">Process</string>
+  <string name="service_list">Saraksts</string>
+  <string name="stage_view">Skatuves ekrāns</string>
+  <string name="text_size">Izvēlieties teksta lielumu</string>
+  <string name="text_size_summary">Izvēlieties dievkalpojuma teksta lielumu</string>
   <string name="title_activity_settings">Iestatījumi</string>
+  <string name="url_hint">Vārds vai IP adrese</string>
+  <string name="unable">Nav iespējams apstrādāt pieprasījumu - pārbaudiet tīkla iestatījumus.</string>
 </resources>

=== modified file 'app/src/main/res/values-nb/strings.xml'
--- app/src/main/res/values-nb/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-nb/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,8 +20,6 @@
   <string name="connection_configuration">Konfigurer nettverk</string>
   <string name="connection_password">Passord</string>
   <string name="connection_profile">Serverditaljer</string>
-  <string name="connection_profile_ssl_use">Bruk HTTPS</string>
-  <string name="connection_profile_ssl_summary">Angi om HTTPS skal brukes</string>
   <string name="connection_timeout">Tidsavbrudd for tilkobling</string>
   <string name="connection_timeout_summary">Velg en verdi (millisekund)</string>
   <string name="connection_userid">Brukernavn</string>

=== modified file 'app/src/main/res/values-nl/strings.xml'
--- app/src/main/res/values-nl/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-nl/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,22 +20,24 @@
   <string name="connection_configuration">Netwerk instellen</string>
   <string name="connection_password">Wachtwoord</string>
   <string name="connection_profile">Serverdetails</string>
-  <string name="connection_profile_ssl_use">Gebruik HTTPS</string>
-  <string name="connection_profile_ssl_summary">Geef aan of HTTPS gebruikt moet worden</string>
   <string name="connection_timeout">Verbindingstimeout</string>
   <string name="connection_timeout_summary">Selecteer een waarde (milliseconden)</string>
   <string name="connection_userid">Gebruikersnaam</string>
   <string name="custom_timeout">Aangepaste timeout instellen</string>
   <string name="display_blank_summary">Selecteer het verplichte scherm</string>
   <string name="display_desktop">Toon Desktop achtergrond</string>
+  <string name="display_list_autoscroll">Toegang geven aan geselecteerde items om naar het midden van de lijst te scrollen</string>
   <string name="display_reset">Toon live scherm</string>
+  <string name="display_settings">Beeldscherminstellingen</string>
   <string name="display_screen">Toon alleen zwart</string>
   <string name="display_theme">Toon alleen thema</string>
   <string name="enable_custom_timeouts"> Aangepaste timeouts toestaan</string>
   <string name="enter_alert_text">Voer waarschuwingstekst in</string>
+  <string name="enable_autoscroll">Schermen toegang geven tot auto center</string>
   <string name="home">Startpagina</string>
   <string name="httpreturn_unauthorised">Geen toegang, voer juiste gebruikersnaam en wachtwoord in</string>
   <string name="live_list">Live lijst</string>
+  <string name="live_view">Live kijken</string>
   <string name="navigation_drawer_open">Open navigatiemenu</string>
   <string name="navigation_drawer_close">Sluit navigatiemenu</string>
   <string name="next">Volgende</string>

=== modified file 'app/src/main/res/values-nn/strings.xml'
--- app/src/main/res/values-nn/strings.xml	2015-05-30 05:53:10 +0000
+++ app/src/main/res/values-nn/strings.xml	2016-11-10 19:36:50 +0000
@@ -5,6 +5,8 @@
   <string name="app_name">OpenLP</string>
   <string name="connection_timeout">Tidsavbrot for tilkopling</string>
   <string name="connection_timeout_summary">Oppgje ein verdi i millisekund</string>
+  <string name="next">Neste</string>
   <string name="port">Port</string>
+  <string name="previous">Førre</string>
   <string name="title_activity_settings">Innstillingar.</string>
 </resources>

=== modified file 'app/src/main/res/values-pap/strings.xml'
--- app/src/main/res/values-pap/strings.xml	2015-05-30 05:53:10 +0000
+++ app/src/main/res/values-pap/strings.xml	2016-11-10 19:36:50 +0000
@@ -8,10 +8,11 @@
   <string name="action_preferences">Preferensia</string>
   <string name="action_search">Buska</string>
   <string name="app_name">OpenLP</string>
-  <string name="display_blank_summary">Selekta e tipo blanko nesesario</string>
   <string name="enable_custom_timeouts">Permití Timeout adaptá</string>
+  <string name="next">Sigiente</string>
   <string name="none">Niun</string>
   <string name="port">Port</string>
+  <string name="previous">Bai bèk</string>
   <string name="title_activity_settings">Konfigurashon</string>
   <string name="url_hint">Hostname òf IP</string>
 </resources>

=== modified file 'app/src/main/res/values-pl/strings.xml'
--- app/src/main/res/values-pl/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-pl/strings.xml	2016-11-10 19:36:50 +0000
@@ -11,6 +11,7 @@
   <string name="action_about">O programie</string>
   <string name="action_alert">Komunikat</string>
   <string name="action_back">Wróć</string>
+  <string name="action_blank">Przełącz Ekran</string>
   <string name="action_preferences">Preferencje</string>
   <string name="action_refresh">Odśwież</string>
   <string name="action_search">Szukaj</string>
@@ -19,23 +20,26 @@
   <string name="connection_configuration">Konfiguruj sieć</string>
   <string name="connection_password">Hasło</string>
   <string name="connection_profile">Szczegóły serwera</string>
-  <string name="connection_profile_ssl_use">Używaj HTTPS</string>
-  <string name="connection_profile_ssl_summary">Sprecyzuj czy HTTPS powinno być używane</string>
   <string name="connection_timeout">Limit czasowy połączenia</string>
   <string name="connection_timeout_summary">Wybierz wartość (milisekundy)</string>
   <string name="connection_userid">Nazwa użytkownika</string>
   <string name="custom_timeout">Ustaw inny limit czasowy</string>
   <string name="display_blank_summary">Wybierz wyświetlacz</string>
   <string name="display_desktop">Wyświetl tło ekranu</string>
+  <string name="display_list_autoscroll">Pozwól wybranemu elementowi przewinąć do środka listy</string>
   <string name="display_reset">Pokaż Ekran</string>
+  <string name="display_settings">Ustawienia wyświetlania</string>
   <string name="display_screen">Wyświetl czarny ekran</string>
   <string name="display_theme">Wyświetl tylko motyw</string>
   <string name="enable_custom_timeouts">Niestandardowy limit czasu</string>
   <string name="enter_alert_text">Wpisz tekst komunikatu</string>
+  <string name="enable_autoscroll">Pozwól na autowyśrodkowanie </string>
   <string name="home">Home</string>
   <string name="httpreturn_unauthorised">Nieuprawniony dostęp, proszę wprowadź nazwę użytkownika oraz hasło.</string>
   <string name="live_list">Plan nabożeństwa</string>
   <string name="live_view">Ekran</string>
+  <string name="navigation_drawer_open">Otwórz zakładkę nawigacji</string>
+  <string name="navigation_drawer_close">Zamknij zakładkę nawigacji</string>
   <string name="next">Następny</string>
   <string name="none">Nic</string>
   <string name="port">Port</string>

=== modified file 'app/src/main/res/values-pt-rBR/strings.xml'
--- app/src/main/res/values-pt-rBR/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-pt-rBR/strings.xml	2016-11-10 19:36:50 +0000
@@ -11,7 +11,7 @@
   <string name="action_about">Sobre</string>
   <string name="action_alert">Alertar</string>
   <string name="action_back">Voltar</string>
-  <string name="action_blank">Altenar Monitor</string>
+  <string name="action_blank">Alternar Monitor</string>
   <string name="action_preferences">Preferências</string>
   <string name="action_refresh">Atualizar</string>
   <string name="action_search">Busca</string>
@@ -20,30 +20,33 @@
   <string name="connection_configuration">Configurar Rede</string>
   <string name="connection_password">Senha</string>
   <string name="connection_profile">Detalhes do Servidor</string>
-  <string name="connection_profile_ssl_use">Usar HTTPS</string>
-  <string name="connection_profile_ssl_summary">Especifique se o HTTPS deve ser usado</string>
   <string name="connection_timeout">Tempo limite de conexão</string>
   <string name="connection_timeout_summary">Selecione um valor (em milissegundos)</string>
   <string name="connection_userid">Usuário</string>
   <string name="custom_timeout">Ativar Timeout Personalizado</string>
   <string name="display_blank_summary">Selecione o monitor requerido</string>
   <string name="display_desktop">Exibir Plano de Fundo da Área de Trabalho</string>
+  <string name="display_list_autoscroll">Permitir ao item selecionado se deslocar ao centro da lista</string>
   <string name="display_reset">Mostrar Visualização Ao Vivo</string>
   <string name="display_settings">Configurações de Exibição</string>
   <string name="display_screen">Exibir Tela Preta</string>
   <string name="display_theme">Exibir Tema</string>
   <string name="enable_custom_timeouts">Habilitar Timeouts personalizados</string>
   <string name="enter_alert_text">Digitar Texto de Alerta</string>
+  <string name="enable_autoscroll">Auto-centralizar slides na tela</string>
   <string name="home">Home</string>
   <string name="httpreturn_unauthorised">Acesso não autorizado, por favor, digite usuário e senha válidos</string>
   <string name="live_list">Lista Ao Vivo</string>
+  <string name="live_view">Ao vivo</string>
+  <string name="navigation_drawer_open">Abrir painel de navegação</string>
+  <string name="navigation_drawer_close">Fechar painel de navegação</string>
   <string name="next">Próximo</string>
   <string name="none">Nenhum</string>
   <string name="port">Porta</string>
   <string name="previous">Anterior</string>
   <string name="process">Processo</string>
   <string name="service_list">Lista de Serviço</string>
-  <string name="stage_view">Visualização de Palvo</string>
+  <string name="stage_view">Visualização de Palco</string>
   <string name="text_size">Selecionar tamanho do monitor de exibição</string>
   <string name="text_size_summary">Alterar o tamanho do texto de culto</string>
   <string name="title_activity_settings">Configurações</string>

=== modified file 'app/src/main/res/values-ro/strings.xml'
--- app/src/main/res/values-ro/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-ro/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,8 +20,6 @@
   <string name="connection_configuration">Configurează Rețeaua</string>
   <string name="connection_password">Parola</string>
   <string name="connection_profile">Detalii Server</string>
-  <string name="connection_profile_ssl_use">Folosește HTTPS</string>
-  <string name="connection_profile_ssl_summary">Specificați dacă ar trebui folosit HTTPS</string>
   <string name="connection_timeout">Conexiunea a expirat</string>
   <string name="connection_timeout_summary">Selectați o valoare (milisecunde)</string>
   <string name="connection_userid">Nume utilizator</string>

=== modified file 'app/src/main/res/values-ru/strings.xml'
--- app/src/main/res/values-ru/strings.xml	2015-10-08 18:25:59 +0000
+++ app/src/main/res/values-ru/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,25 +20,20 @@
   <string name="connection_configuration">Настроить сеть</string>
   <string name="connection_password">Пароль</string>
   <string name="connection_profile">Параметры сервера</string>
-  <string name="connection_profile_ssl_use">Использовать HTTPS</string>
-  <string name="connection_profile_ssl_summary">Укажите, следует ли использовать HTTPS</string>
   <string name="connection_timeout">Время ожидания соединения</string>
   <string name="connection_timeout_summary">Выберите значение (в миллисекундах)</string>
   <string name="custom_timeout">Установить пользовательский тайм-аут</string>
-  <string name="display_blank_summary">Выберите нужный тип блокировки</string>
-  <string name="display_desktop">Показать рабочий стол</string>
-  <string name="display_reset">Сбросить дисплей</string>
-  <string name="display_screen">Очистить дисплей (черный)</string>
-  <string name="display_theme">Очистить контент дисплея</string>
   <string name="enable_custom_timeouts">Включить пользовательские тайм-ауты</string>
   <string name="enter_alert_text">Введите текст оповещения</string>
   <string name="home">Домой</string>
+  <string name="live_view">Вид прямого эфира</string>
+  <string name="next">Следующий</string>
   <string name="none">Ничего</string>
   <string name="port">Порт</string>
+  <string name="previous">Предыдущий</string>
   <string name="process">Выполнение</string>
   <string name="service_list">Список служения</string>
   <string name="stage_view">Вид сцены</string>
-
   <string name="text_size">Выберите размер текста</string>
   <string name="text_size_summary">Изменить размер текста Служения</string>
   <string name="title_activity_settings">Параметры</string>

=== modified file 'app/src/main/res/values-sk/strings.xml'
--- app/src/main/res/values-sk/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-sk/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,8 +20,6 @@
   <string name="connection_configuration">Nastavenie sieťe</string>
   <string name="connection_password">Heslo</string>
   <string name="connection_profile">Podrobnosti servera</string>
-  <string name="connection_profile_ssl_use">Použiť HTTPS</string>
-  <string name="connection_profile_ssl_summary">Upresniť či by malo byť použité HTTPS</string>
   <string name="connection_timeout">Časový limit spojenia</string>
   <string name="connection_timeout_summary">Vybrať hodnotu (milisekundy)</string>
   <string name="connection_userid">Používateľské meno</string>

=== modified file 'app/src/main/res/values-sv/strings.xml'
--- app/src/main/res/values-sv/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-sv/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,8 +20,6 @@
   <string name="connection_configuration">Konfigurera nätverk</string>
   <string name="connection_password">Lösenord</string>
   <string name="connection_profile">Serverinställningar</string>
-  <string name="connection_profile_ssl_use">Använd HTTPS</string>
-  <string name="connection_profile_ssl_summary">Ange om HTTPS ska användas</string>
   <string name="connection_timeout">Anslutningstimeout</string>
   <string name="connection_timeout_summary">Välj ett värde (millisekunder)</string>
   <string name="connection_userid">Användarnamn</string>

=== modified file 'app/src/main/res/values-sw600dp/refs.xml'
--- app/src/main/res/values-sw600dp/refs.xml	2015-05-27 20:05:55 +0000
+++ app/src/main/res/values-sw600dp/refs.xml	2016-11-10 19:36:50 +0000
@@ -7,6 +7,4 @@
     For more on layout aliases, see:
     http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters
     -->
-    <item name="fragment_item" type="layout">@layout/fragment_item_grid</item>
-
 </resources>
\ No newline at end of file

=== modified file 'app/src/main/res/values-uk/strings.xml'
--- app/src/main/res/values-uk/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-uk/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,26 +20,30 @@
   <string name="connection_configuration">Налаштування Мережі</string>
   <string name="connection_password">Пароль</string>
   <string name="connection_profile">Деталі Сервера</string>
-  <string name="connection_profile_ssl_use">Використовувати HTTPS</string>
-  <string name="connection_profile_ssl_summary">Вкажіть, чи варто використовувати протокол HTTPS</string>
   <string name="connection_timeout">Час очікування з\'єднання</string>
   <string name="connection_timeout_summary">Виберіть значення (в мілісекундах)</string>
   <string name="connection_userid">Ім\'я користувача:</string>
   <string name="custom_timeout">Втановити інший Час Очікування</string>
   <string name="display_blank_summary">Виберіть потрібний дисплей</string>
   <string name="display_desktop">Обрати фон для робочого столу дисплея</string>
+  <string name="display_list_autoscroll">Дозволити вибраний елемент, щоб перейти до центру списку</string>
   <string name="display_reset">Показати основний дисплей</string>
+  <string name="display_settings">Налаштування Дисплею</string>
   <string name="display_screen">Тільки Чорний дисплей</string>
   <string name="display_theme">Тільки Тема дисплею</string>
   <string name="enable_custom_timeouts">Обрати інший Час Очікування</string>
   <string name="enter_alert_text">Введіть Текст Сповіщення</string>
+  <string name="enable_autoscroll">Дозволити дисплей в центрі</string>
   <string name="home">Дім</string>
   <string name="httpreturn_unauthorised">Несанкціонований доступ будь ласка, введіть правильне ім\'я користувача та пароль</string>
   <string name="live_list">Список Перегляду</string>
+  <string name="live_view">Режим Живого Перегляду</string>
   <string name="navigation_drawer_open">Відкрити вікно навігації</string>
   <string name="navigation_drawer_close">Закрити вікно навігації</string>
+  <string name="next">Наступний</string>
   <string name="none">Ні</string>
   <string name="port">Порт</string>
+  <string name="previous">Попередній</string>
   <string name="process">Процес</string>
   <string name="service_list">Список Служб</string>
   <string name="stage_view">Поставити Прегляд</string>

=== modified file 'app/src/main/res/values-zh-rTW/strings.xml'
--- app/src/main/res/values-zh-rTW/strings.xml	2015-10-16 19:32:04 +0000
+++ app/src/main/res/values-zh-rTW/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,8 +20,6 @@
   <string name="connection_configuration">設定網路</string>
   <string name="connection_password">密碼</string>
   <string name="connection_profile">聚會細節</string>
-  <string name="connection_profile_ssl_use">使用 HTTPS</string>
-  <string name="connection_profile_ssl_summary">指定是否應使用HTTPS</string>
   <string name="connection_timeout">連接逾時</string>
   <string name="connection_timeout_summary">選擇數值(毫秒)</string>
   <string name="connection_userid">帳號</string>

=== modified file 'app/src/main/res/values/keyStrings.xml'
--- app/src/main/res/values/keyStrings.xml	2015-10-04 21:02:13 +0000
+++ app/src/main/res/values/keyStrings.xml	2016-11-10 19:36:50 +0000
@@ -8,6 +8,4 @@
     <string name="key_userid">key_userid</string>
     <string name="key_password">key_password</string>
     <string name="key_shared_preferences">key_shared_preferences</string>
-	<string name="key_ssl_use">key_ssl_use</string>
-
 </resources>

=== modified file 'app/src/main/res/values/strings.xml'
--- app/src/main/res/values/strings.xml	2016-01-03 15:02:30 +0000
+++ app/src/main/res/values/strings.xml	2016-11-10 19:36:50 +0000
@@ -20,8 +20,6 @@
     <string name="connection_configuration">Configure Network</string>
     <string name="connection_password">Password</string>
     <string name="connection_profile">Server Details</string>
-    <string name="connection_profile_ssl_use">Use HTTPS</string>
-    <string name="connection_profile_ssl_summary">Specify whether HTTPS should be used</string>
     <string name="connection_timeout">Connection Timeout</string>
     <string name="connection_timeout_summary">Select a value (milliseconds)</string>
     <string name="connection_userid">Username</string>
@@ -47,6 +45,8 @@
     <string name="port">Port</string>
     <string name="previous">Previous</string>
     <string name="process">Process</string>
+    <string name="search_text">Search Text</string>
+    <string name="select_plugin">Select Plugin</string>
     <string name="service_list">Service List</string>
     <string name="searchResults">Search Results</string>
     <string name="searchSendLive">Send Live</string>

=== modified file 'app/src/main/res/xml/pref_general.xml'
--- app/src/main/res/xml/pref_general.xml	2015-10-04 21:02:13 +0000
+++ app/src/main/res/xml/pref_general.xml	2016-11-10 19:36:50 +0000
@@ -10,7 +10,7 @@
 
     <CheckBoxPreference
         android:key="key_auto_scroll"
-        android:defaultValue="false"
+        android:defaultValue="true"
         android:summary="@string/display_list_autoscroll"
         android:title="@string/enable_autoscroll"/>
 

=== modified file 'app/src/main/res/xml/pref_notification.xml'
--- app/src/main/res/xml/pref_notification.xml	2015-01-23 17:53:00 +0000
+++ app/src/main/res/xml/pref_notification.xml	2016-11-10 19:36:50 +0000
@@ -33,12 +33,6 @@
             android:defaultValue="@string/port_default_value"
             android:inputType="number" />
 
-        <CheckBoxPreference
-            android:key="@string/key_ssl_use"
-            android:title="@string/connection_profile_ssl_use"
-            android:summary="@string/connection_profile_ssl_summary"
-            android:defaultValue="false" />
-
         <EditTextPreference
             android:key="@string/key_userid"
             android:title="@string/connection_userid"

=== added file 'fixssl.iml'
--- fixssl.iml	1970-01-01 00:00:00 +0000
+++ fixssl.iml	2016-11-10 19:36:50 +0000
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id="fixssl" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="java-gradle" name="Java-Gradle">
+      <configuration>
+        <option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
+        <option name="BUILDABLE" value="false" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <excludeFolder url="file://$MODULE_DIR$/.gradle" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file

=== modified file 'gradle/wrapper/gradle-wrapper.properties'
--- gradle/wrapper/gradle-wrapper.properties	2016-11-10 19:31:55 +0000
+++ gradle/wrapper/gradle-wrapper.properties	2016-11-10 19:36:50 +0000
@@ -1,4 +1,8 @@
+<<<<<<< TREE
 #Fri Nov 04 20:11:41 GMT 2016
+=======
+#Fri Sep 16 06:02:15 BST 2016
+>>>>>>> MERGE-SOURCE
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME


Follow ups