← Back to team overview

openlp-android team mailing list archive

[Merge] lp:~trb143/openlp/android_05 into lp:openlp/android

 

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

Requested reviews:
  OpenLP Android Developers (openlp-android)

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

Test 
-- 
https://code.launchpad.net/~trb143/openlp/android_05/+merge/102385
Your team OpenLP Android Developers is requested to review the proposed merge of lp:~trb143/openlp/android_05 into lp:openlp/android.
=== modified file '.bzrignore'
--- .bzrignore	2011-09-15 20:18:05 +0000
+++ .bzrignore	2012-04-21 19:11:19 +0000
@@ -11,3 +11,5 @@
 build.xml
 local.properties
 build.properties
+lint.xml
+

=== removed file '.classpath'
--- .classpath	2012-01-09 19:01:22 +0000
+++ .classpath	1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="gen"/>
-	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
-	<classpathentry kind="output" path="bin/classes"/>
-</classpath>

=== modified file 'AndroidManifest.xml'
--- AndroidManifest.xml	2012-03-03 11:00:27 +0000
+++ AndroidManifest.xml	2012-04-21 19:11:19 +0000
@@ -3,8 +3,8 @@
         xmlns:android="http://schemas.android.com/apk/res/android";
 		android:installLocation="auto"
         package="org.openlp.android"
-        android:versionCode="3"
-        android:versionName="0.4"
+        android:versionCode="5"
+        android:versionName="0.5"
         >
     <uses-sdk android:minSdkVersion="8"/>
     <uses-permission android:name="android.permission.INTERNET"/>
@@ -31,8 +31,11 @@
                     android:resource="@xml/searchable"/>
         </activity>
 
+		<service android:name=".service.PingService"/>
+
         <activity android:name=".activity.Misc"/>
-        <activity android:name=".activity.Preferences" android:label="@string/preferences"/>
+        <activity android:name=".activity.Preferences" 
+        	android:label="@string/preferences"/>
         <activity android:name=".activity.Slide"/>
         <activity android:name=".activity.Service"/>
         <activity android:name=".activity.Alert"/>

=== modified file 'proguard.cfg'
--- proguard.cfg	2011-03-08 21:02:48 +0000
+++ proguard.cfg	2012-04-21 19:11:19 +0000
@@ -14,15 +14,15 @@
 -keep public class * extends android.preference.Preference
 -keep public class com.android.vending.licensing.ILicensingService
 
--keepclasseswithmembernames class * {
+-keepclasseswithmembers class * {
     native <methods>;
 }
 
--keepclasseswithmembernames class * {
+-keepclasseswithmembersnames class * {
     public <init>(android.content.Context, android.util.AttributeSet);
 }
 
--keepclasseswithmembernames class * {
+-keepclasseswithmember class * {
     public <init>(android.content.Context, android.util.AttributeSet, int);
 }
 

=== added file 'res/values/backgroundTimeouts.xml'
--- res/values/backgroundTimeouts.xml	1970-01-01 00:00:00 +0000
+++ res/values/backgroundTimeouts.xml	2012-04-21 19:11:19 +0000
@@ -0,0 +1,16 @@
+<resources>
+    <string-array name="backgroundTimeEntries">
+		<item>5</item>
+		<item>10</item>
+		<item>15</item>
+		<item>20</item>
+		<item>30</item>
+	</string-array>
+	<string-array name="backgroundTimeValues">
+		<item>1800</item>
+		<item>3600</item>
+		<item>540</item>
+		<item>7200</item>
+		<item>10800</item>
+	</string-array>
+</resources>
\ No newline at end of file

=== modified file 'res/values/defaultValues.xml'
--- res/values/defaultValues.xml	2012-01-21 20:40:25 +0000
+++ res/values/defaultValues.xml	2012-04-21 19:11:19 +0000
@@ -7,5 +7,6 @@
     <!-- INTEGER -->
     <integer name="socketTimeoutDefaultValue">3000</integer>
     <integer name="connectionTimeoutDefaultValue">3000</integer>
+    <integer name="backgroundRefreshDefaultValue">3600</integer>    
     <integer name="textSizeDefaultValue">14</integer>    
 </resources>
\ No newline at end of file

=== modified file 'res/values/keyStrings.xml'
--- res/values/keyStrings.xml	2012-01-21 20:40:25 +0000
+++ res/values/keyStrings.xml	2012-04-21 19:11:19 +0000
@@ -1,5 +1,6 @@
 <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> 

=== modified file 'res/values/strings.xml'
--- res/values/strings.xml	2012-03-03 11:00:27 +0000
+++ res/values/strings.xml	2012-04-21 19:11:19 +0000
@@ -31,6 +31,9 @@
     <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>

=== modified file 'res/xml/preferences.xml'
--- res/xml/preferences.xml	2012-01-21 20:40:25 +0000
+++ res/xml/preferences.xml	2012-04-21 19:11:19 +0000
@@ -37,6 +37,16 @@
                 android:inputType="number"/>
     </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="@integer/backgroundRefreshDefaultValue"/>
+    </PreferenceCategory>          
+    <PreferenceCategory
             android:title="@string/customTimeout">
         <CheckBoxPreference
                 android:title="@string/enableCustomTimeouts"

=== modified file 'src/org/openlp/android/OpenLP.java'
--- src/org/openlp/android/OpenLP.java	2012-03-04 17:20:44 +0000
+++ src/org/openlp/android/OpenLP.java	2012-04-21 19:11:19 +0000
@@ -20,7 +20,6 @@
  *******************************************************************************/
 package org.openlp.android;
 
-import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.util.Log;
@@ -46,77 +45,90 @@
 		super.onCreate(savedInstanceState);
 		setContentView(R.layout.main);
 
-		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)) {
+		if (prefs.getString(getString(R.string.keyHost), "NONE").equals("NONE")
+				|| prefs.getString(getString(R.string.keyHost), null).equals(
+						null)) {
 			Log.d(LOG_TAG,
-				"URL preference not set. Starting preference activity...");
+					"URL preference not set. Starting preference activity...");
 			Intent preferenceIntent = new Intent(this, Preferences.class);
 			startActivity(preferenceIntent);
 		}
 
-		findViewById(R.id.buttonService)
-			.setOnClickListener(onClickListenerService);
+		findViewById(R.id.buttonService).setOnClickListener(
+				onClickListenerService);
 		findViewById(R.id.buttonLive).setOnClickListener(onClickListenerLive);
-		findViewById(R.id.buttonDisplay)
-			.setOnClickListener(onClickListenerDisplay);
+		findViewById(R.id.buttonDisplay).setOnClickListener(
+				onClickListenerDisplay);
 		findViewById(R.id.buttonAlert).setOnClickListener(onClickListenerAlert);
 		findViewById(R.id.buttonStage).setOnClickListener(onClickListenerStage);
-		findViewById(R.id.buttonSearch)
-			.setOnClickListener(onClickListenerSearch);
-	}
-
-	private View.OnClickListener onClickListenerService =
-		new View.OnClickListener() {
-			@Override
-			public void onClick(View view) {
-				startActivity(new Intent(OpenLP.this, Service.class));
-			}
-		};
-
-	private View.OnClickListener onClickListenerLive =
-		new View.OnClickListener() {
-			@Override
-			public void onClick(View view) {
-				startActivity(new Intent(OpenLP.this, Slide.class));
-			}
-		};
-
-	private View.OnClickListener onClickListenerDisplay =
-		new View.OnClickListener() {
-			@Override
-			public void onClick(View view) {
-				startActivity(new Intent(OpenLP.this, Misc.class));
-			}
-		};
-
-	private View.OnClickListener onClickListenerAlert =
-		new View.OnClickListener() {
-			@Override
-			public void onClick(View view) {
-				startActivity(new Intent(OpenLP.this, Alert.class));
-			}
-		};
-
-	private View.OnClickListener onClickListenerStage =
-		new View.OnClickListener() {
-			@Override
-			public void onClick(View view) {
-				startActivity(new Intent(OpenLP.this, StageView.class));
-			}
-		};
-
-	private View.OnClickListener onClickListenerSearch =
-		new View.OnClickListener() {
-			@Override
-			public void onClick(View view) {
-				onSearchRequested();
-			}
-		};
+		findViewById(R.id.buttonSearch).setOnClickListener(
+				onClickListenerSearch);
+	}
+
+	@Override
+	public void onResume() {
+		super.onResume();
+		// startService(pingIntent);
+		// registerReceiver(broadcastReceiver, new
+		// IntentFilter(BroadcastService.BROADCAST_ACTION));
+	}
+
+	@Override
+	public void onPause() {
+		super.onPause();
+		// unregisterReceiver(broadcastReceiver);
+		// stopService(pingIntent);
+	}
+
+	@Override
+	public void onDestroy() {
+		super.onDestroy();
+		stopService(pingIntent);
+		// unregisterReceiver(broadcastReceiver);
+		// stopService(pingIntent);
+	}
+
+	private View.OnClickListener onClickListenerService = new View.OnClickListener() {
+		@Override
+		public void onClick(View view) {
+			startActivity(new Intent(OpenLP.this, Service.class));
+		}
+	};
+
+	private View.OnClickListener onClickListenerLive = new View.OnClickListener() {
+		@Override
+		public void onClick(View view) {
+			startActivity(new Intent(OpenLP.this, Slide.class));
+		}
+	};
+
+	private View.OnClickListener onClickListenerDisplay = new View.OnClickListener() {
+		@Override
+		public void onClick(View view) {
+			startActivity(new Intent(OpenLP.this, Misc.class));
+		}
+	};
+
+	private View.OnClickListener onClickListenerAlert = new View.OnClickListener() {
+		@Override
+		public void onClick(View view) {
+			startActivity(new Intent(OpenLP.this, Alert.class));
+		}
+	};
+
+	private View.OnClickListener onClickListenerStage = new View.OnClickListener() {
+		@Override
+		public void onClick(View view) {
+			startActivity(new Intent(OpenLP.this, StageView.class));
+		}
+	};
+
+	private View.OnClickListener onClickListenerSearch = new View.OnClickListener() {
+		@Override
+		public void onClick(View view) {
+			onSearchRequested();
+		}
+	};
 
 	private final String LOG_TAG = OpenLP.class.getName();
 }

=== modified file 'src/org/openlp/android/activity/DefaultActivity.java'
--- src/org/openlp/android/activity/DefaultActivity.java	2012-03-04 17:20:44 +0000
+++ src/org/openlp/android/activity/DefaultActivity.java	2012-04-21 19:11:19 +0000
@@ -21,15 +21,34 @@
 package org.openlp.android.activity;
 
 import android.app.Activity;
+import android.content.Context;
 import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import org.openlp.android.R;
 import org.openlp.android.api.Api;
-
+import org.openlp.android.service.PingService;
 
 public abstract class DefaultActivity extends Activity implements Api {
+
+	public SharedPreferences prefs;
+	public Intent pingIntent;
+
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+
+		prefs = getApplicationContext().getSharedPreferences(
+				getApplicationContext()
+						.getString(R.string.keySharedPreferences),
+				Context.MODE_PRIVATE);
+
+		pingIntent = new Intent(this, PingService.class);		
+	}
+
 	@Override
 	public boolean onCreateOptionsMenu(Menu menu) {
 		MenuInflater inflater = getMenuInflater();
@@ -41,14 +60,14 @@
 	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);
+		case R.id.preferences:
+			startActivity(new Intent(this, Preferences.class));
+			return true;
+		case R.id.menuSearch:
+			onSearchRequested();
+			return true;
+		default:
+			return super.onOptionsItemSelected(item);
 		}
 	}
 }

=== modified file 'src/org/openlp/android/activity/Misc.java'
--- src/org/openlp/android/activity/Misc.java	2012-03-04 17:20:44 +0000
+++ src/org/openlp/android/activity/Misc.java	2012-04-21 19:11:19 +0000
@@ -20,30 +20,23 @@
  *******************************************************************************/
 package org.openlp.android.activity;
 
-import android.app.ProgressDialog;
+import org.openlp.android.R;
+import org.openlp.android.service.PingService;
+import org.openlp.android.utility.WebCallAsyncTask;
+
+import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
-import android.os.AsyncTask;
+import android.content.IntentFilter;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 import android.widget.Toast;
 import android.widget.ToggleButton;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.openlp.android.R;
-import org.openlp.android.data.Poll;
-import org.openlp.android.utility.JSONHandler;
-import org.openlp.android.utility.OpenLPHttpClient;
-import org.openlp.android.utility.WebCallAsyncTask;
-
-import java.util.Arrays;
 
 public class Misc extends DefaultActivity {
 	private final Context context = this;
 	Misc misc = this;
-	SharedPreferences prefs;
 	String displayType;
 
 	@Override
@@ -53,21 +46,15 @@
 		Log.i(LOG_TAG, "onCreate");
 		setContentView(R.layout.misc);
 
-		prefs = getApplicationContext().getSharedPreferences(
-			getApplicationContext()
-				.getString(R.string.keySharedPreferences),
-			Context.MODE_PRIVATE);
-		Log.d(LOG_TAG, prefs.getAll().toString());
 		displayType = prefs
-			.getString(
-				getApplicationContext().getString(
-					R.string.keyDisplayBlankType),
-				getApplicationContext().getString(
-					R.string.displayTypeValue));
+				.getString(
+						getApplicationContext().getString(
+								R.string.keyDisplayBlankType),
+						getApplicationContext().getString(
+								R.string.displayTypeValue));
 		Log.d(LOG_TAG, "Pref Display Type = " + displayType);
 
-		final ToggleButton toggleButton =
-			(ToggleButton) findViewById(R.id.toggleDisplayButton);
+		final ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleDisplayButton);
 
 		toggleButton.setOnClickListener(new View.OnClickListener() {
 			@Override
@@ -79,37 +66,29 @@
 					else {
 						Log.d(LOG_TAG, "onCLick Display Type = " + displayType);
 						if (displayType
-							.equals(getString(R.string.displayScreen))) {
+								.equals(getString(R.string.displayScreen))) {
 							Log.d(LOG_TAG, "Blank matched");
 							new WebCallAsyncTask(context)
-								.execute(DISPLAY_HIDE_SCREEN);
+									.execute(DISPLAY_HIDE_SCREEN);
 						}
 						else if (displayType
-							.equals(getString(R.string.displayTheme))) {
+								.equals(getString(R.string.displayTheme))) {
 							Log.d(LOG_TAG, "Theme matched");
 							new WebCallAsyncTask(context)
-								.execute(DISPLAY_HIDE_THEME);
+									.execute(DISPLAY_HIDE_THEME);
 						}
 						else {
 							Log.d(LOG_TAG, "Desktop matched");
 							new WebCallAsyncTask(context)
-								.execute(DISPLAY_HIDE_DESKTOP);
+									.execute(DISPLAY_HIDE_DESKTOP);
 						}
 					}
 				}
 				catch (Exception e) {
 					Toast.makeText(context, R.string.loadingFailed,
-						Toast.LENGTH_LONG).show();
+							Toast.LENGTH_LONG).show();
 					Log.e(LOG_TAG, e.toString());
 				}
-				try {
-					Thread.sleep(500);
-				}
-				catch (InterruptedException e) {
-					e.printStackTrace();
-				}
-				PollStatusTask poll = new PollStatusTask(misc);
-				poll.execute(POLL_STATUS);
 			}
 		});
 	}
@@ -118,139 +97,90 @@
 	protected void onResume() {
 		super.onResume();
 		Log.d(LOG_TAG, "Resume");
-		new PollStatusTask(this).execute(POLL_STATUS);
-	}
-
-	/**
-	 * Asynchronous task to Poll the status data.
-	 */
-	class PollStatusTask extends AsyncTask<String, Void, Poll> {
-		Misc miscActivity;
-		ProgressDialog progressDialog;
-		String error;
-
-		PollStatusTask(Misc miscActivity) {
-			this.miscActivity = miscActivity;
-		}
-
-		@Override
-		protected void onPreExecute() {
-			super.onPreExecute();
-			progressDialog = ProgressDialog.show(Misc.this,
-				getString(R.string.loading),
-				getString(R.string.loadingStatusInfo));
-		}
-
-		@Override
-		protected Poll doInBackground(String... strings) {
-			OpenLPHttpClient httpClient = new OpenLPHttpClient(
-				getApplicationContext());
-			HttpResponse response = null;
-			error = "";
-
-			Log.d(LOG_TAG, "Processing:" + Arrays.asList(strings));
-			try {
-				httpClient.setUrl(strings[0]);
-				if (httpClient.getUrl().getHost().trim().length() <= 0) {
-					startActivity(new Intent(miscActivity, Preferences.class));
-				}
-				else {
-					response = httpClient.execute();
-				}
-
-				if (response != null
-					&& response.getStatusLine().getStatusCode() == 200) {
-					HttpEntity entity = response.getEntity();
-
-					if (entity != null) {
-						Poll poll = JSONHandler.parsePollResponseJSON(entity);
-						Log.i(LOG_TAG,
-							String.format("Service Items: %s", poll));
-						return poll;
-					}
-				}
-				else {
-					error = String.format("%s %s",
-						getString(R.string.unable), response);
-				}
-			}
-			catch (Exception e) {
-				error = String.format("%s: %s", e.getClass()
-					.getSimpleName(), e.getMessage());
-			}
-			return null;
-		}
-
-		@Override
-		protected void onPostExecute(Poll poll) {
-			super.onPostExecute(poll);
-			final ToggleButton toggleButton = (ToggleButton)
-				findViewById(R.id.toggleDisplayButton);
-			if (poll == null) {
-				toggleButton.setEnabled(false);
+		startService(pingIntent);
+		registerReceiver(broadcastReceiver, new IntentFilter(
+				PingService.BROADCAST_ACTION));
+	}
+
+	@Override
+	public void onPause() {
+		super.onPause();
+		unregisterReceiver(broadcastReceiver);
+		stopService(pingIntent);
+	}
+
+	private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
+		@Override
+		public void onReceive(Context context, Intent intent) {
+			Log.d(LOG_TAG, "onReceive");
+			updateUI(intent);
+		}
+	};
+
+	private void updateUI(Intent intent) {
+		Log.d(LOG_TAG, "updateUI");
+		Boolean isBlank = intent.getBooleanExtra("blank", false);
+		Boolean isTheme = intent.getBooleanExtra("theme", false);
+		Boolean isDisplayHidden = intent.getBooleanExtra("display", false);
+		Boolean inError = intent.getBooleanExtra("inError", true);
+		final ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleDisplayButton);
+		if (inError) {
+			toggleButton.setEnabled(false);
+		}
+		else {
+			String onText = "";
+			String offText = "";
+
+			displayType = prefs.getString(
+					getApplicationContext().getString(
+							R.string.keyDisplayBlankType),
+					getApplicationContext()
+							.getString(R.string.displayTypeValue));
+			Log.d(LOG_TAG, "onPostExecute Display Type = " + displayType + " "
+					+ isDisplayHidden);
+			/*
+			 * Set display blanking to the preferences value
+			 */
+			if (displayType.equals(getString(R.string.displayScreen))) {
+				Log.d(LOG_TAG, "Blank called");
+				onText = context.getString(R.string.displayScreen);
+				offText = context.getString(R.string.displayScreen);
+			}
+			else if (displayType.equals(getString(R.string.displayTheme))) {
+				Log.d(LOG_TAG, "Theme called");
+				onText = context.getString(R.string.displayTheme);
+				offText = context.getString(R.string.displayTheme);
 			}
 			else {
-				String onText = "";
-				String offText = "";
-
-				displayType = prefs.getString(
-					getApplicationContext().getString(
-						R.string.keyDisplayBlankType),
-					getApplicationContext().getString(
-						R.string.displayTypeValue));
-				Log.d(LOG_TAG, "onPostExecute Display Type = " + displayType
-					+ " " + poll.isDisplayHidden());
-				/*
-				Set display blanking to the preferences value
-				*/
-				if (displayType.equals(getString(R.string.displayScreen))) {
-					Log.d(LOG_TAG, "Blank called");
+				Log.d(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 (isDisplayHidden) {
+				if (isBlank) {
+					Log.d(LOG_TAG, "Hidden Blank called");
 					onText = context.getString(R.string.displayScreen);
-					offText = context.getString(R.string.displayScreen);
 				}
-				else if (displayType.equals(getString(R.string.displayTheme))) {
-					Log.d(LOG_TAG, "Theme called");
+				else if (isTheme) {
+					Log.d(LOG_TAG, "Hidden Theme called");
 					onText = context.getString(R.string.displayTheme);
-					offText = context.getString(R.string.displayTheme);
 				}
 				else {
-					Log.d(LOG_TAG, "Desktop called");
+					Log.d(LOG_TAG, "Hidden 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.d(LOG_TAG, "Hidden Blank called");
-						onText = context.getString(R.string.displayScreen);
-					}
-					else if (poll.isThemeDisplayed()) {
-						Log.d(LOG_TAG, "Hidden Theme called");
-						onText = context.getString(R.string.displayTheme);
-					}
-					else {
-						Log.d(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);
 				}
 			}
-			progressDialog.dismiss();
-
-			if (error != null && error.trim().length() > 0) {
-				Toast.makeText(context, R.string.connectionFailed,
-					Toast.LENGTH_LONG).show();
-				Toast.makeText(context, error, Toast.LENGTH_LONG).show();
+			toggleButton.setTextOn(context.getString(R.string.displayBlankOn)
+					+ " " + onText);
+			toggleButton.setTextOff(context.getString(R.string.displayBlankOff)
+					+ " " + offText);
+			toggleButton.setEnabled(true);
+			toggleButton.setChecked(false);
+			if (isDisplayHidden) {
+				toggleButton.setChecked(true);
 			}
 		}
 	}

=== modified file 'src/org/openlp/android/activity/Preferences.java'
--- src/org/openlp/android/activity/Preferences.java	2012-03-04 17:20:44 +0000
+++ src/org/openlp/android/activity/Preferences.java	2012-04-21 19:11:19 +0000
@@ -38,6 +38,12 @@
 			getString(R.string.keySharedPreferences));
 		addPreferencesFromResource(R.xml.preferences);
 	}
-
+	
+	@Override
+	public void onDestroy() {
+		super.onDestroy();
+		Log.d(LOG_TAG, "Destroying preferences");		
+	}	
+	
 	private final String LOG_TAG = Preferences.class.getName();
 }

=== modified file 'src/org/openlp/android/activity/Service.java'
--- src/org/openlp/android/activity/Service.java	2012-03-04 17:20:44 +0000
+++ src/org/openlp/android/activity/Service.java	2012-04-21 19:11:19 +0000
@@ -20,9 +20,25 @@
  *******************************************************************************/
 package org.openlp.android.activity;
 
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.openlp.android.R;
+import org.openlp.android.data.SlideItem;
+import org.openlp.android.service.PingService;
+import org.openlp.android.utility.JSONHandler;
+import org.openlp.android.utility.OpenLPHttpClient;
+import org.openlp.android.utility.SlideAdapter;
+import org.openlp.android.utility.WebCallAsyncTask;
+
 import android.app.Activity;
 import android.app.ProgressDialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.util.Log;
@@ -32,17 +48,6 @@
 import android.widget.ListView;
 import android.widget.TextView;
 import android.widget.Toast;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.openlp.android.R;
-import org.openlp.android.data.SlideItem;
-import org.openlp.android.utility.JSONHandler;
-import org.openlp.android.utility.OpenLPHttpClient;
-import org.openlp.android.utility.SlideAdapter;
-import org.openlp.android.utility.WebCallAsyncTask;
-
-import java.util.Arrays;
-import java.util.List;
 
 /**
  * Activity for managing service objects.
@@ -50,6 +55,7 @@
 public class Service extends DefaultActivity implements OpenLPNavigate {
 	private final Activity context = this;
 	private ListView listView;
+	private int currentService = 0;
 
 	@Override
 	public void onCreate(Bundle savedInstanceState) {
@@ -62,76 +68,100 @@
 		findViewById(R.id.next).setOnClickListener(onClickListenerNavigate);
 		listView.setOnItemClickListener(onItemClickListenerService);
 		listView.setOnItemLongClickListener(adapterViewOnItemLongClickListener);
-		((TextView) findViewById(R.id.slide_service_title)).setText(
-			R.string.tabService);
+		((TextView) findViewById(R.id.slide_service_title))
+				.setText(R.string.tabService);
 	}
 
-	private Button.OnClickListener onClickListenerNavigate =
-		new Button.OnClickListener() {
-			@Override
-			public void onClick(View v) {
-				if (v.getId() == R.id.prev) {
-					navigate(SERVICE_PREVIOUS);
-				}
-				else if (v.getId() == R.id.next) {
-					navigate(SERVICE_NEXT);
-				}
-			}
-		};
+	private Button.OnClickListener onClickListenerNavigate = new Button.OnClickListener() {
+		@Override
+		public void onClick(View v) {
+			if (v.getId() == R.id.prev) {
+				navigate(SERVICE_PREVIOUS);
+			}
+			else if (v.getId() == R.id.next) {
+				navigate(SERVICE_NEXT);
+			}
+		}
+	};
 
-	private ListView.OnItemClickListener onItemClickListenerService =
-		new AdapterView.OnItemClickListener() {
-			@Override
-			public void onItemClick(AdapterView<?> adapterView, View view,
-				int i,
+	private ListView.OnItemClickListener onItemClickListenerService = new AdapterView.OnItemClickListener() {
+		@Override
+		public void onItemClick(AdapterView<?> adapterView, View view, int i,
 				long l) {
-				setData(SERVICE_SET, i);
-			}
-		};
+			setData(SERVICE_SET, i);
+		}
+	};
 
-	private AdapterView.OnItemLongClickListener
-		adapterViewOnItemLongClickListener =
-		new AdapterView.OnItemLongClickListener() {
-			@Override
-			public boolean onItemLongClick(AdapterView<?> adapterView,
-				View view,
+	private AdapterView.OnItemLongClickListener adapterViewOnItemLongClickListener = new AdapterView.OnItemLongClickListener() {
+		@Override
+		public boolean onItemLongClick(AdapterView<?> adapterView, View view,
 				int i, long l) {
-				setData(SERVICE_SET, i);
-				startActivity(new Intent(context, Slide.class));
-				return true;
-			}
-		};
+			setData(SERVICE_SET, i);
+			startActivity(new Intent(context, Slide.class));
+			return true;
+		}
+	};
 
 	public void navigate(String direction) {
 		try {
 			new WebCallAsyncTask(context).execute(direction);
 		}
 		catch (Exception e) {
-			Toast.makeText(getApplicationContext(),
-				String.format("%s: %s", e.getClass().getSimpleName(),
-					e.getMessage()), Toast.LENGTH_SHORT).show();
+			Toast.makeText(
+					getApplicationContext(),
+					String.format("%s: %s", e.getClass().getSimpleName(),
+							e.getMessage()), Toast.LENGTH_SHORT).show();
 		}
 	}
 
 	public void setData(String apiPart, int id) {
 		try {
 			String response = JSONHandler.createRequestJSON("id",
-				Integer.toString(id));
+					Integer.toString(id));
 			new WebCallAsyncTask(context, apiPart).execute(response);
 		}
 		catch (JSONHandler.JSONHandlerException e) {
-			Toast.makeText(getApplicationContext(),
-				String.format("%s: %s", e.getClass().getSimpleName(),
-					e.getMessage()), Toast.LENGTH_LONG).show();
+			Toast.makeText(
+					getApplicationContext(),
+					String.format("%s: %s", e.getClass().getSimpleName(),
+							e.getMessage()), Toast.LENGTH_LONG).show();
 		}
 	}
 
-
 	@Override
 	protected void onResume() {
 		super.onResume();
 		Log.d(LOG_TAG, "Resume");
-		new FetchServiceItemsTask(this).execute(SERVICE_LIST);
+		startService(pingIntent);
+		registerReceiver(broadcastReceiver, new IntentFilter(
+				PingService.BROADCAST_ACTION));
+	}
+
+	@Override
+	public void onPause() {
+		super.onPause();
+		unregisterReceiver(broadcastReceiver);
+		stopService(pingIntent);
+	}
+
+	private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
+		@Override
+		public void onReceive(Context context, Intent intent) {
+			Log.d(LOG_TAG, "onReceive");
+			updateUI(intent);
+		}
+	};
+
+	private void updateUI(Intent intent) {
+		Log.d(LOG_TAG, "updateUI");
+		int service = intent.getIntExtra("service", 0);
+		/*
+		 * Service has been updated so lets refresh it
+		 */
+		if (currentService != service) {
+			currentService = service;
+			new FetchServiceItemsTask(this).execute(SERVICE_LIST);
+		}
 	}
 
 	/**
@@ -150,14 +180,14 @@
 		protected void onPreExecute() {
 			super.onPreExecute();
 			progressDialog = ProgressDialog.show(Service.this,
-				getString(R.string.loading),
-				getString(R.string.loadingServiceItems));
+					getString(R.string.loading),
+					getString(R.string.loadingServiceItems));
 		}
 
 		@Override
 		protected SlideItem[] doInBackground(String... strings) {
 			OpenLPHttpClient httpClient = new OpenLPHttpClient(
-				getApplicationContext());
+					getApplicationContext());
 			HttpResponse response = null;
 			error = "";
 
@@ -165,34 +195,32 @@
 			try {
 				httpClient.setUrl(strings[0]);
 				if (httpClient.getUrl().getHost().trim().length() <= 0) {
-					startActivity(
-						new Intent(serviceActivity, Preferences.class));
+					startActivity(new Intent(serviceActivity, Preferences.class));
 				}
 				else {
 					response = httpClient.execute();
 				}
 
-				if (response != null && response.getStatusLine()
-					.getStatusCode() == 200) {
+				if (response != null
+						&& response.getStatusLine().getStatusCode() == 200) {
 					HttpEntity entity = response.getEntity();
 
 					if (entity != null) {
 						List<SlideItem> serviceItemList = JSONHandler
-							.parseServiceItemResponseJSON(
-								entity);
+								.parseServiceItemResponseJSON(entity);
 						Log.i(LOG_TAG, String.format("Service Items: %s",
-							serviceItemList));
-						return serviceItemList.toArray(new SlideItem[]{});
+								serviceItemList));
+						return serviceItemList.toArray(new SlideItem[] {});
 					}
 				}
 				else {
 					error = String.format("%s %s", getString(R.string.unable),
-						response);
+							response);
 				}
 			}
 			catch (Exception e) {
 				error = String.format("%s: %s", e.getClass().getSimpleName(),
-					e.getMessage());
+						e.getMessage());
 			}
 			return null;
 		}
@@ -201,15 +229,15 @@
 		protected void onPostExecute(SlideItem[] slides) {
 			super.onPostExecute(slides);
 			if (slides == null) {
-				slides = new SlideItem[]{};
+				slides = new SlideItem[] {};
 			}
-			listView.setAdapter(
-				new SlideAdapter(context, Arrays.asList(slides), false));
+			listView.setAdapter(new SlideAdapter(context,
+					Arrays.asList(slides), false));
 			progressDialog.dismiss();
 
 			if (error != null && error.trim().length() > 0) {
 				Toast.makeText(context, R.string.loadingFailed,
-					Toast.LENGTH_LONG).show();
+						Toast.LENGTH_LONG).show();
 				Log.e(LOG_TAG, error);
 			}
 		}

=== modified file 'src/org/openlp/android/activity/Slide.java'
--- src/org/openlp/android/activity/Slide.java	2012-03-04 17:20:44 +0000
+++ src/org/openlp/android/activity/Slide.java	2012-04-21 19:11:19 +0000
@@ -22,7 +22,10 @@
 
 import android.app.Activity;
 import android.app.ProgressDialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.util.Log;
@@ -35,6 +38,7 @@
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.openlp.android.R;
+import org.openlp.android.service.PingService;
 import org.openlp.android.utility.JSONHandler;
 import org.openlp.android.utility.OpenLPHttpClient;
 import org.openlp.android.utility.SlideAdapter;
@@ -46,6 +50,8 @@
 public class Slide extends DefaultActivity implements OpenLPNavigate {
 	private final Activity context = this;
 	private ListView slideList;
+	private String currentItem = "";
+	private int currentSlide = -1;
 
 	public void onCreate(Bundle savedInstanceState) {
 		super.onCreate(savedInstanceState);
@@ -113,23 +119,56 @@
 			}
 		}
 	}
-
+	
 	@Override
 	protected void onResume() {
 		super.onResume();
 		Log.d(LOG_TAG, "Resume");
-
-		new FetchSlideItemsTask(this).execute(LIVE_TEXT);
-	}
+		startService(pingIntent);
+		registerReceiver(broadcastReceiver, new IntentFilter(
+				PingService.BROADCAST_ACTION));
+	}
+
+	@Override
+	public void onPause() {
+		super.onPause();
+		unregisterReceiver(broadcastReceiver);
+		stopService(pingIntent);
+	}
+
+	private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
+		@Override
+		public void onReceive(Context context, Intent intent) {
+			Log.d(LOG_TAG, "onReceive");
+			updateUI(intent);
+		}
+	};	
+	
+	private void updateUI(Intent intent) {
+		Log.d(LOG_TAG, "updateUI");
+		String item = intent.getStringExtra("item");
+		int slide = intent.getIntExtra("slide",0);		
+		/*
+		 * Service Item or Slide has been updated so lets refresh it
+		 */
+		if (currentItem != item && currentSlide != slide) {
+			currentItem = item;
+			currentSlide = slide;
+			Log.d(LOG_TAG, "Updateing display for " + item + " " + slide);			
+			new FetchSlideItemsTask(this, slide).execute(LIVE_TEXT);
+		}
+	}	
 
 	class FetchSlideItemsTask extends
 		AsyncTask<String, Void, org.openlp.android.data.SlideItem[]> {
 		Slide slideActivity;
 		ProgressDialog progressDialog;
 		String error;
+		private int currentSlide;
 
-		FetchSlideItemsTask(Slide slideActivity) {
+		FetchSlideItemsTask(Slide slideActivity, int slide) {
 			this.slideActivity = slideActivity;
+			this.currentSlide = slide;
 		}
 
 		@Override
@@ -195,7 +234,7 @@
 				slides = new org.openlp.android.data.SlideItem[]{};
 			}
 			slideList.setAdapter(new SlideAdapter(context, Arrays
-				.asList(slides)));
+				.asList(slides), currentSlide ));
 			progressDialog.dismiss();
 
 			if (error != null && error.trim().length() > 0) {

=== modified file 'src/org/openlp/android/data/Poll.java'
--- src/org/openlp/android/data/Poll.java	2012-03-04 10:56:34 +0000
+++ src/org/openlp/android/data/Poll.java	2012-04-21 19:11:19 +0000
@@ -25,6 +25,7 @@
 
 	private int slide;
 	private String item;
+	private int service;	
 	private boolean twelveHourDisplay = false;
 	private boolean blankedDisplayed = false;
 	private boolean themeDisplayed = false;
@@ -95,4 +96,11 @@
 	public void setDisplayHidden(boolean displayHidden) {
 		this.displayHidden = displayHidden;
 	}
+	public int getService() {
+		return service;
+	}
+
+	public void setService(int service) {
+		this.service = service;
+	}	
 }

=== modified file 'src/org/openlp/android/service/PingService.java'
--- src/org/openlp/android/service/PingService.java	2012-03-04 10:56:34 +0000
+++ src/org/openlp/android/service/PingService.java	2012-04-21 19:11:19 +0000
@@ -20,21 +20,130 @@
  *******************************************************************************/
 package org.openlp.android.service;
 
-import android.os.Bundle;
-import org.openlp.android.activity.Service;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.openlp.android.R;
+import org.openlp.android.data.Poll;
+import org.openlp.android.utility.JSONHandler;
+import org.openlp.android.utility.OpenLPHttpClient;
+import org.openlp.android.api.Api;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Handler;
+import android.os.IBinder;
+import android.util.Log;
+
+import android.app.Service;
 
 /**
- * TODO: The target is to have a ping service to know when something on the server changed,
- * TODO: and update accordingly
+ * Provides a background service started by activities to Poll the status 
+ * service to get the latest state of OpenLP.
+ * Each Activity will be responsible for handling the returned data,
+ * If the poll fails it will stop the timer to prevent it from running
+ * when it is not required.
  */
-public class PingService extends Service {
-	@Override
-	public void onCreate(Bundle savedInstanceState) {
-		super.onCreate(savedInstanceState);
-	}
-
-	@Override
-	protected void onResume() {
-		super.onResume();
-	}
-}
+public class PingService extends Service implements Api {
+
+	public static final String BROADCAST_ACTION = "org.openlp.PingService.Poll";
+	public SharedPreferences prefs;
+	private final Handler handler = new Handler();
+	Intent intent;
+	private Long delay;
+
+	private Context ctx;
+
+	public IBinder onBind(Intent arg0) {
+		return null;
+	}
+
+	@Override
+	public void onCreate() {
+		Log.d(LOG_TAG, "onCreate called");
+		super.onCreate();
+		prefs = getApplicationContext().getSharedPreferences(
+				getApplicationContext()
+						.getString(R.string.keySharedPreferences),
+				Context.MODE_PRIVATE);
+		ctx = this;
+		intent = new Intent(BROADCAST_ACTION);		
+		//startService();
+	}
+	
+	@Override
+	public void onStart(Intent intent, int startId){
+		Log.d(LOG_TAG, "onStart called");		
+		handler.removeCallbacks(startPoll);
+		int def = ctx.getResources().getInteger(
+				R.integer.backgroundRefreshDefaultValue);
+		delay = Long.parseLong(prefs.getString(
+				getString(R.string.keyBackgroundService),
+				String.valueOf(def)));
+		handler.postDelayed(startPoll, delay);
+	}
+	
+	private Runnable startPoll = new Runnable() {
+		public void run() {
+			Log.d(LOG_TAG, "Task fired");
+			OpenLPHttpClient httpClient = new OpenLPHttpClient(
+					getApplicationContext());
+			HttpResponse response = null;
+			String error = "";
+
+			try {
+				httpClient.setUrl(POLL_STATUS);
+				if (httpClient.getUrl().getHost().trim().length() <= 0) {
+					intent.putExtra("inError", true);						
+					sendBroadcast(intent);
+					handler.postDelayed(this, 1);
+					handler.removeCallbacks(startPoll);
+				}
+				else {
+					response = httpClient.execute();
+				}
+				if (response != null
+						&& response.getStatusLine().getStatusCode() == 200) {
+					HttpEntity entity = response.getEntity();
+
+					if (entity != null) {
+						Poll poll = JSONHandler.parsePollResponseJSON(entity);
+						intent.putExtra("service", poll.getService());
+						intent.putExtra("item", poll.getItem());						
+						intent.putExtra("slide", poll.getSlide());
+						intent.putExtra("blank", poll.isBlankedDisplayed());
+						intent.putExtra("theme", poll.isThemeDisplayed());
+						intent.putExtra("desktop", poll.isDesktopDisplayed());
+						intent.putExtra("display", poll.isDisplayHidden());
+						intent.putExtra("inError", false);						
+						sendBroadcast(intent);
+						handler.postDelayed(this, delay);
+					}
+				}
+				else {
+					error = String.format("%s %s", getString(R.string.unable),
+							response);
+				}
+			}
+			catch (Exception e) {
+				error = String.format("%s: %s", e.getClass().getSimpleName(),
+						e.getMessage());
+			}
+			if (error != null && error.trim().length() > 0) {
+				Log.d(LOG_TAG, "HTTP request error " + error);
+				intent.putExtra("inError", true);						
+				sendBroadcast(intent);
+				handler.postDelayed(this, 1);
+				handler.removeCallbacks(startPoll);
+			}
+		}
+	};
+
+	public void onDestroy() {
+		super.onDestroy();
+		Log.d(LOG_TAG, "onDestroy");
+		handler.removeCallbacks(startPoll);
+	}
+
+	private final String LOG_TAG = PingService.class.getName();
+}
\ No newline at end of file

=== modified file 'src/org/openlp/android/utility/JSONHandler.java'
--- src/org/openlp/android/utility/JSONHandler.java	2012-03-04 17:20:44 +0000
+++ src/org/openlp/android/utility/JSONHandler.java	2012-04-21 19:11:19 +0000
@@ -134,9 +134,9 @@
 
 			JSONObject jObject = new JSONObject(result);
 			JSONObject results = jObject.getJSONObject("results");
-			// JSONArray items = results.getJSONArray("slides");
 			Poll poll = new Poll();
 			poll.setSlide(results.getInt("slide"));
+			poll.setService(results.getInt("service"));			
 			poll.setItem(results.getString("item"));
 			poll.setTwelveHourDisplay(results.getBoolean("twelve"));
 			poll.setBlankedDisplayed(results.getBoolean("blank"));

=== modified file 'src/org/openlp/android/utility/SlideAdapter.java'
--- src/org/openlp/android/utility/SlideAdapter.java	2012-03-04 17:20:44 +0000
+++ src/org/openlp/android/utility/SlideAdapter.java	2012-04-21 19:11:19 +0000
@@ -23,6 +23,7 @@
 import android.app.Activity;
 import android.content.Context;
 import android.content.SharedPreferences;
+import android.graphics.Typeface;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -39,30 +40,31 @@
 	Activity context;
 	LayoutInflater inflater;
 	boolean useTagDisplay = true;
-	private int[] colors = new int[]{0x74717000, 0x00000000};
+	private int[] colors = new int[] { 0x74717000, 0x00000000 };
+	private int currentSlide = -1;
 	SharedPreferences prefs;
 
-	public SlideAdapter(Activity context, List<SlideItem> items) {
+	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);
-
+				context.getString(R.string.keySharedPreferences),
+				Context.MODE_PRIVATE);
 	}
 
 	public SlideAdapter(Activity context, List<SlideItem> items,
-		boolean useTagDisplay) {
+			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);
+				context.getString(R.string.keySharedPreferences),
+				Context.MODE_PRIVATE);
 	}
 
 	@Override
@@ -86,6 +88,9 @@
 		View view = convertView;
 
 		SlideItem item = items.get(position);
+		
+		Log.d(LOG_TAG, "getView " + position + " " + item.getText() + " " 
+				+ this.currentSlide);		
 
 		if (view == null) {
 			view = inflater.inflate(R.layout.slide_list_item, null);
@@ -99,13 +104,10 @@
 		else {
 			holder = (ViewHolder) view.getTag();
 		}
-
-		Log.d(LOG_TAG, " " + context.getString(R.string.keyTextSize));
-
 		int size = Integer.parseInt(prefs.getString(
-			context.getString(R.string.keyTextSize),
-			String.valueOf(context.getResources().getInteger(
-				R.integer.textSizeDefaultValue))));
+				context.getString(R.string.keyTextSize),
+				String.valueOf(context.getResources().getInteger(
+						R.integer.textSizeDefaultValue))));
 
 		holder.rowMarker.setText(item.getTag());
 		holder.rowItem.setText(item.getText());
@@ -114,7 +116,11 @@
 		if (useTagDisplay) {
 			holder.rowMarker.setMinWidth(40);
 		}
-
+		if (position == this.currentSlide){
+			Log.d(LOG_TAG, "getView compare " + position + " "  
+					+ this.currentSlide);			
+			holder.rowItem.setTypeface(Typeface.DEFAULT_BOLD);
+		}
 		int colorPos = position % colors.length;
 		view.setBackgroundColor(colors[colorPos]);
 
@@ -125,6 +131,5 @@
 		TextView rowMarker;
 		TextView rowItem;
 	}
-
-	private final String LOG_TAG = SlideAdapter.class.getName();
+	private final String LOG_TAG = SlideAdapter.class.getName();	
 }

=== modified file 'src/org/openlp/android/utility/WebCallReturningAsyncTask.java'
--- src/org/openlp/android/utility/WebCallReturningAsyncTask.java	2012-03-04 17:20:44 +0000
+++ src/org/openlp/android/utility/WebCallReturningAsyncTask.java	2012-04-21 19:11:19 +0000
@@ -28,6 +28,7 @@
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.openlp.android.activity.Preferences;
+import org.openlp.android.utility.OpenLPHttpClient;
 
 import java.io.BufferedReader;
 import java.io.IOException;