From acbda70e28b768b5977ec7a0ec63981b2aeeac16 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Fri, 19 Feb 2016 13:34:55 +0100 Subject: Make sure DB helpers and preferences are initialized --- .../de/danoeh/antennapod/core/ClientConfig.java | 22 +++++ .../de/danoeh/antennapod/core/UpdateManager.java | 97 ++++++++++++++++++++++ .../core/receiver/AlarmUpdateReceiver.java | 5 +- .../core/receiver/FeedUpdateReceiver.java | 2 + .../core/receiver/MediaButtonReceiver.java | 2 + 5 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 core/src/main/java/de/danoeh/antennapod/core/UpdateManager.java (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/ClientConfig.java b/core/src/main/java/de/danoeh/antennapod/core/ClientConfig.java index 6619e706b..a96affb23 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/ClientConfig.java +++ b/core/src/main/java/de/danoeh/antennapod/core/ClientConfig.java @@ -1,5 +1,12 @@ package de.danoeh.antennapod.core; +import android.content.Context; + +import de.danoeh.antennapod.core.preferences.PlaybackPreferences; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.storage.PodDBAdapter; +import de.danoeh.antennapod.core.util.NetworkUtils; + /** * Stores callbacks for core classes like Services, DB classes etc. and other configuration variables. * Apps using the core module of AntennaPod should register implementations of all interfaces here. @@ -22,4 +29,19 @@ public class ClientConfig { public static FlattrCallbacks flattrCallbacks; public static DBTasksCallbacks dbTasksCallbacks; + + private static boolean initialized = false; + + public static synchronized void initialize(Context context) { + if(initialized) { + return; + } + PodDBAdapter.init(context); + UserPreferences.init(context); + UpdateManager.init(context); + PlaybackPreferences.init(context); + NetworkUtils.init(context); + initialized = true; + } + } diff --git a/core/src/main/java/de/danoeh/antennapod/core/UpdateManager.java b/core/src/main/java/de/danoeh/antennapod/core/UpdateManager.java new file mode 100644 index 000000000..8362c4a4e --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/UpdateManager.java @@ -0,0 +1,97 @@ +package de.danoeh.antennapod.core; + + +import android.content.Context; +import android.content.SharedPreferences; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.os.Build; +import android.util.Log; + +import org.antennapod.audio.MediaPlayer; + +import java.io.File; +import java.util.List; + +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.feed.FeedImage; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DBWriter; + +/* + * This class's job is do perform maintenance tasks whenever the app has been updated + */ +public class UpdateManager { + + public static final String TAG = UpdateManager.class.getSimpleName(); + + private static final String PREF_NAME = "app_version"; + private static final String KEY_VERSION_CODE = "version_code"; + + private static int currentVersionCode; + + private static Context context; + private static SharedPreferences prefs; + + public static void init(Context context) { + UpdateManager.context = context; + prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); + PackageManager pm = context.getPackageManager(); + try { + PackageInfo info = pm.getPackageInfo(context.getPackageName(), 0); + currentVersionCode = info.versionCode; + } catch (PackageManager.NameNotFoundException e) { + Log.e(TAG, "Failed to obtain package info for package name: " + context.getPackageName(), e); + currentVersionCode = 0; + return; + } + final int oldVersionCode = getStoredVersionCode(); + Log.d(TAG, "old: " + oldVersionCode + ", current: " + currentVersionCode); + if(oldVersionCode < currentVersionCode) { + onUpgrade(oldVersionCode, currentVersionCode); + setCurrentVersionCode(); + } + } + + public static int getStoredVersionCode() { + return prefs.getInt(KEY_VERSION_CODE, -1); + } + + public static void setCurrentVersionCode() { + prefs.edit().putInt(KEY_VERSION_CODE, currentVersionCode).apply(); + } + + private static void onUpgrade(final int oldVersionCode, final int newVersionCode) { + if(oldVersionCode < 1030099) { + // delete the now obsolete image cache + // from now on, Glide will handle caching images + new Thread() { + public void run() { + List feeds = DBReader.getFeedList(); + for (Feed podcast : feeds) { + List episodes = DBReader.getFeedItemList(podcast); + for (FeedItem episode : episodes) { + FeedImage image = episode.getImage(); + if (image != null && image.isDownloaded() && image.getFile_url() != null) { + File imageFile = new File(image.getFile_url()); + if (imageFile.exists()) { + imageFile.delete(); + } + image.setFile_url(null); // calls setDownloaded(false) + DBWriter.setFeedImage(image); + } + } + } + } + }.start(); + } + if(oldVersionCode < 1050004) { + if(MediaPlayer.isPrestoLibraryInstalled(context) && Build.VERSION.SDK_INT >= 16) { + UserPreferences.enableSonic(true); + } + } + } + +} diff --git a/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java index ce5004a98..33c15883b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java @@ -6,7 +6,7 @@ import android.content.Intent; import android.text.TextUtils; import android.util.Log; -import de.danoeh.antennapod.core.preferences.PlaybackPreferences; +import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.preferences.UserPreferences; /** Listens for events that make it necessary to reset the update alarm. */ @@ -22,8 +22,7 @@ public class AlarmUpdateReceiver extends BroadcastReceiver { } else if (TextUtils.equals(intent.getAction(), Intent.ACTION_PACKAGE_REPLACED)) { Log.d(TAG, "Resetting update alarm after app upgrade"); } - PlaybackPreferences.init(context); - UserPreferences.init(context); + ClientConfig.initialize(context); UserPreferences.restartUpdateAlarm(false); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java index b959c7301..e0abe0efb 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java @@ -5,6 +5,7 @@ import android.content.Context; import android.content.Intent; import android.util.Log; +import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.util.NetworkUtils; @@ -19,6 +20,7 @@ public class FeedUpdateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "Received intent"); + ClientConfig.initialize(context); if (NetworkUtils.isDownloadAllowed()) { DBTasks.refreshAllFeeds(context, null); } else { diff --git a/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java index a900248d2..568deb96c 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.util.Log; import android.view.KeyEvent; import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.service.playback.PlaybackService; /** Receives media button events. */ @@ -21,6 +22,7 @@ public class MediaButtonReceiver extends BroadcastReceiver { KeyEvent event = (KeyEvent) intent.getExtras().get( Intent.EXTRA_KEY_EVENT); if (event.getAction() == KeyEvent.ACTION_DOWN) { + ClientConfig.initialize(context); Intent serviceIntent = new Intent(context, PlaybackService.class); int keycode = event.getKeyCode(); serviceIntent.putExtra(EXTRA_KEYCODE, keycode); -- cgit v1.2.3 From 16dd26a7e4617d9f8acbd4396014667be46f979f Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Fri, 19 Feb 2016 13:35:10 +0100 Subject: Refactor --- .../de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java index 568deb96c..51cc52e10 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java @@ -5,7 +5,7 @@ import android.content.Context; import android.content.Intent; import android.util.Log; import android.view.KeyEvent; -import de.danoeh.antennapod.core.BuildConfig; + import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.service.playback.PlaybackService; @@ -18,9 +18,8 @@ public class MediaButtonReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - if (BuildConfig.DEBUG) Log.d(TAG, "Received intent"); - KeyEvent event = (KeyEvent) intent.getExtras().get( - Intent.EXTRA_KEY_EVENT); + Log.d(TAG, "Received intent"); + KeyEvent event = (KeyEvent) intent.getExtras().get(Intent.EXTRA_KEY_EVENT); if (event.getAction() == KeyEvent.ACTION_DOWN) { ClientConfig.initialize(context); Intent serviceIntent = new Intent(context, PlaybackService.class); -- cgit v1.2.3