← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~trb143/openlp/android_dev into lp:openlp

 

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

Requested reviews:
  OpenLP Core (openlp-core)

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

No code changes just whitespace cleanups so we have a standard code base.

Using Intelij free !
-- 
https://code.launchpad.net/~trb143/openlp/android_dev/+merge/167377
Your team OpenLP Core is requested to review the proposed merge of lp:~trb143/openlp/android_dev into lp:openlp.
=== added file '.bzrignore'
--- .bzrignore	1970-01-01 00:00:00 +0000
+++ .bzrignore	2013-06-04 19:25:41 +0000
@@ -0,0 +1,15 @@
+bin/
+assets/
+gen/
+.idea
+out
+Openlp-android.iml
+Openlp-android-working.iml
+.classpath
+.settings
+Openlp-android-buildfilefix.iml
+build.xml
+local.properties
+build.properties
+lint.xml
+

=== renamed file '.bzrignore' => '.bzrignore.moved'
=== added file '.project'
--- .project	1970-01-01 00:00:00 +0000
+++ .project	2013-06-04 19:25:41 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Openlp</name>
+	<comment/>
+	<projects/>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments/>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>

=== added file 'AndroidManifest.xml'
--- AndroidManifest.xml	1970-01-01 00:00:00 +0000
+++ AndroidManifest.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest
+        xmlns:android="http://schemas.android.com/apk/res/android";
+		android:installLocation="auto"
+        package="org.openlp.android"
+        android:versionCode="7"
+        android:versionName="1.1"
+        >
+    <uses-sdk android:minSdkVersion="8"/>
+    <uses-permission android:name="android.permission.INTERNET"/>
+
+    <application
+            android:icon="@drawable/openlp_logo"
+            android:label="@string/app_name" android:theme="@style/OpenLPStyle">
+        <activity
+                android:name=".OpenLP"
+                android:label="@string/app_name">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+        <activity
+                android:name=".activity.SearchableActivity"
+                android:label="@string/searchResults">
+            <intent-filter>
+                <action android:name="android.intent.action.SEARCH"/>
+            </intent-filter>
+            <meta-data
+                    android:name="android.app.searchable"
+                    android:resource="@xml/searchable"/>
+        </activity>
+
+		<activity android:name=".activity.preference.Preferences" android:label="@string/preferences"/>
+		<activity android:name=".activity.preference.ConnectionPreferenceActivity"/>
+		<activity android:name=".activity.PagerActivity"/>
+
+        <service android:name=".service.PingIntent"/>
+		<service android:name=".service.ApiCallIntent"/>
+
+        <meta-data
+                android:name="android.app.default_searchable"
+                android:value=".activity.SearchableActivity"/>
+    </application>
+</manifest>

=== added file 'LICENSE'
--- LICENSE	1970-01-01 00:00:00 +0000
+++ LICENSE	2013-06-04 19:25:41 +0000
@@ -0,0 +1,339 @@
+            GNU GENERAL PUBLIC LICENSE
+               Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+            GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+             END OF TERMS AND CONDITIONS
+
+        How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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; either version 2 of the License, or
+    (at your option) any later version.
+
+    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.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.

=== renamed file 'LICENSE' => 'LICENSE.moved'
=== added directory 'assets'
=== added directory 'libs'
=== added file 'libs/android-support-v4.jar'
Binary files libs/android-support-v4.jar	1970-01-01 00:00:00 +0000 and libs/android-support-v4.jar	2013-06-04 19:25:41 +0000 differ
=== added file 'proguard.cfg'
--- proguard.cfg	1970-01-01 00:00:00 +0000
+++ proguard.cfg	2013-06-04 19:25:41 +0000
@@ -0,0 +1,36 @@
+-optimizationpasses 5
+-dontusemixedcaseclassnames
+-dontskipnonpubliclibraryclasses
+-dontpreverify
+-verbose
+-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
+
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class com.android.vending.licensing.ILicensingService
+
+-keepclasseswithmembers class * {
+    native <methods>;
+}
+
+-keepclasseswithmembersnames class * {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
+
+-keepclasseswithmember class * {
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+
+-keep class * implements android.os.Parcelable {
+  public static final android.os.Parcelable$Creator *;
+}

=== added file 'project.properties'
--- project.properties	1970-01-01 00:00:00 +0000
+++ project.properties	2013-06-04 19:25:41 +0000
@@ -0,0 +1,11 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system use,
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-8

=== added directory 'res'
=== added directory 'res/drawable-hdpi'
=== added file 'res/drawable-hdpi/alert.png'
Binary files res/drawable-hdpi/alert.png	1970-01-01 00:00:00 +0000 and res/drawable-hdpi/alert.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-hdpi/blank.png'
Binary files res/drawable-hdpi/blank.png	1970-01-01 00:00:00 +0000 and res/drawable-hdpi/blank.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-hdpi/icon.png'
Binary files res/drawable-hdpi/icon.png	1970-01-01 00:00:00 +0000 and res/drawable-hdpi/icon.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-hdpi/live.png'
Binary files res/drawable-hdpi/live.png	1970-01-01 00:00:00 +0000 and res/drawable-hdpi/live.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-hdpi/next.png'
Binary files res/drawable-hdpi/next.png	1970-01-01 00:00:00 +0000 and res/drawable-hdpi/next.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-hdpi/openlp_logo.png'
Binary files res/drawable-hdpi/openlp_logo.png	1970-01-01 00:00:00 +0000 and res/drawable-hdpi/openlp_logo.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-hdpi/openlp_logo_android.png'
Binary files res/drawable-hdpi/openlp_logo_android.png	1970-01-01 00:00:00 +0000 and res/drawable-hdpi/openlp_logo_android.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-hdpi/openlp_splash_screen.png'
Binary files res/drawable-hdpi/openlp_splash_screen.png	1970-01-01 00:00:00 +0000 and res/drawable-hdpi/openlp_splash_screen.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-hdpi/preferences.png'
Binary files res/drawable-hdpi/preferences.png	1970-01-01 00:00:00 +0000 and res/drawable-hdpi/preferences.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-hdpi/previous.png'
Binary files res/drawable-hdpi/previous.png	1970-01-01 00:00:00 +0000 and res/drawable-hdpi/previous.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-hdpi/search.png'
Binary files res/drawable-hdpi/search.png	1970-01-01 00:00:00 +0000 and res/drawable-hdpi/search.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-hdpi/service.png'
Binary files res/drawable-hdpi/service.png	1970-01-01 00:00:00 +0000 and res/drawable-hdpi/service.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-hdpi/stage.png'
Binary files res/drawable-hdpi/stage.png	1970-01-01 00:00:00 +0000 and res/drawable-hdpi/stage.png	2013-06-04 19:25:41 +0000 differ
=== added directory 'res/drawable-ldpi'
=== added file 'res/drawable-ldpi/alert.png'
Binary files res/drawable-ldpi/alert.png	1970-01-01 00:00:00 +0000 and res/drawable-ldpi/alert.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-ldpi/blank.png'
Binary files res/drawable-ldpi/blank.png	1970-01-01 00:00:00 +0000 and res/drawable-ldpi/blank.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-ldpi/icon.png'
Binary files res/drawable-ldpi/icon.png	1970-01-01 00:00:00 +0000 and res/drawable-ldpi/icon.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-ldpi/live.png'
Binary files res/drawable-ldpi/live.png	1970-01-01 00:00:00 +0000 and res/drawable-ldpi/live.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-ldpi/next.png'
Binary files res/drawable-ldpi/next.png	1970-01-01 00:00:00 +0000 and res/drawable-ldpi/next.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-ldpi/openlp_logo.png'
Binary files res/drawable-ldpi/openlp_logo.png	1970-01-01 00:00:00 +0000 and res/drawable-ldpi/openlp_logo.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-ldpi/preferences.png'
Binary files res/drawable-ldpi/preferences.png	1970-01-01 00:00:00 +0000 and res/drawable-ldpi/preferences.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-ldpi/previous.png'
Binary files res/drawable-ldpi/previous.png	1970-01-01 00:00:00 +0000 and res/drawable-ldpi/previous.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-ldpi/search.png'
Binary files res/drawable-ldpi/search.png	1970-01-01 00:00:00 +0000 and res/drawable-ldpi/search.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-ldpi/service.png'
Binary files res/drawable-ldpi/service.png	1970-01-01 00:00:00 +0000 and res/drawable-ldpi/service.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-ldpi/stage.png'
Binary files res/drawable-ldpi/stage.png	1970-01-01 00:00:00 +0000 and res/drawable-ldpi/stage.png	2013-06-04 19:25:41 +0000 differ
=== added directory 'res/drawable-mdpi'
=== added file 'res/drawable-mdpi/alert.png'
Binary files res/drawable-mdpi/alert.png	1970-01-01 00:00:00 +0000 and res/drawable-mdpi/alert.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-mdpi/blank.png'
Binary files res/drawable-mdpi/blank.png	1970-01-01 00:00:00 +0000 and res/drawable-mdpi/blank.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-mdpi/icon.png'
Binary files res/drawable-mdpi/icon.png	1970-01-01 00:00:00 +0000 and res/drawable-mdpi/icon.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-mdpi/live.png'
Binary files res/drawable-mdpi/live.png	1970-01-01 00:00:00 +0000 and res/drawable-mdpi/live.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-mdpi/next.png'
Binary files res/drawable-mdpi/next.png	1970-01-01 00:00:00 +0000 and res/drawable-mdpi/next.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-mdpi/openlp_logo.png'
Binary files res/drawable-mdpi/openlp_logo.png	1970-01-01 00:00:00 +0000 and res/drawable-mdpi/openlp_logo.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-mdpi/preferences.png'
Binary files res/drawable-mdpi/preferences.png	1970-01-01 00:00:00 +0000 and res/drawable-mdpi/preferences.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-mdpi/previous.png'
Binary files res/drawable-mdpi/previous.png	1970-01-01 00:00:00 +0000 and res/drawable-mdpi/previous.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-mdpi/search.png'
Binary files res/drawable-mdpi/search.png	1970-01-01 00:00:00 +0000 and res/drawable-mdpi/search.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-mdpi/service.png'
Binary files res/drawable-mdpi/service.png	1970-01-01 00:00:00 +0000 and res/drawable-mdpi/service.png	2013-06-04 19:25:41 +0000 differ
=== added file 'res/drawable-mdpi/stage.png'
Binary files res/drawable-mdpi/stage.png	1970-01-01 00:00:00 +0000 and res/drawable-mdpi/stage.png	2013-06-04 19:25:41 +0000 differ
=== added directory 'res/layout'
=== added file 'res/layout/alert.xml'
--- res/layout/alert.xml	1970-01-01 00:00:00 +0000
+++ res/layout/alert.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,32 @@
+<?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">
+    <TextView
+            android:text="@string/alert"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textStyle="bold"
+            android:textSize="10pt"
+            />
+    <View style="@style/SlideServiceViewHorizontalRule"
+            />
+    <View style="@style/SlideServiceViewHorizontalRule"
+          android:background="@android:color/transparent"
+          android:layout_height="5dip"
+            />
+    <EditText
+            android:id="@+id/alert"
+            android:layout_height="wrap_content"
+            android:text=""
+            android:inputType="textShortMessage"
+            android:layout_width="fill_parent"
+            android:hint="@string/alertHint"/>
+    <Button
+            android:id="@+id/send"
+            android:text="@string/send"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"/>
+</LinearLayout>

=== added file 'res/layout/group_child.xml'
--- res/layout/group_child.xml	1970-01-01 00:00:00 +0000
+++ res/layout/group_child.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,14 @@
+<LinearLayout
+        xmlns:android="http://schemas.android.com/apk/res/android";
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+    <TextView
+            android:id="@+id/groupChildText"
+            android:layout_height="wrap_content"
+            android:layout_width="fill_parent"
+            android:paddingLeft="20dip"
+            android:gravity="center_vertical"
+            android:minLines="3"
+            />
+</LinearLayout>
\ No newline at end of file

=== added file 'res/layout/group_parent.xml'
--- res/layout/group_parent.xml	1970-01-01 00:00:00 +0000
+++ res/layout/group_parent.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android";
+	android:layout_width="fill_parent" 
+	android:baselineAligned="false"
+	android:orientation="horizontal" 
+	android:layout_height="wrap_content">
+	<TextView android:id="@+id/groupParentText"
+		android:layout_height="wrap_content" 
+		android:paddingLeft="5dip"
+		android:minLines="3" 
+		android:focusable="false" 
+		android:gravity="center_vertical|right"
+		android:layout_width="fill_parent"
+		android:layout_weight="1" />
+	<TextView android:id="@+id/parentChildCount" 
+		android:width="40dip"
+		android:paddingRight="5dip" 
+		android:layout_width="fill_parent"
+		android:layout_weight="1" 
+		android:layout_height="wrap_content"
+		android:gravity="center_vertical|right" />
+</LinearLayout>
\ No newline at end of file

=== added file 'res/layout/main.xml'
--- res/layout/main.xml	1970-01-01 00:00:00 +0000
+++ res/layout/main.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TableLayout xmlns:android="http://schemas.android.com/apk/res/android";
+			 android:layout_width="fill_parent"
+			 android:layout_height="fill_parent"
+			 android:gravity="fill"
+			 android:orientation="horizontal"
+			 android:layout_weight="0"
+		>
+	<TableRow
+			android:layout_weight="1"
+			android:layout_gravity="fill">
+		<ImageView
+				android:padding="20pt"
+				android:layout_span="2"
+				android:layout_width="wrap_content"
+				android:layout_height="wrap_content"
+				android:layout_gravity="fill"
+				android:layout_weight="1"
+				android:src="@drawable/openlp_splash_screen"
+				android:contentDescription="@string/contentDescription"
+				/>
+
+	</TableRow>
+	<TableRow
+			android:layout_weight="0"
+			android:layout_width="fill_parent"
+			android:layout_height="wrap_content">
+		<Button
+				android:id="@+id/buttonService"
+				android:text="@string/tabService"
+				style="@style/ButtonStyle"
+				android:drawableLeft="@drawable/service"
+				/>
+		<Button
+				android:id="@+id/buttonLive"
+				android:text="@string/tabLive"
+				style="@style/ButtonStyle"
+				android:drawableLeft="@drawable/live"
+				/>
+	</TableRow>
+	<TableRow
+			android:layout_width="fill_parent"
+			android:layout_height="wrap_content">
+		<Button
+				android:id="@+id/buttonDisplay"
+				android:text="@string/tabDisplay"
+				style="@style/ButtonStyle"
+				android:drawableLeft="@drawable/blank"
+				/>
+		<Button
+				android:id="@+id/buttonStage"
+				android:text="@string/tabStage"
+				style="@style/ButtonStyle"
+				android:drawableLeft="@drawable/stage"
+				/>
+	</TableRow>
+	<TableRow
+			android:layout_width="fill_parent"
+			android:layout_height="wrap_content">
+		<Button
+				android:id="@+id/buttonAlert"
+				android:text="@string/tabAlert"
+				style="@style/ButtonStyle"
+				android:drawableLeft="@drawable/alert"
+				/>
+		<Button
+				android:id="@+id/buttonSearch"
+				android:text="@string/buttonSearchText"
+				style="@style/ButtonStyle"
+				android:drawableLeft="@drawable/search"
+				/>
+	</TableRow>
+</TableLayout>

=== added file 'res/layout/misc.xml'
--- res/layout/misc.xml	1970-01-01 00:00:00 +0000
+++ res/layout/misc.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,27 @@
+<?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">
+    <TextView
+                android:text="@string/tabDisplay"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textStyle="bold"
+                android:textSize="10pt"
+                />
+    <View style="@style/SlideServiceViewHorizontalRule"
+            />
+    <View style="@style/SlideServiceViewHorizontalRule"
+          android:background="@android:color/transparent"
+          android:layout_height="5dip"
+            />
+    <ToggleButton
+            android:id="@+id/toggleDisplayButton"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:textOn="@string/displayBlankOn"
+            android:textOff="@string/displayBlankOff"/>
+</LinearLayout>
+

=== added file 'res/layout/search.xml'
--- res/layout/search.xml	1970-01-01 00:00:00 +0000
+++ res/layout/search.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--<LinearLayout
+        xmlns:android="http://schemas.android.com/apk/res/android";
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:orientation="vertical">-->
+    <TableLayout
+            xmlns:android="http://schemas.android.com/apk/res/android";
+            android:id="@+id/tableLayout1"
+            android:layout_width="fill_parent"
+            android:layout_height="fill_parent">
+        <ExpandableListView
+                android:layout_weight="1"
+                android:layout_height="wrap_content"
+                android:id="@+id/list"
+                android:layout_width="wrap_content"
+                />
+    </TableLayout>
+<!--</LinearLayout>-->

=== added file 'res/layout/slide_list_item.xml'
--- res/layout/slide_list_item.xml	1970-01-01 00:00:00 +0000
+++ res/layout/slide_list_item.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<LinearLayout
+        xmlns:android="http://schemas.android.com/apk/res/android";
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent">
+    <TextView
+            android:id="@+id/rowItemMarker"
+            android:layout_width="wrap_content"
+            android:layout_height="fill_parent"
+            android:gravity="center"
+            android:textStyle="bold"
+            android:textColor="@color/white"
+            />
+    <TextView
+            android:id="@+id/rowItemText"
+            android:layout_width="wrap_content"
+            android:layout_height="fill_parent"
+            android:gravity="center_vertical"
+            android:minLines="2"
+            android:textSize="8pt"/>
+</LinearLayout>
\ No newline at end of file

=== added file 'res/layout/slide_service.xml'
--- res/layout/slide_service.xml	1970-01-01 00:00:00 +0000
+++ res/layout/slide_service.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TableLayout
+        xmlns:android="http://schemas.android.com/apk/res/android";
+        style="@style/SlideServiceTableLayout"
+        >
+    <ListView
+            android:id="@+id/list"
+            style="@style/SlideServiceListView"
+            />
+    <LinearLayout
+            style="@style/LinearLayoutBottomButtons"
+            >
+        <Button
+                android:id="@+id/prev"
+                android:text="@string/prev"
+                style="@style/ButtonStylePrevious"
+                />
+        <Button
+                android:id="@+id/next"
+                android:text="@string/next"
+                style="@style/ButtonStyleNext"
+                />
+    </LinearLayout>
+</TableLayout>

=== added file 'res/layout/stageview.xml'
--- res/layout/stageview.xml	1970-01-01 00:00:00 +0000
+++ res/layout/stageview.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android";
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:baselineAligned="false"
+    android:orientation="vertical" >
+    <WebView
+        android:id="@+id/stageview"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+</LinearLayout>
\ No newline at end of file

=== added file 'res/layout/view_pager_layout.xml'
--- res/layout/view_pager_layout.xml	1970-01-01 00:00:00 +0000
+++ res/layout/view_pager_layout.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.v4.view.ViewPager
+		xmlns:android="http://schemas.android.com/apk/res/android";
+		android:layout_width="match_parent"
+		android:layout_height="match_parent"
+		android:id="@+id/myViewPager"
+		>
+	<android.support.v4.view.PagerTitleStrip
+			android:layout_width="fill_parent"
+			android:layout_height="fill_parent"
+			android:layout_gravity="bottom"/>
+</android.support.v4.view.ViewPager>

=== added directory 'res/menu'
=== added file 'res/menu/connections_menu.xml'
--- res/menu/connections_menu.xml	1970-01-01 00:00:00 +0000
+++ res/menu/connections_menu.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android";>
+	<item
+		android:id="@+id/menuAddHost"
+		android:enabled="true"
+		android:title="Add Host"
+		android:titleCondensed="Add"/>
+</menu>

=== added file 'res/menu/menu.xml'
--- res/menu/menu.xml	1970-01-01 00:00:00 +0000
+++ res/menu/menu.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android";>
+    <item android:enabled="true" android:titleCondensed="@string/settings" android:title="@string/settings"
+          android:id="@+id/preferences"/>
+	<item
+		android:id="@+id/menuSearch"
+		android:enabled="true"
+		android:title="Search"
+		android:titleCondensed="Search"/>
+</menu>

=== added directory 'res/values'
=== added directory 'res/values-af'
=== added file 'res/values-af/strings.xml'
--- res/values-af/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-af/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">Aangaande</string>
+  <string name="about_text">Weergawe</string>
+  <string name="about_display_1">OpenLP is gratis kerk aanbieding sagteware. Vind meer uit aangaande OpenLP.</string>
+  <string name="about_display_3">Webtuiste</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 sagteware, u kan dit herversprei en / of wysig onder die voorwaardes van die GNU General Public License, soos gepubliseer 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; tot sonder die geïmpliseerde waarborg van VERKOOPBAARHEID of GESKIKTHEID VIR \'N BEPAALDE DOEL.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Instellings</string>
+  <string name="preferences">Voorkeure</string>
+  <string name="none">Geen</string>
+  <string name="prev">Vorige</string>
+  <string name="next">Volgende</string>
+  <string name="blank">Blanko</string>
+  <string name="unblank">Vertoon</string>
+  <string name="tabAlert">Waarskuwing</string>
+  <string name="alert">Attent:</string>
+  <string name="alertHint">Vul attent boodskap in</string>
+  <string name="alertTextNull">Vul asseblief \'n boodskap in om te stuur.</string>
+  <string name="send">Stuur</string>
+  <string name="tabLive">Regstreeks</string>
+  <string name="tabStage">Verhoog</string>
+  <string name="tabDisplay">Vertoon</string>
+  <string name="tabService">Diens</string>
+  <string name="preferenceCategoryTitleServer">Bediener</string>
+  <string name="url">Bediener</string>
+  <string name="urlHint">Gasheer naam of IP</string>
+  <string name="port">Poort</string>
+  <string name="enableCustomTimeouts">Bekragtig Aangepasde Tyd-uitlope</string>
+  <string name="textSizeType">Teks Grootte Tipe</string>
+  <string name="textSizeSummary">Verander die Diens teks grootte</string>
+  <string name="displayType">Vertoning Blanko Tipe</string>
+  <string name="displayBlankType">Vertoning Blanko Tipe</string>
+  <string name="displayBlankSummary">Kies die gevraagde blanko tipe</string>
+  <string name="displayScreen">Skerm</string>
+  <string name="displayTheme">Tema</string>
+  <string name="displayDesktop">Hoofblad</string>
+  <string name="displayBlankOn">Herstel vertoon vorm</string>
+  <string name="displayBlankOff">Blanko skerm na</string>
+  <string name="backgroundService">Verfris Vertonings</string>
+  <string name="backgroundTaskSummary">Merk om verfris instellings te verander</string>
+  <string name="backgroundTask">Verfris tyd (sek)</string>
+  <string name="customTimeoutsSummary">Tik om tyd-uitloop instellings te verander</string>
+  <string name="customTimeout">Aangepasde Tyd-uitlope</string>
+  <string name="socketTimeout">Sok Tyd-uitloop</string>
+  <string name="socketTimeoutSummary">Kies \'n waarde (millisekondes)</string>
+  <string name="connectionTimeout">Konneksie Tyd-uitloop</string>
+  <string name="connectionTimedout">Kenneksie tyd het uitgeloop</string>
+  <string name="connectionTimeoutSummary">Kies \'n waarde (millisekondes)</string>
+  <string name="unable">Nie in staat om blad te laai nie -</string>
+  <string name="connectionFailed">Konneksie veld</string>
+  <string name="jsonfail">JSON het misluk</string>
+  <string name="loading">Konnekteer...</string>
+  <string name="searching">Soek...</string>
+  <string name="loadingFailed">Fout - Laai het gevaal</string>
+  <string name="loadingServiceItems">Laai Diens Items...</string>
+  <string name="loadingSlideItems">Laai Skyfie Items...</string>
+  <string name="loadingStatusInfo">Laai Status Inligting...</string>
+  <string name="searchHint">Soek OpenLP</string>
+  <string name="searchResults">Soek Resultate</string>
+  <string name="showingResults">Vertoon Resultate vir \'%s\'</string>
+  <string name="contentDescription">Spat Skerm</string>
+  <string name="buttonSearchText">Soek</string>
+  <string name="dialogTitleItemOptions">Item Opsies:</string>
+  <string name="dialogNegativeSendLive">Stuur Regstreeks</string>
+  <string name="dialogPositiveAddToService">Voeg by Diens</string>
+  <string name="couldNotHandlePollResponse">Kon nie die Poll reaksie verwerk nie</string>
+  <string name="requestFailed">Aanvraag het Gevaal</string>
+  <string name="couldNotHandleLiveItems">Kon nie die regstreekse items hanteer nie</string>
+  <string name="couldNotHandleServiceItems">Kon nie die diens items hanteer nie</string>
+  <string name="connection.profiles">Konneksie Profiele</string>
+  <string name="connection.profiles.manage">Bestuur Profiele</string>
+  <string name="connection.profile.title">Profiel Titel</string>
+  <string name="connection.profile.active">Aktiveer Profiel</string>
+  <string name="connection.profile.active.toast">Aktiewe Profiel</string>
+  <string name="connection.profile.summary.activate">Stel hierdie profiel as die aktiewe profiel</string>
+  <string name="connection.profile.activate">Aktiveer</string>
+  <string name="connection.profile.server">Bediener</string>
+  <string name="connection.profile.remove">Verwyder</string>
+  <string name="connection.profile.remove.summary">Verwyder hierdie konfigurasie</string>
+  <string name="connection.profile.not.saved">Raak aan om eienskappe te redigeer</string>
+  <string name="connection.profile.new.server">Nuwe Bediener</string>
+  <string name="notSet">Nie ingestel</string>
+  <string name="connection.profile.ssl.use">Gebruik SSL (Secure Sockets Layer)</string>
+  <string name="connection.profile.ssl.summary">Spesifiseer of SSL gebruik moet word</string>
+  <string name="connection.available.configurations">Lys van beskikbare profiele</string>
+  <string name="connection.add.by.menu">Voeg \'n konfigurasie by deur die spyskaart</string>
+</resources>

=== added directory 'res/values-bg'
=== added file 'res/values-bg/strings.xml'
--- res/values-bg/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-bg/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">Относно</string>
+  <string name="about_text">Версия</string>
+  <string name="about_display_1">OpenLP е свободен софтуер</string>
+  <string name="about_display_3">Интернет страница</string>
+  <string name="about_display_4">Копирайт</string>
+  <string name="about_display_5">Копирайт за отделни части</string>
+  <string name="about_display_6">Лиценз</string>
+  <string name="about_display_7">Програмата е свободно приложение; може да го разпространявате и/или  да внасяте промени според условията на ОПЛ Общ Публичен Лиценз така както е публикуван от Фондацията \"Свободен Софтуер\"; втора версия на Лиценза.</string>
+  <string name="about_display_8">Тази програма се разпространява с надеждата, че ще бъде полезна, но за това не се дава никаква гаранция; без дори косвена гаранция като ПРОДУКТ ГОДЕН ЗА ПРОДАЖБА или ВЪВ ВЪЗМОЖНОСТ ДА СЛУЖИ ЗА ОПРЕДЕЛЕНА ЦЕЛ.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Настройки</string>
+  <string name="preferences">Предпочитания</string>
+  <string name="none">Нищо</string>
+  <string name="prev">назад</string>
+  <string name="next">напред</string>
+  <string name="blank">Празно</string>
+  <string name="unblank">Премахни празнотата</string>
+  <string name="tabAlert">Сигнал</string>
+  <string name="alert">Сигнал:</string>
+  <string name="alertHint">Напишете сигнално съобщение</string>
+  <string name="alertTextNull">Моля, напишете съобщение, което да изпратите!</string>
+  <string name="send">Изпрати</string>
+  <string name="tabLive">На Екрана</string>
+  <string name="tabStage">На Сцената</string>
+  <string name="tabDisplay">Дисплей</string>
+  <string name="tabService">Услуга</string>
+  <string name="preferenceCategoryTitleServer">Сървър</string>
+  <string name="url">Сървър</string>
+  <string name="urlHint">Hostname или IP</string>
+  <string name="port">Порт</string>
+  <string name="enableCustomTimeouts">Активирай клиентски срокове</string>
+  <string name="textSizeType">Тип на размера на текста</string>
+  <string name="textSizeSummary">Промени размера на текста за Службата</string>
+  <string name="displayType">Вид празен екран</string>
+  <string name="displayBlankType">Вид празен екран</string>
+  <string name="displayBlankSummary">Избери изисквания тип на празнота</string>
+  <string name="displayScreen">Екран</string>
+  <string name="displayTheme">Тема</string>
+  <string name="displayDesktop">Десктоп</string>
+  <string name="displayBlankOn">Пренастрой екрана от</string>
+  <string name="displayBlankOff">Празен екран до</string>
+  <string name="backgroundService">Опресни Дисплеите</string>
+  <string name="backgroundTaskSummary">Отметни за да промениш настройките за опресняване</string>
+  <string name="backgroundTask">Време на опресняване (сек.)</string>
+  <string name="customTimeoutsSummary">Избери за да промениш настройките за изчакване</string>
+  <string name="customTimeout">Време за изчакване по избор</string>
+  <string name="socketTimeout">Време за изчакване на Сокетната връзка.</string>
+  <string name="socketTimeoutSummary">Избери стойност (в милисекунди)</string>
+  <string name="connectionTimeout">Времето за изчакване на свързването</string>
+  <string name="connectionTimedout">Времето за свързване свърши</string>
+  <string name="connectionTimeoutSummary">Избери стойност (в милисекунди)</string>
+  <string name="unable">В невъзможност да зареди страница -</string>
+  <string name="connectionFailed">Провалена връзка</string>
+  <string name="jsonfail">Грешка в формата на съобщението</string>
+  <string name="loading">Свързване...</string>
+  <string name="searching">Търси...</string>
+  <string name="loadingFailed">Грешка - Провалено зареждане</string>
+  <string name="loadingServiceItems">Зареждане на обекти от Службата</string>
+  <string name="loadingSlideItems">Зареждане на обекти на слайда</string>
+  <string name="loadingStatusInfo">Зареждане информация за състоянието</string>
+  <string name="searchHint">Търси в OpenLP</string>
+  <string name="searchResults">Резултати от търсенето</string>
+  <string name="showingResults">Показани резултати за \'%s\'</string>
+  <string name="contentDescription">Начална Картина</string>
+  <string name="buttonSearchText">Търси</string>
+  <string name="dialogTitleItemOptions">Опции на обект</string>
+  <string name="dialogNegativeSendLive">Прожектирай</string>
+  <string name="dialogPositiveAddToService">Добави към Службата</string>
+  <string name="couldNotHandlePollResponse">Не може да се обработи отговора.</string>
+  <string name="requestFailed">Провалено искане</string>
+  <string name="couldNotHandleLiveItems">Не може да обработва частите изпратени за Екрана.</string>
+  <string name="couldNotHandleServiceItems">Не може да обработва частите na Службата</string>
+  <string name="connection.profiles">Профили за Свръзка</string>
+  <string name="connection.profiles.manage">Управление на профили</string>
+  <string name="connection.profile.title">Заглавие на профила</string>
+  <string name="connection.profile.active">Активен профил - Щракни за да го променяш</string>
+  <string name="connection.profile.active.toast">Активен профил</string>
+  <string name="connection.profile.summary.activate">Щракни за да го задействаш</string>
+  <string name="connection.profile.activate">Задействай</string>
+  <string name="connection.profile.server">Сървър</string>
+  <string name="connection.profile.remove">Премахни</string>
+  <string name="connection.profile.remove.summary">Премахни тази конфигурация.</string>
+  <string name="connection.profile.not.saved">Щракни за да променяш настройките</string>
+  <string name="connection.profile.new.server">Нов сървър</string>
+  <string name="notSet">Не е настроен</string>
+  <string name="connection.profile.ssl.use">Използвай SSL</string>
+  <string name="connection.profile.ssl.summary">Определи кога да се използва SSL</string>
+  <string name="connection.available.configurations">Списък с налични профили</string>
+  <string name="connection.add.by.menu">Щракни за да добавиш нов профил</string>
+</resources>

=== added directory 'res/values-cs'
=== added file 'res/values-cs/strings.xml'
--- res/values-cs/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-cs/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">O</string>
+  <string name="about_text">Verze</string>
+  <string name="about_display_1">OpenLP je volně dostupná křesťanská prezentační aplikace. Více informací o OpenLP.</string>
+  <string name="about_display_3">Internetová stránka</string>
+  <string name="about_display_4">Autorská práva</string>
+  <string name="about_display_5">Částečná autorská práva</string>
+  <string name="about_display_6">Licence</string>
+  <string name="about_display_7">Tento program je svobodný software; můžete jej šířit a modifikovat  podle ustanovení GNU General Public License, vydávané Free Software Foundation; a to podle verze 2 této licence.</string>
+  <string name="about_display_8">Tento program je rozšiřován v naději, že bude užitečný, avšak BEZ JAKÉKOLI ZÁRUKY; neposkytují se ani odvozené záruky PRODEJNOSTI anebo VHODNOSTI PRO URČITÝ ÚČEL.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Nastavení</string>
+  <string name="preferences">Nastavení</string>
+  <string name="none">Nic</string>
+  <string name="prev">Předchozí</string>
+  <string name="next">Další</string>
+  <string name="blank">Prázdný</string>
+  <string name="unblank">Neprázdný</string>
+  <string name="tabAlert">Upozornění</string>
+  <string name="alert">Upozornění:</string>
+  <string name="alertHint">Zadat zprávu upozornění</string>
+  <string name="alertTextNull">Zadejte prosím zprávu k odeslání.</string>
+  <string name="send">Odeslat</string>
+  <string name="tabLive">Naživo</string>
+  <string name="tabStage">Pódium</string>
+  <string name="tabDisplay">Zobrazení</string>
+  <string name="tabService">Služba</string>
+  <string name="preferenceCategoryTitleServer">Server</string>
+  <string name="url">Server</string>
+  <string name="urlHint">Jméno počítače nebo IP</string>
+  <string name="port">Port</string>
+  <string name="enableCustomTimeouts">Zapnout uživatelský časový limit</string>
+  <string name="textSizeType">Typ velikosti textu</string>
+  <string name="textSizeSummary">Změnit velikost textu služby</string>
+  <string name="displayType">Zobrazit prázdný typ</string>
+  <string name="displayBlankType">Zobrazit prázdný typ</string>
+  <string name="displayBlankSummary">Vybrat požadovaný prázdný typ</string>
+  <string name="displayScreen">Obrazovka</string>
+  <string name="displayTheme">Motiv</string>
+  <string name="displayDesktop">Pracovní plocha</string>
+  <string name="displayBlankOn">Obnovit zobrazení z</string>
+  <string name="displayBlankOff">Prázdné zobrazení na</string>
+  <string name="backgroundService">Obnovit zobrazení</string>
+  <string name="backgroundTaskSummary">Zaškrtnout pro změnu nastavení obnovy</string>
+  <string name="backgroundTask">Interval obnovy (sec)</string>
+  <string name="customTimeoutsSummary">Ověřit změny nastavení časového limitu</string>
+  <string name="customTimeout">Uživatelský časový limit</string>
+  <string name="socketTimeout">Časový limit socketu</string>
+  <string name="socketTimeoutSummary">Vybrat hodnotu (milisekundy)</string>
+  <string name="connectionTimeout">Časový limit spojení</string>
+  <string name="connectionTimedout">Spojení vypršelo</string>
+  <string name="connectionTimeoutSummary">Vybrat hodnotu (milisekundy)</string>
+  <string name="unable">Není možno načíst stránku -</string>
+  <string name="connectionFailed">Připojení selhalo</string>
+  <string name="jsonfail">JSON selhal</string>
+  <string name="loading">Připojuji se...</string>
+  <string name="searching">Hledám...</string>
+  <string name="loadingFailed">Chyba - Načtení selhalo</string>
+  <string name="loadingServiceItems">Načítám položky služby...</string>
+  <string name="loadingSlideItems">Načítám položky snímku...</string>
+  <string name="loadingStatusInfo">Načítám stavové info...</string>
+  <string name="searchHint">Hledat OpenLP</string>
+  <string name="searchResults">Výsledky hledání</string>
+  <string name="showingResults">Zobrazuji výsledky pro \'%s\'</string>
+  <string name="contentDescription">Úvodní obrazovka</string>
+  <string name="buttonSearchText">Hledat</string>
+  <string name="dialogTitleItemOptions">Volby položky:</string>
+  <string name="dialogNegativeSendLive">Naživo</string>
+  <string name="dialogPositiveAddToService">Přidat ke službě</string>
+  <string name="couldNotHandlePollResponse">Nemohu zpracovat Poll odpovědi</string>
+  <string name="requestFailed">Požadavek selhal</string>
+  <string name="couldNotHandleLiveItems">Nemohu zpracovat položky naživo</string>
+  <string name="couldNotHandleServiceItems">Nemohu zpracovat položky služby</string>
+  <string name="connection.profiles">Profily připojení</string>
+  <string name="connection.profiles.manage">Spravovat profil</string>
+  <string name="connection.profile.title">Název profilu</string>
+  <string name="connection.profile.active">Aktivní profil - klepnout pro úpravy </string>
+  <string name="connection.profile.active.toast">Aktivní profil</string>
+  <string name="connection.profile.summary.activate">Klepnout pro nastavení aktivního</string>
+  <string name="connection.profile.activate">Aktivovat</string>
+  <string name="connection.profile.server">Server</string>
+  <string name="connection.profile.remove">Odstranit</string>
+  <string name="connection.profile.remove.summary">Odstranit tuto konfiguraci</string>
+  <string name="connection.profile.not.saved">Klepnout pro úpravu vlastností</string>
+  <string name="connection.profile.new.server">Nový server</string>
+  <string name="notSet">Nenastaveno</string>
+  <string name="connection.profile.ssl.use">Použít SSL</string>
+  <string name="connection.profile.ssl.summary">Upřesnit jestli použít SSL</string>
+  <string name="connection.available.configurations">Seznam dostupných profilů</string>
+  <string name="connection.add.by.menu">Klepnout pro přidání nového profilu</string>
+</resources>

=== added directory 'res/values-da'
=== added file 'res/values-da/strings.xml'
--- res/values-da/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-da/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,90 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">Om</string>
+  <string name="about_text">Udgave</string>
+  <string name="about_display_1">OpenLP er et gratis præsentationsprogram til kirker. Læs mere om OpenLP.</string>
+  <string name="about_display_3">Hjemmeside</string>
+  <string name="about_display_4">Ophavsret</string>
+  <string name="about_display_5">Delvis ophavsret</string>
+  <string name="about_display_6">Licens</string>
+  <string name="about_display_7">Dette program er fri software; du kan redistribuere det og/eller ændre det under vilkårene angivet i GNU General Public License som er udgivet af Free Software Foundation; udgave 2 af licensen.</string>
+  <string name="about_display_8">Dette program er udgivet i håbet om at det må være brugbart, men UDEN NOGEN GARANTI; endda uden den underforståede garanti om SALGBARHED eller BRUGBARHED TIL ET BESTEMT FORMÅL.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Indstillinger</string>
+  <string name="preferences">Indstillinger</string>
+  <string name="none">Ingen</string>
+  <string name="prev">Forrige</string>
+  <string name="next">Næste</string>
+  <string name="blank">Sort skærm</string>
+  <string name="unblank">Vis skærm</string>
+  <string name="tabAlert">Meddelelse</string>
+  <string name="alert">Meddelelse:</string>
+  <string name="alertHint">Indtast besked</string>
+  <string name="alertTextNull">Indtast en besked der skal sendes.</string>
+  <string name="send">Send</string>
+  <string name="tabLive">Fremvisning</string>
+  <string name="tabStage">Scene</string>
+  <string name="tabDisplay">Visning</string>
+  <string name="tabService">Program</string>
+  <string name="preferenceCategoryTitleServer">Server</string>
+  <string name="url">Server</string>
+  <string name="urlHint">Værtsnavn eller IP</string>
+  <string name="port">Port</string>
+  <string name="enableCustomTimeouts">Aktiver brugerdefinerede timeouts</string>
+  <string name="textSizeType">Skriftstørrelse type</string>
+  <string name="textSizeSummary">Ændr programmets tekststørrelse</string>
+  <string name="displayType">\"Sort skærm\" type</string>
+  <string name="displayBlankType">\"Sort skærm\" type</string>
+  <string name="displayBlankSummary">Vælg den ønskede \"sort skærm\" type</string>
+  <string name="displayScreen">Skærm</string>
+  <string name="displayTheme">Tema</string>
+  <string name="displayDesktop">Skrivebord</string>
+  <string name="displayBlankOn">Gendan display fra</string>
+  <string name="displayBlankOff">Sluk skærm til</string>
+  <string name="backgroundService">Opdatér skærme</string>
+  <string name="backgroundTaskSummary">Vælg for at ændre opdaterings indstillingerne</string>
+  <string name="backgroundTask">Opdateringshastighed (sek.)</string>
+  <string name="customTimeoutsSummary">Vælg for at ændre timeout indstillinger</string>
+  <string name="customTimeout">Brugerdefineret timeout</string>
+  <string name="socketTimeout">Socket Timeout</string>
+  <string name="socketTimeoutSummary">Vælg en værdi (millisekunder)</string>
+  <string name="connectionTimeout">Timeout for forbindelse</string>
+  <string name="connectionTimedout">Forbindelsen fik timeout</string>
+  <string name="connectionTimeoutSummary">Vælg en værdi (millisekunder)</string>
+  <string name="unable">Kunne ikke indlæse side -</string>
+  <string name="connectionFailed">Forbindelse slog fejl</string>
+  <string name="jsonfail">Fejl i meddelelsesformatet</string>
+  <string name="loading">Forbinder...</string>
+  <string name="searching">Søger...</string>
+  <string name="loadingFailed">Fejl - Indlæsning slog fejl</string>
+  <string name="loadingServiceItems">Indlæser service elementer</string>
+  <string name="loadingSlideItems">Indlæser diaspunkter...</string>
+  <string name="loadingStatusInfo">Indlæser statusinfo...</string>
+  <string name="searchHint">Søg OpenLP</string>
+  <string name="searchResults">Søgeresultater</string>
+  <string name="showingResults">Viser resultater for \'%s\'</string>
+  <string name="contentDescription">Popop logo</string>
+  <string name="buttonSearchText">Søg</string>
+  <string name="dialogNegativeSendLive">Fremvis</string>
+  <string name="dialogPositiveAddToService">Tilføj til program</string>
+  <string name="requestFailed">Anmodning slog fejl</string>
+  <string name="couldNotHandleLiveItems">Kunne ikke håndtere fremvisningspunkter</string>
+  <string name="couldNotHandleServiceItems">Kunne ikke håndtere programpunkter</string>
+  <string name="connection.profiles">Forbindelsesprofiler</string>
+  <string name="connection.profiles.manage">Håndtér profiler</string>
+  <string name="connection.profile.title">Titel på profil</string>
+  <string name="connection.profile.active">Aktiv profil - Tryk for at håndtere</string>
+  <string name="connection.profile.active.toast">Aktiv profil</string>
+  <string name="connection.profile.summary.activate">Tryk for at aktivere</string>
+  <string name="connection.profile.activate">Aktivér</string>
+  <string name="connection.profile.server">Server</string>
+  <string name="connection.profile.remove">Fjern</string>
+  <string name="connection.profile.remove.summary">Fjern denne konfiguration</string>
+  <string name="connection.profile.not.saved">Tryk for at redigere egenskaber</string>
+  <string name="connection.profile.new.server">Ny server</string>
+  <string name="notSet">Ikke indstillet</string>
+  <string name="connection.profile.ssl.use">Benyt SSL</string>
+  <string name="connection.profile.ssl.summary">Angiv om SSL skal bruges</string>
+  <string name="connection.available.configurations">Liste over tilgængelige profiler</string>
+  <string name="connection.add.by.menu">Tryk for at tilføje en ny profil</string>
+</resources>

=== added directory 'res/values-de'
=== added file 'res/values-de/strings.xml'
--- res/values-de/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-de/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">Über</string>
+  <string name="about_text">Version</string>
+  <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_3">Homepage</string>
+  <string name="about_display_4">Copyright</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>
+  <string name="about_display_8">Dieses Programms wird in der Hoffnung zur Verfügung gestellt, dass es Ihnen von Nutzen sein wird, aber OHNE JEDE GEWÄHRLEISTUNG; auch ohne einer implizite Gewährleistung von MARKTREIFE oder der EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Einstellungen</string>
+  <string name="preferences">Voreinstellungen</string>
+  <string name="none">Nichts</string>
+  <string name="prev">Zurück</string>
+  <string name="next">Vorwärts</string>
+  <string name="blank">Abdunkeln</string>
+  <string name="unblank">Aufhellen</string>
+  <string name="tabAlert">Hinweis</string>
+  <string name="alert">Hinweis:</string>
+  <string name="alertHint">Hinweis eingeben</string>
+  <string name="alertTextNull">Bitte geben Sie eine Nachricht ein, welche gesendet werden soll.</string>
+  <string name="send">Senden</string>
+  <string name="tabLive">Live</string>
+  <string name="tabStage">Bühnenmonitor</string>
+  <string name="tabDisplay">Anzeige</string>
+  <string name="tabService">Ablauf</string>
+  <string name="preferenceCategoryTitleServer">Server</string>
+  <string name="url">Server</string>
+  <string name="urlHint">Hostname oder IP</string>
+  <string name="port">Port</string>
+  <string name="enableCustomTimeouts">Aktiviere eigene Time-outs</string>
+  <string name="textSizeType">Textgröße</string>
+  <string name="textSizeSummary">Textgröße des Ablaufs ändern</string>
+  <string name="displayType">Zeige Verdunklungstyp an</string>
+  <string name="displayBlankType">Zeige Verdunklungstyp an</string>
+  <string name="displayBlankSummary">Wähle den erforderlichen Verdunklungstyp</string>
+  <string name="displayScreen">Bildschirm</string>
+  <string name="displayTheme">Design</string>
+  <string name="displayDesktop">Arbeitsfläche</string>
+  <string name="displayBlankOn">Live Bild von </string>
+  <string name="displayBlankOff">Live Bild zu</string>
+  <string name="backgroundService">Aktualisiere Anzeige</string>
+  <string name="backgroundTaskSummary">Auswählen, um Aktualisierungseinstellungen zu verändern</string>
+  <string name="backgroundTask">Aktualisierungsintervall (Sek)</string>
+  <string name="customTimeoutsSummary">Aktiviere Timeouts</string>
+  <string name="customTimeout">Eigene Timeouts</string>
+  <string name="socketTimeout">Socket Timeout</string>
+  <string name="socketTimeoutSummary">Wähle einen Wert (in Millisekunden)</string>
+  <string name="connectionTimeout">Verbindungzeit überschritten</string>
+  <string name="connectionTimedout">Verbindungszeit abgelaufen</string>
+  <string name="connectionTimeoutSummary">Wähle einen Wert (in Millisekunden)</string>
+  <string name="unable">Seite kann nicht geladen werden -</string>
+  <string name="connectionFailed">Verbindungsfehler</string>
+  <string name="jsonfail">JSON Formatfehler</string>
+  <string name="loading">Verbinde...</string>
+  <string name="searching">Suche...</string>
+  <string name="loadingFailed">Fehler - Laden fehlgeschlagen</string>
+  <string name="loadingServiceItems">Lade Ablaufelemente...</string>
+  <string name="loadingSlideItems">Lade Folienelemente...</string>
+  <string name="loadingStatusInfo">Lade Statusinfo...</string>
+  <string name="searchHint">OpenLP durchsuchen</string>
+  <string name="searchResults">Suchergebnisse</string>
+  <string name="showingResults">Zeige Ergebnisse für \'%s\'</string>
+  <string name="contentDescription">Startbildschirm</string>
+  <string name="buttonSearchText">Suche</string>
+  <string name="dialogTitleItemOptions">Elementoptionen:</string>
+  <string name="dialogNegativeSendLive">Zeige Live</string>
+  <string name="dialogPositiveAddToService">Füge zum Ablauf hinzu</string>
+  <string name="couldNotHandlePollResponse">Kann nicht mit der Rückantwort umgehen</string>
+  <string name="requestFailed">Anfrage fehlgeschlagen</string>
+  <string name="couldNotHandleLiveItems">Kann nicht mit dem Live-Eintrag umgehen</string>
+  <string name="couldNotHandleServiceItems">Kann nicht mit dem Eintrag aus dem Ablaufplan umgehen</string>
+  <string name="connection.profiles">Profile der Verbindungen</string>
+  <string name="connection.profiles.manage">Verwalte Profile</string>
+  <string name="connection.profile.title">Profiltitel</string>
+  <string name="connection.profile.active">Aktives Profile - Klicke zur Bearbeitung</string>
+  <string name="connection.profile.active.toast">Aktives Profil</string>
+  <string name="connection.profile.summary.activate">Klicke um dies zu aktivieren</string>
+  <string name="connection.profile.activate">Aktiviere</string>
+  <string name="connection.profile.server">Server</string>
+  <string name="connection.profile.remove">Lösche</string>
+  <string name="connection.profile.remove.summary">Lösche die Konfiguration</string>
+  <string name="connection.profile.not.saved">Klicke um die Einstellungen zu bearbeiten</string>
+  <string name="connection.profile.new.server">Neuer Server</string>
+  <string name="notSet">Nicht festgelegt</string>
+  <string name="connection.profile.ssl.use">Verwende SSL</string>
+  <string name="connection.profile.ssl.summary">Festlegen, ob SSL verwendet werden soll</string>
+  <string name="connection.available.configurations">Liste mit verfügbaren Profilen</string>
+  <string name="connection.add.by.menu">Klicke um ein neues Profil zu erstellen</string>
+</resources>

=== added directory 'res/values-el'
=== added file 'res/values-el/strings.xml'
--- res/values-el/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-el/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">Σχετικά</string>
+  <string name="about_text">Έκδοση</string>
+  <string name="about_display_1">Το OpenLP είναι ένα εκκλησιαστικό πρόγραμμα παρουσιάσεων. Ανακαλύψτε περισσότερα για το OpenLP.</string>
+  <string name="about_display_3">Ιστοσελίδα</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 όπως αυτή έχει εκδοθεί από την Free Software Foundation, έκδοση 2 της Άδειας.</string>
+  <string name="about_display_8">Το πρόγραμμα αυτό διανέμεται υπό την ελπίδα ότι θα είναι χρήσιμο, αλλά ΧΩΡΙΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ, χωρίς καν την εφαρμοστέα εγγύησης ΕΜΠΟΡΙΚΟΤΗΤΑΣ ή ΠΡΟΣΑΡΜΟΓΗΣ ΓΙΑ ΜΙΑ ΣΥΓΚΕΚΡΙΜΕΝΗ ΧΡΗΣΗ.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Ρυθμίσεις</string>
+  <string name="preferences">Προτιμήσεις</string>
+  <string name="none">Κανένα</string>
+  <string name="prev">Προηγούμενο</string>
+  <string name="next">Επόμενο</string>
+  <string name="blank">Κενό</string>
+  <string name="unblank">Μη Κενό</string>
+  <string name="tabAlert">Ειδοποίηση</string>
+  <string name="alert">Ειδοποίηση:</string>
+  <string name="alertHint">Εισαγωγή μηνύματος ειδοποίησης</string>
+  <string name="alertTextNull">Παρακαλούμε εισάγετε ένα μήνυμα προς αποστολή.</string>
+  <string name="send">Αποστολή</string>
+  <string name="tabLive">Ζωντανά</string>
+  <string name="tabStage">Σκηνή</string>
+  <string name="tabDisplay">Εμφάνιση</string>
+  <string name="tabService">Λειτουργία</string>
+  <string name="preferenceCategoryTitleServer">Server</string>
+  <string name="url">Server</string>
+  <string name="urlHint">Hostname ή διεύθυνση IP</string>
+  <string name="port">Θύρα</string>
+  <string name="enableCustomTimeouts">Ενεργοποίηση </string>
+  <string name="textSizeType">Μέγεθος κειμένου πληκτρολόγησης</string>
+  <string name="textSizeSummary">Αλλάξτε το μέγεθος κειμένου της Λειτουργίας</string>
+  <string name="displayType">Εμφάνιση Τύπου Κενής Σελίδας</string>
+  <string name="displayBlankType">Εμφάνιση Τύπου Κενής Σελίδας</string>
+  <string name="displayBlankSummary">Επιλέξτε τον απαιτούμενο τύπο κενής σελίδας </string>
+  <string name="displayScreen">Οθόνη</string>
+  <string name="displayTheme">Θέμα</string>
+  <string name="displayDesktop">Επιφάνεια Εργασίας</string>
+  <string name="displayBlankOn">Επαναφορά εμφάνισης από</string>
+  <string name="displayBlankOff">Εμφάνιση Κενής Σελίδας στο</string>
+  <string name="backgroundService">Ανανέωση Εμφανίσεων</string>
+  <string name="backgroundTaskSummary">Επιλέξτε για τροποποίηση ρυθμίσεων ανανέωσης</string>
+  <string name="backgroundTask">Χρόνος ανανέωσης (sec)</string>
+  <string name="customTimeoutsSummary">Επιλέξτε για τροποποίηση των ρυθμίσεων λήξης</string>
+  <string name="customTimeout">Τροποποιημένη Λήξη</string>
+  <string name="socketTimeout">Λήξη Socket</string>
+  <string name="socketTimeoutSummary">Επιλέξτε μια τιμή (milliseconds)</string>
+  <string name="connectionTimeout">Λήξη Σύνδεσης</string>
+  <string name="connectionTimedout">Η σύνδεση έληξε</string>
+  <string name="connectionTimeoutSummary">Επιλέξτε μια τιμή (milliseconds)</string>
+  <string name="unable">Μη δυνατή φόρτωση σελίδας -</string>
+  <string name="connectionFailed">Η σύνδεση απέτυχε</string>
+  <string name="jsonfail">JSON απέτυχε</string>
+  <string name="loading">Σύνδεση...</string>
+  <string name="searching">Αναζήτηση...</string>
+  <string name="loadingFailed">Σφάλμα - Αποτυχία Φόρτωσης</string>
+  <string name="loadingServiceItems">Φόρτωση Αντικειμένων Λειτουργίας...</string>
+  <string name="loadingSlideItems">Φόρτωση Αντικειμένων Διαφανειών...</string>
+  <string name="loadingStatusInfo">Φόρτωση Πληροφοριών Κατάστασης...</string>
+  <string name="searchHint">Αναζήτηση OpenLP</string>
+  <string name="searchResults">Αποτελέσματα Αναζήτησης</string>
+  <string name="showingResults">Εμφάνιση Αποτελεσμάτων για \'%s\'</string>
+  <string name="contentDescription">Αρχική Οθόνη</string>
+  <string name="buttonSearchText">Αναζήτηση</string>
+  <string name="dialogTitleItemOptions">Επιλογές Στοιχείου</string>
+  <string name="dialogNegativeSendLive">Αποστολή Ζωντανά</string>
+  <string name="dialogPositiveAddToService">Προσθήκη στην Λειτουργία</string>
+  <string name="couldNotHandlePollResponse">Δεν ήταν δυνατή η διαχείριση της ανταπόκρισης Poll</string>
+  <string name="requestFailed">Αποτυχία Αιτήματος</string>
+  <string name="couldNotHandleLiveItems">Αποτυχία διαχείρισης στοιχείων που παίζουν live</string>
+  <string name="couldNotHandleServiceItems">Αποτυχία διαχείρισης στοιχείων λειτουργίας</string>
+  <string name="connection.profiles">Προφίλ Συνδέσεων</string>
+  <string name="connection.profiles.manage">Διαχείριση Προφίλ</string>
+  <string name="connection.profile.title">Τίτλος Προφίλ</string>
+  <string name="connection.profile.active">Ενεργό Προφίλ - Πιέστε για διαχείριση</string>
+  <string name="connection.profile.active.toast">Ενεργό Προφίλ</string>
+  <string name="connection.profile.summary.activate">Πιέστε για να ενεργοποιήσετε</string>
+  <string name="connection.profile.activate">Ενεργοποίηση</string>
+  <string name="connection.profile.server">Server</string>
+  <string name="connection.profile.remove">Αφαίρεση</string>
+  <string name="connection.profile.remove.summary">Αφαίρεση αυτής της διαμόρφωσης</string>
+  <string name="connection.profile.not.saved">Πιέστε για τροποποίηση ιδιοτήτων</string>
+  <string name="connection.profile.new.server">Νέος Server</string>
+  <string name="notSet">Δεν ορίστηκε</string>
+  <string name="connection.profile.ssl.use">Χρήση SSL</string>
+  <string name="connection.profile.ssl.summary">Καθορίστε αν πρέπει να χρησιμοποιηθεί SSL</string>
+  <string name="connection.available.configurations">Λίστα διαθέσιμων προφίλ</string>
+  <string name="connection.add.by.menu">Πιέστε για προσθήκη νέου προφίλ</string>
+</resources>

=== added directory 'res/values-en-rGB'
=== added file 'res/values-en-rGB/strings.xml'
--- res/values-en-rGB/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-en-rGB/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">About</string>
+  <string name="about_text">Version</string>
+  <string name="about_display_1">OpenLP is free church presentation software. Find out more about OpenLP.</string>
+  <string name="about_display_3">Website</string>
+  <string name="about_display_4">Copyright</string>
+  <string name="about_display_5">Portions copyright</string>
+  <string name="about_display_6">License</string>
+  <string name="about_display_7">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.</string>
+  <string name="about_display_8">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.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Settings</string>
+  <string name="preferences">Preferences</string>
+  <string name="none">None</string>
+  <string name="prev">Previous</string>
+  <string name="next">Next</string>
+  <string name="blank">Blank</string>
+  <string name="unblank">Unblank</string>
+  <string name="tabAlert">Alert</string>
+  <string name="alert">Alert:</string>
+  <string name="alertHint">Enter alert message</string>
+  <string name="alertTextNull">Please enter a message to send.</string>
+  <string name="send">Send</string>
+  <string name="tabLive">Live</string>
+  <string name="tabStage">Stage</string>
+  <string name="tabDisplay">Display</string>
+  <string name="tabService">Service</string>
+  <string name="preferenceCategoryTitleServer">Server</string>
+  <string name="url">Server</string>
+  <string name="urlHint">Hostname or IP</string>
+  <string name="port">Port</string>
+  <string name="enableCustomTimeouts">Enable Custom Timeouts</string>
+  <string name="textSizeType">Text Size Type</string>
+  <string name="textSizeSummary">Change the Service text size</string>
+  <string name="displayType">Display Blank Type</string>
+  <string name="displayBlankType">Display Blank Type</string>
+  <string name="displayBlankSummary">Select the required blank type</string>
+  <string name="displayScreen">Screen</string>
+  <string name="displayTheme">Theme</string>
+  <string name="displayDesktop">Desktop</string>
+  <string name="displayBlankOn">Reset display from</string>
+  <string name="displayBlankOff">Blank display to</string>
+  <string name="backgroundService">Refresh Displays</string>
+  <string name="backgroundTaskSummary">Check to modify refresh settings</string>
+  <string name="backgroundTask">Refresh time (sec)</string>
+  <string name="customTimeoutsSummary">Check to modify timeout settings</string>
+  <string name="customTimeout">Custom Timeout</string>
+  <string name="socketTimeout">Socket Timeout</string>
+  <string name="socketTimeoutSummary">Select a value (milliseconds)</string>
+  <string name="connectionTimeout">Connection Timeout</string>
+  <string name="connectionTimedout">Connection timed out</string>
+  <string name="connectionTimeoutSummary">Select a value (milliseconds)</string>
+  <string name="unable">Unable to load page -</string>
+  <string name="connectionFailed">Connection failed</string>
+  <string name="jsonfail">JSON failed</string>
+  <string name="loading">Connecting...</string>
+  <string name="searching">Searching...</string>
+  <string name="loadingFailed">Error - Load Failed</string>
+  <string name="loadingServiceItems">Loading Service Items...</string>
+  <string name="loadingSlideItems">Loading Slide Items...</string>
+  <string name="loadingStatusInfo">Loading Status Info...</string>
+  <string name="searchHint">Search OpenLP</string>
+  <string name="searchResults">Search Results</string>
+  <string name="showingResults">Showing Results for \'%s\'</string>
+  <string name="contentDescription">Splash Screen</string>
+  <string name="buttonSearchText">Search</string>
+  <string name="dialogTitleItemOptions">Item Options:</string>
+  <string name="dialogNegativeSendLive">Send Live</string>
+  <string name="dialogPositiveAddToService">Add to Service</string>
+  <string name="couldNotHandlePollResponse">Could not handle Poll response</string>
+  <string name="requestFailed">Request Failed</string>
+  <string name="couldNotHandleLiveItems">Could not handle live items</string>
+  <string name="couldNotHandleServiceItems">Could not handle service items</string>
+  <string name="connection.profiles">Connection Profiles</string>
+  <string name="connection.profiles.manage">Manage Profiles</string>
+  <string name="connection.profile.title">Profile Title</string>
+  <string name="connection.profile.active">Active Profile</string>
+  <string name="connection.profile.active.toast">Active Profile</string>
+  <string name="connection.profile.summary.activate">Set this profile as the active profile</string>
+  <string name="connection.profile.activate">Activate</string>
+  <string name="connection.profile.server">Server</string>
+  <string name="connection.profile.remove">Remove</string>
+  <string name="connection.profile.remove.summary">Remove this configuration</string>
+  <string name="connection.profile.not.saved">Tap to edit properties</string>
+  <string name="connection.profile.new.server">New Server</string>
+  <string name="notSet">Not set</string>
+  <string name="connection.profile.ssl.use">Use SSL</string>
+  <string name="connection.profile.ssl.summary">Specify whether SSL should be used</string>
+  <string name="connection.available.configurations">List of available profiles</string>
+  <string name="connection.add.by.menu">Add a config via the menu</string>
+</resources>

=== added directory 'res/values-en-rZA'
=== added file 'res/values-en-rZA/strings.xml'
--- res/values-en-rZA/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-en-rZA/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">About</string>
+  <string name="about_text">Version</string>
+  <string name="about_display_1">OpenLP is free church presentation software. Find out more about OpenLP.</string>
+  <string name="about_display_3">Website</string>
+  <string name="about_display_4">Copyright</string>
+  <string name="about_display_5">Portions copyright</string>
+  <string name="about_display_6">License</string>
+  <string name="about_display_7">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.</string>
+  <string name="about_display_8">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.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Settings</string>
+  <string name="preferences">Preferences</string>
+  <string name="none">None</string>
+  <string name="prev">Previous</string>
+  <string name="next">Next</string>
+  <string name="blank">Blank</string>
+  <string name="unblank">Unblank</string>
+  <string name="tabAlert">Alert</string>
+  <string name="alert">Alert:</string>
+  <string name="alertHint">Enter alert message</string>
+  <string name="alertTextNull">Please enter a message to send.</string>
+  <string name="send">Send</string>
+  <string name="tabLive">Live</string>
+  <string name="tabStage">Stage</string>
+  <string name="tabDisplay">Display</string>
+  <string name="tabService">Service</string>
+  <string name="preferenceCategoryTitleServer">Server</string>
+  <string name="url">Server</string>
+  <string name="urlHint">Hostname or IP</string>
+  <string name="port">Port</string>
+  <string name="enableCustomTimeouts">Enable Custom Timeouts</string>
+  <string name="textSizeType">Text Size Type</string>
+  <string name="textSizeSummary">Change the Service text size</string>
+  <string name="displayType">Display Blank Type</string>
+  <string name="displayBlankType">Display Blank Type</string>
+  <string name="displayBlankSummary">Select the required blank type</string>
+  <string name="displayScreen">Screen</string>
+  <string name="displayTheme">Theme</string>
+  <string name="displayDesktop">Desktop</string>
+  <string name="displayBlankOn">Reset display from</string>
+  <string name="displayBlankOff">Blank display to</string>
+  <string name="backgroundService">Refresh Displays</string>
+  <string name="backgroundTaskSummary">Check to modify refresh settings</string>
+  <string name="backgroundTask">Refresh time (sec)</string>
+  <string name="customTimeoutsSummary">Check to modify timeout settings</string>
+  <string name="customTimeout">Custom Timeout</string>
+  <string name="socketTimeout">Socket Timeout</string>
+  <string name="socketTimeoutSummary">Select a value (milliseconds)</string>
+  <string name="connectionTimeout">Connection Timeout</string>
+  <string name="connectionTimedout">Connection timed out</string>
+  <string name="connectionTimeoutSummary">Select a value (milliseconds)</string>
+  <string name="unable">Unable to load page -</string>
+  <string name="connectionFailed">Connection failed</string>
+  <string name="jsonfail">JSON failed</string>
+  <string name="loading">Connecting...</string>
+  <string name="searching">Searching...</string>
+  <string name="loadingFailed">Error - Load Failed</string>
+  <string name="loadingServiceItems">Loading Service Items...</string>
+  <string name="loadingSlideItems">Loading Slide Items...</string>
+  <string name="loadingStatusInfo">Loading Status Info...</string>
+  <string name="searchHint">Search OpenLP</string>
+  <string name="searchResults">Search Results</string>
+  <string name="showingResults">Showing Results for \'%s\'</string>
+  <string name="contentDescription">Splash Screen</string>
+  <string name="buttonSearchText">Search</string>
+  <string name="dialogTitleItemOptions">Item Options:</string>
+  <string name="dialogNegativeSendLive">Send Live</string>
+  <string name="dialogPositiveAddToService">Add to Service</string>
+  <string name="couldNotHandlePollResponse">Could not handle Poll response</string>
+  <string name="requestFailed">Request Failed</string>
+  <string name="couldNotHandleLiveItems">Could not handle live items</string>
+  <string name="couldNotHandleServiceItems">Could not handle service items</string>
+  <string name="connection.profiles">Connection Profiles</string>
+  <string name="connection.profiles.manage">Manage Profiles</string>
+  <string name="connection.profile.title">Profile Title</string>
+  <string name="connection.profile.active">Active Profile - Tap to manage</string>
+  <string name="connection.profile.active.toast">Active Profile</string>
+  <string name="connection.profile.summary.activate">Tap to set active</string>
+  <string name="connection.profile.activate">Activate</string>
+  <string name="connection.profile.server">Server</string>
+  <string name="connection.profile.remove">Remove</string>
+  <string name="connection.profile.remove.summary">Remove this configuration</string>
+  <string name="connection.profile.not.saved">Tap to edit properties</string>
+  <string name="connection.profile.new.server">New Server</string>
+  <string name="notSet">Not set</string>
+  <string name="connection.profile.ssl.use">Use SSL</string>
+  <string name="connection.profile.ssl.summary">Specify whether SSL should be used</string>
+  <string name="connection.available.configurations">List of available profiles</string>
+  <string name="connection.add.by.menu">Tap to add a new profile</string>
+</resources>

=== added directory 'res/values-es'
=== added file 'res/values-es/strings.xml'
--- res/values-es/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-es/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">Acerca de</string>
+  <string name="about_text">Versión</string>
+  <string name="about_display_1">OpenLP es un software de proyección gratuito para iglesias. Obtenga más información sobre OpenLP.</string>
+  <string name="about_display_3">Sitio Web</string>
+  <string name="about_display_4">Copyright</string>
+  <string name="about_display_5">Partes copyright</string>
+  <string name="about_display_6">Licencia</string>
+  <string name="about_display_7">Este es un programa gratuito; usted puede distribuirlo y/o modificarlo bajo los términos de la GNU General Public License según la publicación de Free Software Foundation; versión 2 de la Licencia.</string>
+  <string name="about_display_8">Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita de COMERCIALIZACIÓN o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Véase más abajo para más detalles.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Configuración</string>
+  <string name="preferences">Preferencias</string>
+  <string name="none">Ninguno</string>
+  <string name="prev">Anterior</string>
+  <string name="next">Siguiente</string>
+  <string name="blank">En blanco</string>
+  <string name="unblank">Restaurar</string>
+  <string name="tabAlert">Alerta</string>
+  <string name="alert">Alerta:</string>
+  <string name="alertHint">Escriba un mensaje de alerta</string>
+  <string name="alertTextNull">Por favor, introduzca un mensaje para enviar.</string>
+  <string name="send">Enviar</string>
+  <string name="tabLive">En vivo</string>
+  <string name="tabStage">Escenario</string>
+  <string name="tabDisplay">Pantalla</string>
+  <string name="tabService">Servicio</string>
+  <string name="preferenceCategoryTitleServer">Servidor</string>
+  <string name="url">Servidor</string>
+  <string name="urlHint">Nombre de host o IP</string>
+  <string name="port">Puerto</string>
+  <string name="enableCustomTimeouts">Permitir tiempos de espera personalizados</string>
+  <string name="textSizeType">Tamaño de Fuente</string>
+  <string name="textSizeSummary">Cambia el tamaño de texto del Servicio</string>
+  <string name="displayType">Tipo de pantalla en blanco</string>
+  <string name="displayBlankType">Tipo de pantalla en blanco</string>
+  <string name="displayBlankSummary">Seleccione el tipo de blanco que necesite</string>
+  <string name="displayScreen">Pantalla</string>
+  <string name="displayTheme">Tema</string>
+  <string name="displayDesktop">Escritorio</string>
+  <string name="displayBlankOn">Restablecer la pantalla desde</string>
+  <string name="displayBlankOff">Restablecer la pantalla hasta</string>
+  <string name="backgroundService">Actualizar Pantallas</string>
+  <string name="backgroundTaskSummary">Marque para modificar el tiempo de actualización</string>
+  <string name="backgroundTask">Tiempo de actualización (seg)</string>
+  <string name="customTimeoutsSummary">Modificar la configuración de tiempo de espera</string>
+  <string name="customTimeout">Tiempo de espera personalizado</string>
+  <string name="socketTimeout">Tiempo de espera de Socket</string>
+  <string name="socketTimeoutSummary">Seleccione un valor (en milisegundos)</string>
+  <string name="connectionTimeout">Tiempo de espera de conexión</string>
+  <string name="connectionTimedout">Tiempo de la conexión agotado</string>
+  <string name="connectionTimeoutSummary">Seleccione un valor (en milisegundos)</string>
+  <string name="unable">No se puede cargar la página -</string>
+  <string name="connectionFailed">Conexión fallida</string>
+  <string name="jsonfail">Error en el formato</string>
+  <string name="loading">Conectando...</string>
+  <string name="searching">Buscando...</string>
+  <string name="loadingFailed">Error - Carga Fallida</string>
+  <string name="loadingServiceItems">Cargando elementos del Servicio...</string>
+  <string name="loadingSlideItems">Cargando elementos de Diapositiva...</string>
+  <string name="loadingStatusInfo">Cargando Información de Estado...</string>
+  <string name="searchHint">Buscar OpenLP</string>
+  <string name="searchResults">Resultados de búsqueda</string>
+  <string name="showingResults">Mostrando resultados para \'%s\'</string>
+  <string name="contentDescription">Pantalla de Bienvenida</string>
+  <string name="buttonSearchText">Buscar</string>
+  <string name="dialogTitleItemOptions">Opciones de Elemento:</string>
+  <string name="dialogNegativeSendLive">Proyectar</string>
+  <string name="dialogPositiveAddToService">Agregar al Servicio</string>
+  <string name="couldNotHandlePollResponse">No se puede manejar la sincronización</string>
+  <string name="requestFailed">Solicitud Fallida</string>
+  <string name="couldNotHandleLiveItems">No se pueden manejar los elementos en vivo</string>
+  <string name="couldNotHandleServiceItems">No se pueden manejar los elementos del servicio</string>
+  <string name="connection.profiles">Perfiles de Conexión</string>
+  <string name="connection.profiles.manage">Administrar Perfiles</string>
+  <string name="connection.profile.title">Título de Perfil</string>
+  <string name="connection.profile.active">Perfil Activo - Presione para editar</string>
+  <string name="connection.profile.active.toast">Perfil Activo</string>
+  <string name="connection.profile.summary.activate">Presione para activar</string>
+  <string name="connection.profile.activate">Activo</string>
+  <string name="connection.profile.server">Servidor</string>
+  <string name="connection.profile.remove">Eliminar</string>
+  <string name="connection.profile.remove.summary">Eliminar esta configuración</string>
+  <string name="connection.profile.not.saved">Presione para editar propiedades</string>
+  <string name="connection.profile.new.server">Servidor Nuevo</string>
+  <string name="notSet">No establecido</string>
+  <string name="connection.profile.ssl.use">Usar SSL</string>
+  <string name="connection.profile.ssl.summary">Especifica si se debe usar una conexión segura (SSL)</string>
+  <string name="connection.available.configurations">Lista de perfiles disponibles</string>
+  <string name="connection.add.by.menu">Presione para agregar un perfil</string>
+</resources>

=== added directory 'res/values-et'
=== added file 'res/values-et/strings.xml'
--- res/values-et/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-et/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">Rakendusest</string>
+  <string name="about_text">Versioon</string>
+  <string name="about_display_1">OpenLP on vaba kirikuesitlustarkvara. Uuri rohkem OpenLP kohta.</string>
+  <string name="about_display_3">Veebileht</string>
+  <string name="about_display_4">Autoriõigused</string>
+  <string name="about_display_5">Osalised autoriõigused</string>
+  <string name="about_display_6">Litsents</string>
+  <string name="about_display_7">See programm on vaba tarkvara; te võite seda edasi levitada ja/või muuta vastavalt GNU Üldise Avaliku Litsentsi tingimustele, nagu need on Vaba Tarkvara Fondi poolt avaldatud; vastavalt  Litsentsi versioonile number 2.</string>
+  <string name="about_display_8">Seda programmi levitatakse lootuses, et see on kasulik, kuid ILMA IGASUGUSE GARANTIITA; isegi ilma KESKMISE/TAVALISE KVALITEEDI GARANTIITA või SOBIVUSELE TEATUD KINDLAKS EESMÄRGIKS.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Sätted</string>
+  <string name="preferences">Eelistused</string>
+  <string name="none">Puudub</string>
+  <string name="prev">Eelmine</string>
+  <string name="next">Järgmine</string>
+  <string name="blank">Tühjenda</string>
+  <string name="unblank">Näita</string>
+  <string name="tabAlert">Teade</string>
+  <string name="alert">Teade:</string>
+  <string name="alertHint">Sisesta teade</string>
+  <string name="alertTextNull">Palun sisesta teade, mida saata.</string>
+  <string name="send">Saada</string>
+  <string name="tabLive">Ekraan</string>
+  <string name="tabStage">Lava</string>
+  <string name="tabDisplay">Kuva</string>
+  <string name="tabService">Teenistus</string>
+  <string name="preferenceCategoryTitleServer">Server</string>
+  <string name="url">Server</string>
+  <string name="urlHint">Hostinimi või IP</string>
+  <string name="port">Port</string>
+  <string name="enableCustomTimeouts">Kohandatud aegumisegade kasutamine</string>
+  <string name="textSizeType">Teksti suurus</string>
+  <string name="textSizeSummary">Vaikimisi teenistuse teksti suuruse muutmine</string>
+  <string name="displayType">Kuva tühjendamise liik</string>
+  <string name="displayBlankType">Kuva tühjendamise liik</string>
+  <string name="displayBlankSummary">Vali kuva tühjendamise liik</string>
+  <string name="displayScreen">Ekraan</string>
+  <string name="displayTheme">Kujundus</string>
+  <string name="displayDesktop">Töölaud</string>
+  <string name="displayBlankOn">Kuvavormi lähtestamine</string>
+  <string name="displayBlankOff">Kuva tühjendamisel kuvatakse</string>
+  <string name="backgroundService">Kuvade värskendamine</string>
+  <string name="backgroundTaskSummary">Märgi värskendamise sätete muutmiseks</string>
+  <string name="backgroundTask">Värskendamise vahemik (sek)</string>
+  <string name="customTimeoutsSummary">Märgi, et muuta aegumise sätteid</string>
+  <string name="customTimeout">Kohandatud aegumine</string>
+  <string name="socketTimeout">Pesa aegumine</string>
+  <string name="socketTimeoutSummary">Vali kestus (millisekundid)</string>
+  <string name="connectionTimeout">Ühenduse aegumine</string>
+  <string name="connectionTimedout">Ühendus aegus</string>
+  <string name="connectionTimeoutSummary">Vali kestus (millisekundid)</string>
+  <string name="unable">Lehe laadimine pole võimalik -</string>
+  <string name="connectionFailed">Ühendus nurjus</string>
+  <string name="jsonfail">JSON nurjus</string>
+  <string name="loading">Ühendumine...</string>
+  <string name="searching">Otsimine...</string>
+  <string name="loadingFailed">Viga - laadimine nurjus</string>
+  <string name="loadingServiceItems">Teenistuse elementide laadimine...</string>
+  <string name="loadingSlideItems">Slaidi elementide laadimine...</string>
+  <string name="loadingStatusInfo">Olekuinfo laadimine...</string>
+  <string name="searchHint">OpenLP otsing</string>
+  <string name="searchResults">Otsingu tulemused</string>
+  <string name="showingResults">Tulemused otsingule \'%s\' </string>
+  <string name="contentDescription">Käivitusekraan</string>
+  <string name="buttonSearchText">Otsi</string>
+  <string name="dialogTitleItemOptions">Kirje valikud:</string>
+  <string name="dialogNegativeSendLive">Saada ekraanile</string>
+  <string name="dialogPositiveAddToService">Lisa teenistusele</string>
+  <string name="couldNotHandlePollResponse">Pollimise vastust pole võimalik käsitseda</string>
+  <string name="requestFailed">Päring nurjus</string>
+  <string name="couldNotHandleLiveItems">Ekraani elemente pole võimalik käsitseda</string>
+  <string name="couldNotHandleServiceItems">Teenistuse elemente pole võimalik käsitseda</string>
+  <string name="connection.profiles">Ühendusprofiilid</string>
+  <string name="connection.profiles.manage">Profiilide haldamine</string>
+  <string name="connection.profile.title">Profiili pealkiri</string>
+  <string name="connection.profile.active">Aktiivne profiil</string>
+  <string name="connection.profile.active.toast">Aktiivne profiil</string>
+  <string name="connection.profile.summary.activate">Selle profiili määramine aktiivseks profiiliks</string>
+  <string name="connection.profile.activate">Aktiveeri</string>
+  <string name="connection.profile.server">Server</string>
+  <string name="connection.profile.remove">Eemalda</string>
+  <string name="connection.profile.remove.summary">Selle seadistuse eemaldamine</string>
+  <string name="connection.profile.not.saved">Omaduste muutmiseks puuduta</string>
+  <string name="connection.profile.new.server">Uus server</string>
+  <string name="notSet">Pole määratud</string>
+  <string name="connection.profile.ssl.use">Kasutatakse SSL-i</string>
+  <string name="connection.profile.ssl.summary">Määrab, kas SSL-i tuleks kasutada</string>
+  <string name="connection.available.configurations">Saadaolevate profiilide loend</string>
+  <string name="connection.add.by.menu">Seadistuse lisamine menüü kaudu</string>
+</resources>

=== added directory 'res/values-fi'
=== added file 'res/values-fi/strings.xml'
--- res/values-fi/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-fi/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">Ohjelmasta</string>
+  <string name="about_text">Versio</string>
+  <string name="about_display_1">OpenLP on vapaalevitteinen seurakuntien esitysohjelmisto. Lisää tietoa OpenLP:stä.</string>
+  <string name="about_display_3">Nettisivu</string>
+  <string name="about_display_4">Tekijäinoikeudet</string>
+  <string name="about_display_5">Osien tekijäinoikeudet</string>
+  <string name="about_display_6">Lisenssi</string>
+  <string name="about_display_7">Tämä ohjelma on vapaa, voit jakaa ja / tai muuttaa sitä ehtojen mukaisesti GNU General Public Licensen julkaissut Free Software Foundation, version 2 lisenssillä.</string>
+  <string name="about_display_8">Tätä ohjelmaa levitetään siinä toivossa, että se olisi hyödyllinen, mutta ilman mitään takuuta; ilman edes hiljaista takuuta kaupallisesti hyväksyttävästä laadusta tai soveltuvuudesta tiettyyn tarkoitukseen.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Asetukset</string>
+  <string name="preferences">Asetukset</string>
+  <string name="none">Ei mitään</string>
+  <string name="prev">Edellinen</string>
+  <string name="next">Seuraava</string>
+  <string name="blank">Pimennä</string>
+  <string name="unblank">Tuo esiin</string>
+  <string name="tabAlert">Hälytys</string>
+  <string name="alert">Hälytys:</string>
+  <string name="alertHint">Syötä hälytysviesti</string>
+  <string name="alertTextNull">Syötä teksti, jonka aio lähettää.</string>
+  <string name="send">Lähetä</string>
+  <string name="tabLive">Esitys</string>
+  <string name="tabStage">Lava</string>
+  <string name="tabDisplay">Näyttö</string>
+  <string name="tabService">Palvelu</string>
+  <string name="preferenceCategoryTitleServer">Palvelin</string>
+  <string name="url">Palvelin</string>
+  <string name="urlHint">Koneen nimi tai IP</string>
+  <string name="port">Portti</string>
+  <string name="enableCustomTimeouts">Salli mukautetut viiveet</string>
+  <string name="textSizeType">Tekstikoko</string>
+  <string name="textSizeSummary">Vaihda palvelun tekstikokoa</string>
+  <string name="displayType">Pimennyksen tyyppi</string>
+  <string name="displayBlankType">Pimennyksen tyyppi</string>
+  <string name="displayBlankSummary">Valitse pimennyksen tyyppi</string>
+  <string name="displayScreen">Näyttö</string>
+  <string name="displayTheme">Teema</string>
+  <string name="displayDesktop">Työpöytä</string>
+  <string name="displayBlankOn">Nollaa näyttö</string>
+  <string name="displayBlankOff">Tyhjennä näyttö</string>
+  <string name="backgroundService">Päivitä näytöt</string>
+  <string name="backgroundTaskSummary">Valitse muuttaaksesi päivitysasetuksia</string>
+  <string name="backgroundTask">Päivityksen aika (sek)</string>
+  <string name="customTimeoutsSummary">Valitse muuttaaksesi aikakatkaisun asetuksia</string>
+  <string name="customTimeout">Mukautettu aikakatkaisu</string>
+  <string name="socketTimeout">Socketin aikakatkaisu</string>
+  <string name="socketTimeoutSummary">Valitse arvo (millisekuntia)</string>
+  <string name="connectionTimeout">Yhteyden aikakatkaisu</string>
+  <string name="connectionTimedout">Yhteys aikakatkaistiin</string>
+  <string name="connectionTimeoutSummary">Valitse arvo (millisekuntia)</string>
+  <string name="unable">Sivua ei voi ladata</string>
+  <string name="connectionFailed">Yhteys epäonnistui</string>
+  <string name="jsonfail">Viestissä on muotovirhe</string>
+  <string name="loading">Muodostetaan yhteyttä...</string>
+  <string name="searching">Etsitään...</string>
+  <string name="loadingFailed">Virhe - lataus epäonnistui</string>
+  <string name="loadingServiceItems">Ladataan palvelua...</string>
+  <string name="loadingSlideItems">Ladataan dioja...</string>
+  <string name="loadingStatusInfo">Ladataan tilannetietoa...</string>
+  <string name="searchHint">Etsi OpenLP</string>
+  <string name="searchResults">Etsinnän tulokset</string>
+  <string name="showingResults">Näytetään tulokset  haulle \'%\'</string>
+  <string name="contentDescription">Aloitusruutu</string>
+  <string name="buttonSearchText">Etsi</string>
+  <string name="dialogTitleItemOptions">Kohteen asetukset:</string>
+  <string name="dialogNegativeSendLive">Lähetä esitykseen</string>
+  <string name="dialogPositiveAddToService">Lisää palveluun</string>
+  <string name="couldNotHandlePollResponse">Vastausta ei voi käsitellä.</string>
+  <string name="requestFailed">Pyyntö epäonnistui.</string>
+  <string name="couldNotHandleLiveItems">Näytöksen diojen käsittely ei onnistu.</string>
+  <string name="couldNotHandleServiceItems">Jumalanpalveluksen diojen käsittely ei onnistu.</string>
+  <string name="connection.profiles">Yhteysprofiilit</string>
+  <string name="connection.profiles.manage">Muokkaa profiileita</string>
+  <string name="connection.profile.title">Profiilin otsikko</string>
+  <string name="connection.profile.active">Aktiivinen profiili - Napauta muokataksesi</string>
+  <string name="connection.profile.active.toast">Aktivoi profiili</string>
+  <string name="connection.profile.summary.activate">Napauta valitaksesi aktiivisen</string>
+  <string name="connection.profile.activate">Aktivoi</string>
+  <string name="connection.profile.server">Palvelin</string>
+  <string name="connection.profile.remove">Poista</string>
+  <string name="connection.profile.remove.summary">Poista nämä asetukset</string>
+  <string name="connection.profile.not.saved">Napauta muokkaaksesi profiilia</string>
+  <string name="connection.profile.new.server">Uusi palvelin</string>
+  <string name="notSet">Ei asetettu</string>
+  <string name="connection.profile.ssl.use">Käytä SSL</string>
+  <string name="connection.profile.ssl.summary">Määrittele onko SSL käytössä</string>
+  <string name="connection.available.configurations">Luettelo tarjolla olevista profiileista</string>
+  <string name="connection.add.by.menu">Napauta lisätäksesi uuden profiilin</string>
+</resources>

=== added directory 'res/values-fr'
=== added file 'res/values-fr/strings.xml'
--- res/values-fr/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-fr/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">A propos de</string>
+  <string name="about_text">Version</string>
+  <string name="about_display_1">OpenLP est un logiciel de projection libre. En savoir plus sur OpenLP.</string>
+  <string name="about_display_3">Site Web</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="app_name">OpenLP</string>
+  <string name="settings">Paramètres</string>
+  <string name="preferences">Préférences</string>
+  <string name="none">Rien</string>
+  <string name="prev">Précédent</string>
+  <string name="next">Suivant</string>
+  <string name="blank">Vide</string>
+  <string name="unblank">Restaure</string>
+  <string name="tabAlert">Alerte</string>
+  <string name="alert">Alerte :</string>
+  <string name="alertHint">Entrez le message d\'alerte</string>
+  <string name="alertTextNull">Veuillez entrer un message à envoyer.</string>
+  <string name="send">Envoyer</string>
+  <string name="tabLive">Direct</string>
+  <string name="tabStage">Scène</string>
+  <string name="tabDisplay">Affichage</string>
+  <string name="tabService">Service</string>
+  <string name="preferenceCategoryTitleServer">Serveur</string>
+  <string name="url">Serveur</string>
+  <string name="urlHint">Nom d\'hôte ou IP</string>
+  <string name="port">Port</string>
+  <string name="enableCustomTimeouts">Activer le délai personnalisé</string>
+  <string name="textSizeType">Type de taille du texte</string>
+  <string name="textSizeSummary">Modifier la taille du texte du service</string>
+  <string name="displayType">Afficher un type vide</string>
+  <string name="displayBlankType">Afficher un type vide</string>
+  <string name="displayBlankSummary">Sélectionnez le type vide requis</string>
+  <string name="displayScreen">Écran</string>
+  <string name="displayTheme">Thème</string>
+  <string name="displayDesktop">Bureau</string>
+  <string name="displayBlankOn">Restaure l\'affichage à partir de</string>
+  <string name="displayBlankOff">Affichage vide vers</string>
+  <string name="backgroundService">Actualisation des affichages</string>
+  <string name="backgroundTaskSummary">Vérifier les paramètres d\'actualisation</string>
+  <string name="backgroundTask">Délai d\'actualisation (sec)</string>
+  <string name="customTimeoutsSummary">Vérifiez le paramétrage du délai</string>
+  <string name="customTimeout">Délai personnalisé</string>
+  <string name="socketTimeout">Délai de connexion réseau</string>
+  <string name="socketTimeoutSummary">Sélectionnez une valeur (millisecondes)</string>
+  <string name="connectionTimeout">Délai de connexion</string>
+  <string name="connectionTimedout">Connexion expirée</string>
+  <string name="connectionTimeoutSummary">Sélectionnez une valeur (millisecondes)</string>
+  <string name="unable">Impossible de charger la page -</string>
+  <string name="connectionFailed">Échec de connexion</string>
+  <string name="jsonfail">Erreur JSON</string>
+  <string name="loading">Connexion en cours...</string>
+  <string name="searching">Recherche en cours...</string>
+  <string name="loadingFailed">Erreur - Échec de chargement</string>
+  <string name="loadingServiceItems">Chargement des éléments du service...</string>
+  <string name="loadingSlideItems">Chargement des diapositives...</string>
+  <string name="loadingStatusInfo">Chargement des infos d\'état...</string>
+  <string name="searchHint">Recherche OpenLP</string>
+  <string name="searchResults">Résultats de recherche</string>
+  <string name="showingResults">Affichage des résultats de \'%s\'</string>
+  <string name="contentDescription">Ecran de démarrage</string>
+  <string name="buttonSearchText">Recherche</string>
+  <string name="dialogTitleItemOptions">Options d\'élément :</string>
+  <string name="dialogNegativeSendLive">Envoyer au direct</string>
+  <string name="dialogPositiveAddToService">Ajouter au service</string>
+  <string name="couldNotHandlePollResponse">Impossible de recevoir la réponse</string>
+  <string name="requestFailed">La demande a échouée</string>
+  <string name="couldNotHandleLiveItems">Impossible de gérer les éléments du direct</string>
+  <string name="couldNotHandleServiceItems">Impossible de gérer les éléments du service</string>
+  <string name="connection.profiles">Profils de connexion</string>
+  <string name="connection.profiles.manage">Gérer les profils</string>
+  <string name="connection.profile.title">Titre du profil</string>
+  <string name="connection.profile.active">Profil actif - Appuyer pour éditer</string>
+  <string name="connection.profile.active.toast">Activer le profil</string>
+  <string name="connection.profile.summary.activate">Appuyer pour rendre actif</string>
+  <string name="connection.profile.activate">Activer</string>
+  <string name="connection.profile.server">Serveur</string>
+  <string name="connection.profile.remove">Supprimer</string>
+  <string name="connection.profile.remove.summary">Supprimer cette configuration</string>
+  <string name="connection.profile.not.saved">Appuyer pour éditer les propriétés</string>
+  <string name="connection.profile.new.server">Nouveau serveur</string>
+  <string name="notSet">Non défini</string>
+  <string name="connection.profile.ssl.use">Utiliser SSL</string>
+  <string name="connection.profile.ssl.summary">Indiquez si SSL doit être utilisé</string>
+  <string name="connection.available.configurations">Liste des profils disponibles</string>
+  <string name="connection.add.by.menu">Appuyer pour ajouter un nouveau profil</string>
+</resources>

=== added directory 'res/values-hu'
=== added file 'res/values-hu/strings.xml'
--- res/values-hu/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-hu/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">Névjegy</string>
+  <string name="about_text">Verzió</string>
+  <string name="about_display_1">Az OpenLP egy templomi/gyülekezeti vetítő szoftver. További információk az OpenLP-ről.</string>
+  <string name="about_display_3">Weboldal</string>
+  <string name="about_display_4">Szerzői jog</string>
+  <string name="about_display_5">Részleges szerzői jog</string>
+  <string name="about_display_6">Licenc</string>
+  <string name="about_display_7">Ez egy szabad szoftver; terjeszthető illetve módosítható a GNU Általános Közreadási Feltételek dokumentumában leírtak szerint - 2. verzió -, melyet a Szabad Szoftver Alapítvány ad ki.</string>
+  <string name="about_display_8">Ez a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb GARANCIA NÉLKÜL, az eladhatóságra vagy valamely célra való alkalmazhatóságra való származtatott garanciát is beleértve.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Beállítások</string>
+  <string name="preferences">Beállítások</string>
+  <string name="none">Nincs</string>
+  <string name="prev">Előző</string>
+  <string name="next">Következő</string>
+  <string name="blank">Elsötétítés</string>
+  <string name="unblank">Elsötétítés visszavonása</string>
+  <string name="tabAlert">Értesítés</string>
+  <string name="alert">Értesítés:</string>
+  <string name="alertHint">Értesítés megadása</string>
+  <string name="alertTextNull">Kérem, adj meg egy értesítő üzenetet.</string>
+  <string name="send">Küldés</string>
+  <string name="tabLive">Élő</string>
+  <string name="tabStage">Színpadi nézet</string>
+  <string name="tabDisplay">Megjelenítés</string>
+  <string name="tabService">Szolgálati sorrend</string>
+  <string name="preferenceCategoryTitleServer">Kiszolgáló</string>
+  <string name="url">Kiszolgáló</string>
+  <string name="urlHint">Gépnév vagy IP-cím</string>
+  <string name="port">Portszám</string>
+  <string name="enableCustomTimeouts">Egyéni időtúllépés engedélyezése</string>
+  <string name="textSizeType">Betűméret</string>
+  <string name="textSizeSummary">Sorrend betűméretének módosítása</string>
+  <string name="displayType">Képernyő elsötétítési mód</string>
+  <string name="displayBlankType">Képernyő elsötétítési mód</string>
+  <string name="displayBlankSummary">Válaszd ki a kívánt elsötétítési módot</string>
+  <string name="displayScreen">Képernyő</string>
+  <string name="displayTheme">Téma</string>
+  <string name="displayDesktop">Asztal</string>
+  <string name="displayBlankOn">Képernyő visszaállítása:</string>
+  <string name="displayBlankOff">Képernyő elsötétítése:</string>
+  <string name="backgroundService">Képernyők frissítése</string>
+  <string name="backgroundTaskSummary">Jelöld be az frissítési beállítások módosításához</string>
+  <string name="backgroundTask">Frissítési idő (mp)</string>
+  <string name="customTimeoutsSummary">Jelöld be az időtúllépési beállítások módosításához</string>
+  <string name="customTimeout">Egyéni időtúllépés</string>
+  <string name="socketTimeout">Socket időtúllépés</string>
+  <string name="socketTimeoutSummary">Válassz egy értéket (milliszekundum)</string>
+  <string name="connectionTimeout">Kapcsolódási időtúllépés</string>
+  <string name="connectionTimedout">Időtúllépés miatt a kapcsolat megszakadt</string>
+  <string name="connectionTimeoutSummary">Válassz egy értéket (milliszekundum)</string>
+  <string name="unable">Az oldal nem tölthető be -</string>
+  <string name="connectionFailed">A kapcsolat megszakadt</string>
+  <string name="jsonfail">JSON feldolgozás sikertelen</string>
+  <string name="loading">Kapcsolódás…</string>
+  <string name="searching">Keresés…</string>
+  <string name="loadingFailed">Hiba - Betöltés sikertelen</string>
+  <string name="loadingServiceItems">Sorrendelemek betöltése…</string>
+  <string name="loadingSlideItems">Diaelemek betöltése…</string>
+  <string name="loadingStatusInfo">Állapotinformációk betöltése…</string>
+  <string name="searchHint">OpenLP keresés</string>
+  <string name="searchResults">Keresési eredmények</string>
+  <string name="showingResults">Keresési eredmények: %s </string>
+  <string name="contentDescription">Indítóképernyő</string>
+  <string name="buttonSearchText">Keresés</string>
+  <string name="dialogTitleItemOptions">Elem beállítások:</string>
+  <string name="dialogNegativeSendLive">Élő adásba</string>
+  <string name="dialogPositiveAddToService">Hozzáadás a sorrendhez</string>
+  <string name="couldNotHandlePollResponse">Nem lehet lekezelni a mintavételezési választ</string>
+  <string name="requestFailed">Kérés meghiúsult</string>
+  <string name="couldNotHandleLiveItems">Nem lehet lekérni az élő elemeket</string>
+  <string name="couldNotHandleServiceItems">Nem lehet lekérni a sorrendben lévő elemeket</string>
+  <string name="connection.profiles">Kapcsolódási profilok</string>
+  <string name="connection.profiles.manage">Profilok kezelése</string>
+  <string name="connection.profile.title">Profil neve</string>
+  <string name="connection.profile.active">Aktív profil - Kezelés érintéssel</string>
+  <string name="connection.profile.active.toast">Aktív profil</string>
+  <string name="connection.profile.summary.activate">Érintéssel aktiválódik</string>
+  <string name="connection.profile.activate">Aktiválás</string>
+  <string name="connection.profile.server">Szerver</string>
+  <string name="connection.profile.remove">Eltávolítás</string>
+  <string name="connection.profile.remove.summary">Beállítás eltávolítása</string>
+  <string name="connection.profile.not.saved">Érintéssel szerkeszthető a profil</string>
+  <string name="connection.profile.new.server">Új szerver</string>
+  <string name="notSet">Nincs beállítva</string>
+  <string name="connection.profile.ssl.use">SSL alkalmazása</string>
+  <string name="connection.profile.ssl.summary">SSL alkalmazásának meghatározása</string>
+  <string name="connection.available.configurations">Elérhető profilok listája</string>
+  <string name="connection.add.by.menu">Érintéssel adható hozzá új profil</string>
+</resources>

=== added directory 'res/values-id'
=== added file 'res/values-id/strings.xml'
--- res/values-id/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-id/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">Tentang</string>
+  <string name="about_text">Versi</string>
+  <string name="about_display_1">OpenLP adalah perangkat lunak presentasi gratis untuk gereja. Ketahui lebih lanjut tentang OpenLP.</string>
+  <string name="about_display_3">Situs Web</string>
+  <string name="about_display_4">Hak Cipta</string>
+  <string name="about_display_5">Bagian hak cipta</string>
+  <string name="about_display_6">Lisensi</string>
+  <string name="about_display_7">Program ini adalah perangkat lunak gratis; Anda dapat menyebarluaskannya dan / atau memodifikasinya di bawah ketentuan GNU General Public License seperti yang diterbitkan oleh Free Software Foundation; Lisensi versi 2.</string>
+  <string name="about_display_8">Program ini disebarluaskan dengan harapan bahwa akan berguna, tetapi TANPA JAMINAN APAPUN; bahkan tanpa jaminan yang termasuk pada PERDAGANGAN atau KECOCOKAN UNTUK SUATU TUJUAN TERTENTU.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Setelan</string>
+  <string name="preferences">Pilihan</string>
+  <string name="none">Tidak sama sekali</string>
+  <string name="prev">Sebelumnya</string>
+  <string name="next">Selanjutnya</string>
+  <string name="blank">Kosong</string>
+  <string name="unblank">Tidak Kosong</string>
+  <string name="tabAlert">Peringatan</string>
+  <string name="alert">Peringatan</string>
+  <string name="alertHint">Masukkan pesan peringatan</string>
+  <string name="alertTextNull">Masukkan pesan untuk dikirim</string>
+  <string name="send">Kirim</string>
+  <string name="tabLive">Tayang</string>
+  <string name="tabStage">Bertahap</string>
+  <string name="tabDisplay">Tampilan</string>
+  <string name="tabService">Layanan</string>
+  <string name="preferenceCategoryTitleServer">Server</string>
+  <string name="url">Server</string>
+  <string name="urlHint">Nama Host atau IP</string>
+  <string name="port">Port</string>
+  <string name="enableCustomTimeouts">Aktifkan Batas-Waktu Kustom</string>
+  <string name="textSizeType">Tipe Ukuran Teks</string>
+  <string name="textSizeSummary">Ubah ukuran teks Layanan</string>
+  <string name="displayType">Tampilkan Tipe Kosong</string>
+  <string name="displayBlankType">Tampilkan Tipe Kosong</string>
+  <string name="displayBlankSummary">Pilih tipe kosong yang dibutuhkan</string>
+  <string name="displayScreen">Layar</string>
+  <string name="displayTheme">Tema</string>
+  <string name="displayDesktop">Desktop</string>
+  <string name="displayBlankOn">Setel-ulang bentuk tampilan</string>
+  <string name="displayBlankOff">Kosongkan tampilan menjadi</string>
+  <string name="backgroundService">Segarkan Tampilan</string>
+  <string name="backgroundTaskSummary">Centang untuk merubah penyegaran setelan</string>
+  <string name="backgroundTask">Waktu penyegaran (dtk)</string>
+  <string name="customTimeoutsSummary">Centang untuk merubah setelan batas-waktu</string>
+  <string name="customTimeout">Batas-Waktu Kustom</string>
+  <string name="socketTimeout">Batas-Waktu Socket</string>
+  <string name="socketTimeoutSummary">Pilih sebuah nilai (milidetik)</string>
+  <string name="connectionTimeout">Batas-Waktu Sambungan</string>
+  <string name="connectionTimedout">Batas-Waktu sambungan habis</string>
+  <string name="connectionTimeoutSummary">Pilih sebuah nilai (milidetik)</string>
+  <string name="unable">Gagal memuat halaman - </string>
+  <string name="connectionFailed">Sambungan gagal</string>
+  <string name="jsonfail">Kesalahan format pesan</string>
+  <string name="loading">Menyambungkan...</string>
+  <string name="searching">Menelusuri...</string>
+  <string name="loadingFailed">Kesalahan - Pemuatan Gagal</string>
+  <string name="loadingServiceItems">Memuat Butir Layanan...</string>
+  <string name="loadingSlideItems">Memuat Butir Salindia...</string>
+  <string name="loadingStatusInfo">Memuat Info Status...</string>
+  <string name="searchHint">Telusuri OpenLP</string>
+  <string name="searchResults">Hasil Penelusuran</string>
+  <string name="showingResults">Tampilkan Hasil untuk \'%s\'</string>
+  <string name="contentDescription">Layar Pembuka</string>
+  <string name="buttonSearchText">Penelusuran</string>
+  <string name="dialogTitleItemOptions">Opsi Butir</string>
+  <string name="dialogNegativeSendLive">Tayangkan</string>
+  <string name="dialogPositiveAddToService">Tambahkan ke Layanan</string>
+  <string name="couldNotHandlePollResponse">Tidak bisa menangani respon Poll</string>
+  <string name="requestFailed">Permintaan Gagal</string>
+  <string name="couldNotHandleLiveItems">Tidak dapat menangani butir tayangan</string>
+  <string name="couldNotHandleServiceItems">Tidak dapat menangani butir Layanan</string>
+  <string name="connection.profiles">Profil Sambungan</string>
+  <string name="connection.profiles.manage">Kelola Profil</string>
+  <string name="connection.profile.title">Judul Profil</string>
+  <string name="connection.profile.active">Profil yang Aktif - Klik untuk mengelola</string>
+  <string name="connection.profile.active.toast">Profil Aktif</string>
+  <string name="connection.profile.summary.activate">Klik untuk mengaktifkan</string>
+  <string name="connection.profile.activate">Aktifkan</string>
+  <string name="connection.profile.server">Server</string>
+  <string name="connection.profile.remove">Hapus</string>
+  <string name="connection.profile.remove.summary">Hapus konfigurasi ini</string>
+  <string name="connection.profile.not.saved">Klik untuk menyunting properti</string>
+  <string name="connection.profile.new.server">Server Baru</string>
+  <string name="notSet">Belum disetel</string>
+  <string name="connection.profile.ssl.use">Gunakan SSL</string>
+  <string name="connection.profile.ssl.summary">Tentukan apakah SSL harus digunakan</string>
+  <string name="connection.available.configurations">Daftar profil yang tersedia</string>
+  <string name="connection.add.by.menu">Klik untuk menambah profil baru</string>
+</resources>

=== added directory 'res/values-ja'
=== added file 'res/values-ja/strings.xml'
--- res/values-ja/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-ja/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">情報</string>
+  <string name="about_text">バージョン</string>
+  <string name="about_display_1">OpenLPは無償の教会プレゼンテーションソフトです。</string>
+  <string name="about_display_3">ウェブサイト</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="app_name">OpenLP</string>
+  <string name="settings">設定</string>
+  <string name="preferences">設定</string>
+  <string name="none">無し</string>
+  <string name="prev">前</string>
+  <string name="next">次</string>
+  <string name="blank">ブランク</string>
+  <string name="unblank">ブランクを戻す</string>
+  <string name="tabAlert">警告</string>
+  <string name="alert">警告:</string>
+  <string name="alertHint">警告文を入力</string>
+  <string name="alertTextNull">警告するメッセージを入力してください。</string>
+  <string name="send">送信</string>
+  <string name="tabLive">ライブ</string>
+  <string name="tabStage">ステージ</string>
+  <string name="tabDisplay">表示</string>
+  <string name="tabService">礼拝</string>
+  <string name="preferenceCategoryTitleServer">サーバ</string>
+  <string name="url">サーバ</string>
+  <string name="urlHint">ホスト名またはIPアドレス</string>
+  <string name="port">ポート</string>
+  <string name="enableCustomTimeouts">任意のタイムアウトを有効にする</string>
+  <string name="textSizeType">文字の大きさ</string>
+  <string name="textSizeSummary">礼拝テキストの大きさを変更します</string>
+  <string name="displayType">ブランクの種類</string>
+  <string name="displayBlankType">ブランクの種類</string>
+  <string name="displayBlankSummary">ブランクの種類を選択してください</string>
+  <string name="displayScreen">スクリーン</string>
+  <string name="displayTheme">テーマ</string>
+  <string name="displayDesktop">デスクトップ</string>
+  <string name="displayBlankOn">ブランク解除</string>
+  <string name="displayBlankOff">ブランク設定</string>
+  <string name="backgroundService">画面を再描画</string>
+  <string name="backgroundTaskSummary">再描画の設定を変更</string>
+  <string name="backgroundTask">再描画時間 (秒)</string>
+  <string name="customTimeoutsSummary">チェックしてタイムアウト設定を変更</string>
+  <string name="customTimeout">カスタムタイムアウト</string>
+  <string name="socketTimeout">ソケットタイムアウト</string>
+  <string name="socketTimeoutSummary">値を選択 (ミリ秒)</string>
+  <string name="connectionTimeout">接続タイムアウト</string>
+  <string name="connectionTimedout">接続がタイムアウトしました</string>
+  <string name="connectionTimeoutSummary">値を選択 (ミリ秒)</string>
+  <string name="unable">ページ読み込み不能 -</string>
+  <string name="connectionFailed">接続に失敗</string>
+  <string name="jsonfail">JSONに失敗しました</string>
+  <string name="loading">接続中...</string>
+  <string name="searching">検索中...</string>
+  <string name="loadingFailed">エラー - 読み込みに失敗</string>
+  <string name="loadingServiceItems">礼拝項目を読込中...</string>
+  <string name="loadingSlideItems">スライド項目を読込中...</string>
+  <string name="loadingStatusInfo">ステータス情報を読込中...</string>
+  <string name="searchHint">OpenLPを検索</string>
+  <string name="searchResults">検索結果</string>
+  <string name="showingResults">\'%s\'の結果を表示中</string>
+  <string name="contentDescription">スプラッシュスクリーン</string>
+  <string name="buttonSearchText">検索</string>
+  <string name="dialogTitleItemOptions">項目オプション:</string>
+  <string name="dialogNegativeSendLive">ライブ</string>
+  <string name="dialogPositiveAddToService">礼拝項目へ追加</string>
+  <string name="couldNotHandlePollResponse">Poll応答を処理できません</string>
+  <string name="requestFailed">リクエストに失敗しました</string>
+  <string name="couldNotHandleLiveItems">ライブ項目を処理できません</string>
+  <string name="couldNotHandleServiceItems">礼拝項目を処理できません</string>
+  <string name="connection.profiles">接続プロファイル</string>
+  <string name="connection.profiles.manage">プロファイルを編集</string>
+  <string name="connection.profile.title">プロファイル名</string>
+  <string name="connection.profile.active">現在のプロファイル - タップして編集</string>
+  <string name="connection.profile.active.toast">現在のプロファイル</string>
+  <string name="connection.profile.summary.activate">タップして有効にする</string>
+  <string name="connection.profile.activate">有効にする</string>
+  <string name="connection.profile.server">サーバ</string>
+  <string name="connection.profile.remove">削除</string>
+  <string name="connection.profile.remove.summary">この設定を削除</string>
+  <string name="connection.profile.not.saved">タップして設定を編集</string>
+  <string name="connection.profile.new.server">新しいサーバ</string>
+  <string name="notSet">設定なし</string>
+  <string name="connection.profile.ssl.use">SSLを使用</string>
+  <string name="connection.profile.ssl.summary">SSLを使用するかを設定してください</string>
+  <string name="connection.available.configurations">使用可能なプロファイル一覧</string>
+  <string name="connection.add.by.menu">タップして新しいプロファイルを追加</string>
+</resources>

=== added directory 'res/values-ko'
=== added file 'res/values-ko/strings.xml'
--- res/values-ko/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-ko/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">About</string>
+  <string name="about_text">Version</string>
+  <string name="about_display_1">OpenLP is free church presentation software. Find out more about OpenLP.</string>
+  <string name="about_display_3">Website</string>
+  <string name="about_display_4">Copyright</string>
+  <string name="about_display_5">Portions copyright</string>
+  <string name="about_display_6">License</string>
+  <string name="about_display_7">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.</string>
+  <string name="about_display_8">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.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Settings</string>
+  <string name="preferences">Preferences</string>
+  <string name="none">None</string>
+  <string name="prev">Previous</string>
+  <string name="next">Next</string>
+  <string name="blank">Blank</string>
+  <string name="unblank">Unblank</string>
+  <string name="tabAlert">Alert</string>
+  <string name="alert">Alert:</string>
+  <string name="alertHint">Enter alert message</string>
+  <string name="alertTextNull">Please enter a message to send.</string>
+  <string name="send">Send</string>
+  <string name="tabLive">Live</string>
+  <string name="tabStage">Stage</string>
+  <string name="tabDisplay">Display</string>
+  <string name="tabService">Service</string>
+  <string name="preferenceCategoryTitleServer">Server</string>
+  <string name="url">Server</string>
+  <string name="urlHint">Hostname or IP</string>
+  <string name="port">Port</string>
+  <string name="enableCustomTimeouts">Enable Custom Timeouts</string>
+  <string name="textSizeType">Text Size Type</string>
+  <string name="textSizeSummary">Change the Service text size</string>
+  <string name="displayType">Display Blank Type</string>
+  <string name="displayBlankType">Display Blank Type</string>
+  <string name="displayBlankSummary">Select the required blank type</string>
+  <string name="displayScreen">Screen</string>
+  <string name="displayTheme">Theme</string>
+  <string name="displayDesktop">Desktop</string>
+  <string name="displayBlankOn">Reset display from</string>
+  <string name="displayBlankOff">Blank display to</string>
+  <string name="backgroundService">Refresh Displays</string>
+  <string name="backgroundTaskSummary">Check to modify refresh settings</string>
+  <string name="backgroundTask">Refresh time (sec)</string>
+  <string name="customTimeoutsSummary">Check to modify timeout settings</string>
+  <string name="customTimeout">Custom Timeout</string>
+  <string name="socketTimeout">Socket Timeout</string>
+  <string name="socketTimeoutSummary">Select a value (milliseconds)</string>
+  <string name="connectionTimeout">Connection Timeout</string>
+  <string name="connectionTimedout">Connection timed out</string>
+  <string name="connectionTimeoutSummary">Select a value (milliseconds)</string>
+  <string name="unable">Unable to load page -</string>
+  <string name="connectionFailed">Connection failed</string>
+  <string name="jsonfail">Message format error </string>
+  <string name="loading">Connecting…</string>
+  <string name="searching">Searching…</string>
+  <string name="loadingFailed">Error - Load Failed</string>
+  <string name="loadingServiceItems">Loading Service Items…</string>
+  <string name="loadingSlideItems">Loading Slide Items…</string>
+  <string name="loadingStatusInfo">Loading Status Info…</string>
+  <string name="searchHint">Search OpenLP</string>
+  <string name="searchResults">Search Results</string>
+  <string name="showingResults">Showing Results for \'%s\'</string>
+  <string name="contentDescription">Splash Screen</string>
+  <string name="buttonSearchText">Search</string>
+  <string name="dialogTitleItemOptions">Item Options:</string>
+  <string name="dialogNegativeSendLive">Send Live</string>
+  <string name="dialogPositiveAddToService">Add to Service</string>
+  <string name="couldNotHandlePollResponse">Could not handle Poll response</string>
+  <string name="requestFailed">Request Failed</string>
+  <string name="couldNotHandleLiveItems">Could not handle live items</string>
+  <string name="couldNotHandleServiceItems">Could not handle service items</string>
+  <string name="connection.profiles">Connection Profiles</string>
+  <string name="connection.profiles.manage">Manage Profiles</string>
+  <string name="connection.profile.title">Profile Title</string>
+  <string name="connection.profile.active">Active Profile - Tap to manage</string>
+  <string name="connection.profile.active.toast">Active Profile</string>
+  <string name="connection.profile.summary.activate">Tap to set active</string>
+  <string name="connection.profile.activate">Activate</string>
+  <string name="connection.profile.server">Server</string>
+  <string name="connection.profile.remove">Remove</string>
+  <string name="connection.profile.remove.summary">Remove this configuration</string>
+  <string name="connection.profile.not.saved">Tap to edit properties</string>
+  <string name="connection.profile.new.server">New Server</string>
+  <string name="notSet">Not set</string>
+  <string name="connection.profile.ssl.use">Use SSL</string>
+  <string name="connection.profile.ssl.summary">Specify whether SSL should be used</string>
+  <string name="connection.available.configurations">List of available profiles</string>
+  <string name="connection.add.by.menu">Tap to add a new profile</string>
+</resources>

=== added directory 'res/values-nb'
=== added file 'res/values-nb/strings.xml'
--- res/values-nb/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-nb/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">Om</string>
+  <string name="about_text">Versjon</string>
+  <string name="about_display_1">OpenLP er gratis sang presentasjons programvare. Finn ut mer om OpenLP.</string>
+  <string name="about_display_3">Nettside</string>
+  <string name="about_display_4">Copyright</string>
+  <string name="about_display_5">Andel av opphavsrett</string>
+  <string name="about_display_6">Lisens</string>
+  <string name="about_display_7">Dette programmet er gratis programvare; du kan re-distribuere det og / eller modifisere det under vilkårene i GNU General Public License, versjon 2. Som er offentliggjort av Free Software Foundation.</string>
+  <string name="about_display_8">Dette programmet er distribuert i det håp at det vil være nyttig, men UTEN NOEN FORM FOR GARANTI; selv uten underforståtte garantier om SALGBARHET eller ANVENDELIGHET FOR ET SPESIELT FORMÅL.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Innstillinger</string>
+  <string name="preferences">Innstillinger</string>
+  <string name="none">Ingen</string>
+  <string name="prev">Forrige</string>
+  <string name="next">Neste</string>
+  <string name="blank">Slukk</string>
+  <string name="unblank">Vis skjerm</string>
+  <string name="tabAlert">Varsel</string>
+  <string name="alert">Varsel:</string>
+  <string name="alertHint">Skriv varselmelding</string>
+  <string name="alertTextNull">Venligst skriv en meldig for å sende.</string>
+  <string name="send">Send</string>
+  <string name="tabLive">Live</string>
+  <string name="tabStage">Sene</string>
+  <string name="tabDisplay">Skjerm</string>
+  <string name="tabService">Møteprogram</string>
+  <string name="preferenceCategoryTitleServer">Server</string>
+  <string name="url">Server</string>
+  <string name="urlHint">Vertsnavn eller IP</string>
+  <string name="port">Port</string>
+  <string name="enableCustomTimeouts">Aktiver egendefinerte tidsavbrudd</string>
+  <string name="textSizeType">Tekststørrelse Type</string>
+  <string name="textSizeSummary">Endre tjenesten tekststørrelsen</string>
+  <string name="displayType">\"Skjerm slukk\" alternativ</string>
+  <string name="displayBlankType">\"Skjerm slukk\" alternativ</string>
+  <string name="displayBlankSummary">Velg ønsket slukk skjerm modus</string>
+  <string name="displayScreen">Skjerm</string>
+  <string name="displayTheme">Tema</string>
+  <string name="displayDesktop">Skrivebord</string>
+  <string name="displayBlankOn">Tilbakestille displayet fra</string>
+  <string name="displayBlankOff">Slukk skjerm til</string>
+  <string name="backgroundService">Oppdater visning</string>
+  <string name="backgroundTaskSummary">Sjekk for å endre oppdateringds-innstillingene</string>
+  <string name="backgroundTask">Oppdateringsfrekvens (sek)</string>
+  <string name="customTimeoutsSummary">Sjekk for å endre tidsavbrudd</string>
+  <string name="customTimeout">Egendefinerte tidsavbrudd</string>
+  <string name="socketTimeout">Socket Timeout</string>
+  <string name="socketTimeoutSummary">Velg en verdi (millisekund)</string>
+  <string name="connectionTimeout">Tidsavbrudd for tilkobling</string>
+  <string name="connectionTimedout">Forbindelsen ble tidsavbrutt</string>
+  <string name="connectionTimeoutSummary">Velg en verdi (millisekund)</string>
+  <string name="unable">Kan ikke laste side -</string>
+  <string name="connectionFailed">Tilkoplingen var misslykket</string>
+  <string name="jsonfail">Feil meldingsformat</string>
+  <string name="loading">Kobler til...</string>
+  <string name="searching">Søker...</string>
+  <string name="loadingFailed">Feil - Innlasteing feilet</string>
+  <string name="loadingServiceItems">Laster punkt i møteprogram... </string>
+  <string name="loadingSlideItems">Laster \"bilde\" element...</string>
+  <string name="loadingStatusInfo">Laster status info...</string>
+  <string name="searchHint">Søki i OpenLP</string>
+  <string name="searchResults">Søkeresultat</string>
+  <string name="showingResults">Viser resultater for \'%s\'</string>
+  <string name="contentDescription">Logo</string>
+  <string name="buttonSearchText">Søk</string>
+  <string name="dialogTitleItemOptions">Punkt-alternativer:</string>
+  <string name="dialogNegativeSendLive">Vis på skjerm</string>
+  <string name="dialogPositiveAddToService">Legg til i møteprogram</string>
+  <string name="couldNotHandlePollResponse">Kunne ikke håndtere avstemnings responsen</string>
+  <string name="requestFailed">Forespørselen mislyktes</string>
+  <string name="couldNotHandleLiveItems">Kunne ikke håndtere live punkt</string>
+  <string name="couldNotHandleServiceItems">Kunne ikke håndter møteprogram avsnitt</string>
+  <string name="connection.profiles">Tilkoblingsprofiler</string>
+  <string name="connection.profiles.manage">Behandle profiler</string>
+  <string name="connection.profile.title">Profil-tittel</string>
+  <string name="connection.profile.active">Aktiv profil - trykk for å behandle</string>
+  <string name="connection.profile.active.toast">Aktiv profil</string>
+  <string name="connection.profile.summary.activate">Trykk for å sette aktiv</string>
+  <string name="connection.profile.activate">Aktiver</string>
+  <string name="connection.profile.server">Server</string>
+  <string name="connection.profile.remove">Fjern</string>
+  <string name="connection.profile.remove.summary">Fjern denne konfigurasjonen</string>
+  <string name="connection.profile.not.saved">Trykk for å redigere egenskapene</string>
+  <string name="connection.profile.new.server">Ny server</string>
+  <string name="notSet">Ikke angitt</string>
+  <string name="connection.profile.ssl.use">Bruk SSL</string>
+  <string name="connection.profile.ssl.summary">Angi om SSL skal brukes</string>
+  <string name="connection.available.configurations">Liste over tilgjengelige profiler</string>
+  <string name="connection.add.by.menu">Trykk for å legge til en ny profil</string>
+</resources>

=== added directory 'res/values-nl'
=== added file 'res/values-nl/strings.xml'
--- res/values-nl/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-nl/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">Over</string>
+  <string name="about_text">Versie</string>
+  <string name="about_display_1">OpenLP is gratis kerk presentatie software. Ontdek meer over OpenLP.</string>
+  <string name="about_display_3">Website</string>
+  <string name="about_display_4">Copyright</string>
+  <string name="about_display_5">Onderdelen copyright</string>
+  <string name="about_display_6">Licentie</string>
+  <string name="about_display_7">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.</string>
+  <string name="about_display_8">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.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Instellingen</string>
+  <string name="preferences">Voorkeuren</string>
+  <string name="none">Niet</string>
+  <string name="prev">Vorige</string>
+  <string name="next">Volgende</string>
+  <string name="blank">Scherm-uit</string>
+  <string name="unblank">Scherm-uit Uit</string>
+  <string name="tabAlert">Waarschuwing</string>
+  <string name="alert">Waarschuwing:</string>
+  <string name="alertHint">Voer waarschuwingsbericht in</string>
+  <string name="alertTextNull">Voer een bericht in om te versturen.</string>
+  <string name="send">Verstuur</string>
+  <string name="tabLive">Live</string>
+  <string name="tabStage">Podium</string>
+  <string name="tabDisplay">Weergave</string>
+  <string name="tabService">Liturgie</string>
+  <string name="preferenceCategoryTitleServer">Server</string>
+  <string name="url">Server</string>
+  <string name="urlHint">Hostname of IP</string>
+  <string name="port">Poort</string>
+  <string name="enableCustomTimeouts"> Aangepaste timeouts toestaan</string>
+  <string name="textSizeType">Lettergrootte</string>
+  <string name="textSizeSummary">Verander Lettergrootte Liturgie</string>
+  <string name="displayType">Scherm-uit soort </string>
+  <string name="displayBlankType">Scherm-uit soort </string>
+  <string name="displayBlankSummary">Selecteer noodzakelijk Scherm-uit soort </string>
+  <string name="displayScreen">Scherm</string>
+  <string name="displayTheme">Thema</string>
+  <string name="displayDesktop">Desktop</string>
+  <string name="displayBlankOn">Weergave herstellen van</string>
+  <string name="displayBlankOff">Scherm-uit Weergave naar</string>
+  <string name="backgroundService">Weergave vernieuwen</string>
+  <string name="backgroundTaskSummary">Aanvinken om instellingen vernieuwen aan te passen</string>
+  <string name="backgroundTask">Vernieuw frequentie (sec)</string>
+  <string name="customTimeoutsSummary">Inschakelen om timeout instellingen aan te passen</string>
+  <string name="customTimeout">Aangepaste timeout</string>
+  <string name="socketTimeout">Socket Timeout</string>
+  <string name="socketTimeoutSummary">Selecteer een waarde (milliseconden)</string>
+  <string name="connectionTimeout">Verbinding Timeout</string>
+  <string name="connectionTimedout">Verbinding timed out</string>
+  <string name="connectionTimeoutSummary">Selecteer een waarde (milliseconden)</string>
+  <string name="unable">Kan de pagina niet laden -</string>
+  <string name="connectionFailed">Verbinding mislukt</string>
+  <string name="jsonfail">Bericht opmaakfout</string>
+  <string name="loading">Verbinden…</string>
+  <string name="searching">Zoeken…</string>
+  <string name="loadingFailed">Fout - laden mislukt</string>
+  <string name="loadingServiceItems">Liturgie items Laden…</string>
+  <string name="loadingSlideItems">Dia items Laden…</string>
+  <string name="loadingStatusInfo">Status info Laden…</string>
+  <string name="searchHint">Doorzoek OpenLP</string>
+  <string name="searchResults">Doorzoek resultaten</string>
+  <string name="showingResults">Resultaten voor  \'%s\'</string>
+  <string name="contentDescription">Opstartscherm</string>
+  <string name="buttonSearchText">Zoek</string>
+  <string name="dialogTitleItemOptions">Item Opties:</string>
+  <string name="dialogNegativeSendLive">Toon Live</string>
+  <string name="dialogPositiveAddToService">Voeg aan liturgie toe</string>
+  <string name="couldNotHandlePollResponse">Kan niets met de Poll reactie</string>
+  <string name="requestFailed">Verzoek mislukt</string>
+  <string name="couldNotHandleLiveItems">Kan niets met de Live items</string>
+  <string name="couldNotHandleServiceItems">Kan niets met de liturgie items</string>
+  <string name="connection.profiles">Verbindingsprofielen</string>
+  <string name="connection.profiles.manage">Beheer profielen</string>
+  <string name="connection.profile.title">Profiel titel</string>
+  <string name="connection.profile.active">Actief profiel - Tap om aan te passen</string>
+  <string name="connection.profile.active.toast">Actief profiel</string>
+  <string name="connection.profile.summary.activate">Tap om te activeren</string>
+  <string name="connection.profile.activate">Activeer</string>
+  <string name="connection.profile.server">Server</string>
+  <string name="connection.profile.remove">Verwijder</string>
+  <string name="connection.profile.remove.summary">Verwijder deze configuratie</string>
+  <string name="connection.profile.not.saved">Tap om eigenschappen te bewerken</string>
+  <string name="connection.profile.new.server">Nieuwe Server</string>
+  <string name="notSet">Niet ingesteld</string>
+  <string name="connection.profile.ssl.use">Gebruik SSL</string>
+  <string name="connection.profile.ssl.summary">Specificeer of SSL gebruikt moet worden</string>
+  <string name="connection.available.configurations">Lijst met beschikbare profielen</string>
+  <string name="connection.add.by.menu">Tap om een nieuw profiel toe te voegen</string>
+</resources>

=== added directory 'res/values-pl'
=== added file 'res/values-pl/strings.xml'
--- res/values-pl/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-pl/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">O programie</string>
+  <string name="about_text">Wersja</string>
+  <string name="about_display_1">OpenLP jest darmowym oprogramowaniem do wspomagania nabożeństw. Zobacz więcej o OpenLP</string>
+  <string name="about_display_3">Strona internetowa</string>
+  <string name="about_display_4">Prawa autorskie</string>
+  <string name="about_display_5">Częściowe prawa autorskie</string>
+  <string name="about_display_6">Licencja</string>
+  <string name="about_display_7">Ten program jest wolnym oprogramowaniem; możesz go rozprowadzać dalej lub modyfikować na warunkach Powszechnej Licencji Publicznej GNU w wersji 2 opublikowanej przez Free Software Foundation.</string>
+  <string name="about_display_8">Ten program jest rozpowszechniany w nadziei, że będzie użyteczny, ale BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej gwarancji PRZYDATNOŚCI HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Ustawienia</string>
+  <string name="preferences">Preferencje</string>
+  <string name="none">nic</string>
+  <string name="prev">Poprzedni</string>
+  <string name="next">Następny</string>
+  <string name="blank">pusty</string>
+  <string name="unblank">Odtwórz </string>
+  <string name="tabAlert">Ostrzeżenie</string>
+  <string name="alert">Ostrzeżenie: </string>
+  <string name="alertHint">Wpisz wiadomość awaryjną</string>
+  <string name="alertTextNull">Proszę wprowadzić wiadomość do wysłania</string>
+  <string name="send">Wyślij</string>
+  <string name="tabLive">Nadawanie </string>
+  <string name="tabStage">scena</string>
+  <string name="tabDisplay">Ekran</string>
+  <string name="tabService">Usługa</string>
+  <string name="preferenceCategoryTitleServer">Serwer</string>
+  <string name="url">Serwer</string>
+  <string name="urlHint">Nazwa hosta lub IP</string>
+  <string name="port">Port</string>
+  <string name="enableCustomTimeouts">niestandardowe</string>
+  <string name="textSizeType">rozmiar tekstu Typ</string>
+  <string name="textSizeSummary">Zmień rozmiar czcionki wiadomości serwisowych</string>
+  <string name="displayType">wyświetlanie pustego typu</string>
+  <string name="displayBlankType">Wyświetl Pusty typ</string>
+  <string name="displayBlankSummary">Wybierz wymagany pusty typ</string>
+  <string name="displayScreen">Ekran</string>
+  <string name="displayTheme">Temat</string>
+  <string name="displayDesktop">Pulpit</string>
+  <string name="displayBlankOn">zresetuj postać wyświetlania</string>
+  <string name="displayBlankOff">Pusty pokaz do</string>
+  <string name="backgroundService">Odśwież ekrany</string>
+  <string name="backgroundTaskSummary">Zaznacz aby zmienić opcje odświeżania</string>
+  <string name="backgroundTask">Czas odświeżania (sek.)</string>
+  <string name="customTimeoutsSummary">Sprawdź zmiany ustawień limitów czasowych</string>
+  <string name="customTimeout">Niestandardowe</string>
+  <string name="socketTimeout">limit czasu gniazda</string>
+  <string name="socketTimeoutSummary">Wybierz wartość (milisekundy)</string>
+  <string name="connectionTimeout">limit czasowy połączenia</string>
+  <string name="connectionTimedout">Przekroczono limit czasu połączenia</string>
+  <string name="connectionTimeoutSummary">Wybierz wartość (milisekundy)</string>
+  <string name="unable">Nie można załadować strony</string>
+  <string name="connectionFailed">Błąd połączenia</string>
+  <string name="jsonfail">Błąd formatu wiadomości</string>
+  <string name="loading">Łączenie...</string>
+  <string name="searching">Szukanie...</string>
+  <string name="loadingFailed">Błąd - Ładowanie nie powiodło się</string>
+  <string name="loadingServiceItems">usługi</string>
+  <string name="loadingSlideItems">Ładowanie elementów slajdów</string>
+  <string name="loadingStatusInfo">Ładowanie informacji o statusie</string>
+  <string name="searchHint">Szukaj OpenLP</string>
+  <string name="searchResults">Szukaj wyników</string>
+  <string name="showingResults">Pokaż wyniki dla \'%s\'</string>
+  <string name="contentDescription">Ekran powitalny</string>
+  <string name="buttonSearchText">Szukaj</string>
+  <string name="dialogTitleItemOptions">Opcje pozycji</string>
+  <string name="dialogNegativeSendLive">Wyślij nadwanie</string>
+  <string name="dialogPositiveAddToService">Dodaj do wiadomości serwisowych</string>
+  <string name="couldNotHandlePollResponse">Nie można obsłużyć odpowiedzi sondowania</string>
+  <string name="requestFailed">Żądanie nie powiodło się</string>
+  <string name="couldNotHandleLiveItems">Nie można obsłużyć pozycji nadawnia</string>
+  <string name="couldNotHandleServiceItems">Nie można obsłużyć pozycji wiadomości serwisowych</string>
+  <string name="connection.profiles">Profile połączenia</string>
+  <string name="connection.profiles.manage">Zarządzaj profilami</string>
+  <string name="connection.profile.title">Nazwa profilu</string>
+  <string name="connection.profile.active">Aktywny profil - dotknij aby zarządzać</string>
+  <string name="connection.profile.active.toast">Aktywny profil</string>
+  <string name="connection.profile.summary.activate">Dotknij, aby aktywować</string>
+  <string name="connection.profile.activate">Aktywuj</string>
+  <string name="connection.profile.server">Serwer</string>
+  <string name="connection.profile.remove">Usuń</string>
+  <string name="connection.profile.remove.summary">Usuń tą konfigurację</string>
+  <string name="connection.profile.not.saved">Dotknij aby edytować właściwości</string>
+  <string name="connection.profile.new.server">Nowy serwer</string>
+  <string name="notSet">Nie ustawiony</string>
+  <string name="connection.profile.ssl.use">Użyj SSL</string>
+  <string name="connection.profile.ssl.summary">Sprecyzuj, który SSL ma zostać użyty</string>
+  <string name="connection.available.configurations">Lista dostępnych profili</string>
+  <string name="connection.add.by.menu">Dotknij aby dodać nowy profil</string>
+</resources>

=== added directory 'res/values-pt-rBR'
=== added file 'res/values-pt-rBR/strings.xml'
--- res/values-pt-rBR/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-pt-rBR/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">Sobre</string>
+  <string name="about_text">Versão</string>
+  <string name="about_display_1">O OpenLP é um software livre para exibições em igrejas. Descubra mais sobre o OpenLP.</string>
+  <string name="about_display_3">Website</string>
+  <string name="about_display_4">Direitos Autorais</string>
+  <string name="about_display_5">Partes copyright</string>
+  <string name="about_display_6">Licença</string>
+  <string name="about_display_7">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.</string>
+  <string name="about_display_8">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.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Configurações</string>
+  <string name="preferences">Preferências</string>
+  <string name="none">Nenhum</string>
+  <string name="prev">Anterior</string>
+  <string name="next">Próximo</string>
+  <string name="blank">Em Branco</string>
+  <string name="unblank">Vazio</string>
+  <string name="tabAlert">Alertar</string>
+  <string name="alert">Alerta:</string>
+  <string name="alertHint">Digite uma mensagem de alerta</string>
+  <string name="alertTextNull">Por favor digite uma mensagem para ser enviada.</string>
+  <string name="send">Enviar</string>
+  <string name="tabLive">Ao Vivo</string>
+  <string name="tabStage">Fase</string>
+  <string name="tabDisplay">Exibir</string>
+  <string name="tabService">Culto</string>
+  <string name="preferenceCategoryTitleServer">Servidor</string>
+  <string name="url">Servidor</string>
+  <string name="urlHint">Hostname ou IP</string>
+  <string name="port">Porta</string>
+  <string name="enableCustomTimeouts">Habilitar Timeouts personalizados</string>
+  <string name="textSizeType">Tipo do Tamanho de Texto</string>
+  <string name="textSizeSummary">Alterar o tamanho do texto de culto</string>
+  <string name="displayType">Mostrar \'Tipo em Branco\'</string>
+  <string name="displayBlankType">Mostrar \'Tipo em Branco\'</string>
+  <string name="displayBlankSummary">Selecione o \'Tipo em Branco\' requerido</string>
+  <string name="displayScreen">Tela</string>
+  <string name="displayTheme">Tema</string>
+  <string name="displayDesktop">Área de Trabalho</string>
+  <string name="displayBlankOn">Redefinir exibição de</string>
+  <string name="displayBlankOff">Tela em branco para</string>
+  <string name="backgroundService">Atualizar Displays</string>
+  <string name="backgroundTaskSummary">Marque para modificar as configurações de atualização</string>
+  <string name="backgroundTask">Tempo de atualização (s)</string>
+  <string name="customTimeoutsSummary">Verifique para modificar as configurações de tempo limite</string>
+  <string name="customTimeout">Timeout personalizado</string>
+  <string name="socketTimeout">Tempo limite do soquete</string>
+  <string name="socketTimeoutSummary">Selecione um valor (em milissegundos)</string>
+  <string name="connectionTimeout">Tempo limite de conexão</string>
+  <string name="connectionTimedout">Tempo esgotado para conexão</string>
+  <string name="connectionTimeoutSummary">Selecione um valor (em milissegundos)</string>
+  <string name="unable">Não foi possível carregar a página -</string>
+  <string name="connectionFailed">Falha na conexão</string>
+  <string name="jsonfail">Erro no formato da mensagem</string>
+  <string name="loading">Conectando...</string>
+  <string name="searching">Pesquisando ...</string>
+  <string name="loadingFailed">Erro - Falha ao Carregar</string>
+  <string name="loadingServiceItems">Carregando itens de culto...</string>
+  <string name="loadingSlideItems">Carregando itens de slides...</string>
+  <string name="loadingStatusInfo">Carregando informação de estado...</string>
+  <string name="searchHint">Pesquisa OpenLP</string>
+  <string name="searchResults">Resultados da pesquisa</string>
+  <string name="showingResults">Mostrando Resultados para %s</string>
+  <string name="contentDescription">Tela de Abertura</string>
+  <string name="buttonSearchText">Busca</string>
+  <string name="dialogTitleItemOptions">Opções dos ítens</string>
+  <string name="dialogNegativeSendLive">Projetar</string>
+  <string name="dialogPositiveAddToService">Adicionar à Lista</string>
+  <string name="couldNotHandlePollResponse">Não foi possível tratar a resposta do Poll</string>
+  <string name="requestFailed">Falha na Requisição</string>
+  <string name="couldNotHandleLiveItems">Não foi possível tratar os itens da projeção</string>
+  <string name="couldNotHandleServiceItems">Não foi possível tratar os itens do culto </string>
+  <string name="connection.profiles">Perfis de conexão</string>
+  <string name="connection.profiles.manage">Gerenciar Perfis</string>
+  <string name="connection.profile.title">Título do Perfil</string>
+  <string name="connection.profile.active">Perfil ativo - toque para gerenciar</string>
+  <string name="connection.profile.active.toast">Perfil ativo</string>
+  <string name="connection.profile.summary.activate">Toque para ativar</string>
+  <string name="connection.profile.activate">Ativar</string>
+  <string name="connection.profile.server">Servidor</string>
+  <string name="connection.profile.remove">Remover</string>
+  <string name="connection.profile.remove.summary">Remover esta configuração</string>
+  <string name="connection.profile.not.saved">Toque para editar as propriedades</string>
+  <string name="connection.profile.new.server">Novo Servidor</string>
+  <string name="notSet">Não configurado</string>
+  <string name="connection.profile.ssl.use">Usar SSL</string>
+  <string name="connection.profile.ssl.summary">Especifique se o SSL deve ser usado</string>
+  <string name="connection.available.configurations">Lista dos perfis disponíveis</string>
+  <string name="connection.add.by.menu">Toque para adicionar um novo perfil</string>
+</resources>

=== added directory 'res/values-ru'
=== added file 'res/values-ru/strings.xml'
--- res/values-ru/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-ru/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">О програме</string>
+  <string name="about_text">Версия</string>
+  <string name="about_display_1">OpenLP является свободным церковным программным обеспечением для презентаций. Узнайте больше об OpenLP.</string>
+  <string name="about_display_3">Сайт</string>
+  <string name="about_display_4">Авторские права</string>
+  <string name="about_display_5">Portions copyright</string>
+  <string name="about_display_6">Лицензия</string>
+  <string name="about_display_7">Данная программа является свободным программным обеспечением, вы можете распространять и / или изменять его в соответствии с условиями GNU General Public License, опубликованной Free Software Foundation, версии 2 лицензии.</string>
+  <string name="about_display_8">Эта программа распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНЫХ ЦЕЛЕЙ.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Параметры</string>
+  <string name="preferences">Настройки</string>
+  <string name="none">Ничего</string>
+  <string name="prev">Предыдущий</string>
+  <string name="next">Следующий</string>
+  <string name="blank">Пустой</string>
+  <string name="unblank">Разблокировать</string>
+  <string name="tabAlert">Оповещение</string>
+  <string name="alert">Оповещение</string>
+  <string name="alertHint">Введите текст оповещения</string>
+  <string name="alertTextNull">Пожалуйста, введите сообщение для отправки.</string>
+  <string name="send">Отправить</string>
+  <string name="tabLive">в прямом эфире</string>
+  <string name="tabStage">Сцена</string>
+  <string name="tabDisplay">Экран</string>
+  <string name="tabService">Служение</string>
+  <string name="preferenceCategoryTitleServer">Сервер</string>
+  <string name="url">Сервер</string>
+  <string name="urlHint">Имя хоста или IP</string>
+  <string name="port">Порт</string>
+  <string name="enableCustomTimeouts">Включить пользовательские тайм-ауты</string>
+  <string name="textSizeType">размер шрыфта</string>
+  <string name="textSizeSummary">Изменить размер текста Служения</string>
+  <string name="displayType">Показать вид блокировки</string>
+  <string name="displayBlankType">Показать вид блокировки</string>
+  <string name="displayBlankSummary">Выберите нужный тип блокировки</string>
+  <string name="displayScreen">Экран</string>
+  <string name="displayTheme">Тема</string>
+  <string name="displayDesktop">Рабочий стол</string>
+  <string name="displayBlankOn">Сбросить дисплей с</string>
+  <string name="displayBlankOff">Заблокировать дисплей для</string>
+  <string name="backgroundService">Обновить экраны</string>
+  <string name="backgroundTaskSummary">Изменить настройки обновления экрана</string>
+  <string name="backgroundTask">Время обновления (сек)</string>
+  <string name="customTimeoutsSummary">Изменить параметры тайм-аута</string>
+  <string name="customTimeout">Пользовательский тайм-аут</string>
+  <string name="socketTimeout">Socket тайм-аут</string>
+  <string name="socketTimeoutSummary">Выберите значение (в миллисекундах)</string>
+  <string name="connectionTimeout">Время ожидания соединения</string>
+  <string name="connectionTimedout">Время ожидания соединения вышло</string>
+  <string name="connectionTimeoutSummary">Выберите значение (миллисекунды)</string>
+  <string name="unable">Не удается загрузить страницу -</string>
+  <string name="connectionFailed">Соединение прервано</string>
+  <string name="jsonfail">Формат сообщений об ошибках</string>
+  <string name="loading">Соединение...</string>
+  <string name="searching">Поиск...</string>
+  <string name="loadingFailed">Ошибка - загрузка не удалась</string>
+  <string name="loadingServiceItems">Загрузка объектов служения</string>
+  <string name="loadingSlideItems">Загрузка объектов слайда</string>
+  <string name="loadingStatusInfo">Загрузка статусной информации</string>
+  <string name="searchHint">Поиск OpenLP</string>
+  <string name="searchResults">Результаты поиска</string>
+  <string name="showingResults">Отображение результатов для \'%\'</string>
+  <string name="contentDescription">Логотип</string>
+  <string name="buttonSearchText">Поиск</string>
+  <string name="dialogTitleItemOptions">Опции объекта:</string>
+  <string name="dialogNegativeSendLive">Показать</string>
+  <string name="dialogPositiveAddToService">Добавить в Служение</string>
+  <string name="couldNotHandlePollResponse">Не мог справиться с ответом на Опрос</string>
+  <string name="requestFailed">Ошибка запроса</string>
+  <string name="couldNotHandleLiveItems">Не мог справиться с объектами показа</string>
+  <string name="couldNotHandleServiceItems">Не мог справиться с объектами Служения</string>
+  <string name="connection.profiles">Профили подключений</string>
+  <string name="connection.profiles.manage">Управление профилями</string>
+  <string name="connection.profile.title">Название профиля</string>
+  <string name="connection.profile.active">Активный профиль - Нажмите чтобы изменить</string>
+  <string name="connection.profile.active.toast">Активный профиль</string>
+  <string name="connection.profile.summary.activate">Нажмите, чтобы сделать активным</string>
+  <string name="connection.profile.activate">\t\nвключить</string>
+  <string name="connection.profile.server">Сервер</string>
+  <string name="connection.profile.remove">Удалить</string>
+  <string name="connection.profile.remove.summary">Удалить эту конфигурацию</string>
+  <string name="connection.profile.not.saved">Нажмите, чтобы редактировать свойства</string>
+  <string name="connection.profile.new.server">Новый сервер</string>
+  <string name="notSet">Не установлено</string>
+  <string name="connection.profile.ssl.use">Использовать SSL</string>
+  <string name="connection.profile.ssl.summary">Укажите, следует ли использовать SSL</string>
+  <string name="connection.available.configurations">Список доступных профилей</string>
+  <string name="connection.add.by.menu">Нажмите, чтобы добавить новый профиль</string>
+</resources>

=== added directory 'res/values-sk'
=== added file 'res/values-sk/strings.xml'
--- res/values-sk/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-sk/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">O</string>
+  <string name="about_text">Verzia</string>
+  <string name="about_display_1">OpenLP je voľne dostupná kresťanská prezentačná aplikácia. Viac informácií o OpenLP.</string>
+  <string name="about_display_3">Internetová stránka</string>
+  <string name="about_display_4">Autorské práva</string>
+  <string name="about_display_5">Čiastočné autorské práva</string>
+  <string name="about_display_6">Licencia</string>
+  <string name="about_display_7">Tento program je slobodný software; môžete ho šířiť a modifikovať podľa ustanovení GNU General Public License, vydávanej Free Software Foundation; a to podľa verze 2 tejto licencie.</string>
+  <string name="about_display_8">Tento program je šírený v nádeji, že bude užitočný, avšak BEZ AKÉJKOĽVEK ZÁRUKY; neposkytujú sa ani odvodené záruky PREDAJNOSTI alebo VHODNOSTI PRE URČITÝ ÚČEL.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Nastavenia</string>
+  <string name="preferences">Nastavenia</string>
+  <string name="none">Nič</string>
+  <string name="prev">Predchádzajúci</string>
+  <string name="next">Ďalší</string>
+  <string name="blank">Prázdny</string>
+  <string name="unblank">Neprázdny</string>
+  <string name="tabAlert">Upozornenie</string>
+  <string name="alert">Upozornenie:</string>
+  <string name="alertHint">Zadať správa upozornenia</string>
+  <string name="alertTextNull">Zadajte prosím správu na odoslanie.</string>
+  <string name="send">Odoslať</string>
+  <string name="tabLive">Naživo</string>
+  <string name="tabStage">Pódium</string>
+  <string name="tabDisplay">Zobrazenie</string>
+  <string name="tabService">Služba</string>
+  <string name="preferenceCategoryTitleServer">Server</string>
+  <string name="url">Server</string>
+  <string name="urlHint">Meno počítača alebo IP</string>
+  <string name="port">Port</string>
+  <string name="enableCustomTimeouts">Zapnúť užívateľský časový limit</string>
+  <string name="textSizeType">Typ veľkosti textu</string>
+  <string name="textSizeSummary">Zmeniť veľkosť textu služby</string>
+  <string name="displayType">Zobraziť prázdny typ</string>
+  <string name="displayBlankType">Zobraziť prázdny typ</string>
+  <string name="displayBlankSummary">Vybrať požadovaný prázdny typ</string>
+  <string name="displayScreen">Obrazovka</string>
+  <string name="displayTheme">Motív</string>
+  <string name="displayDesktop">Pracovná plocha</string>
+  <string name="displayBlankOn">Obnoviť zobrazenie z</string>
+  <string name="displayBlankOff">Prázdne zobrazenie na</string>
+  <string name="backgroundService">Obnoviť zobrazenie</string>
+  <string name="backgroundTaskSummary">Zašktnúť pre zmenu nastavenia obnovy</string>
+  <string name="backgroundTask">Interva obnovy (sec)</string>
+  <string name="customTimeoutsSummary">Overiť zmeny nastavenia časového limitu</string>
+  <string name="customTimeout">Užívateľský časový limiť</string>
+  <string name="socketTimeout">Časový limit socketu</string>
+  <string name="socketTimeoutSummary">Vybrať hodnotu (milisekundy)</string>
+  <string name="connectionTimeout">Časový limit spojenia</string>
+  <string name="connectionTimedout">Spojenie vypršalo</string>
+  <string name="connectionTimeoutSummary">Vybrať hodnotu (milisekundy)</string>
+  <string name="unable">Nie je možné načítať stránku -</string>
+  <string name="connectionFailed">Pripojenie zlyhalo</string>
+  <string name="jsonfail">JSON zlihal</string>
+  <string name="loading">Pripájam sa...</string>
+  <string name="searching">Hľadám...</string>
+  <string name="loadingFailed">Chyba - Načítanie zlyhalo</string>
+  <string name="loadingServiceItems">Načítávam položky služby...</string>
+  <string name="loadingSlideItems">Načítávam položky snímku...</string>
+  <string name="loadingStatusInfo">Načítávam stavové info...</string>
+  <string name="searchHint">Hľadať OpenLP</string>
+  <string name="searchResults">Výsledky hľadania</string>
+  <string name="showingResults">Zobrazuje výsledky pre \'%s\'</string>
+  <string name="contentDescription">Úvodná obrazovka</string>
+  <string name="buttonSearchText">Hľadať</string>
+  <string name="dialogTitleItemOptions">Voľby položky:</string>
+  <string name="dialogNegativeSendLive">Naživo</string>
+  <string name="dialogPositiveAddToService">Pridať do služby</string>
+  <string name="couldNotHandlePollResponse">Nemôžem spracovať Poll odpoveď</string>
+  <string name="requestFailed">Požiadavka zlyhala</string>
+  <string name="couldNotHandleLiveItems">Nemôžem spracovať položky naživo</string>
+  <string name="couldNotHandleServiceItems">Nemôžem spracovať položky služby</string>
+  <string name="connection.profiles">Profily pripojení</string>
+  <string name="connection.profiles.manage">Spravovať profil</string>
+  <string name="connection.profile.title">Názov profilu</string>
+  <string name="connection.profile.active">Aktívny profil - kliknúť pre úpravu</string>
+  <string name="connection.profile.active.toast">Aktívny profil</string>
+  <string name="connection.profile.summary.activate">Kliknúť pre nastavenie aktívneho</string>
+  <string name="connection.profile.activate">Aktivovať</string>
+  <string name="connection.profile.server">Server</string>
+  <string name="connection.profile.remove">Odstrániť</string>
+  <string name="connection.profile.remove.summary">Odstrániť túto konfiguráciu</string>
+  <string name="connection.profile.not.saved">Kliknúť pre úpravu vlastností</string>
+  <string name="connection.profile.new.server">Nový Server</string>
+  <string name="notSet">Nenastavené</string>
+  <string name="connection.profile.ssl.use">Použiť SSL</string>
+  <string name="connection.profile.ssl.summary">Upresniť ak použiť SSL</string>
+  <string name="connection.available.configurations">Zoznam dostupných profilov</string>
+  <string name="connection.add.by.menu">Kliknúť pre pridanie nového profilu</string>
+</resources>

=== added directory 'res/values-sv'
=== added file 'res/values-sv/strings.xml'
--- res/values-sv/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-sv/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">Om</string>
+  <string name="about_text">Version</string>
+  <string name="about_display_1">OpenLP är fri mjukvara för kyrkpresentation. Lär dig mer om OpenLP.</string>
+  <string name="about_display_3">Webbplats</string>
+  <string name="about_display_4">Copyright</string>
+  <string name="about_display_5">Del-copyright</string>
+  <string name="about_display_6">Licens</string>
+  <string name="about_display_7">Det här programmet är fri mjukvara; du får sprida den vidare och/eller ändra i den under villkoren i GNU General Public License så som publicerade av Free Software Foundation; version 2 av licensen.</string>
+  <string name="about_display_8">Det här programmet ges ut i hopp om att det kan vara användbart, men UTAN NÅGON GARANTI; inte ens någon underförstådd garanti vid köp eller lämplighet för ett särskilt ändamål. Se nedan för mer detaljer.</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">Inställningar</string>
+  <string name="preferences">Alternativ</string>
+  <string name="none">Inga</string>
+  <string name="prev">Föregående</string>
+  <string name="next">Nästa</string>
+  <string name="blank">Släck</string>
+  <string name="unblank">Tänd</string>
+  <string name="tabAlert">Meddelande</string>
+  <string name="alert">Meddelande:</string>
+  <string name="alertHint">Skriv ett meddelande</string>
+  <string name="alertTextNull">Skriv ett meddelande att skicka.</string>
+  <string name="send">Skicka</string>
+  <string name="tabLive">Live</string>
+  <string name="tabStage">Scen</string>
+  <string name="tabDisplay">Skärm</string>
+  <string name="tabService">Körschema</string>
+  <string name="preferenceCategoryTitleServer">Server</string>
+  <string name="url">Server</string>
+  <string name="urlHint">Värdnamn eller IP-adress</string>
+  <string name="port">Port</string>
+  <string name="enableCustomTimeouts">Aktivera anpassade timeouter</string>
+  <string name="textSizeType">Teckenstorlek</string>
+  <string name="textSizeSummary">Ändra körschemats teckenstorlek</string>
+  <string name="displayType">Skärmsläckningsmetod</string>
+  <string name="displayBlankType">Skärmsläckningsmetod</string>
+  <string name="displayBlankSummary">Välj metod för att släcka skärmen</string>
+  <string name="displayScreen">Svart</string>
+  <string name="displayTheme">Tema</string>
+  <string name="displayDesktop">Skrivbord</string>
+  <string name="displayBlankOn">Återställ skärmen från</string>
+  <string name="displayBlankOff">Släck skärmen till</string>
+  <string name="backgroundService">Skärmuppdatering</string>
+  <string name="backgroundTaskSummary">Välj för att ändra uppdateringsinställningar</string>
+  <string name="backgroundTask">Uppdateringsintervall (s)</string>
+  <string name="customTimeoutsSummary">Välj för att ändra timeoutinställningar</string>
+  <string name="customTimeout">Anpassad timeout</string>
+  <string name="socketTimeout">Socket-timeout</string>
+  <string name="socketTimeoutSummary">Välj ett värde (millisekunder)</string>
+  <string name="connectionTimeout">Anslutningstimeout</string>
+  <string name="connectionTimedout">Anslutningen tappades</string>
+  <string name="connectionTimeoutSummary">Välj ett värde (millisekunder)</string>
+  <string name="unable">Kan inte ladda sida -</string>
+  <string name="connectionFailed">Anslutning misslyckades</string>
+  <string name="jsonfail">Meddelandeformat-fel </string>
+  <string name="loading">Ansluter…</string>
+  <string name="searching">Söker…</string>
+  <string name="loadingFailed">Fel - Inläsning misslyckades</string>
+  <string name="loadingServiceItems">Läser in körschemaposter…</string>
+  <string name="loadingSlideItems">Läser in bildposter…</string>
+  <string name="loadingStatusInfo">Läser in statusinformation…</string>
+  <string name="searchHint">Sök i OpenLP</string>
+  <string name="searchResults">Sökresultat</string>
+  <string name="showingResults">Visar resultat för \'%s\'</string>
+  <string name="contentDescription">Uppstartsbild</string>
+  <string name="buttonSearchText">Sök</string>
+  <string name="dialogTitleItemOptions">Alternativ för post:</string>
+  <string name="dialogNegativeSendLive">Visa live</string>
+  <string name="dialogPositiveAddToService">Lägg till i körschema</string>
+  <string name="couldNotHandlePollResponse">Kunde inte hantera svar på förfrågan</string>
+  <string name="requestFailed">Förfrågan misslyckades</string>
+  <string name="couldNotHandleLiveItems">Kunde inte hantera live-poster</string>
+  <string name="couldNotHandleServiceItems">Kunde inte hantera poster i körschemat</string>
+  <string name="connection.profiles">Anslutningsprofiler</string>
+  <string name="connection.profiles.manage">Hantera profiler</string>
+  <string name="connection.profile.title">Profiltitel</string>
+  <string name="connection.profile.active">Aktiv profil - tryck för att hantera</string>
+  <string name="connection.profile.active.toast">Aktiv profil</string>
+  <string name="connection.profile.summary.activate">Tryck för att aktivera</string>
+  <string name="connection.profile.activate">Aktivera</string>
+  <string name="connection.profile.server">Server</string>
+  <string name="connection.profile.remove">Ta bort</string>
+  <string name="connection.profile.remove.summary">Ta bort den här konfigurationen</string>
+  <string name="connection.profile.not.saved">Tryck för att redigera egenskaper</string>
+  <string name="connection.profile.new.server">Ny server</string>
+  <string name="notSet">Inte valt</string>
+  <string name="connection.profile.ssl.use">Använd SSL</string>
+  <string name="connection.profile.ssl.summary">Ange om SSL ska användas</string>
+  <string name="connection.available.configurations">Lista över tillgängliga profiler</string>
+  <string name="connection.add.by.menu">Tryck för att lägga till en ny profil</string>
+</resources>

=== added directory 'res/values-zh-rCN'
=== added file 'res/values-zh-rCN/strings.xml'
--- res/values-zh-rCN/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-zh-rCN/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">关于</string>
+  <string name="about_text">版本</string>
+  <string name="about_display_1">OpenLP是一个免费的教会演示软件,了解更多关于OpenLP的信息</string>
+  <string name="about_display_3">网站</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="app_name">OpenLP</string>
+  <string name="settings">设定</string>
+  <string name="preferences">偏好</string>
+  <string name="none">无</string>
+  <string name="prev">上一个</string>
+  <string name="next">下一个</string>
+  <string name="blank">空白</string>
+  <string name="unblank">取消空白</string>
+  <string name="tabAlert">警告</string>
+  <string name="alert">警告:</string>
+  <string name="alertHint">输入警告信息:</string>
+  <string name="alertTextNull">请输入一条信息来发送。</string>
+  <string name="send">发送</string>
+  <string name="tabLive">现场</string>
+  <string name="tabStage">后台</string>
+  <string name="tabDisplay">显示</string>
+  <string name="tabService">敬拜仪式</string>
+  <string name="preferenceCategoryTitleServer">服务器</string>
+  <string name="url">服务器</string>
+  <string name="urlHint">主机名或IP</string>
+  <string name="port">端口</string>
+  <string name="enableCustomTimeouts">启用自定义超时</string>
+  <string name="textSizeType">文本大小类型</string>
+  <string name="textSizeSummary">改变敬拜仪式文字大小</string>
+  <string name="displayType">显示空白类型</string>
+  <string name="displayBlankType">显示空白类型</string>
+  <string name="displayBlankSummary">选择所需的空白类型</string>
+  <string name="displayScreen">屏幕</string>
+  <string name="displayTheme">主题</string>
+  <string name="displayDesktop">桌面</string>
+  <string name="displayBlankOn">重置显示从</string>
+  <string name="displayBlankOff">空白显示到</string>
+  <string name="backgroundService">刷新显示</string>
+  <string name="backgroundTaskSummary">点击来更改刷新设置</string>
+  <string name="backgroundTask">刷新时间(秒)</string>
+  <string name="customTimeoutsSummary">点击来更改超时设置</string>
+  <string name="customTimeout">自定义超时</string>
+  <string name="socketTimeout">接口超时</string>
+  <string name="socketTimeoutSummary">选择一个值(毫秒)</string>
+  <string name="connectionTimeout">连接超时</string>
+  <string name="connectionTimedout">连接已超时</string>
+  <string name="connectionTimeoutSummary">选择一个值(毫秒)</string>
+  <string name="unable">无法加载页面</string>
+  <string name="connectionFailed">连接失败</string>
+  <string name="jsonfail">信息格式错误</string>
+  <string name="loading">正在连接...</string>
+  <string name="searching">正在搜索...</string>
+  <string name="loadingFailed">错误 - 加载失败</string>
+  <string name="loadingServiceItems">正在加载敬拜仪式项目...</string>
+  <string name="loadingSlideItems">正在加载幻灯片项目...</string>
+  <string name="loadingStatusInfo">正在加载状态信息...</string>
+  <string name="searchHint">搜索OpenLP</string>
+  <string name="searchResults">搜索结果</string>
+  <string name="showingResults">显示\'%s\'的结果</string>
+  <string name="contentDescription">斑点屏幕</string>
+  <string name="buttonSearchText">搜索</string>
+  <string name="dialogTitleItemOptions">项目选项:</string>
+  <string name="dialogNegativeSendLive">发送到现场</string>
+  <string name="dialogPositiveAddToService">添加到敬拜仪式</string>
+  <string name="couldNotHandlePollResponse">无法处理投票响应</string>
+  <string name="requestFailed">请求失败</string>
+  <string name="couldNotHandleLiveItems">无法处理现场项目</string>
+  <string name="couldNotHandleServiceItems">无法处理敬拜仪式项目</string>
+  <string name="connection.profiles">连接概要文件</string>
+  <string name="connection.profiles.manage">管理概要文件</string>
+  <string name="connection.profile.title">概要文件标题</string>
+  <string name="connection.profile.active">已启用的概要文件-点击来管理</string>
+  <string name="connection.profile.active.toast">已启用的概要文件</string>
+  <string name="connection.profile.summary.activate">点击启用</string>
+  <string name="connection.profile.activate">启用</string>
+  <string name="connection.profile.server">服务器</string>
+  <string name="connection.profile.remove">移除</string>
+  <string name="connection.profile.remove.summary">移除该配置</string>
+  <string name="connection.profile.not.saved">点击编辑属性</string>
+  <string name="connection.profile.new.server">新建服务器</string>
+  <string name="notSet">未设定</string>
+  <string name="connection.profile.ssl.use">使用SSL</string>
+  <string name="connection.profile.ssl.summary">指定SSL是否可用</string>
+  <string name="connection.available.configurations">可用概要列表</string>
+  <string name="connection.add.by.menu">点击新增一个概要文件</string>
+</resources>

=== added directory 'res/values-zh-rTW'
=== added file 'res/values-zh-rTW/strings.xml'
--- res/values-zh-rTW/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values-zh-rTW/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,92 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="about">關於</string>
+  <string name="about_text">版本</string>
+  <string name="about_display_1">OpenLP是免費的教會簡報軟體。了解更多關於OpenLP的資訊。</string>
+  <string name="about_display_3">網站</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通用公共許可證條款第二版來修改和重新發佈這一程序。</string>
+  <string name="about_display_8">發佈這一程序的目的是希望它有用,但沒有任何擔保。甚至沒有適合特定目的的隱含的擔保。</string>
+  <string name="app_name">OpenLP</string>
+  <string name="settings">設定</string>
+  <string name="preferences">偏好設定</string>
+  <string name="none">無</string>
+  <string name="prev">前一個</string>
+  <string name="next">下一個</string>
+  <string name="blank">顯示單色畫面</string>
+  <string name="unblank">移除單色畫面</string>
+  <string name="tabAlert">警告</string>
+  <string name="alert">警告</string>
+  <string name="alertHint">輸入警告訊息</string>
+  <string name="alertTextNull">請輸入要傳送的訊息。</string>
+  <string name="send">傳送</string>
+  <string name="tabLive">現場Live</string>
+  <string name="tabStage">舞台</string>
+  <string name="tabDisplay">顯示</string>
+  <string name="tabService">聚會</string>
+  <string name="preferenceCategoryTitleServer">伺服器</string>
+  <string name="url">伺服器</string>
+  <string name="urlHint">主機名或IP</string>
+  <string name="port">連接埠</string>
+  <string name="enableCustomTimeouts">開啟逾時設定</string>
+  <string name="textSizeType">文字大小類型</string>
+  <string name="textSizeSummary">更改聚會文字大小</string>
+  <string name="displayType">顯示單色畫面類型</string>
+  <string name="displayBlankType">顯示單色畫面類型</string>
+  <string name="displayBlankSummary">選擇所需的單色畫面類型</string>
+  <string name="displayScreen">螢幕</string>
+  <string name="displayTheme">佈景主題</string>
+  <string name="displayDesktop">桌面。</string>
+  <string name="displayBlankOn">重設顯示</string>
+  <string name="displayBlankOff">顯示單色畫面為</string>
+  <string name="backgroundService">重新整理顯示</string>
+  <string name="backgroundTaskSummary">檢查更改重新整理設定</string>
+  <string name="backgroundTask">重新整理時間(秒)</string>
+  <string name="customTimeoutsSummary">檢查更改逾時設定</string>
+  <string name="customTimeout">逾時設定</string>
+  <string name="socketTimeout">Socket逾時</string>
+  <string name="socketTimeoutSummary">選擇數值(毫秒)</string>
+  <string name="connectionTimeout">連接逾時</string>
+  <string name="connectionTimedout">連接逾時</string>
+  <string name="connectionTimeoutSummary">選擇數值(毫秒)</string>
+  <string name="unable">無法讀取網頁 -</string>
+  <string name="connectionFailed">連線失敗</string>
+  <string name="jsonfail">訊息格式錯誤</string>
+  <string name="loading">連線中...</string>
+  <string name="searching">搜尋中...</string>
+  <string name="loadingFailed">錯誤 - 無法載入</string>
+  <string name="loadingServiceItems">正在載入聚會項目...</string>
+  <string name="loadingSlideItems">正在載入投影片項目...</string>
+  <string name="loadingStatusInfo">正在載入狀態資訊...</string>
+  <string name="searchHint">搜尋OpenLP</string>
+  <string name="searchResults">搜尋結果</string>
+  <string name="showingResults">對 \'%s\' 顯示結果</string>
+  <string name="contentDescription">啟動畫面</string>
+  <string name="buttonSearchText">搜尋</string>
+  <string name="dialogTitleItemOptions">選項:</string>
+  <string name="dialogNegativeSendLive">送出現場Live</string>
+  <string name="dialogPositiveAddToService">新增至聚會</string>
+  <string name="couldNotHandlePollResponse">無法處理Poll回應</string>
+  <string name="requestFailed">要求失敗</string>
+  <string name="couldNotHandleLiveItems">無法處理現場Live項目</string>
+  <string name="couldNotHandleServiceItems">無法處理聚會項目</string>
+  <string name="connection.profiles">連線組態</string>
+  <string name="connection.profiles.manage">管理組態</string>
+  <string name="connection.profile.title">組態標題</string>
+  <string name="connection.profile.active">啟動組態 - </string>
+  <string name="connection.profile.active.toast">啟動組態</string>
+  <string name="connection.profile.summary.activate">點擊設定啟動</string>
+  <string name="connection.profile.activate">啟動</string>
+  <string name="connection.profile.server">伺服器</string>
+  <string name="connection.profile.remove">移除</string>
+  <string name="connection.profile.remove.summary">移除此設定</string>
+  <string name="connection.profile.not.saved">點擊設定內容</string>
+  <string name="connection.profile.new.server">新的伺服器</string>
+  <string name="notSet">沒有設定</string>
+  <string name="connection.profile.ssl.use">使用SSL</string>
+  <string name="connection.profile.ssl.summary">指定是否應使用SSL</string>
+  <string name="connection.available.configurations">列出可用的組態</string>
+  <string name="connection.add.by.menu">點擊新增組態</string>
+</resources>

=== added file 'res/values/backgroundTimeouts.xml'
--- res/values/backgroundTimeouts.xml	1970-01-01 00:00:00 +0000
+++ res/values/backgroundTimeouts.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,22 @@
+<resources>
+	<string-array name="backgroundTimeEntries">
+		<item>@string/none</item>
+		<item>1</item>
+		<item>2</item>
+		<item>5</item>
+		<item>10</item>
+		<item>15</item>
+		<item>20</item>
+		<item>30</item>
+	</string-array>
+	<string-array name="backgroundTimeValues">
+		<item>0</item>
+		<item>1000</item>
+		<item>2000</item>
+		<item>5000</item>
+		<item>10000</item>
+		<item>15000</item>
+		<item>20000</item>
+		<item>30000</item>
+	</string-array>
+</resources>

=== added file 'res/values/colors.xml'
--- res/values/colors.xml	1970-01-01 00:00:00 +0000
+++ res/values/colors.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,4 @@
+<resources>
+    <color name="lightGreen">#ff66ff33</color>
+    <color name="white">#ffffff00</color>
+</resources>
\ No newline at end of file

=== added file 'res/values/defaultValues.xml'
--- res/values/defaultValues.xml	1970-01-01 00:00:00 +0000
+++ res/values/defaultValues.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,15 @@
+<resources>
+    <!-- STRING -->
+    <string name="hostDefaultValue">192.168.1.1</string>
+    <string name="portDefaultValue">4316</string>
+	<string name="ssl.port.default">4317</string>
+    <string name="displayTypeValue">@string/displayScreen</string>
+    <string name="useridDefaultValue">openlp</string>
+    <string name="passwordDefaultValue">password</string>
+
+    <!-- INTEGER -->
+    <integer name="socketTimeoutDefaultValue">3000</integer>
+    <integer name="connectionTimeoutDefaultValue">3000</integer>
+    <string name="backgroundRefreshDefaultValue">5000</string>
+    <integer name="textSizeDefaultValue">14</integer>
+</resources>

=== added file 'res/values/httpClientTimeoutValues.xml'
--- res/values/httpClientTimeoutValues.xml	1970-01-01 00:00:00 +0000
+++ res/values/httpClientTimeoutValues.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,16 @@
+<resources>
+    <string-array name="socketValueEntries">
+		<item>3000</item>
+		<item>4000</item>
+		<item>5000</item>
+		<item>8000</item>
+		<item>10000</item>
+	</string-array>
+	<string-array name="socketValues">
+		<item>3000</item>
+		<item>4000</item>
+		<item>5000</item>
+		<item>8000</item>
+		<item>10000</item>
+	</string-array>
+</resources>
\ No newline at end of file

=== added file 'res/values/keyStrings.xml'
--- res/values/keyStrings.xml	1970-01-01 00:00:00 +0000
+++ res/values/keyStrings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,15 @@
+<resources>
+    <string name="keyEnableCustomTimeout">enableCustomTimeout</string>
+    <string name="keyBackgroundService">backgroundService</string>
+    <string name="keyConnectionTimeout">connectionTimeout</string>
+    <string name="keyDisplayBlankType">blankType</string> 
+    <string name="keyTextSize">textSize</string> 
+    <string name="keySocketTimeout">socketTimeout</string>
+    <string name="keyHost">keyHost</string>
+    <string name="keyPort">keyPort</string>
+    <string name="key.userid">key.userid</string>
+    <string name="key.password">key.password</string>
+    <string name="keySharedPreferences">keySharedPreferences</string>
+	<string name="key.ssl.use">ssl.use</string>
+    <string name="key.profile.selected.title">key.profile.selected.title</string>
+</resources>

=== added file 'res/values/misc.xml'
--- res/values/misc.xml	1970-01-01 00:00:00 +0000
+++ res/values/misc.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,12 @@
+<resources>
+    <string-array name="displayTypeValueEntries">
+		<item>@string/displayScreen</item>
+		<item>@string/displayTheme</item>
+		<item>@string/displayDesktop</item>
+	</string-array>
+    <string-array name="displayTypeValues">
+		<item>@string/displayScreen</item>
+		<item>@string/displayTheme</item>
+		<item>@string/displayDesktop</item>
+	</string-array>	
+</resources>
\ No newline at end of file

=== added file 'res/values/strings.xml'
--- res/values/strings.xml	1970-01-01 00:00:00 +0000
+++ res/values/strings.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="about">About</string>
+    <string name="about_text">Version</string>
+    <string name="about_display_1">OpenLP is free church presentation software. Find out more about OpenLP.</string>
+    <string name="about_display_3">Website</string>
+    <string name="about_display_4">Copyright</string>
+    <string name="about_display_5">Portions copyright</string>
+    <string name="about_display_6">License</string>
+    <string name="about_display_7">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.</string>
+    <string name="about_display_8">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.</string>
+    <string name="app_name">OpenLP</string>
+    <string name="settings">Settings</string>
+	<string name="preferences">Preferences</string>
+    <string name="none">None</string>	
+    <string name="prev">Previous</string>
+    <string name="next">Next</string>
+    <string name="blank">Blank</string>
+    <string name="unblank">Unblank</string>
+    <string name="tabAlert">Alert</string>    
+    <string name="alert">Alert:</string>
+    <string name="alertHint">Enter alert message</string>
+    <string name="alertTextNull">Please enter a message to send.</string>
+    <string name="send">Send</string>
+    <string name="tabLive">Live</string>
+    <string name="tabStage">Stage</string> 
+    <string name="tabDisplay">Display</string>       
+    <string name="tabService">Service</string>
+    <string name="preferenceCategoryTitleServer">Server</string>
+    <string name="url">Server</string>
+    <string name="urlHint">Hostname or IP</string>
+    <string name="port">Port</string>
+    <string name="enableCustomTimeouts">Enable Custom Timeouts</string>
+    <string name="textSizeType">Text Size Type</string>  
+    <string name="textSizeSummary">Change the Service text size</string>
+    <string name="displayType">Display Blank Type</string>
+    <string name="displayBlankType">Display Blank Type</string>
+    <string name="displayBlankSummary">Select the required blank type</string>
+    <string name="displayScreen">Screen</string>
+    <string name="displayTheme">Theme</string>
+    <string name="displayDesktop">Desktop</string>
+    <string name="displayBlankOn">Reset display from</string>
+    <string name="displayBlankOff">Blank display to</string>
+    <string name="backgroundService">Refresh Displays</string>  
+    <string name="backgroundTaskSummary">Check to modify refresh settings</string>
+    <string name="backgroundTask">Refresh time (sec)</string>
+    <string name="customTimeoutsSummary">Check to modify timeout settings</string>
+    <string name="customTimeout">Custom Timeout</string>
+    <string name="socketTimeout">Socket Timeout</string>
+    <string name="socketTimeoutSummary">Select a value (milliseconds)</string>
+    <string name="connectionTimeout">Connection Timeout</string>
+    <string name="connectionTimedout">Connection timed out</string>
+    <string name="connectionTimeoutSummary">Select a value (milliseconds)</string>
+    <string name="unable">Unable to load page -</string>
+    <string name="connectionFailed">Connection failed</string>
+    <string name="jsonfail">Message format error </string>
+    <string name="loading">Connecting…</string>
+    <string name="searching">Searching…</string>
+    <string name="loadingFailed">Error - Load Failed</string>    
+    <string name="loadingServiceItems">Loading Service Items…</string>
+    <string name="loadingSlideItems">Loading Slide Items…</string>
+    <string name="loadingStatusInfo">Loading Status Info…</string>
+	<string name="searchHint">Search OpenLP</string>
+    <string name="searchResults">Search Results</string>
+    <string name="showingResults">Showing Results for \'%s\'</string>
+    <string name="contentDescription">Splash Screen</string>
+    <string name="buttonSearchText">Search</string>
+	<string name="dialogTitleItemOptions">Item Options:</string>
+	<string name="dialogNegativeSendLive">Send Live</string>
+	<string name="dialogPositiveAddToService">Add to Service</string>
+	<string name="couldNotHandlePollResponse">Could not handle Poll response</string>
+	<string name="requestFailed">Request Failed</string>
+	<string name="couldNotHandleLiveItems">Could not handle live items</string>
+	<string name="couldNotHandleServiceItems">Could not handle service items</string>
+	<string name="connection.profiles">Connection Profiles</string>
+	<string name="connection.profiles.manage">Manage Profiles</string>
+    <string name="connection.profile.title">Profile Title</string>
+	<string name="connection.profile.active">Active Profile - Tap to manage</string>
+	<string name="connection.profile.active.toast">Active Profile</string>
+	<string name="connection.profile.summary.activate">Tap to set active</string>
+	<string name="connection.profile.activate">Activate</string>
+	<string name="connection.profile.server">Server</string>
+	<string name="connection.profile.remove">Remove</string>
+	<string name="connection.profile.remove.summary">Remove this configuration</string>
+    <string name="connection.profile.not.saved">Tap to edit properties</string>
+    <string name="connection.profile.new.server">New Server</string>
+	<string name="notSet">Not set</string>
+	<string name="connection.profile.ssl.use">Use SSL</string>
+	<string name="connection.profile.ssl.summary">Specify whether SSL should be used</string>
+	<string name="connection.available.configurations">List of available profiles</string>
+	<string name="connection.add.by.menu">Tap to add a new profile</string>
+    <string name="connection.userid">Userid</string>
+    <string name="connection.password">Password</string>
+    <string name="httpreturn.unauthorised">Unauthorised Access, please enter valid userid and password</string>
+    <string name="apiCallIntent.search">Unexpected invalid result during Search Call.</string>
+    <string name="apiCallIntent.alert">Unexpected invalid result during Alert call.</string>
+    <string name="apiCallIntent.navigation">Unexpected invalid result during Navigation.</string>
+    <string name="apiCallIntent.list_data">Unexpected invalid result while setting list data.</string>
+    <string name="apiCallIntent.poll">Unexpected invalid result during status Poll.</string>
+    <string name="apiCallIntent.fetch">Unexpected invalid result while fetching items.</string>
+</resources>

=== added file 'res/values/styles.xml'
--- res/values/styles.xml	1970-01-01 00:00:00 +0000
+++ res/values/styles.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,47 @@
+<resources>
+    <style name="OpenLPStyle" parent="android:Theme.Black.NoTitleBar.Fullscreen">
+        <item name="android:windowBackground">@drawable/openlp_logo_android</item>
+        <item name="android:backgroundDimEnabled">false</item>
+    </style>
+
+    <style name="ButtonStyle" parent="android:TextAppearance.Widget.Button">
+        <item name="android:layout_width">fill_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:gravity">center</item>
+        <item name="android:layout_weight">1</item>
+    </style>
+    <style name="ButtonStylePrevious" parent="ButtonStyle">
+        <item name="android:drawableLeft">@drawable/previous</item>
+    </style>
+    <style name="ButtonStyleNext" parent="ButtonStyle">
+        <item name="android:drawableRight">@drawable/next</item>
+    </style>
+    <style name="SlideServiceListView" parent="android:Widget.ListView">
+        <item name="android:layout_gravity">top</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_width">fill_parent</item>
+    </style>
+    <style name="SlideServiceTableLayout">
+        <item name="android:layout_gravity">fill</item>
+        <item name="android:layout_width">fill_parent</item>
+        <item name="android:layout_height">fill_parent</item>
+    </style>
+    <style name="SlideServiceTextViewTitle">
+        <item name="android:textStyle">bold</item>
+        <item name="android:textSize">10pt</item>
+        <item name="android:paddingBottom">5dip</item>
+    </style>
+    <style name="LinearLayoutBottomButtons">
+        <item name="android:baselineAligned">false</item>
+        <item name="android:layout_gravity">fill</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_width">fill_parent</item>
+        <item name="android:layout_weight">0</item>
+    </style>
+    <style name="SlideServiceViewHorizontalRule" parent="android:TextAppearance.Widget.TextView">
+        <item name="android:background">@android:color/background_light</item>
+        <item name="android:layout_height">2dip</item>
+        <item name="android:layout_width">fill_parent</item>
+    </style>
+</resources>

=== added file 'res/values/textSize.xml'
--- res/values/textSize.xml	1970-01-01 00:00:00 +0000
+++ res/values/textSize.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,22 @@
+<resources>
+    <string-array name="textSizeValueEntries">
+		<item>6</item>
+		<item>8</item>
+		<item>10</item>
+		<item>12</item>
+		<item>14</item>
+		<item>16</item>
+		<item>18</item>
+		<item>20</item>		
+	</string-array>
+    <string-array name="textSizeValues">
+		<item>6</item>
+		<item>8</item>
+		<item>10</item>
+		<item>12</item>
+		<item>14</item>
+		<item>16</item>
+		<item>18</item>
+		<item>20</item>		
+	</string-array>	
+</resources>
\ No newline at end of file

=== added directory 'res/xml'
=== added file 'res/xml/empty_preferences.xml'
--- res/xml/empty_preferences.xml	1970-01-01 00:00:00 +0000
+++ res/xml/empty_preferences.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen
+        xmlns:android="http://schemas.android.com/apk/res/android";>
+
+</PreferenceScreen>

=== added file 'res/xml/preferences.xml'
--- res/xml/preferences.xml	1970-01-01 00:00:00 +0000
+++ res/xml/preferences.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen
+        xmlns:android="http://schemas.android.com/apk/res/android";>
+    <PreferenceCategory
+            android:title="@string/textSizeType">
+        <ListPreference
+                android:title="@string/textSizeType"
+                android:key="@string/keyTextSize"
+                android:summary="@string/textSizeSummary"
+                android:entries="@array/textSizeValueEntries"
+                android:entryValues="@array/textSizeValues"
+                android:defaultValue="@integer/textSizeDefaultValue"/>  
+    </PreferenceCategory>
+    <PreferenceCategory
+            android:title="@string/displayType">
+        <ListPreference
+                android:title="@string/displayBlankType"
+                android:key="@string/keyDisplayBlankType"
+                android:summary="@string/displayBlankSummary"
+                android:entries="@array/displayTypeValueEntries"
+                android:entryValues="@array/displayTypeValues"
+                android:defaultValue="@string/displayTypeValue"/>  
+    </PreferenceCategory>
+    <PreferenceCategory
+            android:title="@string/connection.profile.active"
+            android:key="category.server">
+        <Preference
+                android:title="@string/url"
+                android:key="@string/keyHost"
+                android:hint="@string/urlHint"
+                android:inputType="textUri"
+                android:editable="false"
+                android:name="@string/url"/>
+    </PreferenceCategory>
+    <PreferenceCategory
+            android:title="@string/backgroundService">
+        <ListPreference
+                android:title="@string/backgroundTask"
+                android:key="@string/keyBackgroundService"
+                android:summary="@string/backgroundTaskSummary"
+                android:entries="@array/backgroundTimeEntries"
+                android:entryValues="@array/backgroundTimeValues"
+                android:defaultValue="@string/backgroundRefreshDefaultValue"/>
+    </PreferenceCategory>          
+    <PreferenceCategory
+            android:title="@string/customTimeout">
+        <CheckBoxPreference
+                android:title="@string/enableCustomTimeouts"
+                android:key="@string/keyEnableCustomTimeout"
+                android:summary="@string/customTimeoutsSummary"/>
+        <ListPreference
+                android:title="@string/connectionTimeout"
+                android:key="@string/keyConnectionTimeout"
+                android:summary="@string/connectionTimeoutSummary"
+                android:dependency="@string/keyEnableCustomTimeout"
+                android:entries="@array/socketValueEntries"
+                android:entryValues="@array/socketValues"
+                android:defaultValue="@integer/connectionTimeoutDefaultValue"/>
+        <ListPreference
+                android:title="@string/socketTimeout"
+                android:key="@string/keySocketTimeout"
+                android:summary="@string/socketTimeoutSummary"
+                android:dependency="@string/keyEnableCustomTimeout"
+                android:entries="@array/socketValueEntries"
+                android:entryValues="@array/socketValues"
+                android:defaultValue="@integer/socketTimeoutDefaultValue"/>
+    </PreferenceCategory>
+</PreferenceScreen>

=== added file 'res/xml/searchable.xml'
--- res/xml/searchable.xml	1970-01-01 00:00:00 +0000
+++ res/xml/searchable.xml	2013-06-04 19:25:41 +0000
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<searchable
+		xmlns:android="http://schemas.android.com/apk/res/android";
+		android:label="@string/app_name"
+		android:hint="@string/searchHint"
+		>
+	
+</searchable>
\ No newline at end of file

=== added directory 'src'
=== added directory 'src/org'
=== added directory 'src/org/openlp'
=== added directory 'src/org/openlp/android'
=== added file 'src/org/openlp/android/OpenLP.java'
--- src/org/openlp/android/OpenLP.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/OpenLP.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,101 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import org.openlp.android.activity.DefaultActivity;
+import org.openlp.android.activity.PagerActivity;
+import org.openlp.android.activity.preference.Preferences;
+import org.openlp.android.utility.OpenLPController;
+
+import static org.openlp.android.utility.OpenLPController.getPageForButton;
+
+/**
+ * OpenLP-Android initialisation point.
+ */
+public class OpenLP extends DefaultActivity {
+
+    /**
+     * Called when the activity is first created.
+     */
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main);
+
+        doPreferenceCheck();
+        setOnClickListenerPagerForButtons();
+    }
+
+    private View.OnClickListener onClickListenerPager =
+            new View.OnClickListener() {
+                @Override
+                public void onClick(View view) {
+                    Intent pager = new Intent(OpenLP.this, PagerActivity.class);
+                    pager.putExtra(OpenLPController.PAGE_KEY, getPageForButton(view));
+                    startActivity(pager);
+                }
+            };
+
+    private void doPreferenceCheck() {
+        if (getSharedPreferences(getString(R.string.keySharedPreferences),
+                Context.MODE_PRIVATE).getString(getString(R.string.keyHost),
+                "NONE").equals("NONE")
+                || getSharedPreferences(
+                getString(R.string.keySharedPreferences),
+                Context.MODE_PRIVATE).getString(
+                getString(R.string.keyHost), null).equals(null)) {
+            Log.d(LOG_TAG,
+                    "URL preference not set. Starting preference activity...");
+            Intent preferenceIntent = new Intent(this, Preferences.class);
+            startActivity(preferenceIntent);
+        }
+    }
+
+    private void setOnClickListenerPagerForButtons() {
+        findViewById(R.id.buttonService)
+                .setOnClickListener(onClickListenerPager);
+        findViewById(R.id.buttonLive)
+                .setOnClickListener(onClickListenerPager);
+        findViewById(R.id.buttonDisplay)
+                .setOnClickListener(onClickListenerPager);
+        findViewById(R.id.buttonAlert)
+                .setOnClickListener(onClickListenerPager);
+        findViewById(R.id.buttonStage)
+                .setOnClickListener(onClickListenerPager);
+        findViewById(R.id.buttonSearch)
+                .setOnClickListener(onClickListenerSearch);
+    }
+
+    private View.OnClickListener onClickListenerSearch =
+            new View.OnClickListener() {
+                @Override
+                public void onClick(View view) {
+                    onSearchRequested();
+                }
+            };
+
+    private final String LOG_TAG = OpenLP.class.getName();
+}

=== added directory 'src/org/openlp/android/activity'
=== added file 'src/org/openlp/android/activity/DefaultActivity.java'
--- src/org/openlp/android/activity/DefaultActivity.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/activity/DefaultActivity.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,55 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.activity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import org.openlp.android.R;
+import org.openlp.android.activity.preference.Preferences;
+import org.openlp.android.api.Api;
+
+
+public abstract class DefaultActivity extends Activity implements Api {
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        MenuInflater inflater = getMenuInflater();
+        inflater.inflate(R.menu.menu, menu);
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        // Handle item selection
+        switch (item.getItemId()) {
+            case R.id.preferences:
+                startActivity(new Intent(this, Preferences.class));
+                return true;
+            case R.id.menuSearch:
+                onSearchRequested();
+                return true;
+            default:
+                return super.onOptionsItemSelected(item);
+        }
+    }
+}

=== added file 'src/org/openlp/android/activity/OpenLPNavigate.java'
--- src/org/openlp/android/activity/OpenLPNavigate.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/activity/OpenLPNavigate.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,66 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.activity;
+
+import org.openlp.android.api.Api;
+
+/**
+ * Interface shared by  and to navigate and set data.
+ */
+public interface OpenLPNavigate extends Api {
+
+    public final String NAVIGATE_PREVIOUS = "previous";
+    public final String NAVIGATE_NEXT = "next";
+    public final String HIDE_SCREEN = "blank";
+    public final String HIDE_THEME = "theme";
+    public final String HIDE_DESKTOP = "desktop";
+    public final String DISPLAY_SHOW = "show";
+
+    /**
+     * Call to the service changing service/slides.
+     *
+     * @param direction A direction constant from {@link org.openlp.android.api.Api}.
+     *                  Eg.: {@link org.openlp.android.api.Api#LIVE_NEXT}
+     *                  or {@link org.openlp.android.api.Api#SERVICE_BASE} + previous/next.
+     */
+    void navigate(String direction);
+
+    /**
+     * Call to the service changing data for Service or Live
+     *
+     * @param apiPart An {@link org.openlp.android.api.Api} part for which to set data.
+     *                Eg.: {@link org.openlp.android.api.Api#LIVE_SET}
+     *                or {@link org.openlp.android.api.Api#SERVICE_SET}
+     * @param id      Id of the item selected.
+     */
+    void setData(String apiPart, int id);
+
+    void setDisplay(String displayRequest);
+
+    void poll();
+
+    /**
+     * Replaces what we previously had as FetchItemsTask which basically ran in the UI
+     *
+     * @param apiPart Items to fetch, eg.: {@link Api#LIVE_TEXT} or {@link Api#SERVICE_LIST}
+     */
+    void fetchItems(String apiPart);
+}

=== added file 'src/org/openlp/android/activity/PagerActivity.java'
--- src/org/openlp/android/activity/PagerActivity.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/activity/PagerActivity.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,66 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v4.view.ViewPager;
+import android.util.Log;
+import org.openlp.android.R;
+import org.openlp.android.utility.OpenLPController;
+
+public class PagerActivity extends DefaultActivity {
+    private ViewPager pager;
+    private OpenLPController controller;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Log.i(LOG_TAG, "onCreate");
+
+        setContentView(R.layout.view_pager_layout);
+
+        controller = new OpenLPController(this);
+        pager = (ViewPager) findViewById(R.id.myViewPager);
+        pager.setAdapter(controller);
+
+        Intent intent = getIntent();
+        int selectedPage = intent.getIntExtra(OpenLPController.PAGE_KEY, 0);
+        Log.v(LOG_TAG, "Setting Page number: " + selectedPage);
+        pager.setOnPageChangeListener(controller.onPageChangeListener);
+        pager.setCurrentItem(selectedPage, true);
+        controller.onPageChangeListener.onPageSelected(selectedPage);
+    }
+
+    public void setCurrentPage(int page) {
+        pager.setCurrentItem(page, true);
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        Log.v(LOG_TAG, "Destroying pagerActivity...");
+        unregisterReceiver(controller.apiCallReceiver);
+        stopService(controller.pingIntent);
+    }
+
+    private final String LOG_TAG = PagerActivity.class.getName();
+}

=== added file 'src/org/openlp/android/activity/Search.java'
--- src/org/openlp/android/activity/Search.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/activity/Search.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,27 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.activity;
+
+public interface Search {
+    public final String ACTION = Search.class.getName().concat(".Action");
+
+    public void searchPluginCall(String apiBase, String apiData);
+}

=== added file 'src/org/openlp/android/activity/SearchService.java'
--- src/org/openlp/android/activity/SearchService.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/activity/SearchService.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,33 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.activity;
+
+import android.content.Intent;
+import org.openlp.android.utility.JSONHandler;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+
+public interface SearchService {
+    public Intent getSearchPluginIntent(String apiBase, String apiData)
+            throws JSONHandler.JSONHandlerException, IOException,
+            URISyntaxException;
+}

=== added file 'src/org/openlp/android/activity/SearchableActivity.java'
--- src/org/openlp/android/activity/SearchableActivity.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/activity/SearchableActivity.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,290 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.activity;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.ProgressDialog;
+import android.app.SearchManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.ExpandableListView;
+import android.widget.Toast;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.openlp.android.R;
+import org.openlp.android.api.Api;
+import org.openlp.android.service.ApiCallIntent;
+import org.openlp.android.utility.GroupExpandableListAdapter;
+import org.openlp.android.utility.JSONHandler;
+import org.openlp.android.utility.WebCallReturningAsyncTask;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class SearchableActivity extends Activity implements Api {
+    private ExpandableListView listView;
+    private final int DIALOG_ITEM_OPTIONS = 0;
+    private Object dialogKey;
+    private JSONArray dialogValue;
+
+    private Search controller = new Search() {
+        @Override
+        public void searchPluginCall(String apiBase, String apiData) {
+            Intent apiCallIntent =
+                    new Intent(SearchableActivity.this, ApiCallIntent.class);
+            apiCallIntent.putExtra(apiBase, apiData);
+            startService(apiCallIntent);
+        }
+    };
+
+    BroadcastReceiver apiCallReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            Log.d(LOG_TAG, String.format(
+                    "Search broadcast received: context(%s), intent(%s, %s)",
+                    context, intent, intent.getExtras()));
+        }
+    };
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.search);
+        listView = (ExpandableListView) findViewById(R.id.list);
+        listView.setOnChildClickListener(onChildClickListener);
+
+        IntentFilter apiCallFilter = new IntentFilter(Search.ACTION);
+        apiCallFilter.addCategory(Intent.CATEGORY_DEFAULT);
+
+        registerReceiver(apiCallReceiver, apiCallFilter);
+
+        Intent intent = getIntent();
+        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
+            String query = intent.getStringExtra(SearchManager.QUERY);
+            doSearch(query);
+        }
+    }
+
+    private ExpandableListView.OnChildClickListener onChildClickListener =
+            new ExpandableListView.OnChildClickListener() {
+                @Override
+                public boolean onChildClick(ExpandableListView expandableListView,
+                                            View view, int parent, int childPosition, long l) {
+                    @SuppressWarnings("unchecked") Map<String, JSONArray> child =
+                            (Map<String, JSONArray>) listView.getExpandableListAdapter()
+                                    .getChild(parent, childPosition);
+                    dialogKey = null;
+                    dialogValue = null;
+                    dialogKey =
+                            listView.getExpandableListAdapter().getGroup(parent);
+                    dialogValue = child.get(dialogKey.toString());
+                    showDialog(DIALOG_ITEM_OPTIONS);
+                    return false;
+                }
+            };
+
+    @Override
+    protected Dialog onCreateDialog(int id) {
+        switch (id) {
+            case DIALOG_ITEM_OPTIONS:
+                AlertDialog.Builder dialogBuilder =
+                        new AlertDialog.Builder(SearchableActivity.this);
+                dialogBuilder
+                        .setTitle(getString(R.string.dialogTitleItemOptions));
+                dialogBuilder.setNegativeButton(
+                        getString(R.string.dialogNegativeSendLive),
+                        onClickListenerDialogSendLive);
+                dialogBuilder.setPositiveButton(
+                        getString(R.string.dialogPositiveAddToService),
+                        onClickListenerDialogAddToService);
+                return dialogBuilder.create();
+            default:
+                return null;
+        }
+    }
+
+    DialogInterface.OnClickListener onClickListenerDialogSendLive =
+            new DialogInterface.OnClickListener() {
+                @Override
+                public void onClick(DialogInterface dialogInterface, int i) {
+                    controller.searchPluginCall(
+                            String.format(SEARCH_PLUGIN_LIVE, dialogKey),
+                            getDialogValue());
+                }
+            };
+
+    DialogInterface.OnClickListener onClickListenerDialogAddToService =
+            new DialogInterface.OnClickListener() {
+                @Override
+                public void onClick(DialogInterface dialogInterface, int i) {
+                    controller.searchPluginCall(
+                            String.format(SEARCH_PLUGIN_ADD, dialogKey),
+                            getDialogValue());
+                    dialogInterface.cancel();
+                }
+            };
+
+    private String getDialogValue() {
+        try {
+            return String.valueOf(dialogValue.get(0));
+        } catch (JSONException e) {
+            Log.e(LOG_TAG, "Could not get dialogValue: " + e.getMessage());
+            Toast.makeText(SearchableActivity.this, e.getMessage(),
+                    Toast.LENGTH_LONG).show();
+            return null;
+        }
+    }
+
+    @Override
+    protected void onPrepareDialog(int id, Dialog dialog) {
+        try {
+            dialog.setTitle(dialogValue.get(1).toString());
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public void doSearch(String search) {
+        new SearchAsync().execute(search);
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        unregisterReceiver(apiCallReceiver);
+    }
+
+    class SearchAsync extends AsyncTask<String, Void, SearchResults> {
+        ProgressDialog progressDialog;
+        String query;
+
+        @Override
+        protected SearchResults doInBackground(String... strings) {
+            query = strings[0];
+            List<String> groups = new ArrayList<String>();
+            List<List<Map<String, JSONArray>>> children =
+                    new ArrayList<List<Map<String, JSONArray>>>();
+            AsyncTask<String, Void, String> call =
+                    new WebCallReturningAsyncTask(SearchableActivity.this)
+                            .execute(SEARCHABLE_PLUGINS);
+
+            try {
+                JSONArray array =
+                        new JSONObject(call.get()).getJSONObject("results")
+                                .getJSONArray("items");
+
+                for (int i = 0; i < array.length(); i++) {
+                    String pluginString =
+                            ((JSONArray) array.get(i)).get(0).toString();
+                    groups.add(pluginString);
+
+                    JSONArray resultArray = null;
+
+                    AsyncTask<String, Void, String> pluginResults =
+                            new WebCallReturningAsyncTask(SearchableActivity.this,
+                                    String
+                                            .format(SEARCH_PLUGIN_FORMATTED, pluginString))
+                                    .execute(
+                                            JSONHandler.createRequestJSON("text", query));
+
+                    List<Map<String, JSONArray>> list =
+                            new ArrayList<Map<String, JSONArray>>();
+                    if (pluginResults.get() != null &&
+                            pluginResults.get().trim().length() > 0) {
+                        resultArray = new JSONObject(pluginResults.get())
+                                .getJSONObject("results").getJSONArray("items");
+                        for (int j = 0; j < resultArray.length(); j++) {
+                            Map<String, JSONArray> item =
+                                    new HashMap<String, JSONArray>();
+                            item.put(pluginString,
+                                    (JSONArray) resultArray.get(j));
+                            list.add(item);
+                        }
+                    }
+                    children.add(list);
+                }
+            } catch (Exception e) {
+                Log.e(LOG_TAG, e.toString());
+                Toast.makeText(SearchableActivity.this, e.getMessage(),
+                        Toast.LENGTH_LONG).show();
+            }
+
+            SearchResults results = new SearchResults();
+            results.setGroups(groups);
+            results.setChildren(children);
+            return results;
+        }
+
+        @Override
+        protected void onPreExecute() {
+            super.onPreExecute();
+            progressDialog = ProgressDialog.show(SearchableActivity.this, null,
+                    getString(R.string.searching));
+        }
+
+        @Override
+        protected void onPostExecute(SearchResults results) {
+            super.onPostExecute(results);
+            listView.setAdapter(
+                    new GroupExpandableListAdapter(SearchableActivity.this,
+                            results.getGroups(), results.getChildren()));
+            progressDialog.dismiss();
+            Toast.makeText(SearchableActivity.this,
+                    String.format(getString(R.string.showingResults), query),
+                    Toast.LENGTH_SHORT).show();
+        }
+    }
+
+    class SearchResults {
+        List<String> groups;
+        List<List<Map<String, JSONArray>>> children;
+
+        public List<String> getGroups() {
+            return groups;
+        }
+
+        public void setGroups(List<String> groups) {
+            this.groups = groups;
+        }
+
+        public List<List<Map<String, JSONArray>>> getChildren() {
+            return children;
+        }
+
+        public void setChildren(List<List<Map<String, JSONArray>>> children) {
+            this.children = children;
+        }
+    }
+
+    private final String LOG_TAG = this.getClass().getName();
+}

=== added directory 'src/org/openlp/android/activity/preference'
=== added file 'src/org/openlp/android/activity/preference/ConnectionPreferenceActivity.java'
--- src/org/openlp/android/activity/preference/ConnectionPreferenceActivity.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/activity/preference/ConnectionPreferenceActivity.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,423 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.activity.preference;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.EditTextPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceCategory;
+import android.preference.PreferenceScreen;
+import android.text.InputType;
+import android.util.Log;
+import android.widget.Toast;
+import org.openlp.android.R;
+
+public class ConnectionPreferenceActivity extends PreferenceActivity {
+    private final String KEY_PREFERENCE_DISPLAY = "preferenceDisplay";
+    private final String KEY_SERVER_ID = "keyServerId";
+    private final String PREFERENCE_DISPLAY_SERVER = "displayServer";
+    private final String LOG_TAG = ConnectionPreferenceActivity.class.getName();
+
+    private PreferenceScreen preferenceScreen = null;
+    private boolean resume = true;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.empty_preferences);
+        getPreferenceManager()
+                .setSharedPreferencesName(getString(R.string.keySharedPreferences));
+        preferenceScreen = getPreferenceScreen() == null
+                ? getPreferenceManager().createPreferenceScreen(this)
+                : getPreferenceScreen();
+        preferenceScreen.removeAll();
+        String preferenceDisplay = getIntent().getStringExtra(KEY_PREFERENCE_DISPLAY);
+        if (preferenceDisplay != null
+                && preferenceDisplay.equalsIgnoreCase(PREFERENCE_DISPLAY_SERVER)) {
+            constructServerView(getIntent().getIntExtra(KEY_SERVER_ID, 1));
+        } else {
+            resume = false;
+            constructOverviewScreen();
+        }
+    }
+
+    private void constructOverviewScreen() {
+        getPreferenceScreen().removeAll();
+        Log.i(LOG_TAG, "constructOverviewScreen");
+        Preference configPref = new Preference(this);
+        configPref.setTitle(getString(R.string.connection_available_configurations));
+        configPref.setSummary(getString(R.string.connection_add_by_menu));
+        configPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+            @Override
+            public boolean onPreferenceClick(Preference preference) {
+                int nextId = getNextPrefId(
+                        getHostConfigMap(
+                                getPreferenceManager()
+                                        .getSharedPreferences().getAll()
+                        )
+                );
+                Preference newPreference = simpleClickablePreferenceFromHostConfig(
+                        new HostConfig(
+                                getString(R.string.connection_profile_server),
+                                nextId));
+                newPreference.setTitle(getString(R.string.connection_profile_new_server));
+                newPreference.setSummary(getString(R.string.connection_profile_not_saved));
+                preferenceScreen.addPreference(newPreference);
+                return true;
+            }
+        });
+        preferenceScreen.addPreference(configPref);
+        List<HostConfig> hostConfigs = getHostConfigs();
+        if (!hostConfigs.isEmpty()) {
+            for (final HostConfig config : getHostConfigs()) {
+                preferenceScreen.addPreference(
+                        simpleClickablePreferenceFromHostConfig(config));
+            }
+        }
+    }
+
+    private void constructServerView(int hostId) {
+        HostConfig hostConfig = hostConfigFromPreferencesForHostId(
+                hostId,
+                getHostConfigMap(
+                        getPreferenceManager()
+                                .getSharedPreferences()
+                                .getAll()
+                )
+        );
+        addPreferenceCategory(preferenceScreen, hostConfig);
+    }
+
+    private Preference simpleClickablePreferenceFromHostConfig(final HostConfig config) {
+        final Preference serverConfig = new Preference(this);
+        serverConfig.setTitle(config.title.getSummary());
+
+        Boolean useSsl = getPreferenceManager()
+                .getSharedPreferences()
+                .getBoolean(config.useSsl.getKey(), false);
+
+        serverConfig.setSummary(String.format(
+                "%s:%s %s",
+                config.hostAddress.getText(),
+                config.hostPort.getText(),
+                useSsl ? "(SSL)" : "")
+        );
+        serverConfig.setOnPreferenceClickListener(
+                new Preference.OnPreferenceClickListener() {
+                    @Override
+                    public boolean onPreferenceClick(Preference preference) {
+                        Intent serverConfigIntent = new Intent(
+                                ConnectionPreferenceActivity.this,
+                                ConnectionPreferenceActivity.class
+                        );
+                        serverConfigIntent.putExtra(KEY_PREFERENCE_DISPLAY,
+                                PREFERENCE_DISPLAY_SERVER);
+                        serverConfigIntent.putExtra(KEY_SERVER_ID, config.id);
+                        startActivity(serverConfigIntent);
+                        return true;
+                    }
+                });
+        return serverConfig;
+    }
+
+    private List<HostConfig> getHostConfigs() {
+        return hostConfigsFromPreferences(
+                getHostConfigMap(
+                        getPreferenceManager()
+                                .getSharedPreferences()
+                                .getAll()
+                )
+        );
+    }
+
+    private Map<String, ?> getHostConfigMap(Map<String, ?> preferences) {
+        Map<String, Object> configMap = new TreeMap<String, Object>();
+
+        List<String> sortedKeys = new ArrayList<String>(preferences.keySet());
+        Collections.sort(sortedKeys);
+        for (String key : sortedKeys) {
+            if (key.startsWith(HostConfig.KEY_PREFIX)) {
+                configMap.put(key, preferences.get(key));
+            }
+        }
+        return configMap;
+    }
+
+    private List<HostConfig> hostConfigsFromPreferences(Map<String, ?> preferences) {
+        List<Integer> hostIds = getHostIds(preferences);
+        List<HostConfig> hostConfigs = new ArrayList<HostConfig>();
+        for (Integer id : hostIds) {
+            hostConfigs.add(hostConfigFromPreferencesForHostId(id, preferences));
+        }
+        return hostConfigs;
+    }
+
+    private HostConfig hostConfigFromPreferencesForHostId(int hostId, Map<String, ?> preferences) {
+        Object titleValue = preferences.get(getHostConfigTitleKey(hostId));
+        String hostTitle = titleValue == null ? getString(R.string.connection_profile_server) : titleValue.toString();
+        HostConfig hostConfig = new HostConfig(
+                hostTitle, hostId
+        );
+        Object hostValueObject = preferences.get(hostConfig.hostAddress.getKey());
+        String hostValue = hostValueObject == null
+                ? getString(R.string.hostDefaultValue) : hostValueObject.toString();
+        hostConfig.hostAddress.setText(hostValue);
+        hostConfig.hostAddress.setSummary(hostValue);
+
+        Object portValueObject = preferences.get(hostConfig.hostPort.getKey());
+        String portValue = portValueObject == null
+                ? getString(R.string.portDefaultValue) : portValueObject.toString();
+        hostConfig.hostPort.setText(portValue);
+        hostConfig.hostPort.setSummary(portValue);
+
+        Object useridValueObject = preferences.get(hostConfig.userid.getKey());
+        String useridValue = useridValueObject == null
+                ? getString(R.string.useridDefaultValue) : useridValueObject.toString();
+        hostConfig.userid.setText(useridValue);
+        hostConfig.userid.setSummary(useridValue);
+
+        Object passwordValueObject = preferences.get(hostConfig.password.getKey());
+        String passwordValue = passwordValueObject == null
+                ? getString(R.string.passwordDefaultValue) : passwordValueObject.toString();
+        hostConfig.password.setText(passwordValue);
+        hostConfig.password.setSummary(passwordValue);
+        return hostConfig;
+    }
+
+    private int getNextPrefId(Map<String, ?> preferences) {
+        int max = 0;
+        for (String key : preferences.keySet()) {
+            int prefValue = Integer.valueOf(key.split("\\.")[2]);
+            max = prefValue > max ? prefValue : max;
+        }
+        return max + 1;
+    }
+
+    private List<Integer> getHostIds(Map<String, ?> preferences) {
+        Set<Integer> hashSet = new HashSet<Integer>();
+        for (String key : preferences.keySet()) {
+            hashSet.add(Integer.valueOf(key.split("\\.")[2]));
+        }
+        List<Integer> hostIds = new ArrayList<Integer>(hashSet);
+        Collections.sort(hostIds);
+        Log.i(LOG_TAG, "Got HostIds: " + hostIds);
+        return hostIds;
+    }
+
+    private boolean addPreferenceCategory(PreferenceScreen preferenceScreen, HostConfig hostConfig) {
+        PreferenceCategory preferenceCategory = new PreferenceCategory(this);
+        preferenceCategory.setTitle(hostConfig.title.getSummary());
+        preferenceCategory.setKey("key.preference.category");
+        preferenceScreen.addPreference(preferenceCategory);
+        preferenceCategory.addPreference(hostConfig.title);
+        preferenceCategory.addPreference(hostConfig.hostAddress);
+        preferenceCategory.addPreference(hostConfig.hostPort);
+        preferenceCategory.addPreference(hostConfig.useSsl);
+        preferenceCategory.addPreference(hostConfig.userid);
+        preferenceCategory.addPreference(hostConfig.password);
+        preferenceCategory.addPreference(hostConfig.remove);
+        preferenceCategory.addPreference(hostConfig.activate);
+        return true;
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        if (resume) {
+            Log.i(LOG_TAG, "Resuming...");
+        } else {
+            constructOverviewScreen();
+            Log.i(LOG_TAG, "Not resuming...");
+        }
+    }
+
+    private static String getHostConfigTitleKey(int id) {
+        return HostConfig.KEY_PREFIX + id + ".title";
+    }
+
+    private class HostConfig {
+        static final String KEY_PREFIX = "host.config.";
+        final int id;
+        final EditTextPreference title;
+        final EditTextPreference hostAddress;
+        final EditTextPreference hostPort;
+        final CheckBoxPreference useSsl;
+        final EditTextPreference userid;
+        final EditTextPreference password;
+        final Preference remove;
+        final Preference activate;
+
+        HostConfig(String sTitle, int id) {
+            this.id = id;
+            title = new EditTextPreference(ConnectionPreferenceActivity.this);
+            title.setSummary(getString(R.string.url));
+            title.getEditText().setHint(getString(R.string.url));
+            title.setTitle(getString(R.string.connection_profile_title));
+            title.setKey(KEY_PREFIX + id + ".title");
+            title.setDefaultValue(getString(R.string.url));
+            title.setSummary(sTitle);
+            title.setDialogTitle(getString(R.string.connection_profile_title));
+            title.setOnPreferenceChangeListener(onPreferenceChangeListener);
+
+            hostAddress = new EditTextPreference(ConnectionPreferenceActivity.this);
+            hostAddress.setTitle(getString(R.string.urlHint));
+            hostAddress.setKey(KEY_PREFIX + id + ".address");
+            hostAddress.getEditText().setHint(R.string.urlHint);
+            hostAddress.setSummary(getString(R.string.urlHint));
+            hostAddress.setDialogTitle(getString(R.string.urlHint));
+            hostAddress.getEditText().setInputType(InputType.TYPE_TEXT_VARIATION_URI);
+            hostAddress.setOnPreferenceChangeListener(onPreferenceChangeListener);
+
+            hostPort = new EditTextPreference(ConnectionPreferenceActivity.this);
+            hostPort.setTitle(getString(R.string.port));
+            hostPort.setKey(KEY_PREFIX + id + ".port");
+            hostPort.setSummary(getString(R.string.port));
+            hostPort.setDialogTitle(getString(R.string.port));
+            hostPort.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
+            hostPort.setDefaultValue(getString(R.string.portDefaultValue));
+            hostPort.setOnPreferenceChangeListener(onPreferenceChangeListener);
+
+            useSsl = new CheckBoxPreference(ConnectionPreferenceActivity.this);
+            useSsl.setTitle(getString(R.string.connection_profile_ssl_use));
+            useSsl.setSummary(getString(R.string.connection_profile_ssl_summary));
+            useSsl.setKey(KEY_PREFIX + id + ".usessl");
+
+            userid = new EditTextPreference(ConnectionPreferenceActivity.this);
+            userid.setSummary(getString(R.string.connection_userid));
+            userid.getEditText().setHint(getString(R.string.connection_userid));
+            userid.setTitle(getString(R.string.connection_userid));
+            userid.setKey(KEY_PREFIX + id + ".userid");
+            userid.setDefaultValue(getString(R.string.useridDefaultValue));
+            userid.setSummary(getString(R.string.useridDefaultValue));
+            userid.setDialogTitle(getString(R.string.connection_userid));
+            userid.setOnPreferenceChangeListener(onPreferenceChangeListener);
+
+            password = new EditTextPreference(ConnectionPreferenceActivity.this);
+            password.setSummary(getString(R.string.connection_password));
+            password.getEditText().setHint(getString(R.string.connection_password));
+            password.setTitle(getString(R.string.connection_password));
+            password.setKey(KEY_PREFIX + id + ".password");
+            password.setDefaultValue(getString(R.string.passwordDefaultValue));
+            password.setSummary(getString(R.string.passwordDefaultValue));
+            password.setDialogTitle(getString(R.string.connection_password));
+            password.setOnPreferenceChangeListener(onPreferenceChangeListener);
+
+            remove = new Preference(ConnectionPreferenceActivity.this);
+            remove.setTitle(getString(R.string.connection_profile_remove));
+            remove.setSummary(getString(R.string.connection_profile_remove_summary));
+            remove.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+                @Override
+                public boolean onPreferenceClick(Preference preference) {
+                    SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
+                    SharedPreferences.Editor editor = prefs.edit();
+                    editor.remove(hostAddress.getKey());
+                    editor.remove(hostPort.getKey());
+                    editor.remove(title.getKey());
+                    editor.remove(useSsl.getKey());
+                    editor.remove(userid.getKey());
+                    editor.remove(password.getKey());
+                    editor.commit();
+                    ConnectionPreferenceActivity.this.onBackPressed();
+                    return false;
+                }
+            });
+
+            activate = new Preference(ConnectionPreferenceActivity.this);
+            activate.setTitle(getString(R.string.connection_profile_activate));
+            activate.setSummary(getString(R.string.connection_profile_summary_activate));
+            activate.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+                @Override
+                public boolean onPreferenceClick(Preference preference) {
+                    SharedPreferences preferences = getPreferenceManager().getSharedPreferences();
+                    SharedPreferences.Editor editor = preferences.edit();
+                    String host = preferences.getString(hostAddress.getKey(),
+                            getString(R.string.hostDefaultValue));
+                    editor.putString(getString(R.string.keyHost), host);
+                    String port = preferences.getString(hostPort.getKey(),
+                            getString(R.string.portDefaultValue));
+                    editor.putString(getString(R.string.keyPort), port);
+                    Boolean bUseSsl = preferences.getBoolean(useSsl.getKey(), false);
+                    editor.putBoolean(getString(R.string.key_ssl_use), bUseSsl);
+                    String suserid = preferences.getString(userid.getKey(), getString(R.string.useridDefaultValue));
+                    editor.putString(getString(R.string.key_userid), suserid);
+                    String spassword = preferences.getString(password.getKey(),
+                            getString(R.string.passwordDefaultValue));
+                    editor.putString(getString(R.string.key_password), spassword);
+
+                    editor.putString(
+                            getString(R.string.key_profile_selected_title),
+                            preferences.getString(
+                                    title.getKey(),
+                                    getString(R.string.url)));
+
+                    editor.commit();
+                    Toast.makeText(ConnectionPreferenceActivity.this,
+                            String.format(
+                                    "%s: %s\n[%s:%s] %s",
+                                    getString(R.string.connection_profile_active_toast),
+                                    HostConfig.this.title.getText(),
+                                    host,
+                                    port,
+                                    useSsl.isChecked() ? "(SSL)" : ""
+                            ),
+                            Toast.LENGTH_LONG).show();
+                    return false;
+                }
+            });
+        }
+
+        @Override
+        public String toString() {
+            return "HostConfig{" +
+                    "id=" + id +
+                    ", title='" + title + '\'' +
+                    ", hostAddress=" + hostAddress.getKey() +
+                    ", hostPort=" + hostPort.getKey() +
+                    '}';
+        }
+
+        Preference.OnPreferenceChangeListener onPreferenceChangeListener =
+                new Preference.OnPreferenceChangeListener() {
+                    @Override
+                    public boolean onPreferenceChange(Preference preference, Object o) {
+                        preference.setSummary("" + o);
+                        if (preference.getKey().endsWith(".title")) {
+                            preferenceScreen
+                                    .findPreference("key.preference.category")
+                                    .setTitle("" + o);
+                        }
+                        return true;
+                    }
+                };
+    }
+}

=== added file 'src/org/openlp/android/activity/preference/Preferences.java'
--- src/org/openlp/android/activity/preference/Preferences.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/activity/preference/Preferences.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,190 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.activity.preference;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.preference.DialogPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceCategory;
+import android.preference.PreferenceScreen;
+import android.util.Log;
+import org.openlp.android.R;
+
+/**
+ * Credits: http://www.kaloer.com/android-preferences
+ * http://androidpartaker.wordpress.com/2010/07/11/android-preferences/
+ */
+public class Preferences extends PreferenceActivity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Log.d(LOG_TAG, "Launching preferences");
+        buildPreferences();
+    }
+
+    private void buildPreferences() {
+        if (getPreferenceScreen() != null) getPreferenceScreen().removeAll();
+
+        getPreferenceManager()
+                .setSharedPreferencesName(getString(R.string.keySharedPreferences));
+
+        addPreferencesFromResource(R.xml.preferences);
+        final SharedPreferences sharedPreferences = getPreferenceManager()
+                .getSharedPreferences();
+
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(sharedPreferences.getString(
+                getString(R.string.keyHost),
+                getString(R.string.notSet)));
+        stringBuilder.append(":");
+
+        Boolean useSsl = sharedPreferences.getBoolean(
+                getString(R.string.key_ssl_use), false);
+        stringBuilder.append(
+                String.format("%s %s",
+                        sharedPreferences.getString(
+                                getString(R.string.keyPort),
+                                getString(R.string.notSet)), useSsl ? "(SSL)" : ""));
+
+        final Preference hostPreference = findPreference(getString(R.string.keyHost));
+        hostPreference.setTitle(
+                getPreferenceManager().getSharedPreferences()
+                        .getString(
+                                getString(R.string.key_profile_selected_title),
+                                getString(R.string.url)
+                        )
+        );
+        hostPreference.setSummary(stringBuilder.toString());
+
+        PackageManager manager = this.getPackageManager();
+        String version = "";
+        try {
+            PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0);
+            version = info.versionName;
+        } catch (PackageManager.NameNotFoundException ignored) {
+        }
+
+        String date = new SimpleDateFormat("yyyy").format(new Date());
+
+        //Preferences time! (we build the preferences)
+        Preference about = getPreference(getString(R.string.about_text), version, null);
+        about.setSelectable(false);
+        Preference openlpLink = getPreference(
+                getString(R.string.about_display_3),
+                getString(R.string.about_display_1),
+                new Intent(Intent.ACTION_VIEW, Uri.parse("http://openlp.org/";)));
+
+        StringBuilder html = new StringBuilder();
+        html.append(getString(R.string.about_display_4));
+        html.append(" © 2004-").append(date).append(" Raoul Snyman\n");
+        html.append(getString(R.string.about_display_5));
+        html.append(" © 2004-").append(date);
+        html.append("\nTim Bentley, Johan Mynhardt, Samuel Sjöbergsson");
+
+        Preference copyright = getPreference(
+                getString(R.string.about_display_4),
+                html.toString(), null);
+        copyright.setSelectable(false);
+
+        DialogPreference license = new MyDialogPreference(
+                this,
+                getString(R.string.about_display_6),
+                String.format(
+                        "%s\n%s",
+                        getString(R.string.about_display_7),
+                        getString(R.string.about_display_8)
+                )
+        );
+
+
+        PreferenceScreen preferenceScreen = getPreferenceScreen();
+        addPreferenceCategory(preferenceScreen, getString(R.string.about),
+                about, openlpLink, copyright, license);
+
+        Preference preference = findPreference(getString(R.string.keyHost));
+        preference.setIntent(new Intent(this, ConnectionPreferenceActivity.class));
+    }
+
+    private boolean addPreferenceCategory(PreferenceScreen preferenceScreen,
+                                          String titleCategory, Preference... preferences) {
+
+        boolean addPreference = false;
+
+        for (Preference preference : preferences) {
+            if (preference != null)
+                addPreference = true;
+        }
+
+        if (addPreference) {
+            PreferenceCategory preferenceCategory = new PreferenceCategory(this);
+            preferenceCategory.setTitle(titleCategory);
+            preferenceScreen.addPreference(preferenceCategory);
+            for (Preference preference : preferences) {
+                if (preference != null)
+                    preferenceCategory.addPreference(preference);
+            }
+            return true;
+        } else
+            return false;
+    }
+
+    private Preference getPreference(String title, String summary, Intent intent) {
+        Preference pref = new Preference(this);
+        pref.setTitle(title);
+        pref.setSummary(summary);
+        if (intent != null)
+            pref.setIntent(intent);
+        return pref;
+    }
+
+    public class MyDialogPreference extends DialogPreference {
+        public MyDialogPreference(Context context, String title, String text) {
+            super(context, null);
+            this.setTitle(title);
+            this.setDialogMessage(text);
+        }
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        Log.d(LOG_TAG, "Destroying preferences");
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        Log.i(LOG_TAG, "Resuming Preferences...");
+        buildPreferences();
+    }
+
+    private final String LOG_TAG = Preferences.class.getName();
+}

=== added directory 'src/org/openlp/android/api'
=== added file 'src/org/openlp/android/api/Api.java'
--- src/org/openlp/android/api/Api.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/api/Api.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,130 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.api;
+
+/**
+ * <h1>Routes:</h1>
+ * <p/>
+ * <p/>
+ * <pre>
+ * ``/``
+ * Go to the web interface.
+ *
+ * ``/files/{filename}``
+ *
+ * ``/api/poll``
+ * {"results": {"type": "controller"}}
+ * Or, if there were no results, False::
+ * {"results": False}
+ *
+ * ``/api/display/{hide|show}``
+ * Blank or unblank the screen.
+ *
+ * ``/api/alert``
+ * {"request": {"text": "<your alert text>"}}
+ * ``/api/controller/{live|preview}/{action}``
+ * ``next``
+ * Load the next slide.
+ *
+ * ``previous``
+ * Load the previous slide.
+ *
+ * ``set``
+ * Set a specific slide. Requires an id return in a JSON-encoded dict like
+ * this::
+ *
+ * {"request": {"id": 1}}
+ *
+ * ``first``
+ * Load the first slide.
+ *
+ * ``last``
+ * Load the last slide.
+ *
+ * ``text``
+ * Fetches the text of the current song. The output is a JSON-encoded
+ * dict which looks like this::
+ *
+ * {"result": {"slides": ["...", "..."]}}
+ *
+ * ``/api/service/{action}``
+ * Perform ``{action}`` on the service manager (e.g. go live). Data is
+ * passed as a json-encoded ``data`` parameter. Valid actions are:
+ *
+ * ``next``
+ * Load the next item in the service.
+ *
+ * ``previous``
+ *
+ * ``set``
+ * Set a specific item in the service. Requires an id returned in a
+ * JSON-encoded dict like this::
+ *
+ * {"request": {"id": 1}}
+ *
+ * ``list``
+ * Request a list of items in the service. Returns a list of items in the
+ * current service in a JSON-encoded dict like this::
+ *
+ * {"results": {"items": [{...}, {...}]}}
+ * """
+ * </pre>
+ */
+
+public interface Api {
+
+    public final String LIVE_BASE = "/api/controller/live/";
+    public final String LIVE_NEXT = "/api/controller/live/next";
+    public final String LIVE_PREVIOUS = "/api/controller/live/previous";
+    public final String LIVE_TEXT = "/api/controller/live/text";
+    public final String LIVE_SET = "/api/controller/live/set?data=";
+
+    /**
+     * Use with {@link #SERVICE_BASE} + (previous|next)
+     */
+    public final String SERVICE_BASE = "/api/service/";
+    // todo: cleanup, use {@link #SERVICE_BASE}
+    public final String SERVICE_LIST = "/api/service/list";
+    public final String SERVICE_SET = "/api/service/set?data=";
+
+    /**
+     * Use with {@link #DISPLAY_BASE} + (blank|theme|desktop|show)
+     */
+    public final String DISPLAY_BASE = "/api/display/";
+    public final String POLL_STATUS = "/api/poll";
+
+    public final String ALERT = "/api/alert?data=";
+
+    public final String SEARCHABLE_PLUGINS = "/api/plugin/search";
+    /**
+     * This is a special string that uses the String.format() method. See
+     * {@link String#format(String, Object...)}
+     */
+    public final String SEARCH_PLUGIN_FORMATTED = "/api/%s/search?data=";
+    /**
+     * Match intent extra key with regex since multiple plugins can be inserted
+     */
+    public final String SEARCH_PLUGIN_ADD = "/api/%s/add?data=";
+    /**
+     * Match intent extra key with regex since multiple plugins can be inserted
+     */
+    public final String SEARCH_PLUGIN_LIVE = "/api/%s/live?data=";
+}

=== added directory 'src/org/openlp/android/data'
=== added file 'src/org/openlp/android/data/HttpReturn.java'
--- src/org/openlp/android/data/HttpReturn.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/data/HttpReturn.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,53 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.data;
+
+import android.content.Context;
+import org.openlp.android.R;
+
+public class HttpReturn {
+    private int return_code = 0;
+    private String data = null;
+    private Context context;
+
+    public HttpReturn(int return_code, String data, Context context) {
+        this.return_code = return_code;
+        this.data = data;
+        this.context = context;
+    }
+
+    public String getData() {
+        return this.data;
+    }
+
+    public boolean isError() {
+        return return_code != 0;
+    }
+
+    public String getErrorMessage(String message) {
+        return return_code == 401 ? this.context.getString(R.string.httpreturn_unauthorised) : message;
+    }
+
+    @Override
+    public String toString() {
+        return "HttpReturn{" + "data='" + data + '\'' + ", return code=" + return_code + '}';
+    }
+}

=== added file 'src/org/openlp/android/data/Poll.java'
--- src/org/openlp/android/data/Poll.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/data/Poll.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,121 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.data;
+
+public class Poll {
+
+    private int slide;
+    private String item;
+    private int service = -1;
+    private boolean twelveHourDisplay = false;
+    private boolean blankedDisplayed = false;
+    private boolean themeDisplayed = false;
+    private boolean desktopDisplayed = false;
+    private boolean displayHidden = false;
+
+    public int getSlide() {
+        return slide;
+    }
+
+    public void setSlide(int slide) {
+        this.slide = slide;
+    }
+
+    public String getItem() {
+        return item;
+    }
+
+    public void setItem(String item) {
+        this.item = item;
+    }
+
+    public boolean isTwelveHourDisplay() {
+        return twelveHourDisplay;
+    }
+
+    public void setTwelveHourDisplay(boolean twelveHourDisplay) {
+        this.twelveHourDisplay = twelveHourDisplay;
+    }
+
+    public boolean isBlankedDisplayed() {
+        return blankedDisplayed;
+    }
+
+    public void setBlankedDisplayed(boolean blankedDisplayed) {
+        this.blankedDisplayed = blankedDisplayed;
+        if (blankedDisplayed) {
+            this.displayHidden = true;
+        }
+    }
+
+    public boolean isThemeDisplayed() {
+        return themeDisplayed;
+    }
+
+    public void setThemeDisplayed(boolean themeDisplayed) {
+        this.themeDisplayed = themeDisplayed;
+        if (themeDisplayed) {
+            this.displayHidden = true;
+        }
+    }
+
+    public boolean isDesktopDisplayed() {
+        return desktopDisplayed;
+    }
+
+    public void setDesktopDisplayed(boolean desktopDisplayed) {
+        this.desktopDisplayed = desktopDisplayed;
+        if (desktopDisplayed) {
+            this.displayHidden = true;
+        }
+    }
+
+    public boolean isDisplayHidden() {
+        return displayHidden;
+    }
+
+    public void setDisplayHidden(boolean displayHidden) {
+        this.displayHidden = displayHidden;
+    }
+
+    public int getService() {
+        return service;
+    }
+
+    public void setService(int service) {
+        this.service = service;
+    }
+
+    @Override
+    public String toString() {
+        return "Poll{" +
+                "slide=" + slide +
+                ", item='" + item + '\'' +
+                ", service=" + service +
+                ", twelveHourDisplay=" + twelveHourDisplay +
+                ", blankedDisplayed=" + blankedDisplayed +
+                ", themeDisplayed=" + themeDisplayed +
+                ", desktopDisplayed=" + desktopDisplayed +
+                ", displayHidden=" + displayHidden +
+                '}';
+    }
+}

=== added file 'src/org/openlp/android/data/SlideItem.java'
--- src/org/openlp/android/data/SlideItem.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/data/SlideItem.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,66 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.data;
+
+public class SlideItem {
+    private String text;
+    private boolean selected;
+    private String tag;
+    private String html;
+
+    public String getText() {
+        return text;
+    }
+
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    public boolean isSelected() {
+        return selected;
+    }
+
+    public void setSelected(boolean selected) {
+        this.selected = selected;
+    }
+
+    public String getTag() {
+        return tag;
+    }
+
+    public void setTag(String tag) {
+        this.tag = tag;
+    }
+
+    public String getHtml() {
+        return html;
+    }
+
+    public void setHtml(String html) {
+        this.html = html;
+    }
+
+    @Override
+    public String toString() {
+        return "SlidePOJO{" + "text='" + text + '\'' + ", selected=" + selected
+                + ", tag='" + tag + '\'' + ", html='" + html + '\'' + '}';
+    }
+}

=== added directory 'src/org/openlp/android/service'
=== added file 'src/org/openlp/android/service/ApiCallIntent.java'
--- src/org/openlp/android/service/ApiCallIntent.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/service/ApiCallIntent.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,286 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.service;
+
+import android.app.IntentService;
+import android.content.Intent;
+import android.util.Log;
+import org.openlp.android.R;
+import org.openlp.android.activity.Search;
+import org.openlp.android.activity.SearchService;
+import org.openlp.android.api.Api;
+import org.openlp.android.data.HttpReturn;
+import org.openlp.android.utility.JSONHandler;
+import org.openlp.android.utility.OpenLPHttpClient;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+
+/**
+ * The purpose of this class is to provide a service that is separate from the UI, and assist in fetching information
+ * from an OpenLP server.
+ */
+public class ApiCallIntent extends IntentService implements SearchService {
+    public static final String API_CALL_RECEIVE =
+            ApiCallIntent.class.getName().concat(".Receive");
+
+    public ApiCallIntent() {
+        super(ApiCallIntent.class.getName());
+    }
+
+    /**
+     * apiPart is one of the strings set in {@link org.openlp.android.api.Api}
+     * apiCall is when the requested apiPart takes input
+     *
+     * @param intent The intent requesting data
+     */
+    @Override
+    protected void onHandleIntent(Intent intent) {
+        Log.v(LOG_TAG, "Executing WebCallIntent from: " + intent);
+        Intent apiCallReceiverIntent = null;
+
+        try {
+            if (intent.hasExtra(Api.ALERT)) {
+                String alertData = JSONHandler.createRequestJSON("text",
+                        intent.getStringExtra(Api.ALERT));
+                apiCallReceiverIntent = executeAlert(alertData);
+            } else if (intent.hasExtra(Api.SERVICE_BASE)) {
+                apiCallReceiverIntent = executeNavigation(Api.SERVICE_BASE,
+                        intent.getStringExtra(Api.SERVICE_BASE));
+            } else if (intent.hasExtra(Api.LIVE_BASE)) {
+                apiCallReceiverIntent = executeNavigation(Api.LIVE_BASE,
+                        intent.getStringExtra(Api.LIVE_BASE));
+            } else if (intent.hasExtra(Api.DISPLAY_BASE)) {
+                apiCallReceiverIntent = executeNavigation(Api.DISPLAY_BASE,
+                        intent.getStringExtra(Api.DISPLAY_BASE));
+            } else if (intent.hasExtra(Api.POLL_STATUS)) {
+                apiCallReceiverIntent = executePoll();
+            } else if (intent.hasExtra(Api.LIVE_TEXT)) {
+                apiCallReceiverIntent = executeItemFetch(Api.LIVE_TEXT);
+            } else if (intent.hasExtra(Api.SERVICE_LIST)) {
+                apiCallReceiverIntent = executeItemFetch(Api.SERVICE_LIST);
+            } else if (intent.hasExtra(Api.LIVE_SET)) {
+                apiCallReceiverIntent = executeSetData(Api.LIVE_SET,
+                        intent.getIntExtra(Api.LIVE_SET, 0));
+            } else if (intent.hasExtra(Api.SERVICE_SET)) {
+                apiCallReceiverIntent = executeSetData(Api.SERVICE_SET,
+                        intent.getIntExtra(Api.SERVICE_SET, 0));
+            }
+
+            if (apiCallReceiverIntent == null) {
+
+                // match wildcard intent keys
+                for (String key : intent.getExtras().keySet()) {
+                    if (key.matches("/api/\\w+\\W?\\w+/live\\?data=") ||
+                            key.matches("/api/\\w+\\W?\\w+/add\\?data=")) {
+                        apiCallReceiverIntent = getSearchPluginIntent(key,
+                                intent.getStringExtra(key));
+                        break;
+                    }
+                }
+
+                if (apiCallReceiverIntent == null) {
+                    String nyiMessage =
+                            "Not yet Implemented for calls with these extras: " +
+                                    intent.getExtras();
+                    Log.w(LOG_TAG, nyiMessage);
+                    apiCallReceiverIntent = new WebCallReceiverIntent(
+                            new WebCallReceiverIntentError(nyiMessage));
+                }
+            }
+        } catch (Exception e) {
+            Log.e(LOG_TAG, e.toString());
+            apiCallReceiverIntent = new WebCallReceiverIntent(
+                    new WebCallReceiverIntentError(String
+                            .format("%s: %s", e.getClass().getSimpleName(),
+                                    e.getMessage())));
+            Log.w(LOG_TAG,
+                    "Sending Broadcast with error: " + apiCallReceiverIntent);
+        }
+        sendBroadcast(apiCallReceiverIntent);
+    }
+
+    @Override
+    public Intent getSearchPluginIntent(String apiBase, String apiData)
+            throws JSONHandler.JSONHandlerException, IOException,
+            URISyntaxException {
+        Intent apiCallSearchReceiverIntent =
+                new WebCallReceiverIntent(apiBase, apiData);
+        apiCallSearchReceiverIntent
+                .setAction(Search.ACTION); //override default receiver action
+        String jsonRequest = JSONHandler.createRequestJSON("id", apiData);
+
+        OpenLPHttpClient httpClient =
+                getApiConfiguredClient(apiBase, jsonRequest);
+        HttpReturn result = httpClient.handleExecute();
+
+        if (result.isError()) {
+            apiCallSearchReceiverIntent = new WebCallReceiverIntent(
+                    new WebCallReceiverIntentError(result.getErrorMessage(
+                            String.valueOf(R.string.apiCallIntent_search))));
+            apiCallSearchReceiverIntent.setAction(Search.ACTION);
+        } else {
+            Log.d(LOG_TAG, "searchPluginCall result: " + result.getData());
+        }
+
+        return apiCallSearchReceiverIntent;
+    }
+
+    private Intent executeAlert(String alertData)
+            throws IOException, URISyntaxException {
+        Intent apiCallReceiverIntent =
+                new WebCallReceiverIntent(Api.ALERT, alertData);
+        OpenLPHttpClient httpClient =
+                getApiConfiguredClient(Api.ALERT, alertData);
+
+        HttpReturn result = httpClient.handleExecute();
+        if (result.isError()) {
+            apiCallReceiverIntent = new WebCallReceiverIntent(
+                    new WebCallReceiverIntentError(result.getErrorMessage(
+                            String.valueOf(R.string.apiCallIntent_alert))));
+        } else {
+            Log.d(LOG_TAG, "Alert result: " + result.getData());
+        }
+
+        return apiCallReceiverIntent;
+    }
+
+    private Intent executeNavigation(final String apiBase, final String apiData)
+            throws IOException, URISyntaxException {
+        Intent apiCallReceiverIntent =
+                new WebCallReceiverIntent(apiBase, apiData);
+        OpenLPHttpClient httpClient = getApiConfiguredClient(apiBase, apiData);
+
+        HttpReturn result = httpClient.handleExecute();
+        if (result.isError()) {
+            apiCallReceiverIntent = new WebCallReceiverIntent(
+                    new WebCallReceiverIntentError(result.getErrorMessage(
+                            String.valueOf(R.string.apiCallIntent_navigation))));
+        } else {
+            Log.d(LOG_TAG, "Navigation result: " + result.getData());
+        }
+
+        return apiCallReceiverIntent;
+    }
+
+    private Intent executeSetData(String apiBase, int position)
+            throws JSONHandler.JSONHandlerException, IOException,
+            URISyntaxException {
+        String request = JSONHandler.createRequestJSON("id", Integer.toString(position));
+        Intent apiCallreceiverIntent = new WebCallReceiverIntent(apiBase, request);
+        OpenLPHttpClient httpClient = getApiConfiguredClient(apiBase, request);
+
+        HttpReturn result = httpClient.handleExecute();
+        if (result.isError()) {
+            String message = String.format(
+                    "Unexpected null result while setting list data. apiBase(%s), position(%s)",
+                    apiBase, position);
+            Log.e(LOG_TAG, message);
+            apiCallreceiverIntent = new WebCallReceiverIntent(
+                    new WebCallReceiverIntentError(result.getErrorMessage(
+                            String.valueOf(R.string.apiCallIntent_list_data))));
+        } else {
+            Log.d(LOG_TAG, "setData result: " + result.getData());
+        }
+
+        return apiCallreceiverIntent;
+    }
+
+    private Intent executePoll() throws IOException, URISyntaxException,
+            JSONHandler.JSONHandlerException {
+        Intent apiCallReceiverIntent = new WebCallReceiverIntent(Api.POLL_STATUS, "");
+        OpenLPHttpClient httpClient = getApiConfiguredClient(Api.POLL_STATUS);
+
+        HttpReturn pollJson = httpClient.handleExecute();
+        if (pollJson.isError()) {
+            apiCallReceiverIntent = new WebCallReceiverIntent(
+                    new WebCallReceiverIntentError(pollJson.getErrorMessage(
+                            String.valueOf(R.string.apiCallIntent_poll))));
+        } else {
+            Log.d(LOG_TAG, "Poll result: " + pollJson);
+            apiCallReceiverIntent.putExtra("pollJson", pollJson.getData());
+        }
+        return apiCallReceiverIntent;
+    }
+
+    private Intent executeItemFetch(final String apiBase)
+            throws IOException, URISyntaxException {
+        Intent apiCallReceiverIntent = new WebCallReceiverIntent(apiBase, "");
+        OpenLPHttpClient httpClient = getApiConfiguredClient(apiBase);
+
+        HttpReturn itemsJson = httpClient.handleExecute();
+        if (itemsJson.isError()) {
+            apiCallReceiverIntent = new WebCallReceiverIntent(
+                    new WebCallReceiverIntentError(
+                            itemsJson.getErrorMessage(String.valueOf(R.string.apiCallIntent_fetch))));
+        } else {
+            Log.d(LOG_TAG, "Items JSON: " + itemsJson);
+            apiCallReceiverIntent.putExtra("itemsJson", itemsJson.getData());
+        }
+        return apiCallReceiverIntent;
+    }
+
+    private OpenLPHttpClient getApiConfiguredClient(String apiBase,
+                                                    String partData) throws MalformedURLException, URISyntaxException {
+        OpenLPHttpClient httpClient =
+                new OpenLPHttpClient(getApplicationContext());
+        httpClient.setUrl(String.format("%s%s", apiBase, partData));
+        return httpClient;
+    }
+
+    private OpenLPHttpClient getApiConfiguredClient(String apiBase)
+            throws MalformedURLException, URISyntaxException {
+        return getApiConfiguredClient(apiBase, "");
+    }
+
+    private final String LOG_TAG = ApiCallIntent.class.getName();
+
+    class WebCallReceiverIntent extends Intent {
+        WebCallReceiverIntent() {
+            setDefaults();
+        }
+
+        WebCallReceiverIntent(WebCallReceiverIntentError error) {
+            setDefaults();
+            WebCallReceiverIntent.this.putExtra("error", error.message);
+        }
+
+        WebCallReceiverIntent(String apiBase, String apiData) {
+            setDefaults();
+            WebCallReceiverIntent.this.putExtra("apiBase", apiBase);
+            WebCallReceiverIntent.this.putExtra("apiData", apiData);
+        }
+
+        private void setDefaults() {
+            WebCallReceiverIntent.this.setAction(API_CALL_RECEIVE);
+            WebCallReceiverIntent.this.addCategory(Intent.CATEGORY_DEFAULT);
+        }
+    }
+
+    class WebCallReceiverIntentError {
+        final String message;
+
+        WebCallReceiverIntentError(String error) {
+            this.message = error;
+        }
+    }
+}

=== added file 'src/org/openlp/android/service/PingIntent.java'
--- src/org/openlp/android/service/PingIntent.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/service/PingIntent.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,91 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.service;
+
+import android.app.Service;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.res.Resources;
+import android.os.Handler;
+import android.os.IBinder;
+import android.util.Log;
+import org.openlp.android.R;
+import org.openlp.android.api.Api;
+
+public class PingIntent extends Service {
+
+    private Handler handler = new Handler();
+    private Integer delay;
+
+    public PingIntent() {
+        super();
+        Log.v(LOG_TAG, "Instantiating PingIntent...");
+
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
+
+    @Override
+    public void onStart(Intent intent, int startId) {
+        String PREFERENCES_KEY =
+                getApplicationContext().getString(R.string.keySharedPreferences);
+        SharedPreferences preferences = getApplicationContext()
+                .getSharedPreferences(PREFERENCES_KEY, MODE_PRIVATE);
+        Resources resources = getApplicationContext().getResources();
+        delay = Integer.valueOf(
+                resources.getString(R.string.backgroundRefreshDefaultValue));
+        Log.v(LOG_TAG, "Starting PingIntent...");
+        super.onStart(intent, startId);
+        delay = Integer.parseInt(preferences
+                .getString(resources.getString(R.string.keyBackgroundService),
+                        delay.toString()));
+
+        Log.d(LOG_TAG, "PingIntent delay: " + delay);
+        handler.removeCallbacks(r);
+        handler.postDelayed(r, delay);
+    }
+
+    Runnable r = new Runnable() {
+
+        @Override
+        public void run() {
+            Intent apiCallPingIntent =
+                    new Intent(getApplicationContext(), ApiCallIntent.class);
+            apiCallPingIntent.putExtra(Api.POLL_STATUS, "");
+            startService(apiCallPingIntent);
+            if (delay > 0) {
+                handler.postDelayed(r, delay);
+            }
+        }
+    };
+
+    @Override
+    public void onDestroy() {
+        Log.v(LOG_TAG, "Stopping PingIntent...");
+        handler.removeCallbacks(r);
+        super.onDestroy();
+    }
+
+    private static final String LOG_TAG = PingIntent.class.getName();
+}

=== added directory 'src/org/openlp/android/utility'
=== added file 'src/org/openlp/android/utility/GroupExpandableListAdapter.java'
--- src/org/openlp/android/utility/GroupExpandableListAdapter.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/utility/GroupExpandableListAdapter.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,124 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.utility;
+
+import android.app.Activity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseExpandableListAdapter;
+import android.widget.TextView;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.openlp.android.R;
+
+import java.util.List;
+import java.util.Map;
+
+public class GroupExpandableListAdapter extends BaseExpandableListAdapter {
+    List<String> groups;
+    List<List<Map<String, JSONArray>>> children;
+    LayoutInflater inflater;
+    Activity context;
+
+    public GroupExpandableListAdapter(Activity context, List<String> groups,
+                                      List<List<Map<String, JSONArray>>> children) {
+        this.context = context;
+        this.groups = groups;
+        this.children = children;
+        inflater = context.getLayoutInflater();
+    }
+
+    @Override
+    public int getGroupCount() {
+        return groups.size();
+    }
+
+    @Override
+    public int getChildrenCount(int position) {
+        return children.get(position).size();
+    }
+
+    @Override
+    public Object getGroup(int position) {
+        return groups.get(position);
+    }
+
+    @Override
+    public Object getChild(int rootPosition, int childPosition) {
+        return children.get(rootPosition).get(childPosition);
+    }
+
+    @Override
+    public long getGroupId(int position) {
+        return groups.indexOf(groups.get(position));
+    }
+
+    @Override
+    public long getChildId(int i, int i1) {
+        List<Map<String, JSONArray>> child = children.get(i);
+        return child.indexOf(child.get(i1));
+    }
+
+    @Override
+    public boolean hasStableIds() {
+        return false;
+    }
+
+    @Override
+    public View getGroupView(int position, boolean b, View view,
+                             ViewGroup viewGroup) {
+        if (view == null) {
+            view = inflater.inflate(R.layout.group_parent, null);
+            view.setClickable(false);
+        }
+        TextView textView = (TextView) view.findViewById(R.id.groupParentText);
+        TextView numberView = (TextView) view
+                .findViewById(R.id.parentChildCount);
+        numberView.setText(String.format("%s", children.get(position).size()));
+        textView.setText(groups.get(position));
+        return view;
+    }
+
+    @Override
+    public View getChildView(int groupPosition, int childPosition, boolean b,
+                             View view, ViewGroup viewGroup) {
+        if (view == null) {
+            view = inflater.inflate(R.layout.group_child, null);
+            view.setClickable(false);
+        }
+        TextView childView = (TextView) view.findViewById(R.id.groupChildText);
+        List<Map<String, JSONArray>> childItem = children.get(groupPosition);
+        Map<String, JSONArray> mapItem = childItem.get(childPosition);
+        JSONArray jsonItem = mapItem.get(groups.get(groupPosition));
+        try {
+            childView.setText(String.format("%s", jsonItem.get(1)));
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        return view;
+    }
+
+    @Override
+    public boolean isChildSelectable(int i, int i1) {
+        return true;
+    }
+}

=== added file 'src/org/openlp/android/utility/JSONHandler.java'
--- src/org/openlp/android/utility/JSONHandler.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/utility/JSONHandler.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,169 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.utility;
+
+import android.util.Log;
+import org.apache.http.HttpEntity;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.json.JSONStringer;
+import org.openlp.android.data.Poll;
+import org.openlp.android.data.SlideItem;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.List;
+
+public class JSONHandler {
+
+    public static String createRequestJSON(String key, String value)
+            throws JSONHandlerException {
+        try {
+            String responseJSON;
+            JSONObject jo = new JSONObject();
+            jo.put(key, value);
+            responseJSON = new JSONStringer().object().key("request").value(jo)
+                    .endObject().toString();
+            responseJSON = URLEncoder.encode(responseJSON, "UTF-8");
+            return responseJSON;
+        } catch (JSONException e) {
+            throw new JSONHandlerException(e);
+        } catch (UnsupportedEncodingException e) {
+            throw new JSONHandlerException(e);
+        }
+    }
+
+    public static List<SlideItem> parseServiceItemResponseJSON(
+            HttpEntity entity)
+            throws JSONHandlerException {
+        try {
+            List<SlideItem> serviceItemList;
+            InputStream inputStream = entity.getContent();
+            String result = StringHelper.convertStreamToString(inputStream);
+            Log.v(LOG_TAG, result);
+            serviceItemList = getServiceItemsFromString(result);
+            inputStream.close();
+            return serviceItemList;
+        } catch (IOException e) {
+            throw new JSONHandlerException(e);
+        }
+    }
+
+    public static List<SlideItem> getServiceItemsFromString(String itemsJson)
+            throws JSONHandlerException {
+        try {
+            List<SlideItem> serviceItemList = new ArrayList<SlideItem>();
+            JSONObject jObject = new JSONObject(itemsJson);
+            JSONObject results = jObject.getJSONObject("results");
+            JSONArray items = results.getJSONArray("items");
+
+            for (int i = 0; i < items.length(); i++) {
+                JSONObject item = items.getJSONObject(i);
+                SlideItem slide = new SlideItem();
+                slide.setTag("");
+                slide.setText(item.getString("title"));
+                slide.setSelected(item.getBoolean("selected"));
+                slide.setHtml("");
+                serviceItemList.add(slide);
+            }
+            return serviceItemList;
+        } catch (JSONException e) {
+            throw new JSONHandlerException(e);
+        }
+    }
+
+    public static List<SlideItem> parseSlideItemResponseJSON(HttpEntity entity)
+            throws JSONHandlerException {
+        try {
+            List<SlideItem> serviceItemList;
+            InputStream inputStream = entity.getContent();
+            String result = StringHelper.convertStreamToString(inputStream);
+            Log.v(LOG_TAG, result);
+            serviceItemList = getSlideItemsFromString(result);
+            inputStream.close();
+            return serviceItemList;
+        } catch (IOException e) {
+            throw new JSONHandlerException(e);
+        }
+    }
+
+    public static List<SlideItem> getSlideItemsFromString(String itemJson)
+            throws JSONHandlerException {
+        try {
+            JSONObject jObject = new JSONObject(itemJson);
+            JSONObject results = jObject.getJSONObject("results");
+            JSONArray items = results.getJSONArray("slides");
+
+            List<SlideItem> serviceItemList = new ArrayList<SlideItem>();
+            for (int i = 0; i < items.length(); i++) {
+                JSONObject item = items.getJSONObject(i);
+                SlideItem slide = new SlideItem();
+                slide.setText(item.getString("text"));
+                slide.setTag(item.getString("tag"));
+                slide.setSelected(item.getBoolean("selected"));
+                slide.setHtml(item.getString("html"));
+                serviceItemList.add(slide);
+            }
+            return serviceItemList;
+        } catch (JSONException e) {
+            throw new JSONHandlerException(e);
+        }
+    }
+
+    public static Poll getPollFromString(String pollJson)
+            throws JSONHandlerException {
+        Log.v(LOG_TAG, String.format("parsePollResponseJSON: " + pollJson));
+        try {
+            JSONObject jObject = new JSONObject(pollJson);
+            JSONObject results = jObject.getJSONObject("results");
+            Poll poll = new Poll();
+            poll.setSlide(results.getInt("slide"));
+            poll.setItem(results.getString("item"));
+            poll.setTwelveHourDisplay(results.getBoolean("twelve"));
+            poll.setBlankedDisplayed(results.getBoolean("blank"));
+            poll.setThemeDisplayed(results.getBoolean("theme"));
+            poll.setDesktopDisplayed(results.getBoolean("display"));
+            if (!results.has("service")) {
+                Log.w(LOG_TAG,
+                        "Current OpenLP too old. Missing \"service\" (OpenLP < 1941)");
+            }
+            poll.setService(
+                    results.has("service") ? results.getInt("service") : -1);
+            return poll;
+        } catch (JSONException e) {
+            throw new JSONHandlerException(e);
+        }
+    }
+
+    public static class JSONHandlerException extends Exception {
+        private static final long serialVersionUID = -6772307308404816615L;
+
+        public JSONHandlerException(Throwable throwable) {
+            super(throwable);
+        }
+    }
+
+    private static String LOG_TAG = JSONHandler.class.getName();
+}

=== added file 'src/org/openlp/android/utility/OpenLPController.java'
--- src/org/openlp/android/utility/OpenLPController.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/utility/OpenLPController.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,615 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.utility;
+
+import android.app.Activity;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.SharedPreferences;
+import android.net.http.SslError;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.webkit.SslErrorHandler;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.AdapterView;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ListView;
+import android.widget.Toast;
+import android.widget.ToggleButton;
+import org.openlp.android.R;
+import org.openlp.android.activity.OpenLPNavigate;
+import org.openlp.android.activity.PagerActivity;
+import org.openlp.android.api.Api;
+import org.openlp.android.data.Poll;
+import org.openlp.android.data.SlideItem;
+import org.openlp.android.service.ApiCallIntent;
+import org.openlp.android.service.PingIntent;
+
+import java.util.List;
+
+public class OpenLPController extends PagerAdapter {
+
+    private static Activity context;
+    private ListView listViewService;
+    private ListView listViewLive;
+    private int currentService = -1;
+    private int currentLive = -1;
+    private String itemId = "";
+
+    private static int currentPage = 0;
+
+    public static final String PAGE_KEY = "openlp.pageKey";
+    public static final int PAGE_SERVICE = 0;
+    public static final int PAGE_LIVE = 1;
+    public static final int PAGE_DISPLAY = 2;
+    public static final int PAGE_STAGE = 3;
+    public static final int PAGE_ALERT = 4;
+    public static final int PAGE_SEARCH = 5;
+
+    private String displayType;
+    private WebView webView;
+    private SharedPreferences preferences;
+
+    public Intent pingIntent;
+    public Intent apiCallIntent;
+
+    public OpenLPController(Activity context) {
+        OpenLPController.context = context;
+        preferences = context.getApplicationContext().getSharedPreferences(
+                context.getString(R.string.keySharedPreferences),
+                Context.MODE_PRIVATE);
+        pingIntent = new Intent(context, PingIntent.class);
+        apiCallIntent = new Intent(context, ApiCallIntent.class);
+
+        IntentFilter apiCallFilter =
+                new IntentFilter(ApiCallIntent.API_CALL_RECEIVE);
+        apiCallFilter.addCategory(Intent.CATEGORY_DEFAULT);
+        context.registerReceiver(apiCallReceiver, apiCallFilter);
+    }
+
+    public final BroadcastReceiver apiCallReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context broadcastedContext, Intent intent) {
+            Log.v(LOG_TAG, String
+                    .format("%s broadcast received: intent(%s), context(%s)",
+                            ApiCallIntent.API_CALL_RECEIVE, intent,
+                            broadcastedContext));
+            if (intent.hasExtra("error")) {
+                context.stopService(pingIntent);
+                Log.w(LOG_TAG, "Stopping PingIntent. Got erroneous intent: " +
+                        intent.getStringExtra("error"));
+                Toast.makeText(broadcastedContext, String
+                        .format("%s: %s", context.getString(R.string.requestFailed),
+                                intent.getStringExtra("error")), Toast.LENGTH_LONG)
+                        .show();
+            } else {
+                if (intent.hasExtra("apiBase")) {
+                    String apiBase = intent.getStringExtra("apiBase");
+                    if (apiBase.equals(Api.ALERT)) {
+                        Toast.makeText(broadcastedContext, "Alert sent!",
+                                Toast.LENGTH_SHORT).show();
+                    }
+                    if (apiBase.equals(Api.DISPLAY_BASE)) {
+                        controller.poll();
+                    }
+                    if (apiBase.equals(Api.POLL_STATUS)) {
+                        handlePollResponse(intent.getStringExtra("pollJson"));
+                    }
+                    if (apiBase.equals(Api.LIVE_TEXT)) {
+                        handleLiveItemsResponse(
+                                intent.getStringExtra("itemsJson"));
+                    }
+                    if (apiBase.equals(Api.SERVICE_LIST)) {
+                        handleServiceItemsResponse(
+                                intent.getStringExtra("itemsJson"));
+                    }
+                }
+            }
+        }
+    };
+
+    private void handlePollResponse(final String pollResponse) {
+        try {
+
+            Poll poll = JSONHandler.getPollFromString(pollResponse);
+            if (poll != null) {
+                if (currentPage == PAGE_DISPLAY) {
+                    setDisplayFromPoll(poll);
+                } else {
+                    setServiceOrLiveFromPoll(poll);
+                }
+            } else {
+                Log.w(LOG_TAG, "Parsed poll is null. This is not expected!");
+            }
+        } catch (JSONHandler.JSONHandlerException e) {
+            Log.e(LOG_TAG, e.toString());
+            Toast.makeText(context, String.format("%s: %s",
+                    context.getString(R.string.couldNotHandlePollResponse),
+                    e.getMessage()), Toast.LENGTH_LONG).show();
+        }
+    }
+
+    private void setDisplayFromPoll(Poll poll) {
+        final ToggleButton toggleButton = (ToggleButton)
+                context.findViewById(R.id.toggleDisplayButton);
+        if (poll == null) {
+            toggleButton.setEnabled(false);
+        } else {
+            String onText;
+            String offText;
+
+            displayType = getDisplayType();
+            Log.d(LOG_TAG, "onPostExecute Display Type = " + displayType
+                    + " " + poll.isDisplayHidden());
+            if (displayType.equals(context.getString(R.string.displayScreen))) {
+                Log.v(LOG_TAG, "Blank called");
+                onText = context.getString(R.string.displayScreen);
+                offText = context.getString(R.string.displayScreen);
+            } else if (displayType
+                    .equals(context.getString(R.string.displayTheme))) {
+                Log.v(LOG_TAG, "Theme called");
+                onText = context.getString(R.string.displayTheme);
+                offText = context.getString(R.string.displayTheme);
+            } else {
+                Log.v(LOG_TAG, "Desktop called");
+                onText = context.getString(R.string.displayDesktop);
+                offText = context.getString(R.string.displayDesktop);
+            }
+            /*
+				Set display blanked to the off value to that of the screen
+			*/
+            if (poll.isDisplayHidden()) {
+                if (poll.isBlankedDisplayed()) {
+                    Log.v(LOG_TAG, "Hidden Blank called");
+                    onText = context.getString(R.string.displayScreen);
+                } else if (poll.isThemeDisplayed()) {
+                    Log.v(LOG_TAG, "Hidden Theme called");
+                    onText = context.getString(R.string.displayTheme);
+                } else {
+                    Log.v(LOG_TAG, "Hidden Desktop called");
+                    onText = context.getString(R.string.displayDesktop);
+                }
+            }
+            toggleButton.setTextOn(
+                    context.getString(R.string.displayBlankOn) + " " + onText);
+            toggleButton.setTextOff(
+                    context.getString(R.string.displayBlankOff) + " " + offText);
+            toggleButton.setEnabled(true);
+            toggleButton.setChecked(false);
+            if (poll.isDisplayHidden()) {
+                toggleButton.setChecked(true);
+            }
+        }
+    }
+
+    private void setServiceOrLiveFromPoll(Poll poll) {
+        if (currentPage == PAGE_LIVE) {
+            if (!itemId.equals(poll.getItem()) ||
+                    currentLive != poll.getSlide()) {
+                Log.v(LOG_TAG, "Slide Changed. Polling update...");
+                currentLive = poll.getSlide();
+                itemId = poll.getItem();
+                controller.fetchItems(Api.LIVE_TEXT);
+            }
+        } else if (currentPage == PAGE_SERVICE) {
+            if (currentService < poll.getService()) {
+                Log.v(LOG_TAG, "Service Changed. Polling update...");
+                currentService = poll.getService();
+                controller.fetchItems(Api.SERVICE_LIST);
+            }
+        }
+    }
+
+    private void handleLiveItemsResponse(final String itemsJson) {
+        try {
+            List<SlideItem> liveItems =
+                    JSONHandler.getSlideItemsFromString(itemsJson);
+            listViewLive
+                    .setAdapter(new SlideAdapter(context, liveItems, currentLive));
+            listViewLive.setSelection(currentLive);
+        } catch (JSONHandler.JSONHandlerException e) {
+            Log.e(LOG_TAG, e.toString());
+            Toast.makeText(context, String.format("%s: %s",
+                    context.getString(R.string.couldNotHandleLiveItems),
+                    e.getMessage()), Toast.LENGTH_LONG).show();
+        }
+    }
+
+    private void handleServiceItemsResponse(final String itemsJson) {
+        try {
+            List<SlideItem> serviceItems =
+                    JSONHandler.getServiceItemsFromString(itemsJson);
+            listViewService.setAdapter(
+                    new SlideAdapter(context, serviceItems, currentService));
+        } catch (JSONHandler.JSONHandlerException e) {
+            Log.e(LOG_TAG, e.toString());
+            Toast.makeText(context, String.format("%s: %s",
+                    context.getString(R.string.couldNotHandleServiceItems),
+                    e.getMessage()), Toast.LENGTH_LONG).show();
+        }
+    }
+
+    private OpenLPNavigate controller = new OpenLPNavigate() {
+        @Override
+        public void navigate(final String navigationRequest) {
+            Intent navigationIntent = new Intent(context, ApiCallIntent.class);
+            if (currentPage == PAGE_SERVICE) {
+                navigationIntent.putExtra(Api.SERVICE_BASE, navigationRequest);
+            }
+            if (currentPage == PAGE_LIVE) {
+                navigationIntent.putExtra(Api.LIVE_BASE, navigationRequest);
+            }
+            context.startService(navigationIntent);
+        }
+
+        @Override
+        public void setData(String apiPart, int id) {
+            Intent setDataIntent = new Intent(context, ApiCallIntent.class);
+            setDataIntent.putExtra(apiPart, id);
+            context.startService(setDataIntent);
+        }
+
+        @Override
+        public void setDisplay(String displayRequest) {
+            Log.d(LOG_TAG, String
+                    .format("Setting Display: displayRequest(%s)", displayRequest));
+            Intent displayIntent = new Intent(context, ApiCallIntent.class);
+            displayIntent.putExtra(Api.DISPLAY_BASE, displayRequest);
+            context.startService(displayIntent);
+        }
+
+        @Override
+        public void poll() {
+            Intent pollIntent = new Intent(context, ApiCallIntent.class);
+            pollIntent.putExtra(Api.POLL_STATUS, "");
+            context.startService(pollIntent);
+        }
+
+        @Override
+        public void fetchItems(String apiPart) {
+            Intent fetchItemsIntent = new Intent(context, ApiCallIntent.class);
+            fetchItemsIntent.putExtra(apiPart, "");
+            context.startService(fetchItemsIntent);
+        }
+    };
+
+    @Override
+    public Object instantiateItem(final ViewGroup container, int position) {
+        LayoutInflater inflater = (LayoutInflater) container.getContext()
+                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        int res = 0;
+        try {
+            res = getLayoutForPosition(position);
+        } catch (NoLayoutForPositionException e) {
+            Log.e(LOG_TAG, e.getMessage());
+        }
+
+        View view = inflater.inflate(res, null);
+
+        if (position == PAGE_SERVICE || position == PAGE_LIVE) {
+            if (position == PAGE_SERVICE) {
+                listViewService = (ListView) view.findViewById(R.id.list);
+                listViewService
+                        .setOnItemClickListener(onItemClickListenerService);
+                listViewService.setOnItemLongClickListener(
+                        adapterViewOnItemLongClickListener);
+            }
+
+            if (position == PAGE_LIVE) {
+                listViewLive = (ListView) view.findViewById(R.id.list);
+                listViewLive.setOnItemClickListener(onItemClickListenerSetLive);
+            }
+
+            view.findViewById(R.id.prev)
+                    .setOnClickListener(onClickListenerNavigate);
+            view.findViewById(R.id.next)
+                    .setOnClickListener(onClickListenerNavigate);
+        }
+
+        if (position == PAGE_STAGE) {
+            webView = getWebViewFromView(view);
+        }
+        if (position == PAGE_ALERT) {
+            view.findViewById(R.id.send).setOnClickListener(mSend);
+        }
+        if (position == PAGE_DISPLAY) {
+            view.findViewById(R.id.toggleDisplayButton)
+                    .setOnClickListener(onClickListenerToggleDisplay);
+        }
+
+        container.addView(view, 0);
+        return view;
+    }
+
+    private WebView getWebViewFromView(View view) {
+        WebView myWebView = (WebView) view.findViewById(R.id.stageview);
+        /*
+         * Handle SSL self signed certificates and refresh the screen if the certificate
+         * page appears.
+         */
+        myWebView.setWebViewClient(new WebViewClient() {
+            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
+                handler.proceed();
+            }
+        });
+        WebSettings webSettings = myWebView.getSettings();
+        webSettings.setJavaScriptEnabled(true);
+        webSettings.setBuiltInZoomControls(true);
+        webSettings.setLoadWithOverviewMode(true);
+        webSettings.setUseWideViewPort(true);
+        myWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
+        myWebView.setScrollbarFadingEnabled(true);
+
+        myWebView.loadUrl(getUrlBase());
+        return myWebView;
+    }
+
+    public static int getPageForButton(View view) {
+        final int buttonId = view.getId();
+        if (buttonId == R.id.buttonAlert) {
+            return PAGE_ALERT;
+        }
+        if (buttonId == R.id.buttonDisplay) {
+            return PAGE_DISPLAY;
+        }
+        if (buttonId == R.id.buttonLive) {
+            return PAGE_LIVE;
+        }
+        if (buttonId == R.id.buttonSearch) {
+            return PAGE_SEARCH;
+        }
+        if (buttonId == R.id.buttonService) {
+            return PAGE_SERVICE;
+        }
+        if (buttonId == R.id.buttonStage) {
+            return PAGE_STAGE;
+        }
+
+        Log.e(OpenLPController.class.getName(),
+                "No Button connected to the requested view, with id: " + buttonId);
+        return 0;
+    }
+
+    public ViewPager.OnPageChangeListener onPageChangeListener =
+            new ViewPager.OnPageChangeListener() {
+                @Override
+                public void onPageScrolled(int i, float v, int i1) {
+                }
+
+                @Override
+                public void onPageSelected(int selectedPage) {
+                    Log.d(LOG_TAG, String
+                            .format("Selected Page: position(%s) title(%s)",
+                                    selectedPage, getPageTitle(selectedPage)));
+                    currentPage = selectedPage;
+
+                    if (currentPage == PAGE_SERVICE || currentPage == PAGE_LIVE) {
+                        context.startService(pingIntent);
+                        if (currentPage == PAGE_SERVICE) {
+                            controller.fetchItems(Api.SERVICE_LIST);
+                        }
+                        if (currentPage == PAGE_LIVE) {
+                            controller.fetchItems(Api.LIVE_TEXT);
+                        }
+                    } else {
+                        context.stopService(pingIntent);
+                    }
+
+                    if (currentPage == PAGE_STAGE) {
+                        if (webView == null) {
+                            webView = getWebViewFromView(context.getLayoutInflater()
+                                    .inflate(R.layout.stageview, null));
+                        }
+                    }
+
+                    if (currentPage == PAGE_DISPLAY) {
+                        controller.poll();
+                    }
+                }
+
+                @Override
+                public void onPageScrollStateChanged(int i) {
+                }
+            };
+
+
+    @Override
+    public CharSequence getPageTitle(int position) {
+        String page = "none";
+        switch (position) {
+            case PAGE_SERVICE:
+                page = context.getString(R.string.tabService);
+                break;
+            case PAGE_LIVE:
+                page = context.getString(R.string.tabLive);
+                break;
+            case PAGE_DISPLAY:
+                page = context.getString(R.string.tabDisplay);
+                break;
+            case PAGE_STAGE:
+                page = context.getString(R.string.tabStage);
+                break;
+            case PAGE_ALERT:
+                page = context.getString(R.string.tabAlert);
+                break;
+            case PAGE_SEARCH:
+                page = context.getString(R.string.buttonSearchText);
+                break;
+        }
+        return page;
+    }
+
+    private int getLayoutForPosition(int position)
+            throws NoLayoutForPositionException {
+        switch (position) {
+            case PAGE_SERVICE:
+                return R.layout.slide_service;
+            case PAGE_LIVE:
+                return R.layout.slide_service;
+            case PAGE_DISPLAY:
+                return R.layout.misc;
+            case PAGE_STAGE:
+                return R.layout.stageview;
+            case PAGE_ALERT:
+                return R.layout.alert;
+            case PAGE_SEARCH:
+                return R.layout.search;
+            default:
+                throw new NoLayoutForPositionException(
+                        "No Layout for position (" + position + ")");
+        }
+    }
+
+    private AdapterView.OnItemClickListener onItemClickListenerSetLive =
+            new AdapterView.OnItemClickListener() {
+                @Override
+                public void onItemClick(AdapterView<?> adapterView, View view,
+                                        int i, long l) {
+                    controller.setData(Api.LIVE_SET, i);
+                }
+            };
+
+    private AdapterView.OnItemLongClickListener
+            adapterViewOnItemLongClickListener =
+            new AdapterView.OnItemLongClickListener() {
+                @Override
+                public boolean onItemLongClick(AdapterView<?> adapterView,
+                                               View view, int i, long l) {
+                    controller.setData(Api.SERVICE_SET, i);
+                    ((PagerActivity) context).setCurrentPage(PAGE_LIVE);
+                    return true;
+                }
+            };
+
+    private ListView.OnItemClickListener onItemClickListenerService =
+            new AdapterView.OnItemClickListener() {
+                @Override
+                public void onItemClick(AdapterView<?> adapterView, View view,
+                                        int i, long l) {
+                    controller.setData(Api.SERVICE_SET, i);
+                }
+            };
+
+    private Button.OnClickListener onClickListenerNavigate =
+            new Button.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    if (v.getId() == R.id.prev) {
+                        controller.navigate(OpenLPNavigate.NAVIGATE_PREVIOUS);
+                    } else if (v.getId() == R.id.next) {
+                        controller.navigate(OpenLPNavigate.NAVIGATE_NEXT);
+                    }
+                }
+            };
+
+    /**
+     * Alert Button Listener
+     */
+    private Button.OnClickListener mSend = new Button.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            EditText edittext = (EditText) context.findViewById(R.id.alert);
+
+            if (edittext.getText().toString().trim().length() > 0) {
+                apiCallIntent
+                        .putExtra(Api.ALERT, edittext.getText().toString());
+                context.startService(apiCallIntent);
+            } else {
+                Toast.makeText(context,
+                        context.getString(R.string.alertTextNull),
+                        Toast.LENGTH_SHORT).show();
+            }
+        }
+    };
+
+    public View.OnClickListener onClickListenerToggleDisplay =
+            new View.OnClickListener() {
+                @Override
+                public void onClick(View view) {
+                    ToggleButton toggleButton = (ToggleButton) view;
+
+                    String displayType = getDisplayType();
+                    if (!toggleButton.isChecked()) {
+                        controller.setDisplay(OpenLPNavigate.DISPLAY_SHOW);
+                    } else {
+                        if (displayType
+                                .equals(context.getString(R.string.displayScreen))) {
+                            controller.setDisplay(OpenLPNavigate.HIDE_SCREEN);
+                        } else if (displayType
+                                .equals(context.getString(R.string.displayTheme))) {
+                            controller.setDisplay(OpenLPNavigate.HIDE_THEME);
+                        } else {
+                            controller.setDisplay(OpenLPNavigate.HIDE_DESKTOP);
+                        }
+                    }
+                }
+            };
+
+    @Override
+    public int getCount() {
+        return 5;
+    }
+
+    @Override
+    public boolean isViewFromObject(View view, Object o) {
+        return view == o;
+    }
+
+    @Override
+    public void destroyItem(ViewGroup container, int position, Object object) {
+        container.removeView((View) object);
+    }
+
+    private static final String LOG_TAG = OpenLPController.class.getName();
+
+    private String getDisplayType() {
+        displayType = preferences
+                .getString(context.getString(R.string.keyDisplayBlankType),
+                        context.getString(R.string.displayTypeValue));
+        return displayType;
+    }
+
+    private String getUrlBase() {
+        Boolean useSsl = preferences.getBoolean(context.getString(R.string.key_ssl_use), false);
+
+        return String.format("%s://%s:%s/stage",
+                useSsl ? "https" : "http",
+                preferences.getString(context.getString(R.string.keyHost),
+                        context.getString(R.string.hostDefaultValue)),
+                preferences.getString(context.getString(R.string.keyPort),
+                        context.getString(R.string.portDefaultValue)));
+    }
+
+    class NoLayoutForPositionException extends Exception {
+        NoLayoutForPositionException(String detailMessage) {
+            super(detailMessage);
+        }
+    }
+}

=== added file 'src/org/openlp/android/utility/OpenLPHttpClient.java'
--- src/org/openlp/android/utility/OpenLPHttpClient.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/utility/OpenLPHttpClient.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,253 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.utility;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.Socket;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLDecoder;
+import java.net.UnknownHostException;
+import java.security.KeyManagementException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.util.Log;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.Credentials;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.conn.scheme.PlainSocketFactory;
+import org.apache.http.conn.scheme.Scheme;
+import org.apache.http.conn.scheme.SchemeRegistry;
+import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.params.BasicHttpParams;
+import org.apache.http.params.HttpConnectionParams;
+import org.apache.http.params.HttpParams;
+import org.openlp.android.R;
+import org.openlp.android.data.HttpReturn;
+
+/**
+ * Personalised HttpClient to be used throughout OpenLP with customisable
+ * parameters.
+ */
+public class OpenLPHttpClient extends DefaultHttpClient {
+
+    private HttpGet httpGet;
+    private URL url;
+    private final String urlBase;
+    private SSLSocketFactory sslSocketFactory;
+    private Context context;
+
+    public OpenLPHttpClient(Context context) {
+        SharedPreferences preferences = context.getSharedPreferences(
+                context.getString(R.string.keySharedPreferences),
+                Context.MODE_PRIVATE);
+        HttpParams httpParams = new BasicHttpParams();
+
+        this.context = context;
+
+        Boolean useSsl = preferences.getBoolean(context.getString(R.string.key_ssl_use), false);
+
+        String port = preferences.getString(
+                context.getString(R.string.keyPort),
+                context.getString(R.string.portDefaultValue)
+        );
+
+        SchemeRegistry schemeRegistry = getConnectionManager().getSchemeRegistry();
+        if (!useSsl) {
+            schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), Integer.valueOf(port)));
+        } else {
+            try {
+                initSsl();
+                schemeRegistry.register(new Scheme("https", sslSocketFactory, Integer.valueOf(port)));
+            } catch (NoSuchAlgorithmException e) {
+                Log.e(LOG_TAG, e.toString());
+            } catch (KeyManagementException e) {
+                Log.e(LOG_TAG, e.toString());
+            } catch (KeyStoreException e) {
+                Log.e(LOG_TAG, e.toString());
+            } catch (UnrecoverableKeyException e) {
+                Log.e(LOG_TAG, e.toString());
+            } catch (CertificateException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+        }
+
+        String userid = preferences.getString(
+                context.getString(R.string.key_userid),
+                context.getString(R.string.useridDefaultValue)
+        );
+
+
+        String password = preferences.getString(
+                context.getString(R.string.key_password),
+                context.getString(R.string.passwordDefaultValue)
+        );
+
+        Log.d(LOG_TAG, "Credentials set to " + userid + " : " + password);
+
+        Credentials creds = new UsernamePasswordCredentials(userid, password);
+        getCredentialsProvider().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), creds);
+
+        urlBase = String.format("http%s://%s:%s",
+                useSsl ? "s" : "",
+                preferences.getString(
+                        context.getString(R.string.keyHost),
+                        context.getString(R.string.hostDefaultValue)), port);
+
+        int connectionTimeout = context.getResources().getInteger(
+                R.integer.connectionTimeoutDefaultValue);
+        int socketTimeout = context.getResources().getInteger(
+                R.integer.socketTimeoutDefaultValue);
+
+        if (preferences.getBoolean(
+                context.getString(R.string.keyEnableCustomTimeout), false)) {
+            Log.d(LOG_TAG, String.format("Retrieving values for %s and %s",
+                    context.getString(R.string.keyConnectionTimeout),
+                    context.getString(R.string.keySocketTimeout)));
+            connectionTimeout = Integer.parseInt(preferences.getString(
+                    context.getString(R.string.keyConnectionTimeout),
+                    String.valueOf(context.getResources().getInteger(
+                            R.integer.connectionTimeoutDefaultValue))));
+            socketTimeout = Integer.parseInt(preferences.getString(
+                    context.getString(R.string.keySocketTimeout),
+                    String.valueOf(context.getResources().getInteger(
+                            R.integer.socketTimeoutDefaultValue))));
+        }
+        HttpConnectionParams
+                .setConnectionTimeout(httpParams, connectionTimeout);
+        HttpConnectionParams.setSoTimeout(httpParams, socketTimeout);
+        setParams(httpParams);
+        httpGet = new HttpGet();
+    }
+
+    public URL getUrl() {
+        return url;
+    }
+
+    public void setUrl(String apiPart) throws URISyntaxException,
+            MalformedURLException {
+        url = new URL(urlBase.concat(apiPart));
+        try {
+            Log.d(LOG_TAG, "URL set to: " + URLDecoder.decode(url.toString(), "UTF-8"));
+        } catch (UnsupportedEncodingException e) {
+            Log.e(LOG_TAG, "Unable to decode url: " + e.getMessage());
+        }
+        httpGet.setURI(getUrl().toURI());
+    }
+
+    public HttpResponse execute() throws IOException {
+        return super.execute(httpGet);
+    }
+
+    public HttpReturn handleExecute() throws IOException {
+        HttpResponse response = this.execute();
+
+        Log.d(LOG_TAG, "Http response code " + String.valueOf(response.getStatusLine().getStatusCode()));
+
+        if (response.getStatusLine().getStatusCode() == 200) {
+            BufferedReader bufferedReader;
+            HttpEntity entity = response.getEntity();
+
+            if (entity != null) {
+                bufferedReader = new BufferedReader(new InputStreamReader(entity.getContent()));
+                StringBuilder stringBuilder = new StringBuilder();
+
+                String line = bufferedReader.readLine();
+                while (line != null) {
+                    stringBuilder.append(line);
+                    line = bufferedReader.readLine();
+                }
+                bufferedReader.close();
+                return new HttpReturn(0, stringBuilder.toString(), this.context);
+            }
+        }
+        return new HttpReturn(response.getStatusLine().getStatusCode(), null, this.context);
+    }
+
+    public HttpEntity handleAndReturnEntity() throws IOException {
+        HttpResponse response = this.execute();
+
+        if (response.getStatusLine().getStatusCode() == 200) {
+            return response.getEntity();
+        }
+        return null;
+    }
+
+    private void initSsl() throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException,
+            UnrecoverableKeyException, IOException, CertificateException {
+        final SSLContext sslContext = SSLContext.getInstance("TLS");
+        X509TrustManager trustManager = new X509TrustManager() {
+            @Override
+            public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
+            }
+
+            @Override
+            public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
+            }
+
+            @Override
+            public X509Certificate[] getAcceptedIssuers() {
+                return null;
+            }
+        };
+        sslContext.init(null, new TrustManager[]{trustManager}, null);
+
+        KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
+        keyStore.load(null, null);
+        sslSocketFactory = new SSLSocketFactory(keyStore) {
+            @Override
+            public Socket createSocket() throws IOException {
+                return sslContext.getSocketFactory().createSocket();
+            }
+
+            @Override
+            public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException,
+                    UnknownHostException {
+                return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
+            }
+        };
+        sslSocketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
+    }
+
+    private final String LOG_TAG = OpenLPHttpClient.class.getName();
+}

=== added file 'src/org/openlp/android/utility/SlideAdapter.java'
--- src/org/openlp/android/utility/SlideAdapter.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/utility/SlideAdapter.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,132 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.utility;
+
+import java.util.List;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.graphics.Color;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+import org.openlp.android.R;
+import org.openlp.android.data.SlideItem;
+
+public class SlideAdapter extends BaseAdapter {
+    List<SlideItem> items;
+    Activity context;
+    LayoutInflater inflater;
+    boolean useTagDisplay = true;
+    private int[] colors = new int[]{0x74717000, 0x00000000};
+    private int currentSlide = -1;
+    SharedPreferences prefs;
+
+    public SlideAdapter(Activity context, List<SlideItem> items, int slide) {
+        this.context = context;
+        this.items = items;
+        this.currentSlide = slide;
+        inflater = context.getLayoutInflater();
+
+        prefs = context.getSharedPreferences(
+                context.getString(R.string.keySharedPreferences),
+                Context.MODE_PRIVATE);
+    }
+
+    public SlideAdapter(Activity context, List<SlideItem> items,
+                        boolean useTagDisplay) {
+        this.context = context;
+        this.items = items;
+        this.useTagDisplay = useTagDisplay;
+        inflater = context.getLayoutInflater();
+
+        prefs = context.getSharedPreferences(
+                context.getString(R.string.keySharedPreferences),
+                Context.MODE_PRIVATE);
+    }
+
+    @Override
+    public int getCount() {
+        return items.size();
+    }
+
+    @Override
+    public Object getItem(int i) {
+        return items.get(i);
+    }
+
+    @Override
+    public long getItemId(int i) {
+        return items.indexOf(items.get(i));
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        ViewHolder holder;
+        View view = convertView;
+
+        SlideItem item = items.get(position);
+
+        if (view == null) {
+            view = inflater.inflate(R.layout.slide_list_item, null);
+            holder = new ViewHolder();
+
+            holder.rowMarker = (TextView) view.findViewById(R.id.rowItemMarker);
+            holder.rowItem = (TextView) view.findViewById(R.id.rowItemText);
+
+            view.setTag(holder);
+        } else {
+            holder = (ViewHolder) view.getTag();
+        }
+
+        int size = Integer.parseInt(prefs.getString(
+                context.getString(R.string.keyTextSize),
+                String.valueOf(context.getResources().getInteger(
+                        R.integer.textSizeDefaultValue))));
+
+        holder.rowMarker.setText(item.getTag());
+        holder.rowItem.setText(item.getText());
+        holder.rowItem.setTextSize(size);
+
+        if (useTagDisplay) {
+            holder.rowMarker.setMinWidth(40);
+        }
+        if (position == this.currentSlide) {
+            holder.rowItem.setTextColor(Color.WHITE);
+            view.setBackgroundColor(Color.argb(99, 200, 200, 200));
+        } else {
+            holder.rowItem.setTextColor(Color.LTGRAY);
+            view.setBackgroundColor(colors[position % colors.length]);
+        }
+
+        return view;
+    }
+
+    static class ViewHolder {
+        TextView rowMarker;
+        TextView rowItem;
+    }
+
+    private final String LOG_TAG = SlideAdapter.class.getName();
+}

=== added file 'src/org/openlp/android/utility/StringHelper.java'
--- src/org/openlp/android/utility/StringHelper.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/utility/StringHelper.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,60 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.utility;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+/**
+ * String helper utility to do common string processing.
+ */
+public class StringHelper {
+    public synchronized static String convertStreamToString(InputStream is) {
+        /*
+				   * To convert the InputStream to String we use the
+				   * BufferedReader.readLine() method. We iterate until the BufferedReader
+				   * return null which means there's no more data to read. Each line will
+				   * appended to a StringBuilder and returned as String.
+				   */
+
+        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+        StringBuilder sb = new StringBuilder();
+
+        String line = null;
+        try {
+            while ((line = reader.readLine()) != null) {
+                sb.append(line + "\n");
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                is.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return sb.toString();
+    }
+
+}

=== added file 'src/org/openlp/android/utility/WebCallReturningAsyncTask.java'
--- src/org/openlp/android/utility/WebCallReturningAsyncTask.java	1970-01-01 00:00:00 +0000
+++ src/org/openlp/android/utility/WebCallReturningAsyncTask.java	2013-06-04 19:25:41 +0000
@@ -0,0 +1,114 @@
+/******************************************************************************
+ * OpenLP - Open Source Lyrics Projection                                      *
+ * --------------------------------------------------------------------------- *
+ * Copyright (c) 2011-2013 Raoul Snyman                                        *
+ * Portions copyright (c) 2011-2013 Tim Bentley, Johan Mynhardt, Samuel        *
+ * Sjöbergsson                                                                 *
+ * --------------------------------------------------------------------------- *
+ * 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.android.utility;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.util.Log;
+import android.widget.Toast;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.openlp.android.activity.preference.Preferences;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+public class WebCallReturningAsyncTask extends AsyncTask<String, Void, String> {
+    private Activity context;
+    private String apiPart;
+
+    public WebCallReturningAsyncTask(Activity context) {
+        this.context = context;
+    }
+
+    public WebCallReturningAsyncTask(Activity context, String apiPart) {
+        this.context = context;
+        this.apiPart = apiPart;
+    }
+
+    @Override
+    protected String doInBackground(String... apiCall) {
+        OpenLPHttpClient httpClient = new OpenLPHttpClient(context);
+        HttpResponse response = null;
+        BufferedReader bufferedReader = null;
+
+        try {
+            if (apiPart == null) {
+                httpClient.setUrl(apiCall[0]);
+            } else {
+                httpClient.setUrl(String.format("%s%s", apiPart, apiCall[0]));
+            }
+
+            if (httpClient.getUrl().getHost().trim().length() <= 0) {
+                context.startActivity(new Intent(context, Preferences.class));
+            } else {
+                response = httpClient.execute();
+            }
+
+            if (response != null
+                    && response.getStatusLine().getStatusCode() == 200) {
+                HttpEntity entity = response.getEntity();
+
+                if (entity != null) {
+                    bufferedReader = new BufferedReader(
+                            new InputStreamReader(entity.getContent()));
+                    StringBuilder stringBuilder = new StringBuilder();
+
+                    String line = bufferedReader.readLine();
+                    while (line != null) {
+                        stringBuilder.append(line);
+                        line = bufferedReader.readLine();
+                    }
+
+                    Log.i(LOG_TAG, String.format("entity: %s",
+                            stringBuilder.toString()));
+                    bufferedReader.close();
+                    return stringBuilder.toString();
+                }
+            }
+        } catch (Exception e) {
+            Log.e(LOG_TAG, e.toString());
+            Toast.makeText(context, e.getMessage(), Toast.LENGTH_LONG).show();
+            if (bufferedReader != null) {
+                try {
+                    bufferedReader.close();
+                } catch (IOException e1) {
+                    // do nothing as we are in an error state anyway
+                }
+            }
+        }
+        return null;
+    }
+
+    @Override
+    protected void onPreExecute() {
+        super.onPreExecute();
+    }
+
+    @Override
+    protected void onPostExecute(String s) {
+        super.onPostExecute(s);
+    }
+
+    private final String LOG_TAG = this.getClass().getName();
+}