From a05edcb0a468f93c46a642b9e5e6220b1e82e1c1 Mon Sep 17 00:00:00 2001
From: daniel oeh <daniel.oeh@gmail.com>
Date: Sun, 8 Jul 2012 13:40:10 +0200
Subject: [PATCH] Implemented automatic update preference

---
 AndroidManifest.xml                           |  5 +++
 src/de/podfetcher/PodcastApp.java             | 41 +++++++++++++++++--
 .../receiver/FeedUpdateReceiver.java          | 22 ++++++++++
 3 files changed, 65 insertions(+), 3 deletions(-)
 create mode 100644 src/de/podfetcher/receiver/FeedUpdateReceiver.java

diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 0778a287d..ec9d79719 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -83,6 +83,11 @@
             </intent-filter>
             <meta-data android:resource="@xml/player_widget_info" android:name="android.appwidget.provider"/>
         </receiver>
+        <receiver android:name=".receiver.FeedUpdateReceiver">
+            <intent-filter>
+                <action android:name="de.podfetcher.feedupdatereceiver.refreshFeeds"/>
+            </intent-filter>
+        </receiver>
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/src/de/podfetcher/PodcastApp.java b/src/de/podfetcher/PodcastApp.java
index b58e7997d..0b2da0e99 100644
--- a/src/de/podfetcher/PodcastApp.java
+++ b/src/de/podfetcher/PodcastApp.java
@@ -1,11 +1,22 @@
 package de.podfetcher;
 
+import java.util.concurrent.TimeUnit;
+
+import android.app.AlarmManager;
 import android.app.Application;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
 import android.util.Log;
 import de.podfetcher.asynctask.FeedImageLoader;
 import de.podfetcher.feed.FeedManager;
+import de.podfetcher.receiver.FeedUpdateReceiver;
+
+public class PodcastApp extends Application implements
+		SharedPreferences.OnSharedPreferenceChangeListener {
 
-public class PodcastApp extends Application {
 	private static final String TAG = "PodcastApp";
 	public static final String PREF_NAME = "PodfetcherPrefs";
 
@@ -13,7 +24,7 @@ public class PodcastApp extends Application {
 	public static final String PREF_FOLLOW_QUEUE = "prefFollowQueue";
 	public static final String PREF_DOWNLOAD_MEDIA_ON_WIFI_ONLY = "prefDownloadMediaOnWifiOnly";
 	public static final String PREF_UPDATE_INTERVALL = "prefAutoUpdateIntervall";
-	
+
 	private static PodcastApp singleton;
 
 	public static PodcastApp getInstance() {
@@ -24,7 +35,9 @@ public class PodcastApp extends Application {
 	public void onCreate() {
 		super.onCreate();
 		singleton = this;
-
+		SharedPreferences prefs = PreferenceManager
+				.getDefaultSharedPreferences(this);
+		prefs.registerOnSharedPreferenceChangeListener(this);
 		FeedManager manager = FeedManager.getInstance();
 		manager.loadDBData(getApplicationContext());
 	}
@@ -36,4 +49,26 @@ public class PodcastApp extends Application {
 		FeedImageLoader.getInstance().wipeImageCache();
 	}
 
+	@Override
+	public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
+			String key) {
+		Log.d(TAG, "Registered change of application preferences");
+		if (key.equals(PREF_UPDATE_INTERVALL)) {
+			AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
+			int hours = Integer.parseInt(sharedPreferences.getString(
+					PREF_UPDATE_INTERVALL, "0"));
+			PendingIntent updateIntent = PendingIntent.getBroadcast(this, 0,
+					new Intent(FeedUpdateReceiver.ACTION_REFRESH_FEEDS), 0);
+			alarmManager.cancel(updateIntent);
+			if (hours != 0) {
+				long newIntervall = TimeUnit.HOURS.toMillis(hours);
+				alarmManager.setRepeating(
+						AlarmManager.RTC_WAKEUP, newIntervall,
+						newIntervall, updateIntent);
+				Log.d(TAG, "Changed alarm to new intervall");
+			} else {
+				Log.d(TAG, "Automatic update was deactivated");
+			}
+		}
+	}
 }
diff --git a/src/de/podfetcher/receiver/FeedUpdateReceiver.java b/src/de/podfetcher/receiver/FeedUpdateReceiver.java
new file mode 100644
index 000000000..1556a33ef
--- /dev/null
+++ b/src/de/podfetcher/receiver/FeedUpdateReceiver.java
@@ -0,0 +1,22 @@
+package de.podfetcher.receiver;
+
+import de.podfetcher.feed.FeedManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+/** Refreshes all feeds when it receives an intent */
+public class FeedUpdateReceiver extends BroadcastReceiver {
+	private static final String TAG = "FeedUpdateReceiver";
+	public static final String ACTION_REFRESH_FEEDS = "de.podfetcher.feedupdatereceiver.refreshFeeds";
+	
+	@Override
+	public void onReceive(Context context, Intent intent) {
+		if (intent.getAction().equals(ACTION_REFRESH_FEEDS)) {
+			Log.d(TAG, "Received intent");
+			FeedManager.getInstance().refreshAllFeeds(context);
+		}
+	}
+
+}